From dfe5f6ed64fffed06ae598cf478fb73abf5bcffe Mon Sep 17 00:00:00 2001 From: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Date: Tue, 28 Jan 2025 01:44:56 -0800 Subject: [PATCH 001/197] Fix airsensors not having a nitrogen threshold (#34689) --- .../Entities/Structures/Specific/Atmospherics/sensor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml index d46fb156b15..68d015d0de3 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml @@ -17,7 +17,7 @@ pressureThresholdId: stationPressure gasThresholdPrototypes: Oxygen: stationOxygen - Nitrogen: ignore + Nitrogen: stationNitrogen CarbonDioxide: stationCO2 Plasma: stationPlasma Tritium: stationTritium From 2296979cc62d372122240a899acdd3af5eeb5ae7 Mon Sep 17 00:00:00 2001 From: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:31:10 -0800 Subject: [PATCH 002/197] Buff frezon to acceptable values, pending a frezon rework (#34049) buff frezon --- Resources/Prototypes/Atmospherics/gases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Atmospherics/gases.yml b/Resources/Prototypes/Atmospherics/gases.yml index bd28640786e..a3d8602fb0f 100644 --- a/Resources/Prototypes/Atmospherics/gases.yml +++ b/Resources/Prototypes/Atmospherics/gases.yml @@ -94,4 +94,4 @@ gasMolesVisible: 0.6 color: 3a758c reagent: Frezon - pricePerMole: 3 # DeltaV - Change back to 3 + pricePerMole: 3 # DeltaV - Change back to 3, was 1 From 50bfd3e4eb5b50ce5fe72f2a802df02c7d9ffb7e Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 28 Jan 2025 17:32:19 +0000 Subject: [PATCH 003/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ae738ffcac9..306be708826 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Fixed medical PDAs sometimes toggling their lights while scanning - type: Fix - id: 7362 - time: '2024-09-13T13:59:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32091 - author: Gorox221 changes: - message: Mech pilots receive a warning before they are ejected from the mech. @@ -3885,3 +3878,11 @@ id: 7861 time: '2025-01-28T02:37:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34079 +- author: ArtisticRoomba + changes: + - message: Frezon prices have been tweaked to be much more worth it for new players + and elder atmosians alike. + type: Tweak + id: 7862 + time: '2025-01-28T17:31:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34049 From f4d3923deb531ff49d891f02986b3c49ee57f19c Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Wed, 29 Jan 2025 06:55:08 +1200 Subject: [PATCH 004/197] Stun baton precise attack thrust animation (#34693) use weaponarcthrust instead of wide swing on single attack --- Resources/Prototypes/Entities/Objects/Weapons/security.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 91a829dd1c2..f9ff3d58c5a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -36,7 +36,7 @@ Blunt: 7 bluntStaminaDamageFactor: 2.0 angle: 60 - animation: WeaponArcSlash + animation: WeaponArcThrust - type: StaminaDamageOnHit damage: 35 sound: /Audio/Weapons/egloves.ogg From c4041957c6243af3548e7db64d86d53924c3bebf Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 28 Jan 2025 18:56:16 +0000 Subject: [PATCH 005/197] 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 306be708826..10cdd5a2c01 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Gorox221 - changes: - - message: Mech pilots receive a warning before they are ejected from the mech. - type: Tweak - - message: Now, when removing the pilot of the mech, you need to not move. - type: Fix - id: 7363 - time: '2024-09-13T14:01:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31649 - author: slarticodefast changes: - message: Extradimensional orange, holymelon, meatwheat and world peas plant mutations @@ -3886,3 +3877,11 @@ id: 7862 time: '2025-01-28T17:31:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34049 +- author: K-Dynamic + changes: + - message: Stun batons play thrusting instead of wide swing animation on precise + attacks (LMB). + type: Tweak + id: 7863 + time: '2025-01-28T18:55:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34693 From 0b0ad3f5326997ffc611df21ecac638ea3146b7f Mon Sep 17 00:00:00 2001 From: TytosB <54259736+TytosB@users.noreply.github.com> Date: Tue, 28 Jan 2025 23:14:39 -0600 Subject: [PATCH 006/197] New salvage ruin: the ruined prison ship (#34651) * aaa * little tweaks * changed to grid and added to protos * ccc * we dont talk about it * ddd --------- Co-authored-by: TytosB --- Resources/Maps/Ruins/ruined_prison_ship.yml | 4978 +++++++++++++++++ .../Prototypes/Entities/Stations/base.yml | 1 + 2 files changed, 4979 insertions(+) create mode 100644 Resources/Maps/Ruins/ruined_prison_ship.yml diff --git a/Resources/Maps/Ruins/ruined_prison_ship.yml b/Resources/Maps/Ruins/ruined_prison_ship.yml new file mode 100644 index 00000000000..ab921840291 --- /dev/null +++ b/Resources/Maps/Ruins/ruined_prison_ship.yml @@ -0,0 +1,4978 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 2: FloorFreezer + 4: FloorMetalFoam + 6: FloorReinforced + 98: FloorSteel + 5: FloorSteelCheckerLight + 1: FloorSteelDamaged + 129: Lattice + 130: Plating + 3: PlatingDamaged +entities: +- proto: "" + entities: + - uid: 2 + components: + - type: MetaData + name: grid + - type: Transform + pos: -0.5625,-0.609375 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: YgAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABYgAAAAACggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAABggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAAAYgAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAQAAAAAAYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAACAQAAAAAAYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAACggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYgAAAAACYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYgAAAAACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAABAAAAAAAAwAAAAACAQAAAAAEYgAAAAABYgAAAAACYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAAQAAAAABYgAAAAABYgAAAAACYgAAAAAAYgAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABYgAAAAACYgAAAAADYgAAAAADYgAAAAABYgAAAAACYgAAAAABYgAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAYgAAAAABYgAAAAADYgAAAAABYgAAAAACYgAAAAABYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAADggAAAAAAggAAAAAAYgAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAYgAAAAADAQAAAAACYgAAAAABYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAAwAAAAACggAAAAAAAQAAAAACAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAwAAAAACggAAAAAAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: YgAAAAADggAAAAAABQAAAAACBQAAAAACBQAAAAAABQAAAAAABQAAAAACggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADggAAAAAABQAAAAABBQAAAAABBQAAAAACBQAAAAABBQAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAADBQAAAAADBQAAAAABBQAAAAACBQAAAAADBQAAAAAAYgAAAAACYgAAAAAAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACggAAAAAABQAAAAAABQAAAAADBQAAAAADBQAAAAACBQAAAAABggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAYgAAAAAAggAAAAAAggAAAAAAYgAAAAABggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAADYgAAAAADAgAAAAAAAgAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACYgAAAAABggAAAAAAAgAAAAAAAgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACYgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-2: + ind: -1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAACAwAAAAACggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAggAAAAAAAQAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAggAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABBAAAAAAAAwAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAwAAAAABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAQAAAAAEAwAAAAACggAAAAAAAwAAAAABAwAAAAACAwAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAQAAAAABggAAAAAAAQAAAAAEYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYgAAAAADYgAAAAAAAQAAAAABYgAAAAABYgAAAAAAYgAAAAABYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYgAAAAAAYgAAAAADYgAAAAABYgAAAAACYgAAAAAAYgAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAADYgAAAAADggAAAAAAAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAYgAAAAADAQAAAAACYgAAAAADAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAAQAAAAADYgAAAAACggAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAwAAAAABAQAAAAACYgAAAAADYgAAAAABYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAwAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAA + version: 6 + 0,-2: + ind: 0,-2 + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAQAAAAADYgAAAAABYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACYgAAAAAAYgAAAAAAYgAAAAADggAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAYgAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACYgAAAAAAYgAAAAADggAAAAAAYgAAAAACYgAAAAAAYgAAAAAAYgAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACYgAAAAABYgAAAAADYgAAAAAAYgAAAAAAYgAAAAABYgAAAAABYgAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAEYgAAAAADggAAAAAAYgAAAAADYgAAAAADggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADYgAAAAADYgAAAAABYgAAAAACYgAAAAAAAQAAAAABYgAAAAACYgAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAQAAAAACYgAAAAACggAAAAAAYgAAAAAAYgAAAAADYgAAAAADYgAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAQAAAAAAggAAAAAABgAAAAAABgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADYgAAAAABggAAAAAABgAAAAAABgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAYgAAAAADBgAAAAAABgAAAAAABgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACYgAAAAABggAAAAAABgAAAAAABgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-3: + ind: -1,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-3: + ind: 0,-3 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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: + color: '#FFFFFFFF' + id: Bot + decals: + 95: 4,-21 + 96: 4,-20 + 97: 4,-19 + 98: 3,-18 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerNe + decals: + 61: 2,6 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerNe + decals: + 63: 1,-8 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNe + decals: + 76: 0,-13 + 88: 1,-18 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerNw + decals: + 85: -6,-13 + 87: -1,-18 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerSe + decals: + 49: 1,1 + 52: 2,4 + - node: + color: '#52B4E996' + id: BrickTileWhiteCornerSe + decals: + 68: 1,-11 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteCornerSe + decals: + 75: 0,-16 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerSw + decals: + 50: -1,1 + 51: -2,4 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerSe + decals: + 54: 1,4 + - node: + color: '#334E6DC8' + id: BrickTileWhiteInnerSw + decals: + 53: -1,4 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineE + decals: + 55: 1,3 + 56: 1,2 + 60: 2,5 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineE + decals: + 66: 1,-9 + 67: 1,-10 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineE + decals: + 77: 0,-15 + 78: 0,-14 + 89: 1,-19 + 90: 1,-20 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 64: 0,-8 + 65: -1,-8 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineN + decals: + 79: -1,-13 + 80: -2,-13 + 81: -3,-13 + 82: -4,-13 + 83: -5,-13 + 91: 0,-18 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineS + decals: + 62: 0,1 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineS + decals: + 69: 0,-11 + 70: -1,-11 + 71: -2,-11 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineS + decals: + 72: -3,-16 + 73: -2,-16 + 74: -1,-16 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineW + decals: + 57: -1,2 + 58: -1,3 + 59: -2,5 + - node: + color: '#DE3A3A96' + id: BrickTileWhiteLineW + decals: + 86: -6,-14 + 92: -1,-19 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 93: 4,-18 + 94: 3,-21 + - node: + color: '#FFFFFFFF' + id: Remains + decals: + 99: 3,-19 + - node: + cleanable: True + color: '#500000FF' + id: footprint + decals: + 32: -0.83460975,-18.601887 + 33: -0.64710975,-18.28906 + 34: -0.80335975,-17.866747 + 39: 0.032532215,-17.89233 + 40: 0.22003222,-17.86105 + 41: -0.37371778,-16.046658 + 42: -0.5924678,-15.561777 + 43: -0.43621778,-15.061256 + - node: + cleanable: True + angle: 1.5707963267948966 rad + color: '#500000FF' + id: footprint + decals: + 44: -0.9518428,-15.155104 + 45: -1.4205928,-14.920485 + 46: -2.1549678,-15.139463 + 47: -2.7643428,-14.889202 + 48: -3.6237178,-15.202028 + - node: + cleanable: True + angle: 4.71238898038469 rad + color: '#500000FF' + id: footprint + decals: + 27: -2.8189847,-19.039845 + 28: -2.4439847,-18.836506 + 29: -1.9283597,-19.10241 + 30: -1.4439847,-18.836506 + 31: -1.0846097,-19.039845 + - node: + cleanable: True + color: '#1D1D21FF' + id: i + decals: + 2: -6.1578336,-22.7679 + 3: -6.0640836,-22.78354 + 4: -5.9390836,-22.752258 + 5: -5.8453336,-22.752258 + 6: -6.1109586,-23.268421 + 7: -6.0015836,-23.25278 + 8: -5.9234586,-23.25278 + 9: -5.8453336,-23.25278 + 10: -6.0015836,-23.706377 + 11: -5.8765836,-23.706377 + 12: -5.7828336,-23.706377 + 13: -6.1422086,-23.706377 + 14: -6.8140836,-23.675095 + 15: -6.7047086,-23.675095 + 16: -6.9547086,-23.675095 + 17: -7.1265836,-23.675095 + - node: + cleanable: True + angle: 1.5707963267948966 rad + color: '#1D1D21FF' + id: i + decals: + 18: -7.0015836,-23.659454 + 19: -6.7828336,-23.690737 + 20: -6.0797086,-23.72202 + 21: -5.7984586,-23.768944 + 22: -5.9547086,-23.315346 + 23: -6.0797086,-22.752258 + 24: -5.9078336,-22.78354 + 25: -6.0953336,-23.299704 + - node: + cleanable: True + color: '#500000FF' + id: splatter + decals: + 26: -3.469792,-19.956484 + 35: -2.8274255,-20.432554 + 36: -0.32533944,-26.16806 + 37: -4.212329,-15.119475 + 38: -0.07861769,4.1256695 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 13104 + 1: 34816 + 0,-1: + 0: 4369 + 1: 16384 + -1,0: + 0: 34944 + 1: 512 + 0,1: + 0: 14327 + -1,1: + 0: 52428 + 0,2: + 0: 1 + 1: 8 + -1,2: + 0: 12 + 1: 2 + -1,-1: + 1: 16384 + -3,-4: + 0: 2048 + -2,-4: + 0: 53198 + 1: 1 + -2,-5: + 1: 5188 + 0: 59520 + -2,-3: + 1: 33793 + 0: 2180 + -1,-4: + 0: 65527 + 2: 8 + -1,-3: + 0: 61426 + 1: 4096 + -1,-2: + 1: 2 + 0: 12 + 0,-4: + 0: 57309 + 0,-3: + 0: 13112 + 3: 2176 + 0,-2: + 0: 4355 + 1: 8 + 0,-5: + 0: 7099 + 1,-4: + 0: 32631 + 1,-3: + 3: 272 + 0: 4 + 1: 1024 + 2,-4: + 1: 1 + 0: 768 + 2,-3: + 1: 1 + 2,-5: + 1: 4096 + -2,-8: + 1: 14608 + -2,-7: + 0: 16243 + -2,-6: + 0: 238 + 1: 16384 + -1,-8: + 1: 4366 + 0: 52784 + -1,-7: + 0: 65484 + 1: 48 + -1,-6: + 0: 45311 + 1: 2048 + -1,-5: + 0: 4095 + 0,-8: + 1: 15 + 0: 65280 + 0,-7: + 0: 65521 + 0,-6: + 0: 45823 + 1,-7: + 0: 8176 + 1,-6: + 0: 255 + 2: 4096 + 1: 16384 + 1,-5: + 2: 1 + 0: 272 + 1: 1092 + 1,-8: + 1: 57344 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: ActionToggleInternals + entities: + - uid: 624 + components: + - type: Transform + parent: 623 + - type: InstantAction + originalIconColor: '#FFFFFFFF' + container: 623 +- proto: AirCanister + entities: + - uid: 628 + components: + - type: Transform + pos: -0.5,1.5 + parent: 2 +- proto: AirlockAssemblySecurityGlass + entities: + - uid: 13 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 +- proto: AirlockCommandLocked + entities: + - uid: 6 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 74 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 +- proto: AirlockEngineeringLocked + entities: + - uid: 298 + components: + - type: Transform + pos: 0.5,-27.5 + parent: 2 +- proto: AirlockExternalGlass + entities: + - uid: 227 + components: + - type: Transform + pos: -6.5,-13.5 + parent: 2 + - uid: 228 + components: + - type: Transform + pos: 7.5,-13.5 + parent: 2 +- proto: AirlockFreezer + entities: + - uid: 496 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 2 +- proto: AirlockGlassShuttle + entities: + - uid: 223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-13.5 + parent: 2 + - uid: 226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-13.5 + parent: 2 +- proto: AirlockMedical + entities: + - uid: 63 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-11.5 + parent: 2 +- proto: AirlockSecurityGlassLocked + entities: + - uid: 281 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-25.5 + parent: 2 + - uid: 282 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-25.5 + parent: 2 + - uid: 284 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-19.5 + parent: 2 +- proto: AirlockSecurityLocked + entities: + - uid: 296 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 2 +- proto: APCBasic + entities: + - uid: 305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 2 + - uid: 329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-19.5 + parent: 2 + - type: BatterySelfRecharger + autoRechargeRate: 50000 + autoRecharge: True + - uid: 362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-12.5 + parent: 2 + - uid: 363 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 2 +- proto: Ash + entities: + - uid: 445 + components: + - type: Transform + pos: -6.195281,-26.437138 + parent: 2 + - uid: 446 + components: + - type: Transform + pos: -3.203737,-25.202763 + parent: 2 + - uid: 451 + components: + - type: Transform + pos: -1.3359063,-27.327763 + parent: 2 + - uid: 452 + components: + - type: Transform + pos: -1.0546563,-25.077763 + parent: 2 + - uid: 453 + components: + - type: Transform + pos: -0.03366363,-22.432955 + parent: 2 + - uid: 454 + components: + - type: Transform + pos: -2.6510031,-18.54101 + parent: 2 + - uid: 455 + components: + - type: Transform + pos: -3.2283134,-9.365705 + parent: 2 + - uid: 456 + components: + - type: Transform + pos: -2.3064384,-8.334455 + parent: 2 + - uid: 457 + components: + - type: Transform + pos: -0.00895834,7.122772 + parent: 2 +- proto: Ashtray + entities: + - uid: 434 + components: + - type: Transform + pos: 4.5108266,-14.346764 + parent: 2 + - uid: 717 + components: + - type: Transform + pos: 1.3899925,3.382719 + parent: 2 +- proto: AtmosDeviceFanTiny + entities: + - uid: 673 + components: + - type: Transform + pos: -8.5,-13.5 + parent: 2 + - uid: 674 + components: + - type: Transform + pos: 9.5,-13.5 + parent: 2 +- proto: AtmosFixNitrogenMarker + entities: + - uid: 618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-9.5 + parent: 2 + - uid: 619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-10.5 + parent: 2 + - uid: 620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-10.5 + parent: 2 + - uid: 621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-9.5 + parent: 2 +- proto: Bed + entities: + - uid: 430 + components: + - type: Transform + pos: 6.5,-11.5 + parent: 2 + - uid: 488 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 + - uid: 489 + components: + - type: Transform + pos: 7.5,-23.5 + parent: 2 + - uid: 490 + components: + - type: Transform + pos: -6.5,-23.5 + parent: 2 +- proto: BedsheetMedical + entities: + - uid: 500 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 2 + - uid: 501 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 2 +- proto: BedsheetSpawner + entities: + - uid: 1 + components: + - type: Transform + pos: 7.5,-25.5 + parent: 2 + - uid: 491 + components: + - type: Transform + pos: 7.5,-23.5 + parent: 2 +- proto: BlastDoor + entities: + - uid: 3 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 73 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 382 + components: + - type: Transform + pos: 2.5,-18.5 + parent: 2 +- proto: BlastDoorFrame + entities: + - uid: 373 + components: + - type: Transform + anchored: True + pos: 1.5,-21.5 + parent: 2 +- proto: BlastDoorOpen + entities: + - uid: 361 + components: + - type: Transform + pos: -1.5,-19.5 + parent: 2 + - uid: 367 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 + - uid: 368 + components: + - type: Transform + pos: -1.5,-18.5 + parent: 2 + - uid: 369 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 2 + - uid: 371 + components: + - type: Transform + pos: -2.5,-21.5 + parent: 2 + - uid: 372 + components: + - type: Transform + pos: -3.5,-21.5 + parent: 2 + - uid: 374 + components: + - type: Transform + pos: -4.5,-22.5 + parent: 2 + - uid: 376 + components: + - type: Transform + pos: -4.5,-25.5 + parent: 2 + - uid: 377 + components: + - type: Transform + pos: 5.5,-25.5 + parent: 2 + - uid: 378 + components: + - type: Transform + pos: 5.5,-26.5 + parent: 2 + - uid: 379 + components: + - type: Transform + pos: 5.5,-22.5 + parent: 2 + - uid: 380 + components: + - type: Transform + pos: 5.5,-23.5 + parent: 2 + - uid: 381 + components: + - type: Transform + pos: 0.5,-27.5 + parent: 2 +- proto: BookSpaceLaw + entities: + - uid: 516 + components: + - type: Transform + pos: -3.4286723,-13.415376 + parent: 2 +- proto: ButtonFrameCautionSecurity + entities: + - uid: 256 + components: + - type: MetaData + desc: a sign below it reads 'IN CASE OF PRISONER MUTINY PRESS THIS' + name: Emergency Bridge Lockdown + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 2 +- proto: CableApcExtension + entities: + - uid: 387 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 2 + - uid: 536 + components: + - type: Transform + pos: 0.5,-22.5 + parent: 2 + - uid: 537 + components: + - type: Transform + pos: 0.5,-23.5 + parent: 2 + - uid: 538 + components: + - type: Transform + pos: -5.5,-23.5 + parent: 2 + - uid: 539 + components: + - type: Transform + pos: -5.5,-24.5 + parent: 2 + - uid: 540 + components: + - type: Transform + pos: -5.5,-25.5 + parent: 2 + - uid: 541 + components: + - type: Transform + pos: -4.5,-24.5 + parent: 2 + - uid: 542 + components: + - type: Transform + pos: -3.5,-24.5 + parent: 2 + - uid: 543 + components: + - type: Transform + pos: 2.5,-24.5 + parent: 2 + - uid: 544 + components: + - type: Transform + pos: 3.5,-24.5 + parent: 2 + - uid: 545 + components: + - type: Transform + pos: 4.5,-24.5 + parent: 2 + - uid: 546 + components: + - type: Transform + pos: 5.5,-24.5 + parent: 2 + - uid: 547 + components: + - type: Transform + pos: 5.5,-24.5 + parent: 2 + - uid: 548 + components: + - type: Transform + pos: 5.5,-23.5 + parent: 2 + - uid: 549 + components: + - type: Transform + pos: 5.5,-25.5 + parent: 2 + - uid: 550 + components: + - type: Transform + pos: 2.5,-19.5 + parent: 2 + - uid: 552 + components: + - type: Transform + pos: 0.5,-19.5 + parent: 2 + - uid: 553 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 2 + - uid: 554 + components: + - type: Transform + pos: -0.5,-18.5 + parent: 2 + - uid: 555 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 2 + - uid: 556 + components: + - type: Transform + pos: -2.5,-19.5 + parent: 2 + - uid: 557 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 2 + - uid: 558 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 + - uid: 560 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 561 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 2 + - uid: 562 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 563 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 2 + - uid: 564 + components: + - type: Transform + pos: 2.5,-12.5 + parent: 2 + - uid: 565 + components: + - type: Transform + pos: 3.5,-12.5 + parent: 2 + - uid: 566 + components: + - type: Transform + pos: 4.5,-12.5 + parent: 2 + - uid: 567 + components: + - type: Transform + pos: 6.5,-12.5 + parent: 2 + - uid: 568 + components: + - type: Transform + pos: 5.5,-12.5 + parent: 2 + - uid: 569 + components: + - type: Transform + pos: 6.5,-13.5 + parent: 2 + - uid: 570 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 2 + - uid: 571 + components: + - type: Transform + pos: 6.5,-15.5 + parent: 2 + - uid: 572 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 2 + - uid: 573 + components: + - type: Transform + pos: 4.5,-15.5 + parent: 2 + - uid: 574 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 2 + - uid: 575 + components: + - type: Transform + pos: 3.5,-10.5 + parent: 2 + - uid: 576 + components: + - type: Transform + pos: 7.5,-13.5 + parent: 2 + - uid: 577 + components: + - type: Transform + pos: 8.5,-13.5 + parent: 2 + - uid: 578 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 + - uid: 579 + components: + - type: Transform + pos: -1.5,-12.5 + parent: 2 + - uid: 580 + components: + - type: Transform + pos: -3.5,-12.5 + parent: 2 + - uid: 581 + components: + - type: Transform + pos: -4.5,-12.5 + parent: 2 + - uid: 582 + components: + - type: Transform + pos: -5.5,-12.5 + parent: 2 + - uid: 583 + components: + - type: Transform + pos: -2.5,-12.5 + parent: 2 + - uid: 584 + components: + - type: Transform + pos: -5.5,-13.5 + parent: 2 + - uid: 585 + components: + - type: Transform + pos: -6.5,-13.5 + parent: 2 + - uid: 586 + components: + - type: Transform + pos: -7.5,-13.5 + parent: 2 + - uid: 587 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 2 + - uid: 588 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 2 + - uid: 589 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 2 + - uid: 590 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 2 + - uid: 591 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 592 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 2 + - uid: 593 + components: + - type: Transform + pos: 2.5,1.5 + parent: 2 + - uid: 594 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 + - uid: 595 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 596 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 597 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 2 + - uid: 598 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 2 + - uid: 599 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 2 + - uid: 600 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 2 + - uid: 601 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 2 + - uid: 602 + components: + - type: Transform + pos: 0.5,2.5 + parent: 2 + - uid: 603 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 + - uid: 604 + components: + - type: Transform + pos: 0.5,5.5 + parent: 2 + - uid: 605 + components: + - type: Transform + pos: 0.5,3.5 + parent: 2 + - uid: 606 + components: + - type: Transform + pos: -0.5,4.5 + parent: 2 + - uid: 607 + components: + - type: Transform + pos: 1.5,4.5 + parent: 2 + - uid: 654 + components: + - type: Transform + pos: 3.5,-19.5 + parent: 2 + - uid: 655 + components: + - type: Transform + pos: 3.5,-18.5 + parent: 2 + - uid: 675 + components: + - type: Transform + pos: 5.5,-17.5 + parent: 2 + - uid: 677 + components: + - type: Transform + pos: 4.5,-18.5 + parent: 2 + - uid: 682 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 683 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 2 + - uid: 684 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 691 + components: + - type: Transform + pos: -1.5,-18.5 + parent: 2 + - uid: 692 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 2 + - uid: 693 + components: + - type: Transform + pos: -3.5,-18.5 + parent: 2 + - uid: 694 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 2 + - uid: 695 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 2 + - uid: 696 + components: + - type: Transform + pos: -1.5,-14.5 + parent: 2 + - uid: 697 + components: + - type: Transform + pos: -2.5,-14.5 + parent: 2 + - uid: 698 + components: + - type: Transform + pos: -3.5,-14.5 + parent: 2 + - uid: 700 + components: + - type: Transform + pos: 3.5,-20.5 + parent: 2 + - uid: 721 + components: + - type: Transform + pos: -3.5,-19.5 + parent: 2 + - uid: 722 + components: + - type: Transform + pos: -3.5,-20.5 + parent: 2 + - uid: 723 + components: + - type: Transform + pos: 2.5,-29.5 + parent: 2 + - uid: 724 + components: + - type: Transform + pos: 1.5,-29.5 + parent: 2 + - uid: 725 + components: + - type: Transform + pos: 0.5,-29.5 + parent: 2 + - uid: 726 + components: + - type: Transform + pos: -0.5,2.5 + parent: 2 + - uid: 727 + components: + - type: Transform + pos: 2.5,4.5 + parent: 2 + - uid: 728 + components: + - type: Transform + pos: 3.5,4.5 + parent: 2 + - uid: 729 + components: + - type: Transform + pos: 3.5,5.5 + parent: 2 + - uid: 730 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 731 + components: + - type: Transform + pos: -1.5,4.5 + parent: 2 + - uid: 732 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 733 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 734 + components: + - type: Transform + pos: -2.5,6.5 + parent: 2 + - uid: 735 + components: + - type: Transform + pos: 5.5,-26.5 + parent: 2 + - uid: 736 + components: + - type: Transform + pos: 5.5,-27.5 + parent: 2 + - uid: 737 + components: + - type: Transform + pos: 6.5,-27.5 + parent: 2 +- proto: CableHV + entities: + - uid: 313 + components: + - type: Transform + pos: 3.5,-29.5 + parent: 2 + - uid: 314 + components: + - type: Transform + pos: 3.5,-28.5 + parent: 2 + - uid: 315 + components: + - type: Transform + pos: 2.5,-28.5 + parent: 2 + - uid: 319 + components: + - type: Transform + pos: -0.5,-28.5 + parent: 2 + - uid: 320 + components: + - type: Transform + pos: -0.5,-29.5 + parent: 2 +- proto: CableHVStack1 + entities: + - uid: 318 + components: + - type: Transform + pos: 0.13673306,-29.357548 + parent: 2 +- proto: CableMV + entities: + - uid: 312 + components: + - type: Transform + pos: 2.5,-28.5 + parent: 2 + - uid: 317 + components: + - type: Transform + pos: 0.5,-22.5 + parent: 2 + - uid: 321 + components: + - type: Transform + pos: 1.5,-28.5 + parent: 2 + - uid: 322 + components: + - type: Transform + pos: 0.5,-27.5 + parent: 2 + - uid: 323 + components: + - type: Transform + pos: 0.5,-26.5 + parent: 2 + - uid: 324 + components: + - type: Transform + pos: -1.5,-29.5 + parent: 2 + - uid: 325 + components: + - type: Transform + pos: -0.5,-29.5 + parent: 2 + - uid: 326 + components: + - type: Transform + pos: 0.5,-23.5 + parent: 2 + - uid: 327 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 2 + - uid: 328 + components: + - type: Transform + pos: 0.5,-19.5 + parent: 2 + - uid: 330 + components: + - type: Transform + pos: 2.5,-19.5 + parent: 2 + - uid: 331 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 2 + - uid: 332 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 2 + - uid: 333 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 2 + - uid: 334 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 2 + - uid: 335 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 336 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 2 + - uid: 337 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 338 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 2 + - uid: 339 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 + - uid: 340 + components: + - type: Transform + pos: -1.5,-12.5 + parent: 2 + - uid: 341 + components: + - type: Transform + pos: -2.5,-12.5 + parent: 2 + - uid: 342 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 2 + - uid: 343 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 2 + - uid: 344 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 2 + - uid: 345 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 2 + - uid: 346 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 2 + - uid: 347 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 2 + - uid: 348 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 2 + - uid: 349 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 2 + - uid: 350 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 351 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 2 + - uid: 352 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 2 + - uid: 353 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 2 + - uid: 354 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 2 + - uid: 355 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 2 + - uid: 356 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 2 + - uid: 357 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 358 + components: + - type: Transform + pos: 0.5,1.5 + parent: 2 + - uid: 359 + components: + - type: Transform + pos: 2.5,1.5 + parent: 2 + - uid: 360 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 + - uid: 409 + components: + - type: Transform + pos: -0.5,-18.5 + parent: 2 + - uid: 678 + components: + - type: Transform + pos: 3.5,-19.5 + parent: 2 + - uid: 679 + components: + - type: Transform + pos: 4.5,-19.5 + parent: 2 + - uid: 680 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 681 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 686 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 2 + - uid: 687 + components: + - type: Transform + pos: -3.5,-18.5 + parent: 2 + - uid: 688 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 2 + - uid: 689 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 2 + - uid: 690 + components: + - type: Transform + pos: -1.5,-18.5 + parent: 2 +- proto: CannabisSeeds + entities: + - uid: 483 + components: + - type: Transform + pos: -2.0755308,-23.311163 + parent: 2 +- proto: CarpetBlack + entities: + - uid: 663 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-13.5 + parent: 2 + - uid: 664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-14.5 + parent: 2 + - uid: 665 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-13.5 + parent: 2 + - uid: 666 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-14.5 + parent: 2 +- proto: Chair + entities: + - uid: 420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-15.5 + parent: 2 + - uid: 421 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-14.5 + parent: 2 + - uid: 422 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-14.5 + parent: 2 +- proto: ChairOfficeDark + entities: + - uid: 273 + components: + - type: Transform + pos: -2.423964,-17.38368 + parent: 2 +- proto: ChairPilotSeat + entities: + - uid: 254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,5.5 + parent: 2 + - uid: 255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,5.5 + parent: 2 +- proto: CigaretteSyndicate + entities: + - uid: 656 + components: + - type: Transform + pos: 6.8286705,-25.253609 + parent: 2 +- proto: CigarGold + entities: + - uid: 699 + components: + - type: Transform + pos: 4.7982235,-14.428652 + parent: 2 +- proto: ClosetWall + entities: + - uid: 262 + components: + - type: Transform + pos: -5.5,-24.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 285 + - 283 + - 278 + - 274 + - 297 + - 299 +- proto: ClothingBackpackDuffelSyndicate + entities: + - uid: 385 + components: + - type: Transform + parent: 105 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHandsGlovesCombat + entities: + - uid: 215 + components: + - type: Transform + parent: 196 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHelmetSwat + entities: + - uid: 388 + components: + - type: Transform + pos: 3.59788,-18.369648 + parent: 2 +- proto: ClothingMaskGasSecurity + entities: + - uid: 625 + components: + - type: Transform + pos: 4.559528,-9.526169 + parent: 2 +- proto: ClothingMaskGasSyndicate + entities: + - uid: 383 + components: + - type: Transform + parent: 105 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: Coal1 + entities: + - uid: 389 + components: + - type: Transform + pos: -5.891542,-22.484156 + parent: 2 +- proto: ComputerAlert + entities: + - uid: 252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,4.5 + parent: 2 +- proto: computerBodyScanner + entities: + - uid: 506 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 2 +- proto: ComputerBroken + entities: + - uid: 87 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,6.5 + parent: 2 + - uid: 244 + components: + - type: MetaData + name: Broken shuttle console + - type: Transform + pos: 0.5,7.5 + parent: 2 + - uid: 250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,5.5 + parent: 2 + - uid: 271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-17.5 + parent: 2 + - uid: 272 + components: + - type: MetaData + name: Broken Criminal Records computer + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-18.5 + parent: 2 +- proto: ComputerCrewMonitoring + entities: + - uid: 247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,5.5 + parent: 2 +- proto: ComputerMedicalRecords + entities: + - uid: 79 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 2 +- proto: ComputerPowerMonitoring + entities: + - uid: 251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,6.5 + parent: 2 +- proto: ComputerRadar + entities: + - uid: 245 + components: + - type: Transform + pos: 1.5,7.5 + parent: 2 +- proto: CrateContrabandStorageSecure + entities: + - uid: 105 + components: + - type: Transform + anchored: True + pos: 4.5,-20.5 + parent: 2 + - type: Physics + bodyType: Static + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.147 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 269 + - 383 + - 385 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CratePermaEscapeSpawner + entities: + - uid: 520 + components: + - type: Transform + pos: 4.5,-24.5 + parent: 2 + - uid: 631 + components: + - type: Transform + pos: 3.5,-26.5 + parent: 2 +- proto: CurtainsRed + entities: + - uid: 431 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-11.5 + parent: 2 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 2 +- proto: DeskBell + entities: + - uid: 633 + components: + - type: Transform + pos: -1.466649,-17.43652 + parent: 2 +- proto: DrinkMug + entities: + - uid: 435 + components: + - type: Transform + pos: 3.4327016,-14.253014 + parent: 2 +- proto: EmergencyLight + entities: + - uid: 20 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-19.5 + parent: 2 + - uid: 26 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-10.5 + parent: 2 + - uid: 31 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-26.5 + parent: 2 + - uid: 48 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 + - uid: 651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,3.5 + parent: 2 +- proto: EmergencyOxygenTank + entities: + - uid: 623 + components: + - type: Transform + pos: 4.497028,-9.338669 + parent: 2 + - type: GasTank + toggleActionEntity: 624 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 624 +- proto: EphedrineChemistryBottle + entities: + - uid: 667 + components: + - type: Transform + pos: 1.2954173,-7.5306168 + parent: 2 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-16.5 + parent: 2 +- proto: ExtinguisherCabinetOpen + entities: + - uid: 470 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 2 + - uid: 473 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-27.5 + parent: 2 + - uid: 635 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 2 +- proto: FirelockGlass + entities: + - uid: 707 + components: + - type: Transform + pos: -1.5,-19.5 + parent: 2 + - uid: 708 + components: + - type: Transform + pos: 2.5,-18.5 + parent: 2 + - uid: 709 + components: + - type: Transform + pos: 5.5,-25.5 + parent: 2 + - uid: 711 + components: + - type: Transform + pos: -4.5,-25.5 + parent: 2 + - uid: 713 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 2 + - uid: 714 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 2 + - uid: 715 + components: + - type: Transform + pos: 0.5,0.5 + parent: 2 + - uid: 716 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 +- proto: FlashlightSeclite + entities: + - uid: 33 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FlippoLighter + entities: + - uid: 270 + components: + - type: Transform + pos: 0.6057625,-25.265987 + parent: 2 +- proto: FloorDrain + entities: + - uid: 288 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 2 + - type: Fixtures + fixtures: {} +- proto: FloorTileItemSteel + entities: + - uid: 92 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.6513882,-25.21156 + parent: 2 + - uid: 120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.3642368,-24.77406 + parent: 2 + - uid: 218 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.8857632,-25.93031 + parent: 2 + - uid: 231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.63289,-27.93135 + parent: 2 + - uid: 302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.3642368,-29.477184 + parent: 2 + - uid: 303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.74513817,-22.93031 + parent: 2 +- proto: FoodBadRecipe + entities: + - uid: 461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.7103342,6.9647202 + parent: 2 +- proto: FoodBreadMoldySlice + entities: + - uid: 425 + components: + - type: Transform + parent: 424 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 427 + components: + - type: Transform + parent: 424 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodMeatRotten + entities: + - uid: 426 + components: + - type: Transform + parent: 424 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 428 + components: + - type: Transform + parent: 424 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodPizzaMoldySlice + entities: + - uid: 436 + components: + - type: Transform + pos: 3.9014516,-14.378014 + parent: 2 +- proto: FoodPlateTrash + entities: + - uid: 482 + components: + - type: Transform + pos: 1.6479025,-24.275301 + parent: 2 +- proto: ForkPlastic + entities: + - uid: 481 + components: + - type: Transform + pos: 1.3197775,-24.478426 + parent: 2 +- proto: GasCanisterBrokenBase + entities: + - uid: 622 + components: + - type: Transform + pos: -3.5,-29.5 + parent: 2 +- proto: GeneratorBasic15kW + entities: + - uid: 308 + components: + - type: Transform + pos: 3.5,-28.5 + parent: 2 +- proto: GeneratorRTGDamaged + entities: + - uid: 316 + components: + - type: Transform + pos: 3.5,-29.5 + parent: 2 +- proto: GrenadeFlashBang + entities: + - uid: 517 + components: + - type: Transform + pos: -2.5479493,-13.4216585 + parent: 2 +- proto: Grille + entities: + - uid: 4 + components: + - type: Transform + pos: 1.5,8.5 + parent: 2 + - uid: 5 + components: + - type: Transform + pos: 0.5,8.5 + parent: 2 + - uid: 7 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 8 + components: + - type: Transform + pos: 3.5,5.5 + parent: 2 + - uid: 9 + components: + - type: Transform + pos: 3.5,4.5 + parent: 2 + - uid: 10 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 11 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 12 + components: + - type: Transform + pos: -2.5,6.5 + parent: 2 + - uid: 39 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 2 + - uid: 40 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 2 + - uid: 41 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 2 + - uid: 42 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 2 + - uid: 43 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 2 + - uid: 44 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 2 + - uid: 45 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 2 + - uid: 46 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 2 + - uid: 64 + components: + - type: Transform + pos: -7.5,-23.5 + parent: 2 + - uid: 65 + components: + - type: Transform + pos: 8.5,-23.5 + parent: 2 + - uid: 66 + components: + - type: Transform + pos: 8.5,-25.5 + parent: 2 + - uid: 67 + components: + - type: Transform + pos: -4.5,-18.5 + parent: 2 + - uid: 68 + components: + - type: Transform + pos: -4.5,-19.5 + parent: 2 + - uid: 69 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 70 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 + - uid: 71 + components: + - type: Transform + pos: -3.5,-21.5 + parent: 2 + - uid: 72 + components: + - type: Transform + pos: -2.5,-21.5 + parent: 2 + - uid: 649 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 2 +- proto: GrilleBroken + entities: + - uid: 94 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 2 + - uid: 101 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 2 + - uid: 102 + components: + - type: Transform + pos: -1.5,-18.5 + parent: 2 + - uid: 110 + components: + - type: Transform + pos: -0.5,8.5 + parent: 2 + - uid: 114 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 2 +- proto: GunSafe + entities: + - uid: 106 + components: + - type: MetaData + name: Energy Weapons safe + - type: Transform + anchored: True + pos: 4.5,-19.5 + parent: 2 + - type: Physics + bodyType: Static + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.147 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 408 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: Handcuffs + entities: + - uid: 266 + components: + - type: Transform + pos: -0.53172827,2.545515 + parent: 2 +- proto: HandheldHealthAnalyzerUnpowered + entities: + - uid: 499 + components: + - type: Transform + pos: 1.5534105,-7.299921 + parent: 2 +- proto: HighSecArmoryLocked + entities: + - uid: 229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-18.5 + parent: 2 +- proto: HoloprojectorSecurity + entities: + - uid: 672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.9395652,-13.425855 + parent: 2 +- proto: HospitalCurtains + entities: + - uid: 287 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 2 +- proto: HydroponicsTrayEmpty + entities: + - uid: 479 + components: + - type: Transform + pos: -1.5,-22.5 + parent: 2 +- proto: KitchenMicrowave + entities: + - uid: 414 + components: + - type: Transform + pos: 4.5,-12.5 + parent: 2 +- proto: LockableButtonArmory + entities: + - uid: 88 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-17.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 382: + - Pressed: Toggle +- proto: LockableButtonSecurity + entities: + - uid: 366 + components: + - type: MetaData + name: prison blast doors + - type: Transform + pos: -2.5,-16.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 376: + - Pressed: Toggle + 374: + - Pressed: Toggle + 372: + - Pressed: Toggle + 371: + - Pressed: Toggle + 361: + - Pressed: Toggle + 368: + - Pressed: Toggle + 369: + - Pressed: Toggle + 367: + - Pressed: Toggle + 380: + - Pressed: Toggle + 379: + - Pressed: Toggle + 377: + - Pressed: Toggle + 378: + - Pressed: Toggle +- proto: LockerEvidence + entities: + - uid: 108 + components: + - type: Transform + pos: -3.5,-20.5 + parent: 2 +- proto: LockerFreezerBase + entities: + - uid: 424 + components: + - type: Transform + pos: 5.5,-12.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 425 + - 426 + - 427 + - 428 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerMedicineFilled + entities: + - uid: 417 + components: + - type: Transform + pos: 1.5,-9.5 + parent: 2 +- proto: LockerSecurity + entities: + - uid: 196 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 215 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - uid: 510 + components: + - type: Transform + pos: -1.5,-15.5 + parent: 2 + - type: Lock + locked: False + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + radius: 0.01 + vertices: + - -0.25,-0.48 + - 0.25,-0.48 + - 0.25,0.48 + - -0.25,0.48 + mask: + - Impassable + - TableLayer + - LowImpassable + layer: + - BulletImpassable + - Opaque + density: 75 + hard: True + restitution: 0 + friction: 0.4 + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True + - uid: 511 + components: + - type: Transform + pos: -0.5,-15.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.147 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 33 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LootSpawnerRandomCrateSecurity + entities: + - uid: 261 + components: + - type: Transform + pos: 1.5,2.5 + parent: 2 + - uid: 448 + components: + - type: Transform + pos: 3.5,-17.5 + parent: 2 +- proto: LuxuryPen + entities: + - uid: 301 + components: + - type: Transform + pos: 1.7685776,3.576183 + parent: 2 +- proto: MachineFrame + entities: + - uid: 403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-31.5 + parent: 2 + - uid: 404 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-31.5 + parent: 2 + - uid: 462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-29.5 + parent: 2 +- proto: MachineFrameDestroyed + entities: + - uid: 232 + components: + - type: MetaData + desc: Well, this used to be able to make ammo... + name: Destroyed Security Techfab + - type: Transform + pos: 4.5,-17.5 + parent: 2 + - uid: 309 + components: + - type: Transform + pos: 2.5,-28.5 + parent: 2 + - uid: 310 + components: + - type: Transform + pos: -1.5,-29.5 + parent: 2 + - uid: 390 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -5.5,-17.5 + parent: 2 + - uid: 391 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -5.5,-18.5 + parent: 2 + - uid: 405 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -0.5,-31.5 + parent: 2 + - uid: 406 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -1.5,-31.5 + parent: 2 + - uid: 407 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -2.5,-31.5 + parent: 2 + - uid: 441 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: -2.5,8.5 + parent: 2 + - uid: 442 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destryoed thruster + - type: Transform + pos: -2.5,-7.5 + parent: 2 + - uid: 443 + components: + - type: MetaData + desc: looks like it took some serious explosive damage + name: Destroyed thruster + - type: Transform + pos: 3.5,-7.5 + parent: 2 + - uid: 504 + components: + - type: MetaData + desc: The technology this machine once held was invaluable... + name: Broken body scanner + - type: Transform + pos: -3.5,-10.5 + parent: 2 + - uid: 505 + components: + - type: MetaData + desc: The tech this machine once held was invaluable... + name: Broken Cloning pod + - type: Transform + pos: -0.5,-8.5 + parent: 2 +- proto: MaterialGunpowder + entities: + - uid: 278 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 283 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 285 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 297 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 299 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: MedicalBed + entities: + - uid: 300 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 2 + - uid: 495 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 2 +- proto: MedkitOxygenFilled + entities: + - uid: 508 + components: + - type: Transform + pos: -0.5821552,-10.268289 + parent: 2 +- proto: PaperOffice + entities: + - uid: 24 + components: + - type: MetaData + name: Captain's orders + - type: Transform + pos: -0.25811195,4.835703 + parent: 2 + - type: Paper + content: >+ + security are to preform regular searches of John Grey's cell. we have strong evidence that he is hiding something. + + + defence turrets are to be set to fire-at-will. we have received several reports from long range sensor stations of increased syndicate activity in the sector. + + - uid: 260 + components: + - type: MetaData + desc: a burned and worn piece of a diary, written in charcoal. some of it is still legible + name: Hastily scrawled note + - type: Transform + pos: -5.6918225,-23.565489 + parent: 2 + - type: Paper + content: >- + Hacks-the-doors says he can get us into the bridge if i can rush the warden's offce. the crew seems to have gotten wise, they keep searching my cell, but ive hidden everything in a secret slot in the wall between my and the diona's cells. + + + everyone is on board with the plan except that weirdo in cell four, never even speaking to anyone. fine, he can rot while we take back our freedom. + - uid: 268 + components: + - type: MetaData + desc: The bottom of the page is singed off + name: Prisoner Manifest + - type: Transform + pos: 1.3511494,3.7201993 + parent: 2 + - type: Paper + content: > + NT correctional transit ship st-187 high-value prisoner transit manifest + + + John Grey - cell 1 + + Hacks-the-doors - cell 2 + + The Sapling of Destruction - cell 3 + + John C- +- proto: PipeBombGunpowder + entities: + - uid: 274 + components: + - type: Transform + parent: 262 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: PlushieLizard + entities: + - uid: 432 + components: + - type: Transform + pos: 6.467701,-11.451192 + parent: 2 +- proto: PortableGeneratorJrPacman + entities: + - uid: 107 + components: + - type: Transform + pos: 1.5,1.5 + parent: 2 +- proto: PosterContrabandCybersun600 + entities: + - uid: 643 + components: + - type: Transform + pos: 7.5,-27.5 + parent: 2 +- proto: PosterContrabandLustyExomorph + entities: + - uid: 290 + components: + - type: Transform + pos: 5.5,-9.5 + parent: 2 +- proto: PosterLegit12Gauge + entities: + - uid: 641 + components: + - type: Transform + pos: 3.5,-21.5 + parent: 2 +- proto: PosterLegitAnatomyPoster + entities: + - uid: 642 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 2 +- proto: PosterLegitNanotrasenLogo + entities: + - uid: 629 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 2 + - uid: 636 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 2 +- proto: PosterLegitSecWatch + entities: + - uid: 644 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 2 +- proto: Poweredlight + entities: + - uid: 464 + components: + - type: Transform + pos: -0.5,-17.5 + parent: 2 + - uid: 608 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-26.5 + parent: 2 + - uid: 612 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-12.5 + parent: 2 + - uid: 614 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-15.5 + parent: 2 + - uid: 616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-7.5 + parent: 2 + - uid: 617 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 2 + - uid: 652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-20.5 + parent: 2 + - uid: 653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-17.5 + parent: 2 + - uid: 661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 2 + - uid: 662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 2 +- proto: PoweredSmallLight + entities: + - uid: 609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-26.5 + parent: 2 + - uid: 610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-22.5 + parent: 2 + - uid: 615 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-9.5 + parent: 2 +- proto: PoweredSmallLightEmpty + entities: + - uid: 611 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-22.5 + parent: 2 +- proto: Rack + entities: + - uid: 234 + components: + - type: Transform + pos: 4.5,-18.5 + parent: 2 + - uid: 275 + components: + - type: Transform + pos: -2.5,-20.5 + parent: 2 + - uid: 518 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 658 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 + - uid: 668 + components: + - type: Transform + pos: 1.5,-29.5 + parent: 2 +- proto: RandomEngineerCorpseSpawner + entities: + - uid: 295 + components: + - type: Transform + pos: -0.5,-29.5 + parent: 2 +- proto: RandomMedicCorpseSpawner + entities: + - uid: 386 + components: + - type: Transform + pos: 0.5,4.5 + parent: 2 +- proto: RandomPosterContraband + entities: + - uid: 645 + components: + - type: Transform + pos: -7.5,-22.5 + parent: 2 + - uid: 646 + components: + - type: Transform + pos: 6.5,-21.5 + parent: 2 +- proto: RandomPosterLegit + entities: + - uid: 637 + components: + - type: Transform + pos: 2.5,3.5 + parent: 2 + - uid: 638 + components: + - type: Transform + pos: 7.5,-15.5 + parent: 2 + - uid: 639 + components: + - type: Transform + pos: 5.5,-11.5 + parent: 2 + - uid: 640 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 2 +- proto: RandomSecurityCorpseSpawner + entities: + - uid: 291 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 2 + - uid: 292 + components: + - type: Transform + pos: -2.5,-19.5 + parent: 2 +- proto: RandomSoap + entities: + - uid: 289 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 2 +- proto: RandomSpawner100 + entities: + - uid: 113 + components: + - type: Transform + pos: 3.5,-15.5 + parent: 2 + - uid: 415 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 2 + - uid: 429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-13.5 + parent: 2 +- proto: RandomVendingDrinks + entities: + - uid: 416 + components: + - type: Transform + pos: 2.5,-12.5 + parent: 2 +- proto: RandomVendingSnacks + entities: + - uid: 497 + components: + - type: Transform + pos: 2.5,-15.5 + parent: 2 +- proto: ReinforcedGirder + entities: + - uid: 137 + components: + - type: Transform + pos: -0.5,-30.5 + parent: 2 + - uid: 140 + components: + - type: Transform + pos: -1.5,-30.5 + parent: 2 + - uid: 143 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 2 + - uid: 160 + components: + - type: Transform + pos: -1.5,7.5 + parent: 2 + - uid: 161 + components: + - type: Transform + pos: -1.5,8.5 + parent: 2 + - uid: 168 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 2 + - uid: 180 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 2 + - uid: 193 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 2 + - uid: 206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-16.5 + parent: 2 + - uid: 207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-16.5 + parent: 2 + - uid: 209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-24.5 + parent: 2 + - uid: 214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-24.5 + parent: 2 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 189 + components: + - type: Transform + pos: -2.5,6.5 + parent: 2 + - uid: 190 + components: + - type: Transform + pos: -2.5,5.5 + parent: 2 + - uid: 191 + components: + - type: Transform + pos: -2.5,4.5 + parent: 2 + - uid: 194 + components: + - type: Transform + pos: 1.5,8.5 + parent: 2 + - uid: 195 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 197 + components: + - type: Transform + pos: 3.5,4.5 + parent: 2 + - uid: 471 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 2 + - uid: 626 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 +- proto: ReinforcedWindow + entities: + - uid: 198 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 2 + - uid: 199 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 2 + - uid: 200 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 2 + - uid: 201 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 2 + - uid: 202 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 2 + - uid: 203 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 2 + - uid: 204 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 2 + - uid: 205 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 2 + - uid: 211 + components: + - type: Transform + pos: -4.5,-19.5 + parent: 2 + - uid: 212 + components: + - type: Transform + pos: -3.5,-21.5 + parent: 2 + - uid: 213 + components: + - type: Transform + pos: -2.5,-21.5 + parent: 2 + - uid: 216 + components: + - type: Transform + pos: 8.5,-23.5 + parent: 2 + - uid: 217 + components: + - type: Transform + pos: 8.5,-25.5 + parent: 2 + - uid: 219 + components: + - type: Transform + pos: -7.5,-23.5 + parent: 2 + - uid: 660 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 2 +- proto: SalvageHumanCorpseSpawner + entities: + - uid: 293 + components: + - type: Transform + pos: -0.5,-25.5 + parent: 2 + - uid: 294 + components: + - type: Transform + pos: -3.5,-14.5 + parent: 2 +- proto: SalvageLootSpawner + entities: + - uid: 519 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 2 + - uid: 659 + components: + - type: Transform + pos: -0.5,-12.5 + parent: 2 +- proto: SalvageMobSpawner75 + entities: + - uid: 521 + components: + - type: Transform + pos: -5.5,-13.5 + parent: 2 + - uid: 522 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 2 + - uid: 523 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 2 + - uid: 524 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 2 + - uid: 525 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 2 + - uid: 526 + components: + - type: Transform + pos: -2.5,-23.5 + parent: 2 + - uid: 527 + components: + - type: Transform + pos: 1.5,-26.5 + parent: 2 + - uid: 528 + components: + - type: Transform + pos: 3.5,-23.5 + parent: 2 + - uid: 529 + components: + - type: Transform + pos: 0.5,-29.5 + parent: 2 + - uid: 530 + components: + - type: Transform + pos: 0.5,-19.5 + parent: 2 + - uid: 531 + components: + - type: Transform + pos: 3.5,-24.5 + parent: 2 + - uid: 532 + components: + - type: Transform + pos: 2.5,-26.5 + parent: 2 + - uid: 533 + components: + - type: Transform + pos: -3.5,-23.5 + parent: 2 + - uid: 534 + components: + - type: Transform + pos: 1.5,-29.5 + parent: 2 + - uid: 535 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 2 +- proto: SalvageSpawnerScrapCommon + entities: + - uid: 706 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 2 +- proto: SalvageSpawnerScrapCommon75 + entities: + - uid: 447 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-27.5 + parent: 2 + - uid: 460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-22.5 + parent: 2 + - uid: 463 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-25.5 + parent: 2 +- proto: SalvageSpawnerScrapValuable75 + entities: + - uid: 465 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-28.5 + parent: 2 + - uid: 466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 2 + - uid: 467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-23.5 + parent: 2 +- proto: ScalpelShiv + entities: + - uid: 384 + components: + - type: Transform + pos: -3.2524245,-19.35137 + parent: 2 +- proto: ScrapCloset + entities: + - uid: 306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.689742,-26.853409 + parent: 2 + - uid: 512 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.8192973,-15.509125 + parent: 2 +- proto: ScrapFaxMachine + entities: + - uid: 705 + components: + - type: Transform + pos: -0.12547827,6.420515 + parent: 2 +- proto: ScrapFireExtinguisher + entities: + - uid: 468 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.7115498,-14.995926 + parent: 2 + - uid: 469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.37643647,5.796526 + parent: 2 +- proto: ScrapFirelock1 + entities: + - uid: 712 + components: + - type: Transform + pos: 4.983548,-23.481426 + parent: 2 +- proto: ScrapFirelock2 + entities: + - uid: 280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.433796,-23.519455 + parent: 2 + - uid: 375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.48865283,-20.504122 + parent: 2 +- proto: ScrapGeneratorUraniumLeaking + entities: + - uid: 307 + components: + - type: Transform + pos: -0.5,-28.5 + parent: 2 +- proto: ScrapGlass + entities: + - uid: 702 + components: + - type: Transform + pos: -3.3567662,-17.571495 + parent: 2 + - uid: 703 + components: + - type: Transform + pos: -1.0932239,-9.317591 + parent: 2 +- proto: ScrapMedkit + entities: + - uid: 701 + components: + - type: Transform + pos: -1.8971674,-10.441557 + parent: 2 +- proto: ScrapPAIGold + entities: + - uid: 704 + components: + - type: Transform + pos: -0.65672827,2.951765 + parent: 2 +- proto: Screwdriver + entities: + - uid: 16 + components: + - type: Transform + pos: -2.8623977,-14.451639 + parent: 2 +- proto: ShardGlass + entities: + - uid: 235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.46758842,4.2362804 + parent: 2 + - uid: 237 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5792866,7.6737804 + parent: 2 + - uid: 239 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.1261616,5.9081554 + parent: 2 + - uid: 243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.6730366,5.3144054 + parent: 2 +- proto: ShardGlassPlasma + entities: + - uid: 75 + components: + - type: Transform + pos: -0.5295793,6.567419 + parent: 2 + - uid: 78 + components: + - type: Transform + pos: -0.48270428,7.395544 + parent: 2 + - uid: 91 + components: + - type: Transform + pos: 0.39229572,7.004919 + parent: 2 + - uid: 109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.2199116,5.7050304 + parent: 2 + - uid: 111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.4855366,5.4550304 + parent: 2 +- proto: ShardGlassReinforced + entities: + - uid: 53 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.508602,-22.257473 + parent: 2 + - uid: 93 + components: + - type: Transform + pos: -1.659688,-9.705481 + parent: 2 + - uid: 112 + components: + - type: Transform + pos: -4.237813,-9.627356 + parent: 2 + - uid: 115 + components: + - type: Transform + pos: -3.5858517,-17.94417 + parent: 2 + - uid: 116 + components: + - type: Transform + pos: -2.1029367,-18.958366 + parent: 2 + - uid: 117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.6136457,-27.686813 + parent: 2 + - uid: 192 + components: + - type: Transform + pos: -2.722188,-8.705481 + parent: 2 + - uid: 208 + components: + - type: Transform + pos: -4.1327267,-18.63167 + parent: 2 + - uid: 233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.6917706,-29.811813 + parent: 2 + - uid: 248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.7714419,-23.008694 + parent: 2 + - uid: 249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5667706,-25.803532 + parent: 2 + - uid: 253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.3016276,-26.287907 + parent: 2 + - uid: 258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.43168306,-21.852444 + parent: 2 + - uid: 304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.180477,-22.694973 + parent: 2 + - uid: 364 + components: + - type: Transform + pos: -2.6654367,-18.239616 + parent: 2 + - uid: 365 + components: + - type: Transform + pos: -1.5248117,-18.255241 + parent: 2 + - uid: 410 + components: + - type: Transform + pos: -3.253438,-10.736731 + parent: 2 + - uid: 412 + components: + - type: Transform + pos: -3.534688,-8.111731 + parent: 2 + - uid: 413 + components: + - type: Transform + pos: -5.331563,-9.127356 + parent: 2 +- proto: SheetGlass + entities: + - uid: 671 + components: + - type: Transform + pos: 4.7765174,-18.467577 + parent: 2 +- proto: SheetPlasma + entities: + - uid: 669 + components: + - type: Transform + pos: 1.5424409,-29.552258 + parent: 2 +- proto: SheetPlastic + entities: + - uid: 670 + components: + - type: Transform + pos: 4.3702674,-18.467577 + parent: 2 +- proto: SignalButton + entities: + - uid: 257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 3: + - Pressed: Toggle + 73: + - Pressed: Toggle +- proto: SignArmory + entities: + - uid: 630 + components: + - type: Transform + pos: 2.5,-20.5 + parent: 2 +- proto: SignBridge + entities: + - uid: 210 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 2 +- proto: SignMedical + entities: + - uid: 634 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 2 +- proto: SignPrison + entities: + - uid: 627 + components: + - type: Transform + pos: -0.5,-16.5 + parent: 2 + - uid: 632 + components: + - type: Transform + pos: -1.5,-20.5 + parent: 2 +- proto: SignRedFour + entities: + - uid: 487 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-24.5 + parent: 2 +- proto: SignRedOne + entities: + - uid: 484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-21.5 + parent: 2 +- proto: SignRedThree + entities: + - uid: 486 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-24.5 + parent: 2 +- proto: SignRedTwo + entities: + - uid: 485 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-21.5 + parent: 2 +- proto: SpawnVendingMachineRestockFoodDrink + entities: + - uid: 718 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 2 +- proto: StasisBedMachineCircuitboard + entities: + - uid: 438 + components: + - type: Transform + pos: -3.276686,-9.972807 + parent: 2 +- proto: SubstationMachineCircuitboard + entities: + - uid: 311 + components: + - type: Transform + pos: -1.0817939,-29.5628 + parent: 2 +- proto: SuitStorageEVAPrisoner + entities: + - uid: 475 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 2 +- proto: SyringeBluespace + entities: + - uid: 36 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.37354228,-10.530617 + parent: 2 +- proto: Table + entities: + - uid: 220 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 2 + - uid: 221 + components: + - type: Transform + pos: -4.5,-22.5 + parent: 2 + - uid: 224 + components: + - type: Transform + pos: 5.5,-26.5 + parent: 2 + - uid: 225 + components: + - type: Transform + pos: 5.5,-22.5 + parent: 2 + - uid: 263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 2 + - uid: 264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,3.5 + parent: 2 + - uid: 265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,2.5 + parent: 2 + - uid: 423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-12.5 + parent: 2 + - uid: 478 + components: + - type: Transform + pos: 1.5,-24.5 + parent: 2 +- proto: TableFrame + entities: + - uid: 476 + components: + - type: Transform + pos: -0.5,-24.5 + parent: 2 + - uid: 477 + components: + - type: Transform + pos: 0.5,-24.5 + parent: 2 +- proto: TableGlass + entities: + - uid: 498 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 2 +- proto: TableReinforced + entities: + - uid: 513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-13.5 + parent: 2 + - uid: 514 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-13.5 + parent: 2 +- proto: TableWood + entities: + - uid: 418 + components: + - type: Transform + pos: 3.5,-14.5 + parent: 2 + - uid: 419 + components: + - type: Transform + pos: 4.5,-14.5 + parent: 2 +- proto: Thruster + entities: + - uid: 370 + components: + - type: Transform + pos: 8.5,-11.5 + parent: 2 + - uid: 392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-19.5 + parent: 2 + - uid: 393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-18.5 + parent: 2 + - uid: 394 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-20.5 + parent: 2 + - uid: 395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-19.5 + parent: 2 + - uid: 396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-17.5 + parent: 2 + - uid: 397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-20.5 + parent: 2 + - uid: 398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-31.5 + parent: 2 + - uid: 399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-31.5 + parent: 2 + - uid: 400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-28.5 + parent: 2 + - uid: 402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-28.5 + parent: 2 + - uid: 439 + components: + - type: Transform + pos: -7.5,-11.5 + parent: 2 + - uid: 440 + components: + - type: Transform + pos: 3.5,8.5 + parent: 2 + - uid: 458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 2 + - uid: 459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 2 + - uid: 551 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,2.5 + parent: 2 + - uid: 559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,2.5 + parent: 2 +- proto: ToiletDirtyWater + entities: + - uid: 286 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 2 +- proto: VendingMachineCigs + entities: + - uid: 433 + components: + - type: Transform + pos: 6.5,-15.5 + parent: 2 +- proto: VendingMachineSecDrobe + entities: + - uid: 164 + components: + - type: Transform + pos: -5.5,-11.5 + parent: 2 +- proto: VendingMachineSustenance + entities: + - uid: 480 + components: + - type: Transform + pos: 2.5,-22.5 + parent: 2 +- proto: WallReinforced + entities: + - uid: 14 + components: + - type: Transform + pos: -1.5,3.5 + parent: 2 + - uid: 15 + components: + - type: Transform + pos: -1.5,2.5 + parent: 2 + - uid: 17 + components: + - type: Transform + pos: 2.5,3.5 + parent: 2 + - uid: 18 + components: + - type: Transform + pos: 3.5,3.5 + parent: 2 + - uid: 19 + components: + - type: Transform + pos: 3.5,7.5 + parent: 2 + - uid: 21 + components: + - type: Transform + pos: 2.5,8.5 + parent: 2 + - uid: 22 + components: + - type: Transform + pos: -2.5,7.5 + parent: 2 + - uid: 23 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 2 + - uid: 25 + components: + - type: Transform + pos: -1.5,1.5 + parent: 2 + - uid: 27 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 28 + components: + - type: Transform + pos: 1.5,0.5 + parent: 2 + - uid: 29 + components: + - type: Transform + pos: 2.5,0.5 + parent: 2 + - uid: 30 + components: + - type: Transform + pos: 2.5,1.5 + parent: 2 + - uid: 32 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 2 + - uid: 34 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 2 + - uid: 35 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 2 + - uid: 37 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 2 + - uid: 38 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 2 + - uid: 47 + components: + - type: Transform + pos: -8.5,-12.5 + parent: 2 + - uid: 51 + components: + - type: Transform + pos: -6.5,-14.5 + parent: 2 + - uid: 52 + components: + - type: Transform + pos: -7.5,-14.5 + parent: 2 + - uid: 54 + components: + - type: Transform + pos: -6.5,-11.5 + parent: 2 + - uid: 55 + components: + - type: Transform + pos: 7.5,-11.5 + parent: 2 + - uid: 57 + components: + - type: Transform + pos: 8.5,-12.5 + parent: 2 + - uid: 59 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 2 + - uid: 61 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 2 + - uid: 62 + components: + - type: Transform + pos: 7.5,-15.5 + parent: 2 + - uid: 77 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 2 + - uid: 82 + components: + - type: Transform + pos: 5.5,-8.5 + parent: 2 + - uid: 83 + components: + - type: Transform + pos: 5.5,-9.5 + parent: 2 + - uid: 85 + components: + - type: Transform + pos: 6.5,-10.5 + parent: 2 + - uid: 86 + components: + - type: Transform + pos: 7.5,-10.5 + parent: 2 + - uid: 90 + components: + - type: Transform + pos: -6.5,-10.5 + parent: 2 + - uid: 95 + components: + - type: Transform + pos: -4.5,-21.5 + parent: 2 + - uid: 97 + components: + - type: Transform + pos: -5.5,-21.5 + parent: 2 + - uid: 100 + components: + - type: Transform + pos: -7.5,-22.5 + parent: 2 + - uid: 103 + components: + - type: Transform + pos: -5.5,-24.5 + parent: 2 + - uid: 119 + components: + - type: Transform + pos: -3.5,-32.5 + parent: 2 + - uid: 125 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 2 + - uid: 126 + components: + - type: Transform + pos: 4.5,-30.5 + parent: 2 + - uid: 127 + components: + - type: Transform + pos: 1.5,-30.5 + parent: 2 + - uid: 128 + components: + - type: Transform + pos: 4.5,-31.5 + parent: 2 + - uid: 129 + components: + - type: Transform + pos: 4.5,-32.5 + parent: 2 + - uid: 132 + components: + - type: Transform + pos: 1.5,-27.5 + parent: 2 + - uid: 133 + components: + - type: Transform + pos: 2.5,-27.5 + parent: 2 + - uid: 135 + components: + - type: Transform + pos: 4.5,-29.5 + parent: 2 + - uid: 136 + components: + - type: Transform + pos: 5.5,-27.5 + parent: 2 + - uid: 138 + components: + - type: Transform + pos: 7.5,-27.5 + parent: 2 + - uid: 139 + components: + - type: Transform + pos: 8.5,-27.5 + parent: 2 + - uid: 141 + components: + - type: Transform + pos: 8.5,-26.5 + parent: 2 + - uid: 142 + components: + - type: Transform + pos: 8.5,-24.5 + parent: 2 + - uid: 144 + components: + - type: Transform + pos: 5.5,-24.5 + parent: 2 + - uid: 146 + components: + - type: Transform + pos: -1.5,-16.5 + parent: 2 + - uid: 147 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 2 + - uid: 148 + components: + - type: Transform + pos: 5.5,-21.5 + parent: 2 + - uid: 150 + components: + - type: Transform + pos: 7.5,-21.5 + parent: 2 + - uid: 151 + components: + - type: Transform + pos: 8.5,-21.5 + parent: 2 + - uid: 153 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 2 + - uid: 155 + components: + - type: Transform + pos: 5.5,-16.5 + parent: 2 + - uid: 156 + components: + - type: Transform + pos: 6.5,-16.5 + parent: 2 + - uid: 158 + components: + - type: Transform + pos: -0.5,-16.5 + parent: 2 + - uid: 162 + components: + - type: Transform + pos: -1.5,-20.5 + parent: 2 + - uid: 163 + components: + - type: Transform + pos: -1.5,-21.5 + parent: 2 + - uid: 166 + components: + - type: Transform + pos: 2.5,-20.5 + parent: 2 + - uid: 169 + components: + - type: Transform + pos: 3.5,-21.5 + parent: 2 + - uid: 170 + components: + - type: Transform + pos: 4.5,-21.5 + parent: 2 + - uid: 171 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 2 + - uid: 172 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 2 + - uid: 174 + components: + - type: Transform + pos: 2.5,-16.5 + parent: 2 + - uid: 175 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 2 + - uid: 177 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 2 + - uid: 178 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 2 + - uid: 179 + components: + - type: Transform + pos: 2.5,-11.5 + parent: 2 + - uid: 181 + components: + - type: Transform + pos: 4.5,-11.5 + parent: 2 + - uid: 182 + components: + - type: Transform + pos: 5.5,-11.5 + parent: 2 + - uid: 184 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 2 + - uid: 186 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 2 + - uid: 187 + components: + - type: Transform + pos: -4.5,-11.5 + parent: 2 + - uid: 188 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 2 + - uid: 259 + components: + - type: Transform + pos: 2.5,-17.5 + parent: 2 +- proto: WallReinforcedRust + entities: + - uid: 49 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,3.5 + parent: 2 + - uid: 50 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,2.5 + parent: 2 + - uid: 56 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,7.5 + parent: 2 + - uid: 58 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 2 + - uid: 60 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 2 + - uid: 76 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 2 + - uid: 80 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-6.5 + parent: 2 + - uid: 81 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,-14.5 + parent: 2 + - uid: 84 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-12.5 + parent: 2 + - uid: 89 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-12.5 + parent: 2 + - uid: 96 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-12.5 + parent: 2 + - uid: 98 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-12.5 + parent: 2 + - uid: 99 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-14.5 + parent: 2 + - uid: 104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 2 + - uid: 118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-8.5 + parent: 2 + - uid: 121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-8.5 + parent: 2 + - uid: 122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-10.5 + parent: 2 + - uid: 123 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-10.5 + parent: 2 + - uid: 124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-20.5 + parent: 2 + - uid: 130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-21.5 + parent: 2 + - uid: 131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-21.5 + parent: 2 + - uid: 134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-24.5 + parent: 2 + - uid: 145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-30.5 + parent: 2 + - uid: 149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-30.5 + parent: 2 + - uid: 152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-27.5 + parent: 2 + - uid: 154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-27.5 + parent: 2 + - uid: 157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-28.5 + parent: 2 + - uid: 159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-27.5 + parent: 2 + - uid: 165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-28.5 + parent: 2 + - uid: 167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-24.5 + parent: 2 + - uid: 173 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-24.5 + parent: 2 + - uid: 176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-21.5 + parent: 2 + - uid: 183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-22.5 + parent: 2 + - uid: 185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-17.5 + parent: 2 + - uid: 279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-16.5 + parent: 2 + - uid: 494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-16.5 + parent: 2 + - uid: 507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-19.5 + parent: 2 + - uid: 515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-21.5 + parent: 2 + - uid: 647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-16.5 + parent: 2 + - uid: 648 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-16.5 + parent: 2 + - uid: 650 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-11.5 + parent: 2 +- proto: WardrobePrisonFilled + entities: + - uid: 222 + components: + - type: Transform + pos: 7.5,-22.5 + parent: 2 + - uid: 230 + components: + - type: Transform + pos: -6.5,-22.5 + parent: 2 + - uid: 246 + components: + - type: Transform + pos: 7.5,-26.5 + parent: 2 +- proto: WeaponCapacitorRecharger + entities: + - uid: 267 + components: + - type: Transform + pos: -0.5,3.5 + parent: 2 +- proto: WeaponDisabler + entities: + - uid: 474 + components: + - type: Transform + pos: -2.5065405,-20.501991 + parent: 2 +- proto: WeaponLaserGun + entities: + - uid: 408 + components: + - type: Transform + parent: 106 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WeaponShotgunKammerer + entities: + - uid: 269 + components: + - type: Transform + parent: 105 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WeaponTurretHostile + entities: + - uid: 450 + components: + - type: Transform + pos: 3.5,-20.5 + parent: 2 +- proto: WeaponTurretSyndicateBroken + entities: + - uid: 401 + components: + - type: Transform + pos: -7.5,-16.5 + parent: 2 + - uid: 437 + components: + - type: Transform + pos: -5.5,-9.5 + parent: 2 + - uid: 444 + components: + - type: Transform + pos: 6.5,-9.5 + parent: 2 + - uid: 449 + components: + - type: Transform + pos: 8.5,-16.5 + parent: 2 + - uid: 492 + components: + - type: Transform + pos: 6.5,-28.5 + parent: 2 +- proto: WindoorSecure + entities: + - uid: 240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-26.5 + parent: 2 + - uid: 241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-22.5 + parent: 2 + - uid: 242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-22.5 + parent: 2 + - uid: 277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-17.5 + parent: 2 +- proto: WindoorSecureSecurityLocked + entities: + - uid: 236 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-22.5 + parent: 2 + - uid: 238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-26.5 + parent: 2 + - uid: 276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-17.5 + parent: 2 +- proto: WindowDirectional + entities: + - uid: 502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-8.5 + parent: 2 + - uid: 503 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-10.5 + parent: 2 +- proto: Wirecutter + entities: + - uid: 657 + components: + - type: Transform + pos: -4.360674,-13.823505 + parent: 2 +... diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index 1d93bee2ef9..5ef840beac4 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -68,6 +68,7 @@ #- /Maps/Ruins/empty_flagship.yml # TODO - /Maps/_DV/Ruins/old_ai_sat.yml # DeltaV - Move to DV folder - /Maps/_DV/Ruins/relaystation.yml # DeltaV - upstream removed + #- /Maps/Ruins/ruined_prison_ship.yml # TODO #- /Maps/Ruins/syndicate_dropship.yml # TODO - /Maps/_DV/Ruins/whiteship_ancient.yml # DeltaV - Move to DV folder - /Maps/_DV/Ruins/whiteship_bluespacejumper.yml # DeltaV - Move to DV folder From 82bb2fb9ce9dab7c28c04308d75ba4f5cee84d6b Mon Sep 17 00:00:00 2001 From: TytosB <54259736+TytosB@users.noreply.github.com> Date: Wed, 29 Jan 2025 00:26:56 -0600 Subject: [PATCH 007/197] Buff savlage vault-medium-1's loot (#34732) * aaa * little tweaks * changed to grid and added to protos * ccc * we dont talk about it * ddd * aaa --------- Co-authored-by: TytosB --- Resources/Maps/Salvage/medium-vault-1.yml | 136 +++++++++++++--------- 1 file changed, 81 insertions(+), 55 deletions(-) diff --git a/Resources/Maps/Salvage/medium-vault-1.yml b/Resources/Maps/Salvage/medium-vault-1.yml index 28e028b7845..7a187cb334c 100644 --- a/Resources/Maps/Salvage/medium-vault-1.yml +++ b/Resources/Maps/Salvage/medium-vault-1.yml @@ -239,7 +239,7 @@ entities: - 0 - 0 - volume: 2500 - temperature: 202.38435 + temperature: 139.98299 moles: - 0 - 0 @@ -306,12 +306,12 @@ entities: - type: Transform pos: 3.5,1.5 parent: 222 -- proto: BoxShotgunFlare +- proto: BlueprintSeismicCharge entities: - - uid: 25 + - uid: 217 components: - type: Transform - pos: 0.5821538,-2.3847435 + pos: 0.5,-4.518282 parent: 222 - proto: CableApcExtension entities: @@ -650,54 +650,48 @@ entities: - type: Transform pos: -1.6170431,-2.424334 parent: 222 -- proto: ClothingBackpackMerc +- proto: ClothingBeltUtility entities: - - uid: 20 + - uid: 196 components: - type: Transform - pos: 0.5821538,-4.4794393 + pos: -6.516491,-5.5462 parent: 222 -- proto: ClothingBeltUtility +- proto: ClothingNeckChameleon entities: - - uid: 196 + - uid: 25 components: - type: Transform - pos: -6.516491,-5.5462 + pos: -1.5,-3.5 parent: 222 -- proto: ClothingShoesBootsCombatFilled +- proto: ClothingNeckScarfStripedSyndieGreen entities: - - uid: 220 + - uid: 203 components: - type: Transform - parent: 149 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 221 + pos: -1.5,-3.5 + parent: 222 +- proto: ClothingNeckScarfStripedSyndieRed + entities: + - uid: 204 components: - type: Transform - parent: 149 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingUniformJumpskirtOperative + pos: -1.5,-3.5 + parent: 222 +- proto: ClothingUniformJumpskirtSyndieFormalDress entities: - - uid: 217 + - uid: 205 components: - type: Transform - parent: 149 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingUniformJumpsuitOperative + pos: -1.5,-3.5 + parent: 222 +- proto: ClothingUniformJumpsuitSyndieFormal entities: - - uid: 216 + - uid: 17 components: - type: Transform - parent: 149 - - type: Physics - canCollide: False - - type: InsideEntityStorage + pos: -1.5,-3.5 + parent: 222 - proto: ComputerBroken entities: - uid: 48 @@ -787,11 +781,34 @@ entities: - type: Transform pos: -1.5,-3.5 parent: 222 + - type: Lock + locked: False + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + radius: 0.01 + vertices: + - -0.25,-0.48 + - 0.25,-0.48 + - 0.25,0.48 + - -0.25,0.48 + mask: + - Impassable + - TableLayer + - LowImpassable + layer: + - BulletImpassable + - Opaque + density: 75 + hard: True + restitution: 0 + friction: 0.4 - type: EntityStorage air: volume: 200 immutable: False - temperature: 102.54218 + temperature: 127.50272 moles: - 0 - 0 @@ -805,20 +822,10 @@ entities: - 0 - 0 - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 216 - - 217 - - 220 - - 221 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True - proto: MachineFrameDestroyed entities: - uid: 197 @@ -826,6 +833,18 @@ entities: - type: Transform pos: -3.5,-6.5 parent: 222 +- proto: MaterialDiamond1 + entities: + - uid: 210 + components: + - type: Transform + pos: -1.390625,-4.737032 + parent: 222 + - uid: 216 + components: + - type: Transform + pos: -1.75,-4.455782 + parent: 222 - proto: PartRodMetal1 entities: - uid: 198 @@ -961,6 +980,13 @@ entities: - type: Transform pos: -6.5,4.5 parent: 222 +- proto: ResearchDisk10000 + entities: + - uid: 207 + components: + - type: Transform + pos: -1.515625,-4.643282 + parent: 222 - proto: SalvageCanisterSpawner entities: - uid: 209 @@ -968,6 +994,13 @@ entities: - type: Transform pos: 4.5,0.5 parent: 222 +- proto: SalvageLootSpawner + entities: + - uid: 20 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 222 - proto: SalvageMaterialCrateSpawner entities: - uid: 180 @@ -1421,13 +1454,6 @@ entities: - type: Transform pos: -1.5,-5.5 parent: 222 -- proto: WeaponShotgunImprovisedLoaded - entities: - - uid: 17 - components: - - type: Transform - pos: -1.5115962,-4.5263143 - parent: 222 - proto: WeaponTurretHostile entities: - uid: 202 From ef32756dee0b518a5e7760e42c0c65565c91b711 Mon Sep 17 00:00:00 2001 From: Emisse <99158783+Emisse@users.noreply.github.com> Date: Wed, 29 Jan 2025 01:41:45 -0700 Subject: [PATCH 008/197] drozd visual update (#34574) * drozd visual update * fix wielded sprotes * update sprotes --- .../Weapons/Guns/SMGs/drozd.rsi/base.png | Bin 377 -> 530 bytes .../Weapons/Guns/SMGs/drozd.rsi/bolt-open.png | Bin 378 -> 531 bytes .../Guns/SMGs/drozd.rsi/equipped-BACKPACK.png | Bin 803 -> 768 bytes .../SMGs/drozd.rsi/equipped-SUITSTORAGE.png | Bin 803 -> 768 bytes .../Weapons/Guns/SMGs/drozd.rsi/icon.png | Bin 404 -> 575 bytes .../Weapons/Guns/SMGs/drozd.rsi/inhand-left.png | Bin 830 -> 817 bytes .../Guns/SMGs/drozd.rsi/inhand-right.png | Bin 713 -> 850 bytes .../Weapons/Guns/SMGs/drozd.rsi/mag-0.png | Bin 167 -> 157 bytes .../Weapons/Guns/SMGs/drozd.rsi/meta.json | 2 +- .../Guns/SMGs/drozd.rsi/wielded-inhand-left.png | Bin 719 -> 583 bytes .../SMGs/drozd.rsi/wielded-inhand-right.png | Bin 709 -> 584 bytes 11 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/base.png index 133fc41a804a78f8525c043eca796308ba969f5a..c0555d9ed3e1e81f0a6d360da73eb8bf9dcf86f4 100644 GIT binary patch delta 515 zcmV+e0{s2?0+Ixf8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00GQNL_t(oh3%CwYui8= zh97|!V~coFB`gpzWXM#cHLE92T|0K|)V05$za;b@c*^S05}9HmFc@T{-cSr@xXGwP zd}<}xuA&TC^ej4w@B7|Y_o5SYbaZsQGe(;x#~J5(?fV~zqJPK#Uek1YQtQ#Ye!r1%rBtzA zuh%8Ry*tRidL97x*Vh0jr+h(;|F`Lbb9huMP zhM^5SDaG7%0e_HEvfuA(gNDN)rfD`7)(9c6EDIq->3NbQMi1cWpDh9~O|!9(loEg+ zrpb3HiGRl2e7-5>R7sMg9D!bJg+N|i0p-k^^6l8;esWQ$+8ik*hr^-PSNjT-QcNb3 zQUp4ZG)+tHzd$~=EVe@M45%O=3_}CJahzP&JC2i|ihQ&%u&rbh$8oK&Dh@F9JRUY1 zo{#ro7#cwky21)XoF+j_IK{fkD%Q>wLz~9r8HyY^Z=;(NN{s6uP+Y?!ssICA2002ovPDHLk FV1hdV@{|Ao delta 361 zcmbQl@{?(TWIZzj1B1(wu46!ou{g-xiSg!1oq8aLv%n*=n1O*?7=#%aX3dcR3fctt zgt!7}cXxMfZEZCKxrr>Cb&N=oYL>WYht>uRY-2YHE!iCJ1&%FD~g#l_8<(4?fK zq^ztgB_$;yBJ!kCYadX*NJ)@iFvEW!s0R^9VAsRsl|TjCJY5_^D(1YM7$|f|fyc#D z!O$^l_1^!nu?v#Y*Hksy)iLePIV5oCr23KFzZ}y0IwxIG72z-Oa@n|E;;FGyp^e$Z zlGS<+ogST?H*A>A*<$xkdzm&RD0|+G&peyBx&JU7E}DNNs!702I*Id?)}*Q?36+5L z9i}Z4F6>rVXtQJC9%jzuwoOI8>)A6BGJ1l(e(hpqyPEsHc$ si1vf8|FFj!82n#*II*5bJ-(7Dh==vjLzcizKrb+Oy85}Sb4q9e04INr^Z)<= diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/bolt-open.png index f534d46c0bf4c40c9a8d0e3e42d73c0bf345b526..5a96a55749359f4716f2c3facce409882edd6159 100644 GIT binary patch delta 516 zcmV+f0{i{?0+R%g8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00GTOL_t(oh3%C;Yui8= zhaZ6#V~coFbyy%`$Ph3TY0cWnQ`e4NJ9X_RDENDXegjWgJzAzyOaumljNBWF;S4t! zWr$C$B->ToA&Z_xcjEo?yZ47q(9qD(@Wxn|Bni>a%sL3(Gk>4|{O2=G*GGH3T7YRT z#5>aTSIwN4*kdAEmo_(?I$1gA6c)f8WB|W!ZvohDw*)~@37*YnbUK}U-)^^S3D;WZ z>*aD;5ZtIx`&R+q1b9PgutMpx=6rP%NHmAuMVptWW& z7!)ipmZWJ~Q2!aSzT>c#k|#iiAyE`r078h�w#^V||w90@fvO;yA7ZmYV~7@O>Uu zE1nMfD2l8w3^OC*Ty8;tL2F&{=oI(9pFONr^c@Ed6YxAQlTzY&URJkGYx;5*oV_g0 zH8^ujt93xGejC;us+p`oGS&3Oiv6W5Q@0s`y+0000CKxrr>Cb&N=oYL>WYht>uRY-2YHE!iCJ1&%FD~g#l_8<(4?fK zq^ztgB_$;yBJ!kCYadX*NJ)@iFvEW!s0R^9VAsRsl|TjCJzX3_D(1YM7%0@Nz~kbn zkmno`^HXlK0A z%c#2zvt|kjZ>(g?I~sno&1$0Rn$}0kw<8S zZW6bXM@I03fVe#i_AqkRwi^}uuIHCXkmw2e`dL(%XVvSw$8#K;+IWL!R`cF{dwch} s8M_a@{>Q$5LGr)o_QU@q^!zHBm-MhPmxVnm1Nwo%)78&qol`;+07oQ?y8r+H diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-BACKPACK.png index 38a2686dfb50b62c10ae57800ccb6c4556cc59a3..c3ed4ab317148bd9d82d38c7ebf08095fd936d4e 100644 GIT binary patch delta 732 zcmV<20wevS27m^TFn6BkRczS z+}5cS4<+BDV<{a9T{?9s9XtdISvzDb9ZIO^662`^Mff;{K(dI?z|$e92xD8P*p}1w z`OVTjFS@uDezS>38ygrT z34T7fME~%7d3(UBice*W2Y?TN6={t@k|5IhMz7&QMSrC0z3k%0r#&!vw{P2^qPdm+ z6mP=!eFA0||IbUCz!+nUF~%5Uj4{U8WPR5)`hsNiRoHZ}+oJEfG)NMoYmFK(ND}O# zyc3{#^tyFQKa-mO#Y0Ds+ zNLj{9+2vSPHw(XgTlx5aA<?W$5l{D87Hy~vtlZx5XUhFN%AM>JcWOd z$Zm$KI4YkNGtKQ|wQ4+`aRVl;r$E74#eV{MF-_J!V~jDz7-Nk6*M0*4Sab`YAu<>M O0000pH zxJg7oRCr$Pn!Sq?K^Vp-Y9VOA;v^pCOz;DX2(glYK_Li12^Lx$#L7ZaTI(O6wY7zn zfom*|AOs|EM~Yx=I*Xha(cqPuP9o1RueTm|@!i?%UUED?7=JReNp|LW=WCf~4IzXO zLI^nmRIAmA%c?o%J|mOQtxS+yF&6f#qfjVJkRU#v&%3L7W)^^R%jaD#ek2GG-tYHQ z*=*K8{9rJ!*X)m!%p?GpUu?zN^TJ?jJ9Y8W6@w(=A3eBddmiF_h#Y`=z5Z7`8tAgI z(dl$jqtVD@GJhEZ@wac4%+DX&_PgP5Xb==zP!cHsLGis_FLv=jdVcxLNdxg4n?1Ah z>$jJ9;2nUV_|MOCiHHw!`s_+%@xbd(!8xC__(r2)>&BeN-0ya~b~=p5W3N#ddIXe8 zrODFzszEx8o(CcxbN}g+Rd;oFcL+nM0HA{J-@Y28q<`jo5cGbnR#tW#*K7IgqHq%g0_<+8i7OQlk= z6`yEyZ8-@L@Q>GC+Ps*wVwi@p%2feCWZ}c_hj{e-g%6JtbBo2H2F+&kpE}V_v{$=p zsR9814besK2e%h_N#e_$H}=&PdogBYr3ZThF3vGVs@5}9Pl1E>Rm{O8-xI(}52m@n xVw}#LFheUYrtLKI&^|&4A%qY@2w4D(`2&96BkRczS z+}5cS4<+BDV<{a9T{?9s9XtdISvzDb9ZIO^662`^Mff;{K(dI?z|$e92xD8P*p}1w z`OVTjFS@uDezS>38ygrT z34T7fME~%7d3(UBice*W2Y?TN6={t@k|5IhMz7&QMSrC0z3k%0r#&!vw{P2^qPdm+ z6mP=!eFA0||IbUCz!+nUF~%5Uj4{U8WPR5)`hsNiRoHZ}+oJEfG)NMoYmFK(ND}O# zyc3{#^tyFQKa-mO#Y0Ds+ zNLj{9+2vSPHw(XgTlx5aA<?W$5l{D87Hy~vtlZx5XUhFN%AM>JcWOd z$Zm$KI4YkNGtKQ|wQ4+`aRVl;r$E74#eV{MF-_J!V~jDz7-Nk6*M0*4Sab`YAu<>M O0000pH zxJg7oRCr$Pn!Sq?K^Vp-Y9VOA;v^pCOz;DX2(glYK_Li12^Lx$#L7ZaTI(O6wY7zn zfom*|AOs|EM~Yx=I*Xha(cqPuP9o1RueTm|@!i?%UUED?7=JReNp|LW=WCf~4IzXO zLI^nmRIAmA%c?o%J|mOQtxS+yF&6f#qfjVJkRU#v&%3L7W)^^R%jaD#ek2GG-tYHQ z*=*K8{9rJ!*X)m!%p?GpUu?zN^TJ?jJ9Y8W6@w(=A3eBddmiF_h#Y`=z5Z7`8tAgI z(dl$jqtVD@GJhEZ@wac4%+DX&_PgP5Xb==zP!cHsLGis_FLv=jdVcxLNdxg4n?1Ah z>$jJ9;2nUV_|MOCiHHw!`s_+%@xbd(!8xC__(r2)>&BeN-0ya~b~=p5W3N#ddIXe8 zrODFzszEx8o(CcxbN}g+Rd;oFcL+nM0HA{J-@Y28q<`jo5cGbnR#tW#*K7IgqHq%g0_<+8i7OQlk= z6`yEyZ8-@L@Q>GC+Ps*wVwi@p%2feCWZ}c_hj{e-g%6JtbBo2H2F+&kpE}V_v{$=p zsR9814besK2e%h_N#e_$H}=&PdogBYr3ZThF3vGVs@5}9Pl1E>Rm{O8-xI(}52m@n xVw}#LFheUYrtLKI&^|&4A%qY@2w4D(`2&9 zr0as*0nWnMCWfVppT&2ld%yR+`{aX?l9H1DjCPL5vYL?^cYiu>aou0fetmzL>2-1d zWo}uo@cpNPn(f}K5S4Sy6?rE+)a0Q7^dJKGb8`d0YPF)%>7+J~Mk6jRF5-E$S}hb@ zN*Rym^LZk0r3cX`#{uB>>IwkYbqRuie!rh6;CRtO<534iX|N!}Crlvkia}1N#NE*DrHLndWDb`xHmN|K^Im zgVqz`q$*p>BQtrs-A)vrPN!#|u%x7<CKxrr>Cb&N=oYL>WYht>uRY-2YHE!iCJ1&%FD~g#l_8<(4?fK zq^ztgB_$;yB4TK0n30hY8XDT$+xu<7`Kt^-t0YQ-{DK+&V+SwqxR?PgJm~4-7*a9k z?ZjxYLkc`Do(hHuTd#)Q{qH9$cWs_s*@e^m28VfM=2+i!+B4(*i!*is6Kq=k^!YWO zxc+c&jUq)WxTWDPx%>q$gGRCt{2n!k%0K@`Wo69U(y3J5N; zTc!|}a9XBti-Uu;7vxxk`w!9x5=cnk5G?!y(j2lJ{snGjq5ptKnky``h~h$et4Sea z)*q`AoxQol_bEl^z4!Iao7sI2AP9mW2!bF8f*{Thrh37_V1J-`$rb%dg-_;l)CL17 zza7Up_?=g$I<-lw)#9yIi>qGO^E}?UxWE`d$8nUcuUvrHYzAN{gy(tO^Sq;+tyXV# z{_dw~Vtj&snFG(Tz{#Ne6!-w}cL4gP2>{4sGRS7L0D#BGADB)ji8c)*$1gA616bCQD2m|wKI=FR z9|Nn@7r`Goab!eNEAsqkYtJ48{q=kOAw3Q3Sb( z>fmKb-2kwj38T>{(Pp7g;3|XHz6Fj&)ooHnfY(YaDI(2lbP}o7fPVoJK(_{7B82}TkHQ#3tf2zL{Ws%_YvIB zE?n2;^?IG{8+bT|cpJUf>us$oTIez;PtRQ)VSmvUS5feig10P-$NP!0^8?DafN&z- z5f(lFQ`sD#C>D#{vMde&wZ&p>cuH36RPF)0L`Z6j%Od_!5q!Lj4lJww{Sg_R+C^wn zgnfe%vTRO|2s@0iqk;!gz6tui&%!Wd?RNX*;L{qQNc}3T>ZTV20ekN05rQBHg80w* Z4HS6wcxTOF=MVq@002ovPDHLkV1kg2b20z` delta 808 zcmV+@1K0eq2EGQ6BYy)0NklB1@n<+jiv(m@F&3OOTQG>YsnUanV~^&2TWjx%%T-TSWXmEUwW zn@!Q?cCXFk;qC&s16rxaM-vpmrTy_qhupSvj49Glq_^9aq z`dt-AI8SC7$9UTH=dYoUF*%`pkt=sVi1_axZh(;ZaepAr^^1M09$}p4cg8WEdGS*q z##J77lxkK5h7-sxkFRs2QpZ)TbCdIpI=}*g^uNe6Hg%lgD*9V-fFjVQFmA;GO$D#O zbpaGA=8WME$T@q8*xdmN6?4XL2jrYRMeObXg^D?2xC3&|o+5U4fI`KbG28(;XHOBk zJ3ygg&VLwp(g9Vk-pdkoCj~fHe>fFEUKuj=Q(l9g2BZ9*T0)mQz&0`Pj-Nt@l2j@d z)unR5Scz)j2IaZoA8h|9+u7tg6vLYE6bAa%>)aqua}5GTWIz?e>_rIliSODUnt z1;Bo^x@GYc;*2r!l+M|JVeQNH)$wvel*M9EDu0ZPw_Yv)nX$6=u`GTlj4E18o;?FN zjm=YrZTkuMPSH1|@GBR9#Z82ivN+@Gw0Hvr^J2%nc=;+R>+yPx7DvfgN?AM(=-jdG zAz-@K`Z;L9H1m_ mSRpQeDbd#69njXy8}C1(ABY{O@%$nH0000Px&3`s;mRCt{2n!k$bKorKmSuSjUVHZW> z0|>I{3z))6dqEbl_7TD@)VPmhWI)*8_Q|%zv}4WvJ^c^Zt(V*B9{{ zYxm=a%*}hf9{c|4d-FIL>N;Bin7zJY*k~}*G^OqI6rj;)FaXHs^8kSDc6+a#C-@8m z6$vW6>atzQ3Rg+FArOEo z#=}18&I3TV+ka*4&QFL$==FN+k_Zj~yqs?y4k%L^it+cN>pGUpC4T?<3&Su-nNrMZ zHHWj8M0l~^hz|ywGr!*LunN(Md!dvP!!QVN%m?e;4!|*w@!ZAza<62LBv>eX0B|}_ zDJ6ptjlUOnBJEg~BjIsBQmGUQg%4~tYsdIg1XL=OvwxYVlqPc7lZ7vb`~Cj3ig7a zB0y5#e}6zlfD%9n5VrwwqXdZCfVhz=g_FFD-HY^IU{n&`1fu+kek)CX)%t=kqX4^Wq@{KP<~S`=rwu zHXe_NsAm}@QUci9&j4Vb@m8zldkEoLF16}|MoIvC9Wc~&);t^l9EE7N+W`DeVqA-; zRe#OlCt0qp1P1`IFNyZnv)3VnYY~Ng7|sJXmcj#o5JH6gcRq9XFr7|G6wU(y>;+^F zAvN4Wzuza6QWB=~KtP)zw+PeeG!Ua7c@LscC=?1s0{92!FPPjsKg|IE000081=RM;~zR8?lcYdYqUUkc|H@n~8`@VCt?oaFI zAubLq=xD)KmbSwWr>$Mn815=%V_q?_{)XYJ1?#WB-gz?R(Xq#cnjF=PUw;49l|IPn z!|tm)`|L6A+2^0F>&>OZoG~Ga=ViikXk>l&4onM45N9~-({!pJG z?cd?w<(*yRWxY<^}fr ztNKy@(jYhK<3x5v#s;^LWf!mKm)o_?d>#{gI%(qzpXHbPUK+2hIN0vE;q}A1>m8H7 znY1cB{r8*S|LXtDhy2F3(%yYMnY}%3z3c`j?cI_I&m=z{zh57fFE{y)5RX#bhoiYo z=LH;^+H8F))?Tn!bK}|LpnWUuq;3Aa<^TG9-+o@L6cngu6coUU8oO97&7Z8@mhJO7 zHcr8R;!~baueN->6)5=d38#nFo{)|2e|?#M?v0GkW$)VX?RAkq3}&BQ^jwGQF4IGf zmLoe&ccdvD&Nl4p^ls}?NuRN*U+{L42-5+l&NYWho=7PrJ9C_!e0OU|ZT+;q=J~t# z{n;_Q%g5V|L(ouBpnJ!cqw{prYMR3`*dkKDrA+aGy(R`Kt&_SzUcO?ZT5DJ)iKzMbRv!1?q Rd@=(Nc)I$ztaD0e0svjjK^g!6 diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/drozd.rsi/mag-0.png index 1a06d11129dd1162f14d3587a6f561e138a78b33..8242a6d00ab3e57d4ce6bcebb16005ff2866e151 100644 GIT binary patch delta 141 zcmZ3^IG1sPL_G%^0|P^GRn-?D#aJBV?!>U}oXkrgC*0G;F(jfjIYEMTae_!sQ=kEt z+d&Np)@D%;FRy?0yOcic-?i&kJvVpv|1F!^JHyz5k23aX$uPfe_+MUk;SOWZ4wWlc quLeH)`|Rv&i>rNL{fw#%3?)bSv>4y#x&p0W@N{MKb6Mw<&;$VLOEmBR delta 151 zcmbQsxSVl1;+%CBYyw^b5ch_0Itp)=>Px%0ZBwbRCt{2+P!YuFcbygW28Wk!J8pK zFlEo33TxHWm2Z$SYo4G(pUZF1Oqm221>#AS4H<+t51O3Y!I3KeNHS?9t&8(5GAxoJ zF9d4f0f>l*h=_=Y&L$%8{h?^BMJXj(Yw`V|{Ox&tn7YMYTYnKgxpY!W2>@uVPcAmg zmgVmVkRL$L_8Ac%zk*=zzcfv)$7y3#fa-$dIL2zVYVGql9s@~YRfGtT$MG27USDmd z=ftW2Ns`pw+iW%ffcbpBx6q$??lP}kzuQ}C zR4o>ZvM9dqAAju$OUEKDjRArHd7fi58UX;->$U4NKhAg0D~s^-d@o@bI(-!)Kn8<> z06-Xq^7MRv9bcCRKq5eZ-5YW0t+3VAI7CE5L_|bHL_|bH^gfF0K=t}BjrVSLhZx;v z2b#vav=A4c4IY|ICU4g-M-z+V*lEn0n_g`e0oczY1b;zLwi~4>0HEn;zViaKWd@3c zOsCV%IU002ovPDHLkV1oHg1aklY delta 696 zcmV;p0!RJF1kVMKBYy&xNkl$>{!@iF&;xURc(B^8PDnh#|K!-N^gOBy`K8~ z_VzXvv(;*80Do9476*^T7}M2iH91}`m*AYk_x+<^0fn}}x`&4coSdBO{ho7<`Fx%` z?#s&y+U+*NFa!VuK~Q*(Sqg7~^g5ArPNlt*=&Y5jth-3o6WFXF41T-aDIMX zbgG$3-2;5zx1^Mox$8?QEzWte--Qsm(P$uwqFk457=MPAS+ppMtWKwcZns-zs(%jW zT$@D@LTJzPO8+kqLTK}dC4>+{2qAgp1k>#!_*N>r&Cj#0LGXO!*J(#M_+)ar>Eq7^y4Rh zbPd7t^Yg*6OxyMTCZ-u{b0Ih5hhd0nwVI^aHywQevQBWlp6C!J1+SFSSv3gjHtPr& zV}jUJJWt!Ut!>+We=$#rw_?)rqtQrTTwMHLC%##jLG=WL e5JCtculNNVnK^8`ZqK0r0000Px%0!c(cRCt{2+A(hGKokYgi;~6#9f~w! z3>B@v;+7rE4pOGg8nT&ef*p`5qOgQg8xtA1rEq1v6p0<%@fdIj-;wTVEXJe9%z)jz z3lI?z5fKp)wNh#<#u(9Bi!nx&8jFbh?`2(vQsc&*+Q$Eifq(7B9FS${zA>h8qd^b= z0Jht$wbmuMu3K5>B#N+X+2?iB;2e;L=@iQ_EXH=bo%KsS&x7ZA0sxD}q8A5|dzemv zFcjM%G#&r|yrya8^J=vk%w{tIfZ=dhxfhlWs&DH1sIwkGlk~G#S}VFWr)dhu zagLsEJ%G0)`F}Q+Wf|f)E;g&R?%fM;GMNAXHk%C`$7$ThQGDN*=a;);gO4{iz1wV) z=a)P2eO~}zG#beq=(cX9lqjVH_;@MacP(^b<#iJg5fKp)5fKp)5z+bOxq;F)s`uRQf$qTrA|fIp>W6n9ncG9ez}O1_0000o^X8Y&`;&Wq+~lb_-dSMO_dCNDIJ+q{=W1p=sJ#z2i9IleH_)ZMR!dR#g>25L|4Z z7=S2>uv)Fo>V4nGa=Daz-xqaRy7~an>2zS4CieS%;v7yT24J__Nv3Ivl^=Lo1o=Ye zx~}B9u9UUO13d^jB5 zJfK#q1psU`8sWH4elFK_Z|?Jw)Bx~30-om~3_~;;4FJGmu@G&F#iA(ly#tD(U^<-w zcuuEJCV!I`Q&hYy|F5DbqR&R75j)o-r4FoIE{m%lh9MM10dSrTzVvL~vVVZ@H8Kq2 zV!LaCd5hFLAP54K%Vl_;hr{6z%ex=rlRV}7{!QCvc#wSG7kiKXhSUIfo+m|7!~noF zO*ETL3`JQ)7XC*2to)Ugphy9Z_=eh U-qnw9TmS$707*qoM6N<$g73RUwEzGB From 5334d654fed77021ecfc8e8864be9c00c31adbe7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 29 Jan 2025 08:42:53 +0000 Subject: [PATCH 009/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 10cdd5a2c01..cef00697c86 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Extradimensional orange, holymelon, meatwheat and world peas plant mutations - have been added. Obtain them by mutating oranges, watermelons, wheat and laughin' - peas respectively. - type: Add - id: 7364 - time: '2024-09-13T14:02:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27624 - author: ShadowCommander changes: - message: Fixed PDA sometimes showing uplink and music buttons when the PDA was @@ -3885,3 +3876,10 @@ id: 7863 time: '2025-01-28T18:55:08.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34693 +- author: Emisse + changes: + - message: Drozd sprites have been updated. + type: Tweak + id: 7864 + time: '2025-01-29T08:41:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34574 From 5d8b9304fdb31b416334389880593c66e5aa0c5d Mon Sep 17 00:00:00 2001 From: Southbridge <7013162+southbridge-fur@users.noreply.github.com> Date: Wed, 29 Jan 2025 04:04:45 -0500 Subject: [PATCH 010/197] Nuke Timer MinimumTime (#34734) * Implemented the thing * Made requested changes --- Content.Server/Nuke/NukeComponent.cs | 7 +++++++ Content.Server/Nuke/NukeSystem.cs | 3 +++ 2 files changed, 10 insertions(+) diff --git a/Content.Server/Nuke/NukeComponent.cs b/Content.Server/Nuke/NukeComponent.cs index 141e99055cf..e1a117f4bdb 100644 --- a/Content.Server/Nuke/NukeComponent.cs +++ b/Content.Server/Nuke/NukeComponent.cs @@ -25,6 +25,13 @@ public sealed partial class NukeComponent : SharedNukeComponent [ViewVariables(VVAccess.ReadWrite)] public int Timer = 300; + /// + /// If the nuke is disarmed, this sets the minimum amount of time the timer can have. + /// The remaining time will reset to this value if it is below it. + /// + [DataField] + public int MinimumTime = 180; + /// /// How long until the bomb can arm again after deactivation. /// Used to prevent announcements spam. diff --git a/Content.Server/Nuke/NukeSystem.cs b/Content.Server/Nuke/NukeSystem.cs index 0a622875058..84118931b10 100644 --- a/Content.Server/Nuke/NukeSystem.cs +++ b/Content.Server/Nuke/NukeSystem.cs @@ -522,6 +522,9 @@ public void DisarmBomb(EntityUid uid, NukeComponent? component = null) _sound.PlayGlobalOnStation(uid, _audio.GetSound(component.DisarmSound)); _sound.StopStationEventMusic(uid, StationEventMusicType.Nuke); + // reset nuke remaining time to either itself or the minimum time, whichever is higher + component.RemainingTime = Math.Max(component.RemainingTime, component.MinimumTime); + // disable sound and reset it component.PlayedAlertSound = false; component.AlertAudioStream = _audio.Stop(component.AlertAudioStream); From 7cef4679429b02506658cc4aa68287a053ae3783 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 29 Jan 2025 09:05:54 +0000 Subject: [PATCH 011/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index cef00697c86..959242a5536 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ShadowCommander - changes: - - message: Fixed PDA sometimes showing uplink and music buttons when the PDA was - not able to use them. - type: Fix - id: 7365 - time: '2024-09-13T14:19:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28373 - author: Dezzzix changes: - message: Now you can wear a hood in void cloak @@ -3883,3 +3875,11 @@ id: 7864 time: '2025-01-29T08:41:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34574 +- author: Southbridge + changes: + - message: The Nuke will now reset to a minimum countdown value when disarmed if + the countdown is below the minimum value. + type: Tweak + id: 7865 + time: '2025-01-29T09:04:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34734 From cdad067aec299e84d6b1834d358e2592d77377a1 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Wed, 29 Jan 2025 05:11:08 -0500 Subject: [PATCH 012/197] Fix thrust animation rotation (#34713) * Fix thrust animation rotation * directly update sprite instead --- Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs index 540d76c129b..9e20d2d5a9c 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs @@ -138,6 +138,7 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang const float length = 0.15f; var startOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f)); var endOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance)); + sprite.Rotation += spriteRotation; return new Animation() { From e2d80e35f37aadf4f34e3e530fc10d3d5f6a5d51 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 29 Jan 2025 10:12:14 +0000 Subject: [PATCH 013/197] 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 959242a5536..5545a709665 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Dezzzix - changes: - - message: Now you can wear a hood in void cloak - type: Add - id: 7366 - time: '2024-09-13T15:02:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31061 - author: PJB3005 changes: - message: Fixed some powered machines working when unpowered if the panel is open. @@ -3883,3 +3876,10 @@ id: 7865 time: '2025-01-29T09:04:48.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34734 +- author: themias + changes: + - message: Fixed precision attack animation for thrust weapons + type: Fix + id: 7866 + time: '2025-01-29T10:11:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34713 From 039afb13a5d1b6cee902c93dea6c95c6efd9090c Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:25:50 +0100 Subject: [PATCH 014/197] Nukie briefing fix (#34737) payloadpayloadpayloadpayloadpayloadpayload --- .../Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl index 06f8aeb565e..dcb061a692e 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl @@ -4,7 +4,7 @@ nukeops-description = Nuclear operatives have targeted the station. Try to keep nukeops-welcome = You are a nuclear operative. Your goal is to blow up {$station}, and ensure that it is nothing but a pile of rubble. Your bosses, the Syndicate, have provided you with the tools you'll need for the task. Operation {$name} is a go ! Death to Nanotrasen! -nukeops-briefing = Your objectives are simple. Deliver the payload and make sure it detonates. Begin mission. +nukeops-briefing = Your objectives are simple. Deliver the payload and get out before the payload detonates. Begin mission. nukeops-opsmajor = [color=crimson]Syndicate major victory![/color] nukeops-opsminor = [color=crimson]Syndicate minor victory![/color] From b5230ae4aeb105ab3dcdb755a2ea518b9d88c90c Mon Sep 17 00:00:00 2001 From: godisdeadLOL <169250097+godisdeadLOL@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:34:01 +0300 Subject: [PATCH 015/197] Sentient medibot now can inject (#32110) medibot player injection Co-authored-by: YourUsername --- .../Specific/MedibotInjectOperator.cs | 29 +----- .../Specific/PickNearbyInjectableOperator.cs | 2 +- .../NPCPerceptionSystem.RecentlyInjected.cs | 2 +- .../NPCRecentlyInjectedComponent.cs | 6 +- Content.Shared/Silicons/Bots/MedibotSystem.cs | 96 +++++++++++++++++++ Resources/Locale/en-US/npc/medibot.ftl | 5 + .../Prototypes/Entities/Mobs/NPCs/silicon.yml | 1 + 7 files changed, 111 insertions(+), 30 deletions(-) rename {Content.Server => Content.Shared}/NPC/Components/NPCRecentlyInjectedComponent.cs (78%) diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs index 2cc735194f6..bac9cfcf40b 100644 --- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs @@ -1,5 +1,5 @@ using Content.Server.Chat.Systems; -using Content.Server.NPC.Components; +using Content.Shared.NPC.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.Emag.Components; @@ -55,34 +55,11 @@ public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTi if (!_entMan.TryGetComponent(owner, out var botComp)) return HTNOperatorStatus.Failed; - - if (!_entMan.TryGetComponent(target, out var damage)) - return HTNOperatorStatus.Failed; - - if (!_solutionContainer.TryGetInjectableSolution(target, out var injectable, out _)) + if (!_medibot.CheckInjectable((owner, botComp), target) || !_medibot.TryInject((owner, botComp), target)) return HTNOperatorStatus.Failed; - if (!_interaction.InRangeUnobstructed(owner, target)) - return HTNOperatorStatus.Failed; - - var total = damage.TotalDamage; - - // always inject healthy patients when emagged - if (total == 0 && !_entMan.HasComponent(owner)) - return HTNOperatorStatus.Failed; - - if (!_entMan.TryGetComponent(target, out var mobState)) - return HTNOperatorStatus.Failed; - - var state = mobState.CurrentState; - if (!_medibot.TryGetTreatment(botComp, mobState.CurrentState, out var treatment) || !treatment.IsValid(total)) - return HTNOperatorStatus.Failed; - - _entMan.EnsureComponent(target); - _solutionContainer.TryAddReagent(injectable.Value, treatment.Reagent, treatment.Quantity, out _); - _popup.PopupEntity(Loc.GetString("hypospray-component-feel-prick-message"), target, target); - _audio.PlayPvs(botComp.InjectSound, target); _chat.TrySendInGameICMessage(owner, Loc.GetString("medibot-finish-inject"), InGameICChatType.Speak, hideChat: true, hideLog: true); + return HTNOperatorStatus.Finished; } } diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/PickNearbyInjectableOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/PickNearbyInjectableOperator.cs index a71091ad97d..f351d582c6e 100644 --- a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/PickNearbyInjectableOperator.cs +++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/PickNearbyInjectableOperator.cs @@ -1,6 +1,6 @@ using System.Threading; using System.Threading.Tasks; -using Content.Server.NPC.Components; +using Content.Shared.NPC.Components; using Content.Server.NPC.Pathfinding; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Damage; diff --git a/Content.Server/NPC/Systems/NPCPerceptionSystem.RecentlyInjected.cs b/Content.Server/NPC/Systems/NPCPerceptionSystem.RecentlyInjected.cs index dd4ff6c65f1..6d8cb9dfe54 100644 --- a/Content.Server/NPC/Systems/NPCPerceptionSystem.RecentlyInjected.cs +++ b/Content.Server/NPC/Systems/NPCPerceptionSystem.RecentlyInjected.cs @@ -1,4 +1,4 @@ -using Content.Server.NPC.Components; +using Content.Shared.NPC.Components; namespace Content.Server.NPC.Systems; diff --git a/Content.Server/NPC/Components/NPCRecentlyInjectedComponent.cs b/Content.Shared/NPC/Components/NPCRecentlyInjectedComponent.cs similarity index 78% rename from Content.Server/NPC/Components/NPCRecentlyInjectedComponent.cs rename to Content.Shared/NPC/Components/NPCRecentlyInjectedComponent.cs index 0bc5dce55b9..b79c4dd9ef0 100644 --- a/Content.Server/NPC/Components/NPCRecentlyInjectedComponent.cs +++ b/Content.Shared/NPC/Components/NPCRecentlyInjectedComponent.cs @@ -1,8 +1,10 @@ -namespace Content.Server.NPC.Components +using Robust.Shared.GameStates; + +namespace Content.Shared.NPC.Components { /// Added when a medibot injects someone /// So they don't get injected again for at least a minute. - [RegisterComponent] + [RegisterComponent, NetworkedComponent] public sealed partial class NPCRecentlyInjectedComponent : Component { [ViewVariables(VVAccess.ReadWrite), DataField("accumulator")] diff --git a/Content.Shared/Silicons/Bots/MedibotSystem.cs b/Content.Shared/Silicons/Bots/MedibotSystem.cs index 3ab73149c08..68f930931c2 100644 --- a/Content.Shared/Silicons/Bots/MedibotSystem.cs +++ b/Content.Shared/Silicons/Bots/MedibotSystem.cs @@ -1,6 +1,15 @@ +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; +using Content.Shared.Interaction; using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.NPC.Components; +using Content.Shared.Popups; using Robust.Shared.Audio.Systems; +using Robust.Shared.Serialization; using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Silicons.Bots; @@ -11,12 +20,18 @@ namespace Content.Shared.Silicons.Bots; public sealed class MedibotSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private SharedInteractionSystem _interaction = default!; + [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private SharedPopupSystem _popup = default!; + [Dependency] private SharedDoAfterSystem _doAfter = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnEmagged); + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnInject); } private void OnEmagged(EntityUid uid, EmaggableMedibotComponent comp, ref GotEmaggedEvent args) @@ -34,6 +49,25 @@ private void OnEmagged(EntityUid uid, EmaggableMedibotComponent comp, ref GotEma args.Handled = true; } + private void OnInteract(Entity medibot, ref UserActivateInWorldEvent args) + { + if (!CheckInjectable(medibot!, args.Target, true)) return; + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, 2f, new MedibotInjectDoAfterEvent(), args.User, args.Target) + { + BlockDuplicate = true, + BreakOnMove = true, + }); + } + + private void OnInject(EntityUid uid, MedibotComponent comp, ref MedibotInjectDoAfterEvent args) + { + if (args.Cancelled) return; + + if (args.Target is { } target) + TryInject(uid, target); + } + /// /// Get a treatment for a given mob state. /// @@ -44,4 +78,66 @@ public bool TryGetTreatment(MedibotComponent comp, MobState state, [NotNullWhen( { return comp.Treatments.TryGetValue(state, out treatment); } + + /// + /// Checks if the target can be injected. + /// + public bool CheckInjectable(Entity medibot, EntityUid target, bool manual = false) + { + if (!Resolve(medibot, ref medibot.Comp, false)) return false; + + if (HasComp(target)) + { + _popup.PopupClient(Loc.GetString("medibot-recently-injected"), medibot, medibot); + return false; + } + + if (!TryComp(target, out var mobState)) return false; + if (!TryComp(target, out var damageable)) return false; + if (!_solutionContainer.TryGetInjectableSolution(target, out _, out _)) return false; + + if (mobState.CurrentState != MobState.Alive && mobState.CurrentState != MobState.Critical) + { + _popup.PopupClient(Loc.GetString("medibot-target-dead"), medibot, medibot); + return false; + } + + var total = damageable.TotalDamage; + if (total == 0 && !HasComp(medibot)) + { + _popup.PopupClient(Loc.GetString("medibot-target-healthy"), medibot, medibot); + return false; + } + + if (!TryGetTreatment(medibot.Comp, mobState.CurrentState, out var treatment) || !treatment.IsValid(total) && !manual) return false; + + return true; + } + + /// + /// Tries to inject the target. + /// + public bool TryInject(Entity medibot, EntityUid target) + { + if (!Resolve(medibot, ref medibot.Comp, false)) return false; + + if (!_interaction.InRangeUnobstructed(medibot.Owner, target)) return false; + + if (!TryComp(target, out var mobState)) return false; + if (!TryGetTreatment(medibot.Comp, mobState.CurrentState, out var treatment)) return false; + if (!_solutionContainer.TryGetInjectableSolution(target, out var injectable, out _)) return false; + + EnsureComp(target); + _solutionContainer.TryAddReagent(injectable.Value, treatment.Reagent, treatment.Quantity, out _); + + _popup.PopupEntity(Loc.GetString("hypospray-component-feel-prick-message"), target, target); + _popup.PopupClient(Loc.GetString("medibot-target-injected"), medibot, medibot); + + _audio.PlayPredicted(medibot.Comp.InjectSound, medibot, medibot); + + return true; + } } + +[Serializable, NetSerializable] +public sealed partial class MedibotInjectDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Resources/Locale/en-US/npc/medibot.ftl b/Resources/Locale/en-US/npc/medibot.ftl index b6452201198..79be6d371b2 100644 --- a/Resources/Locale/en-US/npc/medibot.ftl +++ b/Resources/Locale/en-US/npc/medibot.ftl @@ -1,2 +1,7 @@ medibot-start-inject = Hold still, please. medibot-finish-inject = All done. + +medibot-target-dead = The patient is dead. +medibot-target-healthy = The patient is already healthy. +medibot-target-injected = The patient was injected. +medibot-recently-injected = The patient was recently injected. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 9cdacb4b80c..404e40e18bc 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -365,6 +365,7 @@ pack: MedibotAds - type: Inventory templateId: medibot + - type: DoAfter - type: entity parent: From 1288b8e7597cc379cf2d6208f582b19b2c20b22c Mon Sep 17 00:00:00 2001 From: James Simonson Date: Wed, 29 Jan 2025 18:34:49 +0800 Subject: [PATCH 016/197] Criminal Records Computer Better UX + Filtering (#32352) * First pass at new Criminal Records Computer need buttons to highlight. * Filter status tabs/buttons now activate correctly via UpdateState * Removed unneeded Directives * Fix typo + undo VSCode changes * Implement Emo Feedback Loc NA and use inject deps Cannot use inject deps on sprite system. * try to undo vscode launch.json change * Added requests + Filter dropdown list + jobs Fixed maintainer fix requests, Added Job to announcement channel output Removed toggle buttons in-place of a dropdown list * Fixed missed merge conflict + fixed an bug with filterstatus not showing on re-open ui * Update criminal-records.ftl Fixed lint error. whoops. * Update Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs typo Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * impliment chromiumboy feedback hopefully this will do it.... --------- Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> --- ...riminalRecordsConsoleBoundUserInterface.cs | 2 + .../CriminalRecordsConsoleWindow.xaml | 164 ++++++++++++++---- .../CriminalRecordsConsoleWindow.xaml.cs | 115 ++++++++++-- .../Systems/CriminalRecordsConsoleSystem.cs | 38 +++- .../CriminalRecordsConsoleComponent.cs | 9 + .../CriminalRecords/CriminalRecordsUi.cs | 19 +- .../criminal-records/criminal-records.ftl | 25 +-- .../Guidebook/Security/CriminalRecords.xml | 1 + 8 files changed, 313 insertions(+), 60 deletions(-) diff --git a/Content.Client/CriminalRecords/CriminalRecordsConsoleBoundUserInterface.cs b/Content.Client/CriminalRecords/CriminalRecordsConsoleBoundUserInterface.cs index 9047624f49b..d5cc4ecfa9a 100644 --- a/Content.Client/CriminalRecords/CriminalRecordsConsoleBoundUserInterface.cs +++ b/Content.Client/CriminalRecords/CriminalRecordsConsoleBoundUserInterface.cs @@ -39,6 +39,8 @@ protected override void Open() SendMessage(new CriminalRecordChangeStatus(status, null)); _window.OnDialogConfirmed += (status, reason) => SendMessage(new CriminalRecordChangeStatus(status, reason)); + _window.OnStatusFilterPressed += (statusFilter) => + SendMessage(new CriminalRecordSetStatusFilter(statusFilter)); _window.OnHistoryUpdated += UpdateHistory; _window.OnHistoryClosed += () => _historyWindow?.Close(); _window.OnClose += Close; diff --git a/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml b/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml index 77da0ba1b06..d36718cf08b 100644 --- a/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml +++ b/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml @@ -1,36 +1,142 @@ + xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" + Title="{Loc 'criminal-records-console-window-title'}" + MinSize="695 440"> - - - - - - - - - public uint? SelectedKey = null; - public CriminalRecord? CriminalRecord = null; public GeneralStationRecord? StationRecord = null; + public SecurityStatus FilterStatus = SecurityStatus.None; public readonly Dictionary? RecordListing; public readonly StationRecordsFilter? Filter; @@ -100,3 +100,20 @@ public CriminalRecordDeleteHistory(uint index) Index = index; } } + +/// +/// Used to set what status to filter by index. +/// +/// +/// +[Serializable, NetSerializable] + +public sealed class CriminalRecordSetStatusFilter : BoundUserInterfaceMessage +{ + public readonly SecurityStatus FilterStatus; + public CriminalRecordSetStatusFilter(SecurityStatus newFilterStatus) + { + FilterStatus = newFilterStatus; + } +} + diff --git a/Resources/Locale/en-US/criminal-records/criminal-records.ftl b/Resources/Locale/en-US/criminal-records/criminal-records.ftl index 6d6a97300c2..5c39a8a2abf 100644 --- a/Resources/Locale/en-US/criminal-records/criminal-records.ftl +++ b/Resources/Locale/en-US/criminal-records/criminal-records.ftl @@ -3,6 +3,9 @@ criminal-records-console-records-list-title = Crewmembers criminal-records-console-select-record-info = Select a record. criminal-records-console-no-records = No records found! criminal-records-console-no-record-found = No record was found for the selected person. +criminal-records-console-flavor-left = Arrest first! Ask questions later. +criminal-records-console-flavor-right = v2.1 +criminal-records-console-show-all = All ## Status @@ -14,8 +17,8 @@ criminal-records-status-suspected = Suspect criminal-records-status-discharged = Discharged criminal-records-status-paroled = Paroled -criminal-records-console-wanted-reason = [color=gray]Wanted Reason[/color] -criminal-records-console-suspected-reason = [color=gray]Suspected Reason[/color] +criminal-records-console-wanted-reason = Wanted Reason +criminal-records-console-suspected-reason = Suspected Reason criminal-records-console-reason = Reason criminal-records-console-reason-placeholder = For example: {$placeholder} @@ -31,15 +34,15 @@ criminal-records-permission-denied = Permission denied ## Security channel notifications -criminal-records-console-wanted = {$name} was made wanted by {$officer} for: {$reason}. -criminal-records-console-suspected = {$officer} marked {$name} as suspicious because of: {$reason} -criminal-records-console-not-suspected = {$name} has been cleared of suspicion by {$officer}. -criminal-records-console-detained = {$name} has been detained by {$officer}. -criminal-records-console-released = {$name} has been released by {$officer}. -criminal-records-console-not-wanted = {$officer} cleared the wanted status of {$name}. -criminal-records-console-paroled = {$name} has been released on parole by {$officer}. -criminal-records-console-not-parole = {$officer} cleared the parole status of {$name}. -criminal-records-console-unknown-officer = +criminal-records-console-wanted = {$name} ({$job}) was made wanted by {$officer} for: {$reason}. +criminal-records-console-suspected = {$officer} marked {$name} ({$job}) as suspicious because of: {$reason} +criminal-records-console-not-suspected = {$name} ({$job}) has been cleared of suspicion by {$officer}. +criminal-records-console-detained = {$name} ({$job}) has been detained by {$officer}. +criminal-records-console-released = {$name} ({$job}) has been released by {$officer}. +criminal-records-console-not-wanted = {$officer} cleared the wanted status of {$name} ($job). +criminal-records-console-paroled = {$name} ({$job}) has been released on parole by {$officer}. +criminal-records-console-not-parole = {$officer} cleared the parole status of {$name} ({$job}). +criminal-records-console-unknown-officer = ## Filters diff --git a/Resources/ServerInfo/Guidebook/Security/CriminalRecords.xml b/Resources/ServerInfo/Guidebook/Security/CriminalRecords.xml index c7b7ad2098d..5aa4f906cb1 100644 --- a/Resources/ServerInfo/Guidebook/Security/CriminalRecords.xml +++ b/Resources/ServerInfo/Guidebook/Security/CriminalRecords.xml @@ -15,6 +15,7 @@ - The criminal records themselves + - The filter button below the crew list can be used to show only wanted, detained, or paroled crew. In the record section you can: - See security-related information about a crewmember like their name, fingerprints and DNA. From 32e1a89024229d97b1ebddc38269d5acf66c9203 Mon Sep 17 00:00:00 2001 From: darkdan <145926356+Starbuckss14@users.noreply.github.com> Date: Wed, 29 Jan 2025 05:35:22 -0500 Subject: [PATCH 017/197] Added some more borg names (#32502) added a handful of new names --- Resources/Prototypes/Datasets/Names/borg.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Prototypes/Datasets/Names/borg.yml b/Resources/Prototypes/Datasets/Names/borg.yml index 8b8181eec9c..a98ae9ecac5 100644 --- a/Resources/Prototypes/Datasets/Names/borg.yml +++ b/Resources/Prototypes/Datasets/Names/borg.yml @@ -39,3 +39,9 @@ - Cute-Bot - Makeshifter - Twin + - S.A.U.L + - Honker + - Clanker + - Is-The-Robot + - 9 of 7 + - Dank bot From 0ab2804919d95807ac0936f4127cc5e005e4d89d Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 29 Jan 2025 10:36:29 +0000 Subject: [PATCH 018/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 49 +++++++++++++++++-------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5545a709665..a48748a3f5b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,26 +1,4 @@ Entries: -- author: PJB3005 - changes: - - message: Fixed some powered machines working when unpowered if the panel is open. - type: Fix - id: 7367 - time: '2024-09-13T23:58:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32135 -- author: qwerltaz - changes: - - message: The RCD can now place grilles and windows under shutters and cables under - doors. - type: Fix - id: 7368 - time: '2024-09-14T01:53:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32102 -- author: SlamBamActionman - changes: - - message: Briefcases can now be used as melee weapons. - type: Add - id: 7369 - time: '2024-09-14T13:09:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32063 - author: Just_Art changes: - message: Added a head gauze to customization. @@ -3883,3 +3861,30 @@ id: 7866 time: '2025-01-29T10:11:08.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34713 +- author: yuitop + changes: + - message: Sentient medibots can now properly inject. + type: Tweak + id: 7867 + time: '2025-01-29T10:34:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32110 +- author: jamessimo + changes: + - message: Criminal Records computer got enhanced UX & UI. + type: Tweak + - message: Criminal Records computer can now filter its list against crew criminal + status. + type: Tweak + - message: Criminal Records computer will now announce the suspects Job next to + their name. + type: Tweak + id: 7868 + time: '2025-01-29T10:34:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32352 +- author: Starbuckss14 + changes: + - message: New borg names + type: Add + id: 7869 + time: '2025-01-29T10:35:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32502 From 5285bba5a4134a5b13fb8323b661ce7a7b8bfa74 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Wed, 29 Jan 2025 22:48:21 +1100 Subject: [PATCH 019/197] Update ScalingViewport for Engine PR (#28786) --- Content.Client/Viewport/ScalingViewport.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/Viewport/ScalingViewport.cs b/Content.Client/Viewport/ScalingViewport.cs index ccd9636d776..d9548d0f02b 100644 --- a/Content.Client/Viewport/ScalingViewport.cs +++ b/Content.Client/Viewport/ScalingViewport.cs @@ -144,7 +144,7 @@ protected override void KeyBindUp(GUIBoundKeyEventArgs args) _inputManager.ViewportKeyEvent(this, args); } - protected override void Draw(DrawingHandleScreen handle) + protected override void Draw(IRenderHandle handle) { EnsureViewportCreated(); @@ -170,7 +170,7 @@ protected override void Draw(DrawingHandleScreen handle) var drawBox = GetDrawBox(); var drawBoxGlobal = drawBox.Translated(GlobalPixelPosition); _viewport.RenderScreenOverlaysBelow(handle, this, drawBoxGlobal); - handle.DrawTextureRect(_viewport.RenderTarget.Texture, drawBox); + handle.DrawingHandleScreen.DrawTextureRect(_viewport.RenderTarget.Texture, drawBox); _viewport.RenderScreenOverlaysAbove(handle, this, drawBoxGlobal); } From c4337490f1e6594ebc7f47eba1066d7f7137ef7a Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 30 Jan 2025 00:01:21 +1100 Subject: [PATCH 020/197] Update submodule to 242.0.0 (#34739) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index da2bfdaa106..d7f6a9ba439 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit da2bfdaa1068eb7c7383ee2e064102ffc0f4303a +Subproject commit d7f6a9ba4394b34e55b3fdd4d98c5dfe2bb21642 From b9db87e35621551928041e348dcca25019fd4f72 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Wed, 29 Jan 2025 14:13:50 +0100 Subject: [PATCH 021/197] fix stop bleeding popup (#34729) * fix stop bleeding popup * add identity --- Content.Server/Medical/HealingSystem.cs | 5 ++++- .../Locale/en-US/medical/components/healing-component.ftl | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Content.Server/Medical/HealingSystem.cs b/Content.Server/Medical/HealingSystem.cs index bad3acf1d42..728f0b48f01 100644 --- a/Content.Server/Medical/HealingSystem.cs +++ b/Content.Server/Medical/HealingSystem.cs @@ -80,7 +80,10 @@ entity.Comp.DamageContainerID is not null && _bloodstreamSystem.TryModifyBleedAmount(entity.Owner, healing.BloodlossModifier); if (isBleeding != bloodstream.BleedAmount > 0) { - _popupSystem.PopupEntity(Loc.GetString("medical-item-stop-bleeding"), entity, args.User); + var popup = (args.User == entity.Owner) + ? Loc.GetString("medical-item-stop-bleeding-self") + : Loc.GetString("medical-item-stop-bleeding", ("target", Identity.Entity(entity.Owner, EntityManager))); + _popupSystem.PopupEntity(popup, entity, args.User); } } diff --git a/Resources/Locale/en-US/medical/components/healing-component.ftl b/Resources/Locale/en-US/medical/components/healing-component.ftl index 1deb39db091..20ad23dcb21 100644 --- a/Resources/Locale/en-US/medical/components/healing-component.ftl +++ b/Resources/Locale/en-US/medical/components/healing-component.ftl @@ -1,4 +1,5 @@ medical-item-finished-using = You have finished healing with the {$item} medical-item-cant-use = There is no damage you can heal with the {$item} -medical-item-stop-bleeding = They have stopped bleeding +medical-item-stop-bleeding = {CAPITALIZE($target)} has stopped bleeding +medical-item-stop-bleeding-self = You have stopped bleeding medical-item-popup-target = {CAPITALIZE(THE($user))} is trying to heal you with the {$item}! From af81ac3e7083fdeaaee2189cb8e49585185ddda2 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:23:34 +0300 Subject: [PATCH 022/197] Fix RoleTimeRequirement localization (#34735) * fix job restriction localization * Update Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs * Update Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../JobRequirement/RoleTimeRequirement.cs | 19 +++++++++------- .../Locale/en-US/job/role-requirements.ftl | 22 ++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs index 6fd4c0b564b..4f3a4a081b6 100644 --- a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs @@ -41,13 +41,16 @@ public override bool Check(IEntityManager entManager, var formattedRoleDiff = ContentLocalizationManager.FormatPlaytime(roleDiffSpan); var departmentColor = Color.Yellow; - if (entManager.EntitySysManager.TryGetEntitySystem(out SharedJobSystem? jobSystem)) - { - var jobProto = jobSystem.GetJobPrototype(proto); + if (!entManager.EntitySysManager.TryGetEntitySystem(out SharedJobSystem? jobSystem)) + return false; - if (jobSystem.TryGetDepartment(jobProto, out var departmentProto)) - departmentColor = departmentProto.Color; - } + var jobProto = jobSystem.GetJobPrototype(proto); + + if (jobSystem.TryGetDepartment(jobProto, out var departmentProto)) + departmentColor = departmentProto.Color; + + if (!protoManager.TryIndex(jobProto, out var indexedJob)) + return false; if (!Inverted) { @@ -57,7 +60,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-insufficient", ("time", formattedRoleDiff), - ("job", Loc.GetString(proto)), + ("job", indexedJob.LocalizedName), ("departmentColor", departmentColor.ToHex()))); return false; } @@ -67,7 +70,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-too-high", ("time", formattedRoleDiff), - ("job", Loc.GetString(proto)), + ("job", indexedJob.LocalizedName), ("departmentColor", departmentColor.ToHex()))); return false; } diff --git a/Resources/Locale/en-US/job/role-requirements.ftl b/Resources/Locale/en-US/job/role-requirements.ftl index 2b6af7b1d2e..37265b875ce 100644 --- a/Resources/Locale/en-US/job/role-requirements.ftl +++ b/Resources/Locale/en-US/job/role-requirements.ftl @@ -1,13 +1,15 @@ -role-timer-department-insufficient = You require [color=yellow]{$time}[/color] more playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. -role-timer-department-too-high = You require [color=yellow]{$time}[/color] less playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. (Are you trying to play a trainee role?) -role-timer-overall-insufficient = You require [color=yellow]{$time}[/color] more overall playtime to play this role. -role-timer-overall-too-high = You require [color=yellow]{$time}[/color] less overall playtime to play this role. (Are you trying to play a trainee role?) -role-timer-role-insufficient = You require [color=yellow]{$time}[/color] more playtime with [color={$departmentColor}]{$job}[/color] to play this role. -role-timer-role-too-high = You require[color=yellow] {$time}[/color] less playtime with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) -role-timer-age-too-old = Your character must be under the age of [color=yellow]{$age}[/color] to play this role. -role-timer-age-too-young = Your character must be over the age of [color=yellow]{$age}[/color] to play this role. -role-timer-whitelisted-species = Your character must be one of the following species to play this role: -role-timer-blacklisted-species = Your character must not be one of the following species to play this role: +role-timer-department-insufficient = You require [color=yellow]{$time}[/color] more playtime in the [color={$departmentColor}]{$department}[/color] department to unlock this. +role-timer-department-too-high = You require [color=yellow]{$time}[/color] less playtime in the [color={$departmentColor}]{$department}[/color] department to select this. (Are you trying to play a trainee role?) +role-timer-overall-insufficient = You require [color=yellow]{$time}[/color] more overall playtime to unlock this. +role-timer-overall-too-high = You require [color=yellow]{$time}[/color] less overall playtime to select this. (Are you trying to play a trainee role?) +role-timer-role-insufficient = You require [color=yellow]{$time}[/color] more playtime with [color={$departmentColor}]{$job}[/color] to unlock this. +role-timer-role-too-high = You require[color=yellow] {$time}[/color] less playtime with [color={$departmentColor}]{$job}[/color] to select this. (Are you trying to play a trainee role?) +role-timer-age-too-old = Your character must be under the age of [color=yellow]{$age}[/color] for you to choose this. +role-timer-age-too-young = Your character must be over the age of [color=yellow]{$age}[/color] for you to choose this. +role-timer-whitelisted-species = Your character must be one of the following species for you to select this: +role-timer-blacklisted-species = Your character must not be one of the following species for you to select this: +role-timer-whitelisted-traits = Your character must have one of the following traits for you to select this: +role-timer-blacklisted-traits = Your character must not have any of the following traits for you to select this: role-timer-locked = Locked (hover for details) From 25dbdf5a527fa9e30bb5e25cb4e13a5b624f68a6 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 30 Jan 2025 00:24:46 +0100 Subject: [PATCH 023/197] Fix shuttle console angular velocity (#34748) --- Content.Client/Shuttles/UI/NavScreen.xaml.cs | 14 ++++++++++---- Resources/Locale/en-US/shuttles/console.ftl | 4 ++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Content.Client/Shuttles/UI/NavScreen.xaml.cs b/Content.Client/Shuttles/UI/NavScreen.xaml.cs index 7236714ef29..e4727e93660 100644 --- a/Content.Client/Shuttles/UI/NavScreen.xaml.cs +++ b/Content.Client/Shuttles/UI/NavScreen.xaml.cs @@ -81,13 +81,19 @@ protected override void Draw(DrawingHandleScreen handle) // Get the positive reduced angle. var displayRot = -worldRot.Reduced(); - GridPosition.Text = $"{worldPos.X:0.0}, {worldPos.Y:0.0}"; - GridOrientation.Text = $"{displayRot.Degrees:0.0}"; + GridPosition.Text = Loc.GetString("shuttle-console-position-value", + ("X", $"{worldPos.X:0.0}"), + ("Y", $"{worldPos.Y:0.0}")); + GridOrientation.Text = Loc.GetString("shuttle-console-orientation-value", + ("angle", $"{displayRot.Degrees:0.0}")); var gridVelocity = gridBody.LinearVelocity; gridVelocity = displayRot.RotateVec(gridVelocity); // Get linear velocity relative to the console entity - GridLinearVelocity.Text = $"{gridVelocity.X + 10f * float.Epsilon:0.0}, {gridVelocity.Y + 10f * float.Epsilon:0.0}"; - GridAngularVelocity.Text = $"{-gridBody.AngularVelocity + 10f * float.Epsilon:0.0}"; + GridLinearVelocity.Text = Loc.GetString("shuttle-console-linear-velocity-value", + ("X", $"{gridVelocity.X + 10f * float.Epsilon:0.0}"), + ("Y", $"{gridVelocity.Y + 10f * float.Epsilon:0.0}")); + GridAngularVelocity.Text = Loc.GetString("shuttle-console-angular-velocity-value", + ("angularVelocity", $"{-MathHelper.RadiansToDegrees(gridBody.AngularVelocity) + 10f * float.Epsilon:0.0}")); } } diff --git a/Resources/Locale/en-US/shuttles/console.ftl b/Resources/Locale/en-US/shuttles/console.ftl index 5b8be6ff021..0ed364b9333 100644 --- a/Resources/Locale/en-US/shuttles/console.ftl +++ b/Resources/Locale/en-US/shuttles/console.ftl @@ -10,9 +10,13 @@ shuttle-console-prevent = You are unable to pilot this ship shuttle-console-display-label = Display shuttle-console-position = Position: +shuttle-console-position-value = {$X}, {$Y} shuttle-console-orientation = Orientation: +shuttle-console-orientation-value = {$angle} shuttle-console-linear-velocity = Linear velocity: +shuttle-console-linear-velocity-value = {$X}, {$Y} shuttle-console-angular-velocity = Angular velocity: +shuttle-console-angular-velocity-value = {$angularVelocity} shuttle-console-unknown = Unknown shuttle-console-iff-label = {$name} ({$distance}m) From 0cf51775a80679722c4369876e770bdc3b3723be Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Sun, 9 Feb 2025 20:52:12 +0000 Subject: [PATCH 024/197] add centcomm radio implant, remove spawner category from deltav implants --- .../_DV/Entities/Objects/Misc/implanters.yml | 8 ++++++++ .../Objects/Misc/subdermal_implants.yml | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/_DV/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/_DV/Entities/Objects/Misc/implanters.yml index 2eb6f40d089..df347e47f3b 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Misc/implanters.yml @@ -29,3 +29,11 @@ components: - type: Implanter implant: SyndicateRadioImplant + +- type: entity + parent: BaseImplantOnlyImplanter + id: RadioImplanterCentcomm + suffix: centcomm radio + components: + - type: Implanter + implant: RadioImplantCentcomm diff --git a/Resources/Prototypes/_DV/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/_DV/Entities/Objects/Misc/subdermal_implants.yml index c09eadc9ada..bb46e7ea712 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Misc/subdermal_implants.yml @@ -1,5 +1,5 @@ - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ HideSpawnMenu ] parent: BaseSubdermalImplant id: BionicVoiceMaskImplant name: bionic voice mask implant @@ -14,7 +14,7 @@ type: VoiceMaskBoundUserInterface - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ HideSpawnMenu ] parent: BionicVoiceMaskImplant id: BionicSyrinxImplant name: bionic syrinx implant @@ -27,7 +27,7 @@ - HarpySinger # Ensure this is only for harpies and if this component gets renamed, CHANGE IT TO THE NEW VALUE!!! - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ HideSpawnMenu ] parent: StorageImplant id: RadioImplant name: generic radio implant @@ -50,7 +50,7 @@ - type: RadioImplant - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ HideSpawnMenu ] parent: BaseSubdermalImplant id: SyndicateRadioImplant name: syndicate radio implant @@ -59,3 +59,14 @@ - type: RadioImplant channels: - Syndicate + +- type: entity + categories: [ HideSpawnMenu ] + parent: BaseSubdermalImplant + id: RadioImplantCentcomm + name: centcomm radio implant + description: This implant grants access to the Centcomm channel without a headset. Only authorized for Centcomm employees. + components: + - type: RadioImplant + channels: + - CentCom From 3e2a2fb9a96f6b1f6cf45022bec6a39f7f2d72e8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 30 Jan 2025 00:15:09 +0000 Subject: [PATCH 025/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a48748a3f5b..46a5ffc4d4d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Just_Art - changes: - - message: Added a head gauze to customization. - type: Add - id: 7370 - time: '2024-09-14T14:55:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30852 - author: deltanedas changes: - message: Fixed security's helmets not having any protection. @@ -3888,3 +3881,11 @@ id: 7869 time: '2025-01-29T10:35:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32502 +- author: thetolbean + changes: + - message: Traitors now have access to a Syndicate Radio Implanter, allowing covert + communications on the Syndicate channel without a headset. + type: Add + id: 7870 + time: '2025-01-30T00:14:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33533 From ad67a35b6edf600dc91140c1c8fb63c404ec73b3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 30 Jan 2025 02:45:52 +0000 Subject: [PATCH 026/197] 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 46a5ffc4d4d..c029afec83c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Fixed security's helmets not having any protection. - type: Fix - id: 7371 - time: '2024-09-14T15:56:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32152 - author: eoineoineoin changes: - message: Ghosts can now read books. @@ -3889,3 +3882,10 @@ id: 7870 time: '2025-01-30T00:14:00.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33533 +- author: Spessmann + changes: + - message: Added Convex recreational complex, a large service-oriented highpop map. + type: Add + id: 7871 + time: '2025-01-30T02:44:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33346 From 800de3d4b2ce82761bdcd4aaddf45ae0c3b8c029 Mon Sep 17 00:00:00 2001 From: DR-DOCTOR-EVIL-EVIL Date: Wed, 29 Jan 2025 21:42:22 -0600 Subject: [PATCH 027/197] Update cigarette.yml (#34756) simple change to one of Dan's Smokes that fixes a typo. --- .../Objects/Consumable/Smokeables/Cigarettes/cigarette.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml index 146fac039d0..818e56a37a7 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml @@ -132,7 +132,7 @@ - type: entity id: CigaretteDylovene parent: SoakedCigarette - name: Urinal Cake Disolver + name: Urinal Cake Dissolver components: - type: SolutionContainerManager solutions: From fd77e8d86b02422243c8bb106fcbf94c9a23739f Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 30 Jan 2025 05:05:47 +0100 Subject: [PATCH 028/197] Seperate EMAG into EMAG and Authentication Disruptor (#34337) --- Content.Server/Access/AccessWireAction.cs | 11 +- .../Access/Systems/AccessOverriderSystem.cs | 4 + .../Anomaly/Effects/TechAnomalySystem.cs | 7 +- .../Atmos/Monitor/Systems/FireAlarmSystem.cs | 20 ++- Content.Server/Bed/BedSystem.cs | 8 +- .../Cargo/Systems/CargoSystem.Orders.cs | 17 ++- Content.Server/Cloning/CloningSystem.cs | 12 +- .../CommunicationsConsoleSystem.cs | 3 +- Content.Server/Fax/FaxSystem.cs | 14 ++- Content.Server/Lathe/LatheSystem.cs | 4 +- .../EntitySystems/FatExtractorSystem.cs | 10 +- .../EntitySystems/SmokingSystem.Vape.cs | 10 +- .../Power/EntitySystems/ApcSystem.cs | 11 +- .../Systems/ResearchSystem.Console.cs | 19 ++- .../EntitySystems/RevenantSystem.Abilities.cs | 4 +- .../Silicons/Borgs/BorgSystem.Transponder.cs | 5 +- .../Silicons/Laws/SiliconLawSystem.cs | 26 +--- .../VendingMachines/VendingMachineSystem.cs | 12 +- .../Components/AccessReaderComponent.cs | 2 +- .../Access/Systems/AccessReaderSystem.cs | 22 +++- .../Systems/SharedAccessOverriderSystem.cs | 3 + Content.Shared/Cloning/CloningPodComponent.cs | 9 -- .../Disposal/SharedDisposalUnitSystem.cs | 7 ++ .../Doors/Systems/SharedDoorSystem.cs | 24 ++-- .../Emag/Components/EmagComponent.cs | 19 +-- .../Emag/Components/EmaggedComponent.cs | 8 +- Content.Shared/Emag/Systems/EmagSystem.cs | 114 +++++++++++------- .../Fax/Components/FaxMachineComponent.cs | 6 - Content.Shared/Lathe/SharedLatheSystem.cs | 7 ++ .../UnpoweredFlashlightSystem.cs | 5 + Content.Shared/Lock/LockComponent.cs | 4 +- Content.Shared/Lock/LockSystem.cs | 8 +- .../SharedMaterialReclaimerSystem.cs | 9 +- .../Medical/Cryogenics/SharedCryoPodSystem.cs | 9 +- .../Ninja/Components/EmagProviderComponent.cs | 16 ++- .../Ninja/Systems/EmagProviderSystem.cs | 16 ++- .../Pinpointer/SharedPinpointerSystem.cs | 10 ++ .../Bots/EmaggableMedibotComponent.cs | 9 -- Content.Shared/Silicons/Bots/MedibotSystem.cs | 9 +- .../Silicons/Laws/SharedSiliconLawSystem.cs | 45 +++++-- .../SharedSingularityGeneratorSystem.cs | 12 +- .../SharedVendingMachineSystem.cs | 20 ++- .../Equipment/SharedArtifactCrusherSystem.cs | 10 ++ .../Locale/en-US/_DV/store/uplink-catalog.ftl | 3 - Resources/Locale/en-US/emag/emag.ftl | 2 +- .../Locale/en-US/store/uplink-catalog.ftl | 3 + Resources/Locale/en-US/thief/backpack.ftl | 2 +- .../Prototypes/Catalog/thief_toolbox_sets.yml | 1 + .../Prototypes/Catalog/uplink_catalog.yml | 19 ++- .../Mobs/Cyborgs/base_borg_chassis.yml | 1 - .../Entities/Objects/Misc/arabianlamp.yml | 4 +- .../Specific/Robotics/borg_modules.yml | 4 +- .../Entities/Objects/Tools/access_breaker.yml | 22 ++++ .../Entities/Objects/Tools/emag.yml | 3 - .../Weapons/Guns/Projectiles/magic.yml | 4 +- .../Machines/Computers/computers.yml | 2 +- .../Structures/Machines/fatextractor.yml | 2 +- .../Structures/Machines/fax_machine.yml | 1 + .../Structures/cryogenic_sleep_unit.yml | 2 +- .../Prototypes/_DV/Catalog/uplink_catalog.yml | 13 -- .../_DV/Entities/Objects/Tools/emag.yml | 17 --- Resources/Prototypes/tags.yml | 3 + .../access_breaker.rsi/equipped-BELT.png | Bin 0 -> 141 bytes .../Objects/Tools/access_breaker.rsi/icon.png | Bin 0 -> 1733 bytes .../Tools/access_breaker.rsi/inhand-left.png | Bin 0 -> 353 bytes .../Tools/access_breaker.rsi/inhand-right.png | Bin 0 -> 383 bytes .../Tools/access_breaker.rsi/meta.json | 44 +++++++ 67 files changed, 504 insertions(+), 248 deletions(-) create mode 100644 Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml delete mode 100644 Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml create mode 100644 Resources/Textures/Objects/Tools/access_breaker.rsi/equipped-BELT.png create mode 100644 Resources/Textures/Objects/Tools/access_breaker.rsi/icon.png create mode 100644 Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Tools/access_breaker.rsi/meta.json diff --git a/Content.Server/Access/AccessWireAction.cs b/Content.Server/Access/AccessWireAction.cs index 7676ce489f4..b3beb3967b9 100644 --- a/Content.Server/Access/AccessWireAction.cs +++ b/Content.Server/Access/AccessWireAction.cs @@ -1,7 +1,6 @@ using Content.Server.Wires; using Content.Shared.Access; using Content.Shared.Access.Components; -using Content.Shared.Emag.Components; using Content.Shared.Wires; namespace Content.Server.Access; @@ -31,11 +30,9 @@ public override bool Cut(EntityUid user, Wire wire, AccessReaderComponent comp) public override bool Mend(EntityUid user, Wire wire, AccessReaderComponent comp) { - if (!EntityManager.HasComponent(wire.Owner)) - { - comp.Enabled = true; - EntityManager.Dirty(wire.Owner, comp); - } + comp.Enabled = true; + EntityManager.Dirty(wire.Owner, comp); + return true; } @@ -58,7 +55,7 @@ private void AwaitPulseCancel(Wire wire) { if (!wire.IsCut) { - if (EntityManager.TryGetComponent(wire.Owner, out var access) && !EntityManager.HasComponent(wire.Owner)) + if (EntityManager.TryGetComponent(wire.Owner, out var access)) { access.Enabled = true; EntityManager.Dirty(wire.Owner, access); diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs index a882209b2d1..a0dbc96677b 100644 --- a/Content.Server/Access/Systems/AccessOverriderSystem.cs +++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs @@ -245,6 +245,10 @@ private void TryWriteToTargetAccessReaderId(EntityUid uid, $"{ToPrettyString(player):player} has modified {ToPrettyString(accessReaderEnt.Value):entity} with the following allowed access level holders: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]"); accessReaderEnt.Value.Comp.AccessLists = ConvertAccessListToHashSet(newAccessList); + + var ev = new OnAccessOverriderAccessUpdatedEvent(player); + RaiseLocalEvent(component.TargetAccessReaderId, ref ev); + Dirty(accessReaderEnt.Value); } diff --git a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs index 9f81c64dbc1..983cf2c8f46 100644 --- a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs @@ -116,8 +116,11 @@ private void OnSupercritical(Entity tech, ref AnomalySuper if (_random.Prob(tech.Comp.EmagSupercritProbability)) { - _emag.DoEmagEffect(tech, source); - _emag.DoEmagEffect(tech, sink); + var sourceEv = new GotEmaggedEvent(tech, EmagType.Access | EmagType.Interaction); + RaiseLocalEvent(source, ref sourceEv); + + var sinkEv = new GotEmaggedEvent(tech, EmagType.Access | EmagType.Interaction); + RaiseLocalEvent(sink, ref sinkEv); } CreateNewLink(tech, source, sink); diff --git a/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs index 0a3ee4d7f7d..6d768c12926 100644 --- a/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs @@ -21,6 +21,7 @@ public sealed class FireAlarmSystem : EntitySystem { [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; [Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly AccessReaderSystem _access = default!; [Dependency] private readonly IConfigurationManager _configManager = default!; @@ -77,11 +78,18 @@ private void OnInteractHand(EntityUid uid, FireAlarmComponent component, Interac private void OnEmagged(EntityUid uid, FireAlarmComponent component, ref GotEmaggedEvent args) { - if (TryComp(uid, out var alarmable)) - { - // Remove the atmos alarmable component permanently from this device. - _atmosAlarmable.ForceAlert(uid, AtmosAlarmType.Emagged, alarmable); - RemCompDeferred(uid); - } + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + + if (!TryComp(uid, out var alarmable)) + return; + + // Remove the atmos alarmable component permanently from this device. + _atmosAlarmable.ForceAlert(uid, AtmosAlarmType.Emagged, alarmable); + RemCompDeferred(uid); + args.Handled = true; } } diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index da89a012d8d..da64074dad0 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -21,6 +21,7 @@ public sealed class BedSystem : EntitySystem { [Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly ActionsSystem _actionsSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SleepingSystem _sleepingSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; @@ -116,7 +117,12 @@ private void OnPowerChanged(EntityUid uid, StasisBedComponent component, ref Pow private void OnEmagged(EntityUid uid, StasisBedComponent component, ref GotEmaggedEvent args) { - args.Repeatable = true; + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + // Reset any metabolisms first so they receive the multiplier correctly UpdateMetabolisms(uid, component, false); component.Multiplier = 1 / component.Multiplier; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index 69a276302f9..ed27780a843 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -8,7 +8,7 @@ using Content.Shared.Cargo.Events; using Content.Shared.Cargo.Prototypes; using Content.Shared.Database; -using Content.Shared.Emag.Components; +using Content.Shared.Emag.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Paper; @@ -21,6 +21,7 @@ namespace Content.Server.Cargo.Systems public sealed partial class CargoSystem { [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; /// /// How much time to wait (in seconds) before increasing bank accounts balance. @@ -41,6 +42,7 @@ private void InitializeConsole() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnOrderBalanceUpdated); + SubscribeLocalEvent(OnEmagged); Reset(); } @@ -75,6 +77,17 @@ private void Reset() _timer = 0; } + private void OnEmagged(Entity ent, ref GotEmaggedEvent args) + { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(ent, EmagType.Interaction)) + return; + + args.Handled = true; + } + private void UpdateConsole(float frameTime) { _timer += frameTime; @@ -194,7 +207,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com order.Approved = true; _audio.PlayPvs(component.ConfirmSound, uid); - if (!HasComp(uid)) + if (!_emag.CheckFlag(uid, EmagType.Interaction)) { var tryGetIdentityShortInfoEvent = new TryGetIdentityShortInfoEvent(uid, player); RaiseLocalEvent(tryGetIdentityShortInfoEvent); diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 536b87b2a10..310029ddb3e 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -63,6 +63,7 @@ public sealed partial class CloningSystem : EntitySystem // DeltaV - Set to part [Dependency] private readonly SharedMindSystem _mindSystem = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; + [Dependency] private readonly EmagSystem _emag = default!; public readonly Dictionary ClonesWaitingForMind = new(); public const float EasyModeCloningCost = 0.7f; @@ -308,10 +309,15 @@ public override void Update(float frameTime) /// private void OnEmagged(EntityUid uid, CloningPodComponent clonePod, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + if (!this.IsPowered(uid, EntityManager)) return; - _audio.PlayPvs(clonePod.SparkSound, uid); _popupSystem.PopupEntity(Loc.GetString("cloning-pod-component-upgrade-emag-requirement"), uid); args.Handled = true; } @@ -341,7 +347,7 @@ private void EndFailedCloning(EntityUid uid, CloningPodComponent clonePod) var indices = _transformSystem.GetGridTilePositionOrDefault((uid, transform)); var tileMix = _atmosphereSystem.GetTileMixture(transform.GridUid, null, indices, true); - if (HasComp(uid)) + if (_emag.CheckFlag(uid, EmagType.Interaction)) { _audio.PlayPvs(clonePod.ScreamSound, uid); Spawn(clonePod.MobSpawnId, transform.Coordinates); @@ -359,7 +365,7 @@ private void EndFailedCloning(EntityUid uid, CloningPodComponent clonePod) } _puddleSystem.TrySpillAt(uid, bloodSolution, out _); - if (!HasComp(uid)) + if (!_emag.CheckFlag(uid, EmagType.Interaction)) { _material.SpawnMultipleFromMaterial(_robustRandom.Next(1, (int) (clonePod.UsedBiomass / 2.5)), clonePod.RequiredMaterial, Transform(uid).Coordinates); } diff --git a/Content.Server/Communications/CommunicationsConsoleSystem.cs b/Content.Server/Communications/CommunicationsConsoleSystem.cs index 6c320edb23c..abcd93f3280 100644 --- a/Content.Server/Communications/CommunicationsConsoleSystem.cs +++ b/Content.Server/Communications/CommunicationsConsoleSystem.cs @@ -16,7 +16,6 @@ using Content.Shared.Communications; using Content.Shared.Database; using Content.Shared.DeviceNetwork; -using Content.Shared.Emag.Components; using Content.Shared.IdentityManagement; using Content.Shared.Popups; using Robust.Server.GameObjects; @@ -177,7 +176,7 @@ private static bool CanAnnounce(CommunicationsConsoleComponent comp) private bool CanUse(EntityUid user, EntityUid console) { - if (TryComp(console, out var accessReaderComponent) && !HasComp(console)) + if (TryComp(console, out var accessReaderComponent)) { return _accessReaderSystem.IsAllowed(user, console, accessReaderComponent); } diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs index a43d0171e60..b73c101e3fe 100644 --- a/Content.Server/Fax/FaxSystem.cs +++ b/Content.Server/Fax/FaxSystem.cs @@ -50,6 +50,7 @@ public sealed class FaxSystem : EntitySystem [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly FaxecuteSystem _faxecute = default!; + [Dependency] private readonly EmagSystem _emag = default!; private const string PaperSlotId = "Paper"; @@ -227,7 +228,7 @@ private void OnInteractUsing(EntityUid uid, FaxMachineComponent component, Inter return; } - if (component.KnownFaxes.ContainsValue(newName) && !HasComp(uid)) // Allow existing names if emagged for fun + if (component.KnownFaxes.ContainsValue(newName) && !_emag.CheckFlag(uid, EmagType.Interaction)) // Allow existing names if emagged for fun { _popupSystem.PopupEntity(Loc.GetString("fax-machine-popup-name-exist"), uid); return; @@ -246,7 +247,12 @@ private void OnInteractUsing(EntityUid uid, FaxMachineComponent component, Inter private void OnEmagged(EntityUid uid, FaxMachineComponent component, ref GotEmaggedEvent args) { - _audioSystem.PlayPvs(component.EmagSound, uid); + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + args.Handled = true; } @@ -260,7 +266,7 @@ private void OnPacketReceived(EntityUid uid, FaxMachineComponent component, Devi switch (command) { case FaxConstants.FaxPingCommand: - var isForSyndie = HasComp(uid) && + var isForSyndie = _emag.CheckFlag(uid, EmagType.Interaction) && args.Data.ContainsKey(FaxConstants.FaxSyndicateData); if (!isForSyndie && !component.ResponsePings) return; @@ -405,7 +411,7 @@ public void Refresh(EntityUid uid, FaxMachineComponent? component = null) { DeviceNetworkConstants.Command, FaxConstants.FaxPingCommand } }; - if (HasComp(uid)) + if (_emag.CheckFlag(uid, EmagType.Interaction)) payload.Add(FaxConstants.FaxSyndicateData, true); _deviceNetworkSystem.QueuePacket(uid, null, payload); diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index a14dff4b486..7107e483bc8 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -17,6 +17,7 @@ using Content.Shared.UserInterface; using Content.Shared.Database; using Content.Shared.Emag.Components; +using Content.Shared.Emag.Systems; using Content.Shared.Examine; using Content.Shared.Lathe; using Content.Shared.Materials; @@ -43,6 +44,7 @@ public sealed class LatheSystem : SharedLatheSystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly UserInterfaceSystem _uiSys = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -294,7 +296,7 @@ private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent compon { if (uid != args.Lathe || !TryComp(uid, out var technologyDatabase)) return; - if (!args.getUnavailable && !HasComp(uid)) + if (!args.getUnavailable && !_emag.CheckFlag(uid, EmagType.Interaction)) return; foreach (var recipe in component.EmagDynamicRecipes) { diff --git a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs index 6e9856a61dc..8f4c5f41500 100644 --- a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs @@ -21,6 +21,7 @@ namespace Content.Server.Nutrition.EntitySystems; public sealed class FatExtractorSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly HungerSystem _hunger = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -36,8 +37,13 @@ public override void Initialize() private void OnGotEmagged(EntityUid uid, FatExtractorComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + args.Handled = true; - args.Repeatable = false; } private void OnClosed(EntityUid uid, FatExtractorComponent component, ref StorageAfterCloseEvent args) @@ -103,7 +109,7 @@ public bool TryGetValidOccupant(EntityUid uid, [NotNullWhen(true)] out EntityUid if (_hunger.GetHunger(hunger) < component.NutritionPerSecond) return false; - if (hunger.CurrentThreshold < component.MinHungerThreshold && !HasComp(uid)) + if (hunger.CurrentThreshold < component.MinHungerThreshold && !_emag.CheckFlag(uid, EmagType.Interaction)) return false; return true; diff --git a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs index 26fa5ca3cc8..48fb946135e 100644 --- a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs +++ b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs @@ -24,6 +24,7 @@ public sealed partial class SmokingSystem { [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly FoodSystem _foodSystem = default!; [Dependency] private readonly ExplosionSystem _explosionSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; @@ -63,7 +64,7 @@ private void OnVapeInteraction(Entity entity, ref AfterInteractEv forced = false; } - if (entity.Comp.ExplodeOnUse || HasComp(entity.Owner)) + if (entity.Comp.ExplodeOnUse || _emag.CheckFlag(entity, EmagType.Interaction)) { _explosionSystem.QueueExplosion(entity.Owner, "Default", entity.Comp.ExplosionIntensity, 0.5f, 3, canCreateVacuum: false); EntityManager.DeleteEntity(entity); @@ -161,8 +162,15 @@ private void OnVapeDoAfter(Entity entity, ref VapeDoAfterEvent ar args.Args.Target.Value); } } + private void OnEmagged(Entity entity, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(entity, EmagType.Interaction)) + return; + args.Handled = true; } } diff --git a/Content.Server/Power/EntitySystems/ApcSystem.cs b/Content.Server/Power/EntitySystems/ApcSystem.cs index 14dddbb43e3..29c1431179d 100644 --- a/Content.Server/Power/EntitySystems/ApcSystem.cs +++ b/Content.Server/Power/EntitySystems/ApcSystem.cs @@ -4,7 +4,6 @@ using Content.Server.Power.Pow3r; using Content.Shared.Access.Systems; using Content.Shared.APC; -using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Popups; using Content.Shared.Rounding; @@ -19,6 +18,7 @@ public sealed class ApcSystem : EntitySystem { [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -111,7 +111,12 @@ public void ApcToggleBreaker(EntityUid uid, ApcComponent? apc = null, PowerNetwo private void OnEmagged(EntityUid uid, ApcComponent comp, ref GotEmaggedEvent args) { - // no fancy conditions + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + args.Handled = true; } @@ -170,7 +175,7 @@ public void UpdateUIState(EntityUid uid, private ApcChargeState CalcChargeState(EntityUid uid, PowerState.Battery battery) { - if (HasComp(uid)) + if (_emag.CheckFlag(uid, EmagType.Interaction)) return ApcChargeState.Emag; if (battery.CurrentStorage / battery.Capacity > ApcComponent.HighPowerThreshold) diff --git a/Content.Server/Research/Systems/ResearchSystem.Console.cs b/Content.Server/Research/Systems/ResearchSystem.Console.cs index 127b80a631e..c227aee7f07 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Console.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Console.cs @@ -3,6 +3,7 @@ using Content.Shared.UserInterface; using Content.Shared.Access.Components; using Content.Shared.Emag.Components; +using Content.Shared.Emag.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Research.Components; using Content.Shared.Research.Prototypes; @@ -11,6 +12,8 @@ namespace Content.Server.Research.Systems; public sealed partial class ResearchSystem { + [Dependency] private readonly EmagSystem _emag = default!; + private void InitializeConsole() { SubscribeLocalEvent(OnConsoleUnlock); @@ -18,6 +21,7 @@ private void InitializeConsole() SubscribeLocalEvent(OnPointsChanged); SubscribeLocalEvent(OnConsoleRegistrationChanged); SubscribeLocalEvent(OnConsoleDatabaseModified); + SubscribeLocalEvent(OnEmagged); } private void OnConsoleUnlock(EntityUid uid, ResearchConsoleComponent component, ConsoleUnlockTechnologyMessage args) @@ -39,7 +43,7 @@ private void OnConsoleUnlock(EntityUid uid, ResearchConsoleComponent component, if (!UnlockTechnology(uid, args.Id, act)) return; - if (!HasComp(uid)) + if (!_emag.CheckFlag(uid, EmagType.Interaction)) { var getIdentityEvent = new TryGetIdentityShortInfoEvent(uid, act); RaiseLocalEvent(getIdentityEvent); @@ -52,7 +56,7 @@ private void OnConsoleUnlock(EntityUid uid, ResearchConsoleComponent component, ); _radio.SendRadioMessage(uid, message, component.AnnouncementChannel, uid, escapeMarkup: false); } - + SyncClientWithServer(uid); UpdateConsoleInterface(uid, component); } @@ -100,4 +104,15 @@ private void OnConsoleDatabaseModified(EntityUid uid, ResearchConsoleComponent c UpdateConsoleInterface(uid, component); } + private void OnEmagged(Entity ent, ref GotEmaggedEvent args) + { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(ent, EmagType.Interaction)) + return; + + args.Handled = true; + } + } diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs index 6b83a61d286..1eb9aabed6a 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs @@ -36,7 +36,6 @@ public sealed partial class RevenantSystem { [Dependency] private readonly ThrowingSystem _throwing = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!; - [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; [Dependency] private readonly GhostSystem _ghost = default!; @@ -343,7 +342,8 @@ private void OnMalfunctionAction(EntityUid uid, RevenantComponent component, Rev _whitelistSystem.IsBlacklistPass(component.MalfunctionBlacklist, ent)) continue; - _emag.DoEmagEffect(uid, ent); //it does not emag itself. adorable. + var ev = new GotEmaggedEvent(uid, EmagType.Interaction | EmagType.Access); + RaiseLocalEvent(ent, ref ev); } } } diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs index b4ba1400441..4d2a8912e83 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs @@ -8,6 +8,7 @@ using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; using Content.Server.Explosion.Components; +using Content.Shared.Emag.Systems; using Robust.Shared.Utility; namespace Content.Server.Silicons.Borgs; @@ -15,6 +16,8 @@ namespace Content.Server.Silicons.Borgs; /// public sealed partial class BorgSystem { + [Dependency] private readonly EmagSystem _emag = default!; + private void InitializeTransponder() { SubscribeLocalEvent(OnPacketReceived); @@ -127,7 +130,7 @@ private void Destroy(Entity ent) private bool CheckEmagged(EntityUid uid, string name) { - if (HasComp(uid)) + if (_emag.CheckFlag(uid, EmagType.Interaction)) { Popup.PopupEntity(Loc.GetString($"borg-transponder-emagged-{name}-popup"), uid, uid, PopupType.LargeCaution); return true; diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 2bff34a5ad8..40e672f1c1e 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -7,7 +7,6 @@ using Content.Server.Station.Systems; using Content.Shared.Administration; using Content.Shared.Chat; -using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.GameTicking; using Content.Shared.Mind; @@ -15,7 +14,6 @@ using Content.Shared.Roles; using Content.Shared.Silicons.Laws; using Content.Shared.Silicons.Laws.Components; -using Content.Shared.Stunnable; using Content.Shared.Wires; using Robust.Server.GameObjects; using Robust.Shared.Audio; @@ -23,7 +21,6 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Toolshed; -using Robust.Shared.Audio; namespace Content.Server.Silicons.Laws; @@ -35,8 +32,8 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly SharedRoleSystem _roles = default!; [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly SharedStunSystem _stunSystem = default!; [Dependency] private readonly UserInterfaceSystem _userInterface = default!; + [Dependency] private readonly EmagSystem _emag = default!; /// public override void Initialize() @@ -53,7 +50,7 @@ public override void Initialize() SubscribeLocalEvent(OnIonStormLaws); SubscribeLocalEvent(OnLawProviderMindAdded); SubscribeLocalEvent(OnLawProviderMindRemoved); - SubscribeLocalEvent(OnEmagLawsAdded); + SubscribeLocalEvent(OnEmagLawsAdded); } private void OnMapInit(EntityUid uid, SiliconLawBoundComponent component, MapInitEvent args) @@ -136,7 +133,7 @@ private void OnDirectedGetLaws(EntityUid uid, SiliconLawProviderComponent compon private void OnIonStormLaws(EntityUid uid, SiliconLawProviderComponent component, ref IonStormLawsEvent args) { // Emagged borgs are immune to ion storm - if (!HasComp(uid)) + if (!_emag.CheckFlag(uid, EmagType.Interaction)) { component.Lawset = args.Lawset; @@ -153,9 +150,8 @@ private void OnIonStormLaws(EntityUid uid, SiliconLawProviderComponent component } } - private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent component, ref GotEmaggedEvent args) + private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent component, ref SiliconEmaggedEvent args) { - if (component.Lawset == null) component.Lawset = GetLawset(component.Laws); @@ -178,20 +174,6 @@ private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent componen }); } - protected override void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) - { - if (component.RequireOpenPanel && TryComp(uid, out var panel) && !panel.Open) - return; - - base.OnGotEmagged(uid, component, ref args); - NotifyLawsChanged(uid, component.EmaggedSound); - if(_mind.TryGetMind(uid, out var mindId, out _)) - EnsureSubvertedSiliconRole(mindId); - - _stunSystem.TryParalyze(uid, component.StunTime, true); - - } - private void EnsureSubvertedSiliconRole(EntityUid mindId) { if (!_roles.MindHasRole(mindId)) diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index c20a6a46446..c2ea6dd1ac0 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -39,6 +39,7 @@ public sealed class VendingMachineSystem : SharedVendingMachineSystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SpeakOnUIClosedSystem _speakOnUIClosed = default!; [Dependency] private readonly SharedPointLightSystem _light = default!; + [Dependency] private readonly EmagSystem _emag = default!; private const float WallVendEjectDistanceFromWall = 1f; @@ -48,7 +49,6 @@ public override void Initialize() SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnBreak); - SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnDamageChanged); SubscribeLocalEvent(OnVendingPrice); SubscribeLocalEvent(OnEmpPulse); @@ -123,12 +123,6 @@ private void OnBreak(EntityUid uid, VendingMachineComponent vendComponent, Break TryUpdateVisualState(uid, vendComponent); } - private void OnEmagged(EntityUid uid, VendingMachineComponent component, ref GotEmaggedEvent args) - { - // only emag if there are emag-only items - args.Handled = component.EmaggedInventory.Count > 0; - } - private void OnDamageChanged(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args) { if (!args.DamageIncreased && component.Broken) @@ -232,7 +226,7 @@ public bool IsAuthorized(EntityUid uid, EntityUid sender, VendingMachineComponen if (!TryComp(uid, out var accessReader)) return true; - if (_accessReader.IsAllowed(sender, uid, accessReader) || HasComp(uid)) + if (_accessReader.IsAllowed(sender, uid, accessReader)) return true; Popup.PopupEntity(Loc.GetString("vending-machine-component-try-eject-access-denied"), uid); @@ -422,7 +416,7 @@ private void EjectItem(EntityUid uid, VendingMachineComponent? vendComponent = n if (!Resolve(uid, ref component)) return null; - if (type == InventoryType.Emagged && HasComp(uid)) + if (type == InventoryType.Emagged && _emag.CheckFlag(uid, EmagType.Interaction)) return component.EmaggedInventory.GetValueOrDefault(entryId); if (type == InventoryType.Contraband && component.Contraband) diff --git a/Content.Shared/Access/Components/AccessReaderComponent.cs b/Content.Shared/Access/Components/AccessReaderComponent.cs index 903ceab186d..0219fd2b1ad 100644 --- a/Content.Shared/Access/Components/AccessReaderComponent.cs +++ b/Content.Shared/Access/Components/AccessReaderComponent.cs @@ -76,7 +76,7 @@ public sealed partial class AccessReaderComponent : Component /// Whether or not emag interactions have an effect on this. /// [DataField] - public bool BreakOnEmag = true; + public bool BreakOnAccessBreaker = true; } [DataDefinition, Serializable, NetSerializable] diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 0b1d508cc24..84de549b663 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -2,7 +2,6 @@ using System.Linq; using Content.Shared.Access.Components; using Content.Shared.DeviceLinking.Events; -using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; @@ -24,6 +23,7 @@ public sealed class AccessReaderSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SharedGameTicker _gameTicker = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; @@ -71,17 +71,28 @@ private void OnLinkAttempt(EntityUid uid, AccessReaderComponent component, LinkA { if (args.User == null) // AutoLink (and presumably future external linkers) have no user. return; - if (!HasComp(uid) && !IsAllowed(args.User.Value, uid, component)) + if (!IsAllowed(args.User.Value, uid, component)) args.Cancel(); } private void OnEmagged(EntityUid uid, AccessReaderComponent reader, ref GotEmaggedEvent args) { - if (!reader.BreakOnEmag) + if (!_emag.CompareFlag(args.Type, EmagType.Access)) return; + + if (!reader.BreakOnAccessBreaker) + return; + + if (!GetMainAccessReader(uid, out var accessReader)) + return; + + if (accessReader.Value.Comp.AccessLists.Count < 1) + return; + + args.Repeatable = true; args.Handled = true; - reader.Enabled = false; - reader.AccessLog.Clear(); + accessReader.Value.Comp.AccessLists.Clear(); + accessReader.Value.Comp.AccessLog.Clear(); Dirty(uid, reader); } @@ -135,6 +146,7 @@ public bool GetMainAccessReader(EntityUid uid, [NotNullWhen(true)] out Entity - /// Emag sound effects. - /// - [DataField("sparkSound")] - public SoundSpecifier SparkSound = new SoundCollectionSpecifier("sparks") - { - Params = AudioParams.Default.WithVolume(8), - }; - // TODO: Remove this from here when cloning and/or zombies are refactored [DataField("screamSound")] public SoundSpecifier ScreamSound = new SoundCollectionSpecifier("ZombieScreams") diff --git a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs index 9fdb4a6a804..a650ef72f80 100644 --- a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs +++ b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs @@ -24,6 +24,7 @@ public sealed partial class DisposalDoAfterEvent : SimpleDoAfterEvent public abstract class SharedDisposalUnitSystem : EntitySystem { [Dependency] protected readonly IGameTiming GameTiming = default!; + [Dependency] protected readonly EmagSystem _emag = default!; [Dependency] protected readonly MetaDataSystem Metadata = default!; [Dependency] protected readonly SharedJointSystem Joints = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; @@ -102,6 +103,12 @@ protected void OnCanDragDropOn(EntityUid uid, SharedDisposalUnitComponent compon protected void OnEmagged(EntityUid uid, SharedDisposalUnitComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (component.DisablePressure == true) + return; + component.DisablePressure = true; args.Handled = true; } diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 26257661636..f86585f81fd 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -34,6 +34,7 @@ public abstract partial class SharedDoorSystem : EntitySystem [Dependency] private readonly INetManager _net = default!; [Dependency] protected readonly SharedPhysicsSystem PhysicsSystem = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SharedStunSystem _stunSystem = default!; [Dependency] protected readonly TagSystem Tags = default!; [Dependency] protected readonly SharedAudioSystem Audio = default!; @@ -77,8 +78,6 @@ public override void Initialize() SubscribeLocalEvent(OnWeldAttempt); SubscribeLocalEvent(OnWeldChanged); SubscribeLocalEvent(OnPryTimeModifier); - - SubscribeLocalEvent(OnAttemptEmag); SubscribeLocalEvent(OnEmagged); } @@ -118,31 +117,24 @@ private void OnRemove(Entity door, ref ComponentRemove args) _activeDoors.Remove(door); } - private void OnAttemptEmag(EntityUid uid, DoorComponent door, ref OnAttemptEmagEvent args) + private void OnEmagged(EntityUid uid, DoorComponent door, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Access)) + return; + if (!TryComp(uid, out var airlock)) - { - args.Handled = true; return; - } if (IsBolted(uid) || !airlock.Powered) - { - args.Handled = true; return; - } if (door.State != DoorState.Closed) - { - args.Handled = true; - } - } + return; - private void OnEmagged(EntityUid uid, DoorComponent door, ref GotEmaggedEvent args) - { if (!SetState(uid, DoorState.Emagging, door)) return; - Audio.PlayPredicted(door.SparkSound, uid, args.UserUid, AudioParams.Default.WithVolume(8)); + + args.Repeatable = true; args.Handled = true; } diff --git a/Content.Shared/Emag/Components/EmagComponent.cs b/Content.Shared/Emag/Components/EmagComponent.cs index 69115c3be65..23d3b90eeda 100644 --- a/Content.Shared/Emag/Components/EmagComponent.cs +++ b/Content.Shared/Emag/Components/EmagComponent.cs @@ -1,7 +1,8 @@ using Content.Shared.Emag.Systems; using Content.Shared.Tag; -using Content.Shared.Whitelist; +using Robust.Shared.Audio; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization; @@ -15,21 +16,21 @@ public sealed partial class EmagComponent : Component /// /// The tag that marks an entity as immune to emags /// - [DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField] [AutoNetworkedField] - public string EmagImmuneTag = "EmagImmune"; + public ProtoId EmagImmuneTag = "EmagImmune"; - // DeltaV - Add a whitelist/blacklist to the Emag /// - /// Whitelist that entities must be on to work. + /// What type of emag effect this device will do /// [DataField] - public EntityWhitelist? Whitelist; + [AutoNetworkedField] + public EmagType EmagType = EmagType.Interaction; /// - /// Blacklist that entities must be off to work. + /// What sound should the emag play when used /// [DataField] - public EntityWhitelist? Blacklist; - // End of DeltaV code + [AutoNetworkedField] + public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); } diff --git a/Content.Shared/Emag/Components/EmaggedComponent.cs b/Content.Shared/Emag/Components/EmaggedComponent.cs index 337f1a8e561..152fdca8e36 100644 --- a/Content.Shared/Emag/Components/EmaggedComponent.cs +++ b/Content.Shared/Emag/Components/EmaggedComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Emag.Systems; using Robust.Shared.GameStates; namespace Content.Shared.Emag.Components; @@ -5,7 +6,12 @@ namespace Content.Shared.Emag.Components; /// /// Marker component for emagged entities /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class EmaggedComponent : Component { + /// + /// The EmagType flags that were used to emag this device + /// + [DataField, AutoNetworkedField] + public EmagType EmagType = EmagType.None; } diff --git a/Content.Shared/Emag/Systems/EmagSystem.cs b/Content.Shared/Emag/Systems/EmagSystem.cs index 20af8365197..e6d0e1e653c 100644 --- a/Content.Shared/Emag/Systems/EmagSystem.cs +++ b/Content.Shared/Emag/Systems/EmagSystem.cs @@ -6,9 +6,8 @@ using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Popups; -using Content.Shared.Silicons.Laws.Components; using Content.Shared.Tag; -using Content.Shared.Whitelist; +using Robust.Shared.Audio.Systems; namespace Content.Shared.Emag.Systems; @@ -24,98 +23,123 @@ public sealed class EmagSystem : EntitySystem [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; // DeltaV - Add a whitelist/blacklist to the Emag + [Dependency] private readonly SharedAudioSystem _audio = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnAccessOverriderAccessUpdated); } + private void OnAccessOverriderAccessUpdated(Entity entity, ref OnAccessOverriderAccessUpdatedEvent args) + { + if (!CompareFlag(entity.Comp.EmagType, EmagType.Access)) + return; + + entity.Comp.EmagType &= ~EmagType.Access; + Dirty(entity); + } private void OnAfterInteract(EntityUid uid, EmagComponent comp, AfterInteractEvent args) { if (!args.CanReach || args.Target is not { } target) return; - args.Handled = TryUseEmag(uid, args.User, target, comp); + args.Handled = TryEmagEffect((uid, comp), args.User, target); } /// - /// Tries to use the emag on a target entity + /// Does the emag effect on a specified entity /// - public bool TryUseEmag(EntityUid uid, EntityUid user, EntityUid target, EmagComponent? comp = null) + public bool TryEmagEffect(Entity ent, EntityUid user, EntityUid target) { - if (!Resolve(uid, ref comp, false)) - return false; - - if (_tag.HasTag(target, comp.EmagImmuneTag)) + if (!Resolve(ent, ref ent.Comp, false)) return false; - // DeltaV - Add a whitelist / blacklist to the Emag - if (_whitelist.IsWhitelistFail(comp.Whitelist, target) - || _whitelist.IsBlacklistPass(comp.Blacklist, target)) - { - _popup.PopupClient(Loc.GetString("emag-invalid-target", ("emag", uid), ("target", target)), user, user); + if (_tag.HasTag(target, ent.Comp.EmagImmuneTag)) return false; - } - // End of DeltaV code - TryComp(uid, out var charges); - if (_charges.IsEmpty(uid, charges)) + TryComp(ent, out var charges); + if (_charges.IsEmpty(ent, charges)) { _popup.PopupClient(Loc.GetString("emag-no-charges"), user, user); return false; } - var handled = DoEmagEffect(user, target); - if (!handled) + var emaggedEvent = new GotEmaggedEvent(user, ent.Comp.EmagType); + RaiseLocalEvent(target, ref emaggedEvent); + + if (!emaggedEvent.Handled) return false; - _popup.PopupClient(Loc.GetString("emag-success", ("target", Identity.Entity(target, EntityManager))), user, - user, PopupType.Medium); + _popup.PopupPredicted(Loc.GetString("emag-success", ("target", Identity.Entity(target, EntityManager))), user, user, PopupType.Medium); + + _audio.PlayPredicted(ent.Comp.EmagSound, ent, ent); - _adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(user):player} emagged {ToPrettyString(target):target}"); + _adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(user):player} emagged {ToPrettyString(target):target} with flag(s): {ent.Comp.EmagType}"); - if (charges != null) - _charges.UseCharge(uid, charges); - return true; + if (charges != null && emaggedEvent.Handled) + _charges.UseCharge(ent, charges); + + if (!emaggedEvent.Repeatable) + { + EnsureComp(target, out var emaggedComp); + + emaggedComp.EmagType |= ent.Comp.EmagType; + Dirty(target, emaggedComp); + } + + return emaggedEvent.Handled; } /// - /// Does the emag effect on a specified entity + /// Checks whether an entity has the EmaggedComponent with a set flag. /// - public bool DoEmagEffect(EntityUid user, EntityUid target) + /// The target entity to check for the flag. + /// The EmagType flag to check for. + /// True if entity has EmaggedComponent and the provided flag. False if the entity lacks EmaggedComponent or provided flag. + public bool CheckFlag(EntityUid target, EmagType flag) { - // prevent emagging twice - if (HasComp(target)) + if (!TryComp(target, out var comp)) return false; - var onAttemptEmagEvent = new OnAttemptEmagEvent(user); - RaiseLocalEvent(target, ref onAttemptEmagEvent); + if ((comp.EmagType & flag) == flag) + return true; - // prevent emagging if attempt fails - if (onAttemptEmagEvent.Handled) - return false; + return false; + } - var emaggedEvent = new GotEmaggedEvent(user); - RaiseLocalEvent(target, ref emaggedEvent); + /// + /// Compares a flag to the target. + /// + /// The target flag to check. + /// The flag to check for within the target. + /// True if target contains flag. Otherwise false. + public bool CompareFlag(EmagType target, EmagType flag) + { + if ((target & flag) == flag) + return true; - if (emaggedEvent.Handled && !emaggedEvent.Repeatable) - EnsureComp(target); - return emaggedEvent.Handled; + return false; } } + +[Flags] +public enum EmagType : byte +{ + None = 0, + Interaction = 1 << 1, + Access = 1 << 2 +} /// /// Shows a popup to emag user (client side only!) and adds to the entity when handled /// /// Emag user +/// The emag type to use /// Did the emagging succeed? Causes a user-only popup to show on client side /// Can the entity be emagged more than once? Prevents adding of /// Needs to be handled in shared/client, not just the server, to actually show the emagging popup [ByRefEvent] -public record struct GotEmaggedEvent(EntityUid UserUid, bool Handled = false, bool Repeatable = false); - -[ByRefEvent] -public record struct OnAttemptEmagEvent(EntityUid UserUid, bool Handled = false); +public record struct GotEmaggedEvent(EntityUid UserUid, EmagType Type, bool Handled = false, bool Repeatable = false); diff --git a/Content.Shared/Fax/Components/FaxMachineComponent.cs b/Content.Shared/Fax/Components/FaxMachineComponent.cs index 161c878e275..2407ba59499 100644 --- a/Content.Shared/Fax/Components/FaxMachineComponent.cs +++ b/Content.Shared/Fax/Components/FaxMachineComponent.cs @@ -59,12 +59,6 @@ public sealed partial class FaxMachineComponent : Component [DataField] public bool ReceiveNukeCodes { get; set; } = false; - /// - /// Sound to play when fax has been emagged - /// - [DataField] - public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); - /// /// Sound to play when fax printing new message /// diff --git a/Content.Shared/Lathe/SharedLatheSystem.cs b/Content.Shared/Lathe/SharedLatheSystem.cs index dd251ed18b3..7328787f25e 100644 --- a/Content.Shared/Lathe/SharedLatheSystem.cs +++ b/Content.Shared/Lathe/SharedLatheSystem.cs @@ -18,6 +18,7 @@ public abstract class SharedLatheSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly SharedMaterialStorageSystem _materialStorage = default!; + [Dependency] private readonly EmagSystem _emag = default!; public readonly Dictionary> InverseRecipes = new(); @@ -66,6 +67,12 @@ public bool CanProduce(EntityUid uid, LatheRecipePrototype recipe, int amount = private void OnEmagged(EntityUid uid, EmagLatheRecipesComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + args.Handled = true; } diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs index 8754de50583..6dc6cbfe0b3 100644 --- a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Light.Components; using Content.Shared.Mind.Components; +using Content.Shared.Storage.Components; using Content.Shared.Toggleable; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; @@ -22,6 +23,7 @@ public sealed class UnpoweredFlashlightSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedPointLightSystem _light = default!; + [Dependency] private readonly EmagSystem _emag = default!; public override void Initialize() { @@ -78,6 +80,9 @@ private void OnMindAdded(EntityUid uid, UnpoweredFlashlightComponent component, private void OnGotEmagged(EntityUid uid, UnpoweredFlashlightComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + if (!_light.TryGetLight(uid, out var light)) return; diff --git a/Content.Shared/Lock/LockComponent.cs b/Content.Shared/Lock/LockComponent.cs index 070d5801c1c..2689602ae8c 100644 --- a/Content.Shared/Lock/LockComponent.cs +++ b/Content.Shared/Lock/LockComponent.cs @@ -54,9 +54,9 @@ public sealed partial class LockComponent : Component /// /// Whether or not an emag disables it. /// - [DataField("breakOnEmag")] + [DataField] [AutoNetworkedField] - public bool BreakOnEmag = true; + public bool BreakOnAccessBreaker = true; /// /// Amount of do-after time needed to lock the entity. diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index 10652800953..0b24bc67221 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -28,6 +28,7 @@ public sealed class LockSystem : EntitySystem [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] private readonly ActivatableUISystem _activatableUI = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPopupSystem _sharedPopupSystem = default!; @@ -295,7 +296,10 @@ private void AddToggleLockVerb(EntityUid uid, LockComponent component, GetVerbsE private void OnEmagged(EntityUid uid, LockComponent component, ref GotEmaggedEvent args) { - if (!component.Locked || !component.BreakOnEmag) + if (!_emag.CompareFlag(args.Type, EmagType.Access)) + return; + + if (!component.Locked || !component.BreakOnAccessBreaker) return; _audio.PlayPredicted(component.UnlockSound, uid, args.UserUid); @@ -307,7 +311,7 @@ private void OnEmagged(EntityUid uid, LockComponent component, ref GotEmaggedEve var ev = new LockToggledEvent(false); RaiseLocalEvent(uid, ref ev, true); - RemComp(uid); //Literally destroys the lock as a tell it was emagged + args.Repeatable = true; args.Handled = true; } diff --git a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs index 014c6811c1f..7d6fa5ebca1 100644 --- a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs +++ b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs @@ -29,6 +29,7 @@ public abstract class SharedMaterialReclaimerSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] protected readonly SharedContainerSystem Container = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; public const string ActiveReclaimerContainerId = "active-material-reclaimer-container"; @@ -60,6 +61,12 @@ private void OnExamined(EntityUid uid, MaterialReclaimerComponent component, Exa private void OnEmagged(EntityUid uid, MaterialReclaimerComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + args.Handled = true; } @@ -208,7 +215,7 @@ public bool CanGib(EntityUid uid, EntityUid victim, MaterialReclaimerComponent c component.Enabled && !component.Broken && HasComp(victim) && - HasComp(uid);*/ + _emag.CheckFlag(uid, EmagType.Interaction);*/ } /// diff --git a/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs b/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs index f6ce235ff74..891129a2ddc 100644 --- a/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs +++ b/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs @@ -20,6 +20,7 @@ public abstract partial class SharedCryoPodSystem: EntitySystem { [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly StandingStateSystem _standingStateSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; @@ -156,9 +157,13 @@ protected void AddAlternativeVerbs(EntityUid uid, CryoPodComponent cryoPodCompon protected void OnEmagged(EntityUid uid, CryoPodComponent? cryoPodComponent, ref GotEmaggedEvent args) { if (!Resolve(uid, ref cryoPodComponent)) - { return; - } + + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (cryoPodComponent.PermaLocked && cryoPodComponent.Locked) + return; cryoPodComponent.PermaLocked = true; cryoPodComponent.Locked = true; diff --git a/Content.Shared/Ninja/Components/EmagProviderComponent.cs b/Content.Shared/Ninja/Components/EmagProviderComponent.cs index ae3e85cbe42..630ce12d53c 100644 --- a/Content.Shared/Ninja/Components/EmagProviderComponent.cs +++ b/Content.Shared/Ninja/Components/EmagProviderComponent.cs @@ -1,6 +1,8 @@ +using Content.Shared.Emag.Systems; using Content.Shared.Ninja.Systems; using Content.Shared.Tag; using Content.Shared.Whitelist; +using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -17,11 +19,23 @@ public sealed partial class EmagProviderComponent : Component /// The tag that marks an entity as immune to emagging. /// [DataField] - public ProtoId EmagImmuneTag = "EmagImmune"; + public ProtoId AccessBreakerImmuneTag = "AccessBreakerImmune"; /// /// Whitelist that entities must be on to work. /// [DataField] public EntityWhitelist? Whitelist; + + /// + /// What type of emag this will provide. + /// + [DataField] + public EmagType EmagType = EmagType.Access; + + /// + /// What sound should the emag play when used + /// + [DataField] + public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); } diff --git a/Content.Shared/Ninja/Systems/EmagProviderSystem.cs b/Content.Shared/Ninja/Systems/EmagProviderSystem.cs index ae0bacaf5f6..3be2ae52e13 100644 --- a/Content.Shared/Ninja/Systems/EmagProviderSystem.cs +++ b/Content.Shared/Ninja/Systems/EmagProviderSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Ninja.Components; using Content.Shared.Tag; using Content.Shared.Whitelist; +using Robust.Shared.Audio.Systems; namespace Content.Shared.Ninja.Systems; @@ -13,6 +14,7 @@ namespace Content.Shared.Ninja.Systems; /// public sealed class EmagProviderSystem : EntitySystem { + [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; @@ -42,14 +44,18 @@ private void OnBeforeInteractHand(Entity ent, ref BeforeI return; // only allowed to emag non-immune entities - if (_tag.HasTag(target, comp.EmagImmuneTag)) + if (_tag.HasTag(target, comp.AccessBreakerImmuneTag)) return; - var handled = _emag.DoEmagEffect(uid, target); - if (!handled) + var emagEv = new GotEmaggedEvent(uid, EmagType.Access); + RaiseLocalEvent(args.Target, ref emagEv); + + if (!emagEv.Handled) return; - _adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(uid):player} emagged {ToPrettyString(target):target}"); + _audio.PlayPredicted(comp.EmagSound, uid, uid); + + _adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(uid):player} emagged {ToPrettyString(target):target} with flag(s): {ent.Comp.EmagType}"); var ev = new EmaggedSomethingEvent(target); RaiseLocalEvent(uid, ref ev); args.Handled = true; @@ -57,7 +63,7 @@ private void OnBeforeInteractHand(Entity ent, ref BeforeI } /// -/// Raised on the player when emagging something. +/// Raised on the player when access breaking something. /// [ByRefEvent] public record struct EmaggedSomethingEvent(EntityUid Target); diff --git a/Content.Shared/Pinpointer/SharedPinpointerSystem.cs b/Content.Shared/Pinpointer/SharedPinpointerSystem.cs index 7f6b8891255..47109601835 100644 --- a/Content.Shared/Pinpointer/SharedPinpointerSystem.cs +++ b/Content.Shared/Pinpointer/SharedPinpointerSystem.cs @@ -10,6 +10,7 @@ namespace Content.Shared.Pinpointer; public abstract class SharedPinpointerSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly EmagSystem _emag = default!; public override void Initialize() { @@ -137,6 +138,15 @@ public virtual bool TogglePinpointer(EntityUid uid, PinpointerComponent? pinpoin private void OnEmagged(EntityUid uid, PinpointerComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + + if (component.CanRetarget) + return; + args.Handled = true; component.CanRetarget = true; } diff --git a/Content.Shared/Silicons/Bots/EmaggableMedibotComponent.cs b/Content.Shared/Silicons/Bots/EmaggableMedibotComponent.cs index 73775aaf91a..0253cf12bc0 100644 --- a/Content.Shared/Silicons/Bots/EmaggableMedibotComponent.cs +++ b/Content.Shared/Silicons/Bots/EmaggableMedibotComponent.cs @@ -16,13 +16,4 @@ public sealed partial class EmaggableMedibotComponent : Component /// [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] public Dictionary Replacements = new(); - - /// - /// Sound to play when the bot has been emagged - /// - [DataField] - public SoundSpecifier SparkSound = new SoundCollectionSpecifier("sparks") - { - Params = AudioParams.Default.WithVolume(8f) - }; } diff --git a/Content.Shared/Silicons/Bots/MedibotSystem.cs b/Content.Shared/Silicons/Bots/MedibotSystem.cs index 68f930931c2..407e586eb1c 100644 --- a/Content.Shared/Silicons/Bots/MedibotSystem.cs +++ b/Content.Shared/Silicons/Bots/MedibotSystem.cs @@ -20,6 +20,7 @@ namespace Content.Shared.Silicons.Bots; public sealed class MedibotSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private SharedInteractionSystem _interaction = default!; [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private SharedPopupSystem _popup = default!; @@ -36,10 +37,14 @@ public override void Initialize() private void OnEmagged(EntityUid uid, EmaggableMedibotComponent comp, ref GotEmaggedEvent args) { - if (!TryComp(uid, out var medibot)) + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) return; - _audio.PlayPredicted(comp.SparkSound, uid, args.UserUid); + if (!TryComp(uid, out var medibot)) + return; foreach (var (state, treatment) in comp.Replacements) { diff --git a/Content.Shared/Silicons/Laws/SharedSiliconLawSystem.cs b/Content.Shared/Silicons/Laws/SharedSiliconLawSystem.cs index a30e7c8980f..c3a8c228084 100644 --- a/Content.Shared/Silicons/Laws/SharedSiliconLawSystem.cs +++ b/Content.Shared/Silicons/Laws/SharedSiliconLawSystem.cs @@ -1,7 +1,10 @@ using Content.Shared.Emag.Systems; +using Content.Shared.Mind; using Content.Shared.Popups; using Content.Shared.Silicons.Laws.Components; +using Content.Shared.Stunnable; using Content.Shared.Wires; +using Robust.Shared.Audio; namespace Content.Shared.Silicons.Laws; @@ -11,22 +14,29 @@ namespace Content.Shared.Silicons.Laws; public abstract partial class SharedSiliconLawSystem : EntitySystem { [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedStunSystem _stunSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; /// public override void Initialize() { InitializeUpdater(); SubscribeLocalEvent(OnGotEmagged); - SubscribeLocalEvent(OnAttemptEmag); } - protected virtual void OnAttemptEmag(EntityUid uid, EmagSiliconLawComponent component, ref OnAttemptEmagEvent args) + private void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) { - //prevent self emagging + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + + // prevent self-emagging if (uid == args.UserUid) { _popup.PopupClient(Loc.GetString("law-emag-cannot-emag-self"), uid, args.UserUid); - args.Handled = true; return; } @@ -35,14 +45,33 @@ protected virtual void OnAttemptEmag(EntityUid uid, EmagSiliconLawComponent comp !panel.Open) { _popup.PopupClient(Loc.GetString("law-emag-require-panel"), uid, args.UserUid); - args.Handled = true; + return; } - } + var ev = new SiliconEmaggedEvent(args.UserUid); + RaiseLocalEvent(uid, ref ev); - protected virtual void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args) - { component.OwnerName = Name(args.UserUid); + + NotifyLawsChanged(uid, component.EmaggedSound); + if(_mind.TryGetMind(uid, out var mindId, out _)) + EnsureSubvertedSiliconRole(mindId); + + _stunSystem.TryParalyze(uid, component.StunTime, true); + args.Handled = true; } + + protected virtual void NotifyLawsChanged(EntityUid uid, SoundSpecifier? cue = null) + { + + } + + protected virtual void EnsureSubvertedSiliconRole(EntityUid mindId) + { + + } } + +[ByRefEvent] +public record struct SiliconEmaggedEvent(EntityUid user); diff --git a/Content.Shared/Singularity/EntitySystems/SharedSingularityGeneratorSystem.cs b/Content.Shared/Singularity/EntitySystems/SharedSingularityGeneratorSystem.cs index ee6dc89bb84..331c1fa4ddb 100644 --- a/Content.Shared/Singularity/EntitySystems/SharedSingularityGeneratorSystem.cs +++ b/Content.Shared/Singularity/EntitySystems/SharedSingularityGeneratorSystem.cs @@ -11,6 +11,7 @@ public abstract class SharedSingularityGeneratorSystem : EntitySystem { #region Dependencies [Dependency] protected readonly SharedPopupSystem PopupSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; #endregion Dependencies public override void Initialize() @@ -22,7 +23,16 @@ public override void Initialize() private void OnEmagged(EntityUid uid, SingularityGeneratorComponent component, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + + if (component.FailsafeDisabled) + return; + component.FailsafeDisabled = true; args.Handled = true; } -} \ No newline at end of file +} diff --git a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs index 94562ce8d1b..c4f3eede2d2 100644 --- a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs +++ b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs @@ -2,6 +2,7 @@ using Robust.Shared.Prototypes; using System.Linq; using Content.Shared.DoAfter; +using Content.Shared.Emag.Systems; using Content.Shared.Interaction; using Content.Shared.Popups; using Robust.Shared.Audio; @@ -19,11 +20,14 @@ public abstract partial class SharedVendingMachineSystem : EntitySystem [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] protected readonly IRobustRandom Randomizer = default!; + [Dependency] private readonly EmagSystem _emag = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnEmagged); + SubscribeLocalEvent(OnAfterInteract); } @@ -49,9 +53,21 @@ public void RestockInventoryFromPrototype(EntityUid uid, Dirty(uid, component); } + private void OnEmagged(EntityUid uid, VendingMachineComponent component, ref GotEmaggedEvent args) + { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(uid, EmagType.Interaction)) + return; + + // only emag if there are emag-only items + args.Handled = component.EmaggedInventory.Count > 0; + } + /// /// Returns all of the vending machine's inventory. Only includes emagged and contraband inventories if - /// exists and is true + /// with the EmagType.Interaction flag exists and is true /// are true respectively. /// /// @@ -64,7 +80,7 @@ public List GetAllInventory(EntityUid uid, Vending var inventory = new List(component.Inventory.Values); - if (HasComp(uid)) + if (_emag.CheckFlag(uid, EmagType.Interaction)) inventory.AddRange(component.EmaggedInventory.Values); if (component.Contraband) diff --git a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactCrusherSystem.cs b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactCrusherSystem.cs index da253ba80af..2d7d86822f9 100644 --- a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactCrusherSystem.cs +++ b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactCrusherSystem.cs @@ -14,6 +14,7 @@ public abstract class SharedArtifactCrusherSystem : EntitySystem [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; [Dependency] protected readonly SharedAudioSystem AudioSystem = default!; [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; + [Dependency] private readonly EmagSystem _emag = default!; /// public override void Initialize() @@ -40,6 +41,15 @@ private void OnStorageAfterOpen(Entity ent, ref Storag private void OnEmagged(Entity ent, ref GotEmaggedEvent args) { + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) + return; + + if (_emag.CheckFlag(ent, EmagType.Interaction)) + return; + + if (ent.Comp.AutoLock) + return; + ent.Comp.AutoLock = true; args.Handled = true; } diff --git a/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl b/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl index 5e7df424e30..7fa683d968a 100644 --- a/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl @@ -18,9 +18,6 @@ uplink-syndicate-radio-implanter-bundle-desc = Two implanters for the price of o uplink-syndicate-hostage-implanter-bundle-name = Hostage implant bundle uplink-syndicate-hostage-implanter-bundle-desc = These implants pacify when injected and also allow the hostages to enter your shuttle without being shot by turrets! -uplink-doorjack-name = Airlock Access Override -uplink-doorjack-desc = A specialized cryptographic sequencer, designed solely to doorjack NanoTrasen's updated airlocks. Does not tamper with anything else. - uplink-home-run-bat-name = Home Run Bat uplink-home-run-bat-desc = Rigged bat pre-coated in blood for Syndicate tee-ball practice. Launch your foes! diff --git a/Resources/Locale/en-US/emag/emag.ftl b/Resources/Locale/en-US/emag/emag.ftl index ce7b5c5b24a..8fbfd5580ac 100644 --- a/Resources/Locale/en-US/emag/emag.ftl +++ b/Resources/Locale/en-US/emag/emag.ftl @@ -1,4 +1,4 @@ -emag-success = The card zaps something in {THE($target)}. +emag-success = The device zaps something in {THE($target)}. emag-no-charges = No charges left! # DeltaV emag-invalid-target = {$emag} has no effect on {THE($target)}. diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 7f435b7650a..5610970c3b5 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -117,6 +117,9 @@ uplink-chest-rig-desc = Explosion-resistant tactical webbing used for holding tr uplink-emag-name = Cryptographic Sequencer uplink-emag-desc = The business card of the Syndicate, this sequencer is able to tamper with a variety of station devices. Rendered obsolete against airlocks. +uplink-access-breaker-name = Access Breaker +uplink-access-breaker-desc = A hacked access configurator and a good friend of the emag. This device is able to force airlocks open as well as erase access requirements from station equipment. Recharges automatically. + uplink-agent-id-card-name = Agent ID Card uplink-agent-id-card-desc = A modified ID card that can copy accesses from other cards and change its name and job title at-will. diff --git a/Resources/Locale/en-US/thief/backpack.ftl b/Resources/Locale/en-US/thief/backpack.ftl index d1aecb8ec74..9010ed8781a 100644 --- a/Resources/Locale/en-US/thief/backpack.ftl +++ b/Resources/Locale/en-US/thief/backpack.ftl @@ -40,7 +40,7 @@ thief-backpack-category-syndie-name = syndie kit thief-backpack-category-syndie-description = Trinkets from a disavowed past, or stolen from a careless agent? You've made some connections. Whiskey, echo... - Includes: An Emag, Interdyne cigs, a Syndicate codeword, + Includes: An Emag, Access Breaker, Interdyne cigs, a Syndicate codeword, a Radio Jammer, a lighter and some strange red crystals. thief-backpack-category-sleeper-name = sleeper kit diff --git a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml index 352c4a1d916..b1b857ff1a2 100644 --- a/Resources/Prototypes/Catalog/thief_toolbox_sets.yml +++ b/Resources/Prototypes/Catalog/thief_toolbox_sets.yml @@ -64,6 +64,7 @@ - RadioJammer - TraitorCodePaper - Emag + - AccessBreaker - Lighter - CigPackSyndicate - Telecrystal10 #The thief cannot use them, but it may induce communication with traitors diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 77acc8135f8..1b1c8986594 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -863,16 +863,29 @@ # Disruption +- type: listing + id: UplinkAccessBreaker + name: uplink-access-breaker-name + description: uplink-access-breaker-desc + productEntity: AccessBreaker + discountCategory: rareDiscounts # DeltaV - was veryRareDiscounts + discountDownTo: + Telecrystal: 2 # DeltaV - was 3 + cost: + Telecrystal: 4 # DeltaV - was 5 + categories: + - UplinkDisruption + - type: listing id: UplinkEmag name: uplink-emag-name description: uplink-emag-desc productEntity: Emag - discountCategory: rareDiscounts # DeltaV - was very rare + discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 # DeltaV + Telecrystal: 2 cost: - Telecrystal: 4 # DeltaV - was 8, can no longer emag doors + Telecrystal: 4 categories: - UplinkDisruption diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index 06a76403e2e..ff07e7ff1b5 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -169,7 +169,6 @@ - cell_slot - type: Lock locked: true - breakOnEmag: false unlockOnClick: false - type: ActivatableUIRequiresLock - type: LockedWiresPanel diff --git a/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml b/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml index 791a0d09453..ee40316e62d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/arabianlamp.yml @@ -7,10 +7,10 @@ - type: Appearance - type: AccessReader access: [ [ "CentralCommand" ] ] - breakOnEmag: false + breakOnAccessBreaker: false - type: Lock lockOnClick: false - breakOnEmag: false + breakOnAccessBreaker: false - type: EntityStorage capacity: 1 # Its smol. itemCanStoreMobs: false # just leaving this here explicitly since I know at some point someone will want to use this to hold a mob. This also prevents it from becoming His Grace. diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 644bac105e0..3667ec475fc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -587,7 +587,7 @@ id: BorgModuleOperative parent: [ BaseBorgModuleSyndicate, BaseProviderBorgModule, BaseSyndicateContraband ] name: operative cyborg module - description: A module that comes with a crowbar, an Emag and a syndicate pinpointer. + description: A module that comes with a crowbar, an Emag, an Access Breaker and a syndicate pinpointer. components: - type: Sprite layers: @@ -597,7 +597,7 @@ items: - Crowbar - Emag - - Doorjack #Delta-V add doorjack, emag no longer opens doors. + - AccessBreaker - PinpointerSyndicateNuclear - type: BorgModuleIcon icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-operative-module } diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml new file mode 100644 index 00000000000..15c1beba8ed --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml @@ -0,0 +1,22 @@ +- type: entity + parent: [BaseItem, BaseSyndicateContraband] + id: AccessBreakerUnlimited + suffix: Unlimited + name: authentication disruptor + description: A hacked access configurator, specialized to unlock and erase access from digital locks. + components: + - type: Emag + emagType: Access + - type: Sprite + sprite: Objects/Tools/access_breaker.rsi + state: icon + - type: Item + sprite: Objects/Tools/access_breaker.rsi + +- type: entity + parent: AccessBreakerUnlimited + id: AccessBreaker + suffix: Limited + components: + - type: LimitedCharges + - type: AutoRecharge diff --git a/Resources/Prototypes/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/Entities/Objects/Tools/emag.yml index ece8a51e982..28c007a63f1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/emag.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/emag.yml @@ -6,9 +6,6 @@ description: The all-in-one hacking solution. The thinking man's lockpick. The iconic EMAG. components: - type: Emag - blacklist: # DeltaV - Split Emag into 2 items, this one cannot emag doors - components: - - Airlock - type: Sprite sprite: Objects/Tools/emag.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index cd736a33d08..4c3fd937e03 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -98,10 +98,10 @@ stateLocked: cursed_door stateUnlocked: decursed_door - type: Lock - breakOnEmag: false + breakOnAccessBreaker: false - type: AccessReader access: [["Wizard"]] - breakOnEmag: false + breakOnAccessBreaker: false - type: Projectile deleteOnCollide: false onlyCollideWhenShot: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 3dc7a6395a9..d251ea104f6 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -621,7 +621,7 @@ color: "#3c5eb5" - type: Tag tags: - - EmagImmune + - AccessBreakerImmune - type: ItemSlots - type: ContainerContainer containers: diff --git a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml index 96de462b79c..770a17a8ff7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml @@ -35,7 +35,7 @@ visible: false map: ["enum.FatExtractorVisualLayers.Smoke"] - type: Lock - breakOnEmag: false + breakOnAccessBreaker: false - type: GenericVisualizer visuals: enum.StorageVisuals.Open: diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index db1ca9e7d5e..8e44bd5c700 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -104,6 +104,7 @@ responsePings: false notifyAdmins: true - type: Emagged + emagType: Interaction - type: entity parent: FaxMachineBase diff --git a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml index bdb8862a829..e9e9294e636 100644 --- a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml +++ b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml @@ -17,7 +17,7 @@ - type: ActivatableUI key: enum.CryostorageUIKey.Key - type: AccessReader - breakOnEmag: false + breakOnAccessBreaker: false access: [["Cryogenics"]] - type: InteractionOutline - type: Cryostorage diff --git a/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml b/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml index 80f8e177ec7..dce54381c1b 100644 --- a/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml @@ -119,19 +119,6 @@ categories: - UplinkImplants -- type: listing - id: UplinkDoorjack - name: uplink-doorjack-name - description: uplink-doorjack-desc - productEntity: Doorjack - discountCategory: rareDiscounts - discountDownTo: - Telecrystal: 2 - cost: - Telecrystal: 4 - categories: - - UplinkDisruption - - type: listing id: BaseBallBatHomeRun name: uplink-home-run-bat-name diff --git a/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml deleted file mode 100644 index f18160ae20d..00000000000 --- a/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml +++ /dev/null @@ -1,17 +0,0 @@ -- type: entity - parent: Emag - id: Doorjack - name: airlock access override - description: A specialized cryptographic sequencer with a distinctive battery tray, specifically designed to override station airlock access codes. - components: - - type: Emag - blacklist: - whitelist: - components: - - Airlock - - type: Sprite - sprite: _DV/Objects/Tools/doorjack.rsi - state: icon - - type: Item - sprite: _DV/Objects/Tools/doorjack.rsi - storedRotation: -90 diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 478e86b8afd..7847e8da0da 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1,5 +1,8 @@ # PUT YOUR TAGS IN ALPHABETICAL ORDER +- type: Tag + id: AccessBreakerImmune + - type: Tag id: AirAlarm diff --git a/Resources/Textures/Objects/Tools/access_breaker.rsi/equipped-BELT.png b/Resources/Textures/Objects/Tools/access_breaker.rsi/equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..b8903ccb4f7bc46e3642a980754e644e8a1fe8b2 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|+&x_!Ln`LH zy>yV1K|z4opio%;-`#o>!4fuCiwh|YL0-X3KvfO7TenEweHhZGC-C+Z!`^;rL&bgd cKyesYAEjBql2fGV77Y^dboFyt=akR{0PC+N9{>OV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/access_breaker.rsi/icon.png b/Resources/Textures/Objects/Tools/access_breaker.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fab24db72c81f37a64a5fa2e3a20f6a3ad54527c GIT binary patch literal 1733 zcmZWp4^-0k76;8VO`$)Vt307wPo6!aH|uF6<42~cZz=t;RXW41HSLe#$OH|4l4)wC zR!gl2(O$%C1#>l>mSSOPDxy&mDjKOESo{%`|2TX*@4e1>_ndq0=iGbG_j~U>pL0ug z#7BF3uJnXJAl|Vtk-MCpHm@EFotBUNrrYTjWyI`10fBfeomc1!DQJU07LsElwt_nA1!(E(B z%nQjpJqDwvN{ax$Jk~p3gV7kKK{-g@N~BL&nN6zmv{5FoGaLHqJMGKqZ6~%KOHZ$G zfLiN}uOnY}y6$_8=+&^o-Xele(Y>DK!L>s=V2?a%vA6dGHZ?nS&vrZ>*3;8-tkOK9 zwd#Bmp=XQe9s2H}w<9lZOsZ5zz8Jtz{~EirzOfM*h~%)kQT7?@*&SC8oHG$MoO74n zM#xRzj!ZIfb{H*2B4?RrmFJRwN;eMB@|sGL=(7hI<1ei6IY{YPc4Wx{AM-15EI z*cjHbj=P-uXwy!cw89{w3oV4i{j+ZoX2(F2u6tF~iafQaR^YB-iGPNv+2RK*jaq%% zH=igXot^z>Tz@YxH*9K}o*T~XKc9C`vm)JDo-uY_bD6JWqjSthYKfHk#3cmb$mgN9 z-}L3{dr!@XGXC}%F&AZj_e$rB_0cM=+}mP|8yvIz`R+Dw3`aE#9DOzySZRMCw;DDu z-mHJ%(gRK(p9;l87r=OufY;-GuX}|@F|fQ=+xYARyR@x<*XN1j!$*&ATv-=z3fl7Qj?Y&Q4GYUHoXuddZFm}Le1kKt90=!2gj%i8Oi4V}Jz=ELW?vooyjllDTz zxl7%9=~AimW& z%?44v84U-+9lQ9;y|-oy_n*ob9o+x9laj7~GWt(jTom8c(V>n8aO0rCHS&L8y%dHs zXPWOONU6;nX4)|#pF1f`hHhelnW0^;cVb&w*SB|(uE&m1H%mc>$?cZnmS7~vimkBu zB@_|_+?TMF5GF^3Wcyt#APAV@E}dpW{n(*Ez48ty33BC~0U@`SP3!8d6&7e3GIBMT z7DKvLUNm}xP=}yBDJEeV>W4iYsrHR)o@nY3ZDee96<_lcf~Hqy-lOBiGa@(eByZQo zV0t-`jt?`CGnVi=hl_Z>^D+UNlA1FK=9jk@PX7N~(E!AGLq3qUpv^%D#6yG~a>?2c zgE##b5FR3E9%ux2%Gh7-KPL`J=4Ao6Ni!vxR|OV~8Mm|Brz{m#=;ps5xGJNxJf({} z4C@OrQ}zI|`-sO^{_{=^vw9{LUFJFXoT@!2!9e_fqwcSfPfzi z1%bR-&bU$z>nAQXxGs=~d0U_^dip{;4k`_o{IEj-- zs~yRf^xBuOwxmZT)aEiK8zFYQ(-Mb>%UB>Jo^`#GJ!LZg!(?b&+WfISG>GcwPsg*v z1pL+B&u{EISy5hP4`HYp3rPSZfLO@U>wYDSxFnmhe3fyE!gU!H+Pwp4`-KgYz;U7=MN^;ApGIHb$u{+@#x2s?jA3R jp3dEkyZ?KwZ60$_B9#cMDc{3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-left.png b/Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea6bbb23f262daaf0a17fb602f75fdbb988ef85 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zr9E97Ln`LH zy``9U*g)ji$LX0zQWDrYpST1%iV6ipOnA8JmSWgjmfgqwOyV|ZPZ7Uz;Kl{#smoTT zye^*X^Z!0$+#COiCx5#Djb&hHSoVGUbdztAZkKo2T@5w=$?&d-CpUKftYe*qZm(8( z?|%DXwL;nLM6rjlS9aO)zV_X8ZQ0YLug|;B7%{9p9dES8d}Zn0Dvj^AnD>4ca?)_( z$TFVZ9s23s>a(Y{j<1gnzgu&k1#Azs{MxNAKQ4Im1oka&{$+lSaZ0M@@ALhupQUGZJlV6Szopr0M6~5SO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/access_breaker.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..32070ed47a9786e30dd83e4507877a07fbc74979 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zEj?WvLn`LH zy|vNnu!GF;kM&DM@(NE1?ciSM%;D6=$Jg|B%@Ln93O}{`yTk|HGX7$B(|< zYMl6LN|2Ci)Gr$r;bnQ2^X2B>Z&~SmOjw+yadzC@FW*#W80en0wJ3?uRF$8DRYAi;gAUJpZ-qYw<+e?RzU3PgXqYlXOyTpBEH9!=SYG zB*^1naKV1xcMhw)%LQJasTO@&?4S6)&LMQ;xfqemK(E^GA2z!=>peGqU(L0ZZA0`_ zdmB5`TPNP#d%k$qdQ%2L!R)mnt{<0sgTe~DWM4fNtvM% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/access_breaker.rsi/meta.json b/Resources/Textures/Objects/Tools/access_breaker.rsi/meta.json new file mode 100644 index 00000000000..1e1baabbba2 --- /dev/null +++ b/Resources/Textures/Objects/Tools/access_breaker.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by 20kdc (GitHub), edited by DieselMohawk (GitHub)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.5, + 0.5, + 0.5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "equipped-BELT" + } + ] +} From 5c9ed412f1678465e497035dfde85f1558d69ed1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 30 Jan 2025 04:06:53 +0000 Subject: [PATCH 029/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c029afec83c..fcc7d365d8f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: eoineoineoin - changes: - - message: Ghosts can now read books. - type: Add - id: 7372 - time: '2024-09-14T16:28:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32151 - author: Errant changes: - message: Lone Ops nukies now spawn with the appropriate species-specific survival @@ -3889,3 +3882,19 @@ id: 7871 time: '2025-01-30T02:44:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33346 +- author: ScarKy0 + changes: + - message: Added the Authentication Disruptor to the syndicate uplink for 5TC. It + removes access requirements from devices and forcefully opens airlocks and digital + locks. + type: Add + - message: The EMAG can no longer open airlocks or break locks. + type: Tweak + - message: Price of the EMAG lowered to 4TC. + type: Tweak + - message: '"Emagged" airlocks can now be fixed by unbolting and using the access + configurator. Locks and similiar can now be fixed by just using the access configurator.' + type: Tweak + id: 7872 + time: '2025-01-30T04:05:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34337 From 4b3dd308518d628b1b0aa21bcdec3ab8b4008b83 Mon Sep 17 00:00:00 2001 From: Southbridge <7013162+southbridge-fur@users.noreply.github.com> Date: Wed, 29 Jan 2025 23:41:58 -0500 Subject: [PATCH 030/197] Astro Asteroid Sand (#34463) * Added astro asteroid sand * fixed the stack name * adjusted tile sprites for asteroid and ice * Adjusted meta.json * Realized the other tile sprites all have solid lines on their perimeters * Update Resources/Prototypes/Stacks/floor_tile_stacks.yml that works Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> * Update tiles.yml * Update Resources/Locale/en-US/tiles/tiles.ftl Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> * adjusted the snow sprite * Update meta.json --------- Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> --- Resources/Locale/en-US/tiles/tiles.ftl | 1 + .../Prototypes/Entities/Objects/Misc/tiles.yml | 17 +++++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 1 + Resources/Prototypes/Recipes/Lathes/misc.yml | 5 +++++ .../Prototypes/Research/civilianservices.yml | 1 + .../Prototypes/Stacks/floor_tile_stacks.yml | 6 ++++++ Resources/Prototypes/Tiles/floors.yml | 11 +++++++++++ .../Tiles/tile.rsi/asteroid-inhand-left.png | Bin 0 -> 812 bytes .../Tiles/tile.rsi/asteroid-inhand-right.png | Bin 0 -> 815 bytes .../Objects/Tiles/tile.rsi/asteroid.png | Bin 0 -> 720 bytes .../Objects/Tiles/tile.rsi/astroice.png | Bin 241 -> 259 bytes .../Textures/Objects/Tiles/tile.rsi/meta.json | 13 ++++++++++++- .../Textures/Objects/Tiles/tile.rsi/snow.png | Bin 376 -> 480 bytes 13 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-left.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-right.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/asteroid.png diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index b5202356142..0263c447a01 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -128,4 +128,5 @@ tiles-mowed-astro-grass = mowed astro-grass tiles-jungle-astro-grass = jungle astro-grass tiles-astro-ice = astro-ice tiles-astro-snow = astro-snow +tiles-astro-asteroid-sand = asteroid astro-sand tiles-wood-large = large wood diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index c730c965462..37a77acff1f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -1551,6 +1551,23 @@ - type: Stack stackType: FloorTileAstroSnow +- type: entity + id: FloorTileItemAstroAsteroidSand + parent: FloorTileItemBase + name: asteroid astro-sand + description: Fake sand. Luckily, it's not as coarse as the real thing. + components: + - type: Sprite + state: asteroid + - type: Item + heldPrefix: asteroid + - type: FloorTile + outputs: + - Plating + - FloorAstroAsteroidSand + - type: Stack + stackType: FloorTileAstroAsteroidSand + - type: entity name: large wood floor parent: FloorTileItemBase diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index fd22819dd6e..c9463a25398 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -364,6 +364,7 @@ - FauxTileJungleAstroGrass - FauxTileAstroIce - FauxTileAstroSnow + - FauxTileAstroAsteroidSand - OreBagOfHolding - DeviceQuantumSpinInverter # Begin DeltaV additions diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index d14b8bb646a..3012af255d7 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -186,6 +186,11 @@ id: FauxTileAstroSnow result: FloorTileItemAstroSnow +- type: latheRecipe + parent: BaseFauxTileRecipe + id: FauxTileAstroAsteroidSand + result: FloorTileItemAstroAsteroidSand + - type: latheRecipe id: FloorGreenCircuit result: FloorTileItemGCircuit4 diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index 3ca9ecbf42a..7b533f6c44b 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -116,6 +116,7 @@ - FauxTileJungleAstroGrass - FauxTileAstroIce - FauxTileAstroSnow + - FauxTileAstroAsteroidSand - type: technology id: BiochemicalStasis diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index 65fd672e1aa..b5d5fb7dc01 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -623,6 +623,12 @@ spawn: FloorTileItemAstroSnow maxCount: 30 +- type: stack + id: FloorTileAstroAsteroidSand + name: asteroid astro-sand floor + spawn: FloorTileItemAstroAsteroidSand + maxCount: 30 + - type: stack id: FloorTileWoodLarge name: large wood floor diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 3d398d2042d..60c2f721587 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1932,6 +1932,17 @@ deconstructTools: [ Prying ] itemDrop: FloorTileItemAstroSnow +# Asteroid Sand +- type: tile + id: FloorAstroAsteroidSand + name: tiles-astro-asteroid-sand + parent: FloorAsteroidSand + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + itemDrop: FloorTileItemAstroAsteroidSand + weather: false + - type: tile id: FloorWoodLarge name: tiles-wood-large diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-left.png b/Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c252a030f35ab24b14f85a7db0a13b8508785d22 GIT binary patch literal 812 zcmV+{1JnG8P)EX>4Tx04R}tkv&MmP!xqvQ>CI62Rn#5WT-A$5EXIMDionYs1;guFnQ^Z(4-+r zad8w}3l9D)RvlcNb#-tR1i>E=H#a9m7b)?+q|hS93y=44-aUu+?gNBciD_2b7@+C4 znM%aPOm;;Ky`l>P2w((|nPtpMQWC!Pbx)mCcQKyj-}h&At2v7S0g-ry8KzCVPCT_~ z8=UuvBdjQ^#OK7LCS8#Dk?V@bZ=4G*3p_Jorc-mo5n{2>!b%IXqNx#25=T`{r+gvf zvC4UivsS9G#y$B9!#RCL)<(8MxA${&EeN{v^HH z)S^c~&o*#z-PDvl;Bp7(dopBGcBLRKA)g1{&*+=7K<_Qkx$4cWagNgmAWgGM-T()O zz;J=G*L>dH(K@$(dm8im0XhV7khyvNRR911Vo5|nRCt{2+CNLfKo|z_$3KgMLpXa= z28V()OX=hna0q?_H$liGeu6GScEQof%?}`mLl>c6AX6v=Eaj$y^G2s|4kg7!OVUdr z^!Y6z!##QL&29GrL_|bHL_|bHv|IMt3Vt46IRH@FV*K=8`#Wh8yHExIfa~<7wL16P z2u+jNDQ%&&#c%*<{S>JEo8;~Zk`}izZ8#l%@%2C=P%Zt^sttK4$ z4h&_0=tyER2YMUkR3{+Ii^h#y$NLEoLZJ6O!^LU2an@vhfXBC)hpPVO{RCurf#IMJ zV+=wWKxx}3M`??Z1V-m45JDi!3(u7j5fKp)5fKp)5fKp)5p_tK#O}ZMby}Ga*`{iY z23T&s?nH|B>+x+9Lg4;p`PZv!`8qn^fXZ}H0;oSj(D?=!V=!Hmh@uEz07l2U*80vj qKxvD+%QFBaj4_QTQizCX7yST`KWvO{)fjRB0000}MGO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-right.png b/Resources/Textures/Objects/Tiles/tile.rsi/asteroid-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..90af3cb11a706752dbbccb73acfa00a0ef53ae5b GIT binary patch literal 815 zcmV+~1JL}5P)EX>4Tx04R}tkv&MmP!xqvQ>CI62Rn#5WT-A$5EXIMDionYs1;guFnQ^Z(4-+r zad8w}3l9D)RvlcNb#-tR1i>E=H#a9m7b)?+q|hS93y=44-aUu+?gNBciD_2b7@+C4 znM%aPOm;;Ky`l>P2w((|nPtpMQWC!Pbx)mCcQKyj-}h&At2v7S0g-ry8KzCVPCT_~ z8=UuvBdjQ^#OK7LCS8#Dk?V@bZ=4G*3p_Jorc-mo5n{2>!b%IXqNx#25=T`{r+gvf zvC4UivsS9G#y$B9!#RCL)<(8MxA${&EeN{v^HH z)S^c~&o*#z-PDvl;Bp7(dopBGcBLRKA)g1{&*+=7K<_Qkx$4cWagNgmAWgGM-T()O zz;J=G*L>dH(K@$(dm8im0XhV7khyvNRR911Wl2OqRCt{2+CNLfKo|z_N9(9V2nK|J z9Rej;g5RM-zJi+|bm~XwB6Ke}I=T4)3gXa3=qwb3QYcuvMrgI3Xkv}&% zuzhf}XdsFr_(yVUMOLY}aK(2M;||ERn<L*-cEIbK#?$j0<7HY^Jv&#b0jDPp-Va-dq6p(0x$iEP)Px%ib+I4R9J=Wmd$R{KomyLc$}ZHCw3F3v{VsnSViiB1>zODWr0-08}xyAg9;v@ zJJuCQELl`65K#(MoW^!t+evM+2sNsZa6~JCM82hc=iW1SK3@;4wbokyyF^{U!Tw(P zr^#QvIjYV7+kk`pz4B4tprbX-W`nPO$W~Y1i1EXiUdKWR!DuuBU@#cqhcTbd=Cu$; z9ieG9nMMg;{g5Irh@uE7CG+_l0MD@zVp(H%cbDz$ZKRYW;dx!^)c}$tp~wr0yg*wm zEXyL#b6Twy08te2_Dhq);|WDkV45a*p0l&Fvl4(=7hqd$5C$az0bE{QVwxsODWWLi z{mf%L9s@8MjnG;ngupOr_Xe!c0c~4YsztkL(ridNoeoMV%CfAA4~IiGHa2+uZpvgb z0l@eDy8!?=pH8t4Gp`pj3nMD#URdq?AZ0aa|X!H9-)dltL-BQgK+}2>e+@p63)L zXuF9t1dij}IOFTKUz_vd;^OWA+6{xQWAk9E%hAUK&#{+azF*CPBuT3HG)?h5ubPUt z2DsMY@r2=U$cN}2j^hB3Wf^fCBc%jD2!T?HEXx=S1}o*Q^}uvG#dTd?KJ5c%0EFT4 z-RINgxV7zNSFWzEDwt&l?ArtMdc9ws6-9wz7(Be+{Q>mTl-E*D7t;FAvEGDXTuJqaWUg3%W0000zc|U7jiq zNDx36yyF9QpW~9JiUT|ZAOJXIWk%kUKn#K}|a0A#~gC?I^k;{);X6ggnD s92hMJhHN=NEEw?iz$h36qhP=R0F=#@<07kLhX4Qo07*qoM6N<$f=Do7x&QzG delta 224 zcmZo>`p7szvYwfNfx%@-*D)Z)SRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv@1zz$e5t z;Kq*)FMa?4P{4?3P8>*GNswRg|Ns9P9JE$`0rEKuJR*x382FBWFymBhK53v}oTrOp zh=u>t34vS(3^<$@-}`@V^Q?ukeSg_gERW<+s diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/meta.json b/Resources/Textures/Objects/Tiles/tile.rsi/meta.json index 7562d0f9b11..a39ba782fac 100644 --- a/Resources/Textures/Objects/Tiles/tile.rsi/meta.json +++ b/Resources/Textures/Objects/Tiles/tile.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, additional copyrights see tiles folder.", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, additional attributions available in the Resources/Textures/Tiles/attributions.yml file. Ice tile and Snow tile modifications, Astreroid tile and in-hands created by Southbridge-fur (github)", "size": { "x": 32, "y": 32 @@ -549,6 +549,17 @@ }, { "name": "wood-large" + }, + { + "name": "asteroid" + }, + { + "name": "asteroid-inhand-right", + "directions": 4 + }, + { + "name": "asteroid-inhand-left", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/snow.png b/Resources/Textures/Objects/Tiles/tile.rsi/snow.png index 385e2d59ac24baf8588fb98f204cbb1330475e4d..1e27fec6762a0bc8c5836c8846577196bb343133 100644 GIT binary patch delta 465 zcmV;?0WSXd0^kFX8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00EjwL_t(oh3!_$isUd1 ztQ}UMi!TOW`m_2&`W8e3^ms0w^?>)xYOMfZ$JjU3!ZR^Kz^cC_S zGl!fr03f9V=Nv)^Xstm+AR=I90DyDO&f|A46Hqwk>|ARF0E7_WoI|bEf`<@LYd!hD zM8G)*A_6m`)(R0h1qJ|SMoP(S;HlVK2xxXGC5Xr=v+*24fQW#I%wECInZqcp5^~N# zM9fD6GqWi)zJLE6mU^Jpij)$F2(2}=)&KxR1R}BqBqAd-mg8jtz*%CIS*Jm5^~*Ug zH{rAd08Vl;Gjh)G-hX+oy|Nk{SX4l>*Gcf+TN!|-651=;2jfn7iNHAXpPwsFKebzHwrs|=EJ`A_uvW07K&{nQEby!|Gn@1w z1f-PAXY7d?rV4oPEwgb405Dq#>YmW=R`75C4_vr#;cwsBy%uKoJ;>&1%~U%!5R@ZiDQw{L+;PG}V60x7PNAiv=MFu<_sjLvzW zC})93WHAE+-(e7DJf6QI1t@sdv);uq#KQmSq}xJ=6*ye37M%Y7zkt89bFSjtecSC6 z4jxuox*vU4GZ#a zr_~rT9O1ltVy{7t Date: Thu, 30 Jan 2025 04:43:05 +0000 Subject: [PATCH 031/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fcc7d365d8f..38e69ff5e8e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Errant - changes: - - message: Lone Ops nukies now spawn with the appropriate species-specific survival - gear. - type: Fix - id: 7373 - time: '2024-09-14T16:34:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31641 - author: Plykiya changes: - message: The vent spawn event now has a chance to spawn snakes. @@ -3898,3 +3890,13 @@ id: 7872 time: '2025-01-30T04:05:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34337 +- author: Southbridge + changes: + - message: Astro Asteroid Sand has been added as another type of faux tile. + type: Add + - message: Asteroid Astro Sand has also been added to the T2 civilian tech for the + faux astro tiles. + type: Add + id: 7873 + time: '2025-01-30T04:41:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34463 From 9a6cd01b00facb61f6b26e684ce53677f3277cd0 Mon Sep 17 00:00:00 2001 From: August Sun <45527070+august-sun@users.noreply.github.com> Date: Wed, 29 Jan 2025 21:45:56 -0700 Subject: [PATCH 032/197] The Goliath Hardsuit (#34721) * Entities for hardsuit and helmet, graph and crafting recipe; modifies goliath hide drop rate * Added hardsuit sprites, corrected some crafting YAML * fixed crafting recipe, adjusted resource requirements * Added durathread material req --------- Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com> --- .../Clothing/Head/hardsuit-helmets.yml | 35 +++++++++++++ .../Clothing/OuterClothing/hardsuits.yml | 41 +++++++++++++++ .../Entities/Mobs/NPCs/asteroid.yml | 3 +- .../Crafting/Graphs/goliath_hardsuit.yml | 22 ++++++++ .../Recipes/Crafting/improvised.yml | 13 +++++ Resources/Prototypes/tags.yml | 3 ++ .../equipped-head-light-vox.png | Bin 0 -> 9554 bytes .../goliathhelm.rsi/equipped-head-light.png | Bin 0 -> 10090 bytes .../equipped-head-unshaded-vox.png | Bin 0 -> 177 bytes .../equipped-head-unshaded.png | Bin 0 -> 203 bytes .../goliathhelm.rsi/equipped-head-vox.png | Bin 0 -> 8425 bytes .../goliathhelm.rsi/equipped-head.png | Bin 0 -> 7813 bytes .../Hardsuits/goliathhelm.rsi/icon-flash.png | Bin 0 -> 6761 bytes .../goliathhelm.rsi/icon-unshaded.png | Bin 0 -> 147 bytes .../Head/Hardsuits/goliathhelm.rsi/icon.png | Bin 0 -> 6429 bytes .../goliathhelm.rsi/light-overlay.png | Bin 0 -> 5821 bytes .../Head/Hardsuits/goliathhelm.rsi/meta.json | 48 ++++++++++++++++++ .../equipped-OUTERCLOTHING-vox.png | Bin 0 -> 15019 bytes .../goliath.rsi/equipped-OUTERCLOTHING.png | Bin 0 -> 13923 bytes .../Hardsuits/goliath.rsi/icon.png | Bin 0 -> 7094 bytes .../Hardsuits/goliath.rsi/inhand-left.png | Bin 0 -> 7781 bytes .../Hardsuits/goliath.rsi/inhand-right.png | Bin 0 -> 7893 bytes .../Hardsuits/goliath.rsi/meta.json | 32 ++++++++++++ 23 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/goliath_hardsuit.yml create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light-vox.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-unshaded-vox.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-unshaded.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-vox.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon-flash.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon-unshaded.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/light-overlay.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/meta.json create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/equipped-OUTERCLOTHING-vox.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/icon.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index eb119a362ce..16f0cb15bb0 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -136,6 +136,41 @@ radius: 7 energy: 3 +- type: entity + parent: ClothingHeadHardsuitWithLightBase + id: ClothingHeadHelmetHardsuitGoliath + name: goliath hardsuit helmet + description: A sturdy hardsuit helmet, infused with a goliath's hide and an eerie, unblinking eye cut from its mass. + components: + - type: Sprite + sprite: Clothing/Head/Hardsuits/goliathhelm.rsi + layers: + - state: icon + - state: icon-unshaded + shader: unshaded + - state: light-overlay + visible: false + shader: unshaded + map: [ "light" ] + - type: HandheldLight + addPrefix: false + - type: ToggleableLightVisuals + clothingVisuals: + head: + - state: equipped-head-light + shader: unshaded + - type: Clothing + clothingVisuals: + head: + - state: equipped-head + - state: equipped-head-unshaded + shader: unshaded + - type: PointLight + radius: 6 + - type: PressureProtection + highPressureMultiplier: 0.72 + lowPressureMultiplier: 1000 + - type: entity parent: ClothingHeadHardsuitBase id: ClothingHeadHelmetHardsuitMaxim diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index d903ab38b9f..771d2d95ee6 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -125,6 +125,11 @@ - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSpatio + - type: Tag + tags: + - Hardsuit + - WhitelistChameleon + - HardsuitSpatio #Salvage Hardsuit - type: entity @@ -157,6 +162,42 @@ - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSalvage +#Goliath Hardsuit +- type: entity + parent: [ClothingOuterHardsuitBase, BaseCargoContraband] + id: ClothingOuterHardsuitGoliath + name: goliath hardsuit + description: A lightweight hardsuit, adorned with a patchwork of thick, chitinous goliath hide. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Hardsuits/goliath.rsi + - type: Clothing + sprite: Clothing/OuterClothing/Hardsuits/goliath.rsi + - type: PressureProtection + highPressureMultiplier: 0.5 + lowPressureMultiplier: 1000 + - type: ExplosionResistance + damageCoefficient: 0.3 + - type: Armor + modifiers: + coefficients: + Blunt: 0.7 + Slash: 0.7 + Piercing: 0.5 + Heat: 0.7 #Goliath hide gets grilled instead of you + Radiation: 0.3 + Caustic: 0.8 + - type: ClothingSpeedModifier + walkModifier: 0.8 + sprintModifier: 0.8 + - type: HeldSpeedModifier + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetHardsuitGoliath + - type: Construction + graph: HardsuitGoliath + node: hardsuitGoliath + +#Maxim Hardsuit - type: entity parent: [ClothingOuterHardsuitBase, BaseCargoContraband] id: ClothingOuterHardsuitMaxim diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml index 58163410f49..ea2d2923da3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml @@ -92,7 +92,8 @@ - id: FoodMeatGoliath amount: 3 - id: MaterialGoliathHide1 - - type: Prying # DeltaV: let sentient goliaths pry doors + amount: 3 + - type: Prying # DeltaV - let sentient goliaths pry doors pryPowered: true force: true speedModifier: 1.5 diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/goliath_hardsuit.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/goliath_hardsuit.yml new file mode 100644 index 00000000000..0bb82cf2611 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/goliath_hardsuit.yml @@ -0,0 +1,22 @@ +- type: constructionGraph + id: HardsuitGoliath + start: start + graph: + - node: start + edges: + - to: hardsuitGoliath + steps: + - tag: HardsuitSpatio + icon: + sprite: Clothing/OuterClothing/Hardsuits/spatio.rsi + state: icon + name: spationaut hardsuit + doAfter: 10 + - material: Durathread + amount: 5 + doAfter: 10 + - material: GoliathHide + amount: 12 + doAfter: 10 + - node: hardsuitGoliath + entity: ClothingOuterHardsuitGoliath diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 55ffdf5176f..9a203a4d626 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -240,3 +240,16 @@ icon: sprite: Objects/Storage/petcarrier.rsi state: icon + +- type: construction + name: goliath hardsuit + id: HardsuitGoliath + graph: HardsuitGoliath + startNode: start + targetNode: hardsuitGoliath + category: construction-category-clothing + objectType: Item + description: A lightweight hardsuit, adorned with a patchwork of thick, chitinous goliath hide. + icon: + sprite: Clothing/OuterClothing/Hardsuits/goliath.rsi + state: icon diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 7847e8da0da..f1283f96e6d 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -662,6 +662,9 @@ - type: Tag id: Hardsuit # Prevent melee injectors that can't penetrate hardsuits from injecting the wearer (nettles) +- type: Tag + id: HardsuitSpatio + - type: Tag id: Haunted diff --git a/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6154cd674daf53ad65997c8704a24080c1232e GIT binary patch literal 9554 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 vF%b=F2+b@&?!mf8`k=)%)ala0>rFYeqOL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light.png b/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-light.png new file mode 100644 index 0000000000000000000000000000000000000000..197e2534298b48bcb214ecf9a3c3be701eb21189 GIT binary patch literal 10090 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 I^i#k81GC#u?*IS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-unshaded-vox.png b/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/equipped-head-unshaded-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..4486bff5622c18b92f7a3dbc58a1f3d70b5ff8e5 GIT binary patch literal 177 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�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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e9cb615de8c2ead98c0bc9d2b4077a1a3c5872 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}zMd|QArY;~ z2@Ml+q47_P;@mcpUSDcRn{Sh kgU3Q*S|&`_K@A3mL;r;5PWiYa252yYr>mdKI;Vst0NE)nq5uE@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon.png b/Resources/Textures/Clothing/Head/Hardsuits/goliathhelm.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2b5b41ec3f130bfb11ba871ae89f1519cc3755 GIT binary patch literal 6429 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 O0%Rl<#cM>3ga04f$?M(# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..a55e3eb9a885d14f4eaa3475dced2d72980a0db1 GIT binary patch literal 13923 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..29f2e238283c7650ee3c8f960ef90c2664b293f6 GIT binary patch literal 7094 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a44cb21e070fa733092d0dd922aa1e0d58cbdf80 GIT binary patch literal 7893 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 Date: Thu, 30 Jan 2025 04:47:02 +0000 Subject: [PATCH 033/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 38e69ff5e8e..47f486092c1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: The vent spawn event now has a chance to spawn snakes. - type: Add - id: 7374 - time: '2024-09-14T17:19:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32070 - author: lzk228 changes: - message: Command intercom now reinforced the same way as the security one. @@ -3900,3 +3893,11 @@ id: 7873 time: '2025-01-30T04:41:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34463 +- author: august-sun + changes: + - message: Added the goliath hardsuit to the game and crafting menu. Adjusted goliath + hide drop rates to 3 hide per kill. + type: Add + id: 7874 + time: '2025-01-30T04:45:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34721 From 90c51a59a0eee6af5eee5bc8347d773ba1f9c069 Mon Sep 17 00:00:00 2001 From: Milon Date: Thu, 30 Jan 2025 06:09:25 +0100 Subject: [PATCH 034/197] make RefreshOverlay default to the player session (#32354) --- Content.Client/Overlays/EquipmentHudSystem.cs | 34 +++++++++---------- .../Overlays/ShowHealthBarsSystem.cs | 2 +- .../Overlays/ShowHealthIconsSystem.cs | 2 +- .../Events/RefreshEquipmentHudEvent.cs | 11 +++--- .../Inventory/InventorySystem.Relay.cs | 16 ++++----- 5 files changed, 31 insertions(+), 34 deletions(-) diff --git a/Content.Client/Overlays/EquipmentHudSystem.cs b/Content.Client/Overlays/EquipmentHudSystem.cs index 502a1f36274..f3c556961a5 100644 --- a/Content.Client/Overlays/EquipmentHudSystem.cs +++ b/Content.Client/Overlays/EquipmentHudSystem.cs @@ -56,35 +56,35 @@ protected virtual void UpdateInternal(RefreshEquipmentHudEvent args) { } protected virtual void DeactivateInternal() { } - private void OnStartup(EntityUid uid, T component, ComponentStartup args) + private void OnStartup(Entity ent, ref ComponentStartup args) { - RefreshOverlay(uid); + RefreshOverlay(); } - private void OnRemove(EntityUid uid, T component, ComponentRemove args) + private void OnRemove(Entity ent, ref ComponentRemove args) { - RefreshOverlay(uid); + RefreshOverlay(); } private void OnPlayerAttached(LocalPlayerAttachedEvent args) { - RefreshOverlay(args.Entity); + RefreshOverlay(); } private void OnPlayerDetached(LocalPlayerDetachedEvent args) { - if (_player.LocalSession?.AttachedEntity == null) + if (_player.LocalSession?.AttachedEntity is null) Deactivate(); } - private void OnCompEquip(EntityUid uid, T component, GotEquippedEvent args) + private void OnCompEquip(Entity ent, ref GotEquippedEvent args) { - RefreshOverlay(args.Equipee); + RefreshOverlay(); } - private void OnCompUnequip(EntityUid uid, T component, GotUnequippedEvent args) + private void OnCompUnequip(Entity ent, ref GotUnequippedEvent args) { - RefreshOverlay(args.Equipee); + RefreshOverlay(); } private void OnRoundRestart(RoundRestartCleanupEvent args) @@ -92,24 +92,24 @@ private void OnRoundRestart(RoundRestartCleanupEvent args) Deactivate(); } - protected virtual void OnRefreshEquipmentHud(EntityUid uid, T component, InventoryRelayedEvent> args) + protected virtual void OnRefreshEquipmentHud(Entity ent, ref InventoryRelayedEvent> args) { - OnRefreshComponentHud(uid, component, args.Args); + OnRefreshComponentHud(ent, ref args.Args); } - protected virtual void OnRefreshComponentHud(EntityUid uid, T component, RefreshEquipmentHudEvent args) + protected virtual void OnRefreshComponentHud(Entity ent, ref RefreshEquipmentHudEvent args) { args.Active = true; - args.Components.Add(component); + args.Components.Add(ent.Comp); } - protected void RefreshOverlay(EntityUid uid) + protected void RefreshOverlay() { - if (uid != _player.LocalSession?.AttachedEntity) + if (_player.LocalSession?.AttachedEntity is not { } entity) return; var ev = new RefreshEquipmentHudEvent(TargetSlots); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(entity, ref ev); if (ev.Active) Update(ev); diff --git a/Content.Client/Overlays/ShowHealthBarsSystem.cs b/Content.Client/Overlays/ShowHealthBarsSystem.cs index b23209ff202..9fefe93094e 100644 --- a/Content.Client/Overlays/ShowHealthBarsSystem.cs +++ b/Content.Client/Overlays/ShowHealthBarsSystem.cs @@ -28,7 +28,7 @@ public override void Initialize() private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) { - RefreshOverlay(ent); + RefreshOverlay(); } protected override void UpdateInternal(RefreshEquipmentHudEvent component) diff --git a/Content.Client/Overlays/ShowHealthIconsSystem.cs b/Content.Client/Overlays/ShowHealthIconsSystem.cs index b4d845e4217..3301261bd09 100644 --- a/Content.Client/Overlays/ShowHealthIconsSystem.cs +++ b/Content.Client/Overlays/ShowHealthIconsSystem.cs @@ -47,7 +47,7 @@ protected override void DeactivateInternal() private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) { - RefreshOverlay(ent); + RefreshOverlay(); } private void OnGetStatusIconsEvent(Entity entity, ref GetStatusIconsEvent args) diff --git a/Content.Shared/Inventory/Events/RefreshEquipmentHudEvent.cs b/Content.Shared/Inventory/Events/RefreshEquipmentHudEvent.cs index 4f486fe695e..e39fb056b4a 100644 --- a/Content.Shared/Inventory/Events/RefreshEquipmentHudEvent.cs +++ b/Content.Shared/Inventory/Events/RefreshEquipmentHudEvent.cs @@ -1,13 +1,10 @@ namespace Content.Shared.Inventory.Events; -public sealed class RefreshEquipmentHudEvent : EntityEventArgs, IInventoryRelayEvent where T : IComponent +[ByRefEvent] +public record struct RefreshEquipmentHudEvent(SlotFlags TargetSlots) : IInventoryRelayEvent + where T : IComponent { - public SlotFlags TargetSlots { get; init; } + public SlotFlags TargetSlots { get; } = TargetSlots; public bool Active = false; public List Components = new(); - - public RefreshEquipmentHudEvent(SlotFlags targetSlots) - { - TargetSlots = targetSlots; - } } diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index d431195a816..bb5dd02ab3d 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -55,14 +55,14 @@ public void InitializeRelay() SubscribeLocalEvent(RelayInventoryEvent); // ComponentActivatedClientSystems - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); - SubscribeLocalEvent>(RelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); + SubscribeLocalEvent>(RefRelayInventoryEvent); SubscribeLocalEvent>(OnGetEquipmentVerbs); } From 85695b7615a3aa1ee46b3faa4987963386dde8ff Mon Sep 17 00:00:00 2001 From: Velken <8467292+Velken@users.noreply.github.com> Date: Thu, 30 Jan 2025 08:34:32 -0300 Subject: [PATCH 035/197] Juice that makes you go boom (#34730) * Juice that makes you go boom * moved explosive juice to fun yml - fixed ExplosionReactionEffect.cs not having TileBreakScale parameter - made Drazil plushie major contraband (they are evil!!!!!) * removed JASON!!!! JASOOON!!! JASON!!! * don't do commits at 1am * Update fun.yml fix ident * no more bullying the server (only 1 explosion) --- .../Effects/ExplosionReactionEffect.cs | 15 +++++++++------ Resources/Prototypes/Reagents/fun.yml | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs b/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs index 689757d0440..24c58898c65 100644 --- a/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs +++ b/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs @@ -15,7 +15,6 @@ public sealed partial class ExplosionReactionEffect : EntityEffect /// The type of explosion. Determines damage types and tile break chance scaling. /// [DataField(required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - [JsonIgnore] public string ExplosionType = default!; /// @@ -23,14 +22,12 @@ public sealed partial class ExplosionReactionEffect : EntityEffect /// chance. /// [DataField] - [JsonIgnore] public float MaxIntensity = 5; /// /// How quickly intensity drops off as you move away from the epicenter /// [DataField] - [JsonIgnore] public float IntensitySlope = 1; /// @@ -41,15 +38,20 @@ public sealed partial class ExplosionReactionEffect : EntityEffect /// A slope of 1 and MaxTotalIntensity of 100 corresponds to a radius of around 4.5 tiles. /// [DataField] - [JsonIgnore] public float MaxTotalIntensity = 100; /// /// The intensity of the explosion per unit reaction. /// [DataField] - [JsonIgnore] public float IntensityPerUnit = 1; + + /// + /// Factor used to scale the explosion intensity when calculating tile break chances. Allows for stronger + /// explosives that don't space tiles, without having to create a new explosion-type prototype. + /// + [DataField] + public float TileBreakScale = 1f; public override bool ShouldLog => true; @@ -72,6 +74,7 @@ public override void Effect(EntityEffectBaseArgs args) ExplosionType, intensity, IntensitySlope, - MaxIntensity); + MaxIntensity, + TileBreakScale); } } diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index 00d31cbd102..2215b6f33da 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -381,3 +381,21 @@ conditions: - !type:ReagentThreshold min: 50 + +- type: reaction + id: WehHewExplosion + impact: High + priority: 20 + reactants: + JuiceThatMakesYouWeh: + amount: 1 + JuiceThatMakesYouHew: + amount: 1 + effects: + - !type:ExplosionReactionEffect + explosionType: Radioactive + maxIntensity: 200 + intensityPerUnit: 2 + intensitySlope: 1 + maxTotalIntensity: 250 + tileBreakScale: 0.00001 From 60bd7b2cb05688581e31a94cce7d08c6a44edde8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 30 Jan 2025 11:35:39 +0000 Subject: [PATCH 036/197] 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 47f486092c1..c2b1988cf59 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Command intercom now reinforced the same way as the security one. - type: Tweak - id: 7375 - time: '2024-09-14T20:40:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32169 - author: de0rix changes: - message: Animals in critical state now all have proper sprites. @@ -3901,3 +3894,10 @@ id: 7874 time: '2025-01-30T04:45:56.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34721 +- author: Velken + changes: + - message: Mixing opposite types of lizard juices now has explosive consequences. + type: Add + id: 7875 + time: '2025-01-30T11:34:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34730 From 32cfe943e0cdd375a0eb1b5cef82cd968ef9d294 Mon Sep 17 00:00:00 2001 From: AJCM-git <60196617+AJCM-git@users.noreply.github.com> Date: Sat, 15 Jun 2024 00:41:25 -0400 Subject: [PATCH 037/197] Fixes the ShowRulesCommand and the client not syncing rules correctly (#28752) --- .../Systems/Info/InfoUIController.cs | 30 +++++++++++++------ Content.Server/Info/RulesManager.cs | 21 +++++++------ Content.Server/Info/ShowRulesCommand.cs | 16 +++++----- Content.Shared/Info/RulesMessages.cs | 10 +++++-- 4 files changed, 50 insertions(+), 27 deletions(-) diff --git a/Content.Client/UserInterface/Systems/Info/InfoUIController.cs b/Content.Client/UserInterface/Systems/Info/InfoUIController.cs index 1e431b17fcf..3706e890922 100644 --- a/Content.Client/UserInterface/Systems/Info/InfoUIController.cs +++ b/Content.Client/UserInterface/Systems/Info/InfoUIController.cs @@ -1,12 +1,10 @@ using Content.Client.Gameplay; using Content.Client.Info; -using Content.Shared.CCVar; using Content.Shared.Guidebook; using Content.Shared.Info; using Robust.Client.Console; using Robust.Client.UserInterface.Controllers; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Configuration; using Robust.Shared.Network; using Robust.Shared.Prototypes; @@ -14,21 +12,27 @@ namespace Content.Client.UserInterface.Systems.Info; public sealed class InfoUIController : UIController, IOnStateExited { - [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IClientConsoleHost _consoleHost = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly ILogManager _logMan = default!; private RulesPopup? _rulesPopup; private RulesAndInfoWindow? _infoWindow; + private ISawmill _sawmill = default!; + + [ValidatePrototypeId] + private const string DefaultRuleset = "DefaultRuleset"; + + public ProtoId RulesEntryId = DefaultRuleset; public override void Initialize() { base.Initialize(); - + _sawmill = _logMan.GetSawmill("rules"); _netManager.RegisterNetMessage(); - _netManager.RegisterNetMessage(OnShowRulesPopupMessage); + _netManager.RegisterNetMessage(OnRulesInformationMessage); _consoleHost.RegisterCommand("fuckrules", "", @@ -39,9 +43,12 @@ public override void Initialize() }); } - private void OnShowRulesPopupMessage(ShowRulesPopupMessage message) + private void OnRulesInformationMessage(SendRulesInformationMessage message) { - ShowRules(message.PopupTime); + RulesEntryId = message.CoreRules; + + if (message.ShouldShowRules) + ShowRules(message.PopupTime); } public void OnStateExited(GameplayState state) @@ -84,8 +91,13 @@ private void OnAcceptPressed() public GuideEntryPrototype GetCoreRuleEntry() { - var guide = _cfg.GetCVar(CCVars.RulesFile); - var guideEntryPrototype = _prototype.Index(guide); + if (!_prototype.TryIndex(RulesEntryId, out var guideEntryPrototype)) + { + guideEntryPrototype = _prototype.Index(DefaultRuleset); + _sawmill.Error($"Couldn't find the following prototype: {RulesEntryId}. Falling back to {DefaultRuleset}, please check that the server has the rules set up correctly"); + return guideEntryPrototype; + } + return guideEntryPrototype; } diff --git a/Content.Server/Info/RulesManager.cs b/Content.Server/Info/RulesManager.cs index 168e5846b96..f4d9e57bd4d 100644 --- a/Content.Server/Info/RulesManager.cs +++ b/Content.Server/Info/RulesManager.cs @@ -18,22 +18,25 @@ public sealed class RulesManager public void Initialize() { _netManager.Connected += OnConnected; - _netManager.RegisterNetMessage(); + _netManager.RegisterNetMessage(); _netManager.RegisterNetMessage(OnRulesAccepted); } private async void OnConnected(object? sender, NetChannelArgs e) { - if (IPAddress.IsLoopback(e.Channel.RemoteEndPoint.Address) && _cfg.GetCVar(CCVars.RulesExemptLocal)) - return; + var isLocalhost = IPAddress.IsLoopback(e.Channel.RemoteEndPoint.Address) && + _cfg.GetCVar(CCVars.RulesExemptLocal); var lastRead = await _dbManager.GetLastReadRules(e.Channel.UserId); - if (lastRead > LastValidReadTime) - return; - - var message = new ShowRulesPopupMessage(); - message.PopupTime = _cfg.GetCVar(CCVars.RulesWaitTime); - _netManager.ServerSendMessage(message, e.Channel); + var hasCooldown = lastRead > LastValidReadTime; + + var showRulesMessage = new SendRulesInformationMessage + { + PopupTime = _cfg.GetCVar(CCVars.RulesWaitTime), + CoreRules = _cfg.GetCVar(CCVars.RulesFile), + ShouldShowRules = !isLocalhost && !hasCooldown + }; + _netManager.ServerSendMessage(showRulesMessage, e.Channel); } private async void OnRulesAccepted(RulesAcceptedMessage message) diff --git a/Content.Server/Info/ShowRulesCommand.cs b/Content.Server/Info/ShowRulesCommand.cs index b13b8d11a5a..eb3fb08db0e 100644 --- a/Content.Server/Info/ShowRulesCommand.cs +++ b/Content.Server/Info/ShowRulesCommand.cs @@ -12,6 +12,10 @@ namespace Content.Server.Info; [AdminCommand(AdminFlags.Admin)] public sealed class ShowRulesCommand : IConsoleCommand { + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IConfigurationManager _configuration = default!; + [Dependency] private readonly IPlayerManager _player = default!; + public string Command => "showrules"; public string Description => "Opens the rules popup for the specified player."; public string Help => "showrules [seconds]"; @@ -25,8 +29,7 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) case 1: { target = args[0]; - var configurationManager = IoCManager.Resolve(); - seconds = configurationManager.GetCVar(CCVars.RulesWaitTime); + seconds = _configuration.GetCVar(CCVars.RulesWaitTime); break; } case 2: @@ -48,15 +51,14 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) } - var message = new ShowRulesPopupMessage { PopupTime = seconds }; - - if (!IoCManager.Resolve().TryGetSessionByUsername(target, out var player)) + if (!_player.TryGetSessionByUsername(target, out var player)) { shell.WriteError("Unable to find a player with that name."); return; } - var netManager = IoCManager.Resolve(); - netManager.ServerSendMessage(message, player.Channel); + var coreRules = _configuration.GetCVar(CCVars.RulesFile); + var message = new SendRulesInformationMessage { PopupTime = seconds, CoreRules = coreRules, ShouldShowRules = true}; + _net.ServerSendMessage(message, player.Channel); } } diff --git a/Content.Shared/Info/RulesMessages.cs b/Content.Shared/Info/RulesMessages.cs index ac7400238f0..999e5441daf 100644 --- a/Content.Shared/Info/RulesMessages.cs +++ b/Content.Shared/Info/RulesMessages.cs @@ -5,22 +5,28 @@ namespace Content.Shared.Info; /// -/// Sent by the server to show the rules to the client instantly. +/// Sent by the server when the client connects to sync the client rules and displaying a popup with them if necessitated. /// -public sealed class ShowRulesPopupMessage : NetMessage +public sealed class SendRulesInformationMessage : NetMessage { public override MsgGroups MsgGroup => MsgGroups.Command; public float PopupTime { get; set; } + public string CoreRules { get; set; } = string.Empty; + public bool ShouldShowRules { get; set; } public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) { PopupTime = buffer.ReadFloat(); + CoreRules = buffer.ReadString(); + ShouldShowRules = buffer.ReadBoolean(); } public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) { buffer.Write(PopupTime); + buffer.Write(CoreRules); + buffer.Write(ShouldShowRules); } } From cfc63f2d8bae9e9ddd3d5d8a161492dd61a57370 Mon Sep 17 00:00:00 2001 From: SpaceRox1244 <138547931+SpaceRox1244@users.noreply.github.com> Date: Thu, 30 Jan 2025 07:06:41 -0500 Subject: [PATCH 038/197] Adjust inventory size of ginormous scrap (#33454) Adjusts the size of ginormous scrap to fit in bags of holding --- .../Entities/Objects/Materials/scrap.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Materials/scrap.yml b/Resources/Prototypes/Entities/Objects/Materials/scrap.yml index 734111af6dc..c4ec20465ee 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/scrap.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/scrap.yml @@ -77,7 +77,9 @@ - state: metal-1 map: [ "base" ] - type: Item - size: Ginormous + size: Large + shape: + - 0,0,4,4 # 5x5 heldPrefix: metal - type: MultiHandedItem - type: RandomSprite @@ -135,7 +137,9 @@ junk-airlock-1: "" junk-airlock-2: "" - type: Item - size: Ginormous + size: Large + shape: + - 0,0,4,4 # 5x5 heldPrefix: "airlock" - type: MultiHandedItem - type: PhysicalComposition @@ -273,7 +277,9 @@ layers: - state: junk-firelock-1 - type: Item - size: Ginormous + size: Large + shape: + - 0,0,4,4 # 5x5 heldPrefix: firelock-1 - type: MultiHandedItem - type: PhysicalComposition @@ -290,7 +296,9 @@ layers: - state: junk-firelock-2 - type: Item - size: Ginormous + size: Large + shape: + - 0,0,4,4 # 5x5 heldPrefix: firelock-2 - type: MultiHandedItem - type: PhysicalComposition From 2f90697f08df4db247065ca42d0e994f47f2d444 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 30 Jan 2025 12:07:48 +0000 Subject: [PATCH 039/197] 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 c2b1988cf59..b7899096738 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: de0rix - changes: - - message: Animals in critical state now all have proper sprites. - type: Fix - id: 7376 - time: '2024-09-15T01:53:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32175 - author: notafet changes: - message: Pressure and volume pumps now require power to operate. @@ -3901,3 +3894,10 @@ id: 7875 time: '2025-01-30T11:34:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34730 +- author: SpaceRox1244 + changes: + - message: Massive scrap can now fit in bags of holding. + type: Tweak + id: 7876 + time: '2025-01-30T12:06:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33454 From f1f8bccb23112a8630fec0a770b7e37085971f56 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Thu, 30 Jan 2025 04:09:31 -0800 Subject: [PATCH 040/197] After getting banned, you now have to re-read the rules! (#33270) * first commit * opps * Reset cooldown instead * Added ccvar * Not replicated! --- Content.Server/Administration/Managers/BanManager.cs | 2 ++ Content.Server/Database/ServerDbBase.cs | 4 ++-- Content.Server/Database/ServerDbManager.cs | 4 ++-- Content.Server/Info/RulesManager.cs | 2 +- Content.Shared/CCVar/CCVars.Admin.cs | 6 ++++++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Content.Server/Administration/Managers/BanManager.cs b/Content.Server/Administration/Managers/BanManager.cs index c65059f55dd..2d76c434e9d 100644 --- a/Content.Server/Administration/Managers/BanManager.cs +++ b/Content.Server/Administration/Managers/BanManager.cs @@ -165,6 +165,8 @@ public async void CreateServerBan(NetUserId? target, string? targetUsername, Net null); await _db.AddServerBanAsync(banDef); + if (_cfg.GetCVar(CCVars.ServerBanResetLastReadRules) && target != null) + await _db.SetLastReadRules(target.Value, null); // Reset their last read rules. They probably need a refresher! var adminName = banningAdmin == null ? Loc.GetString("system-user") : (await _db.GetPlayerRecordByUserId(banningAdmin.Value))?.LastSeenUserName ?? Loc.GetString("system-user"); diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index b75870ac0e6..ccbaf276cd4 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -1112,7 +1112,7 @@ public async Task RemoveFromWhitelistAsync(NetUserId player) .SingleOrDefaultAsync()); } - public async Task SetLastReadRules(NetUserId player, DateTimeOffset date) + public async Task SetLastReadRules(NetUserId player, DateTimeOffset? date) { await using var db = await GetDb(); @@ -1122,7 +1122,7 @@ public async Task SetLastReadRules(NetUserId player, DateTimeOffset date) return; } - dbPlayer.LastReadRules = date.UtcDateTime; + dbPlayer.LastReadRules = date?.UtcDateTime; await db.DbContext.SaveChangesAsync(); } diff --git a/Content.Server/Database/ServerDbManager.cs b/Content.Server/Database/ServerDbManager.cs index 5ddb3a590cb..e3cfb66c7f7 100644 --- a/Content.Server/Database/ServerDbManager.cs +++ b/Content.Server/Database/ServerDbManager.cs @@ -282,7 +282,7 @@ Task AddConnectionLogAsync( #region Rules Task GetLastReadRules(NetUserId player); - Task SetLastReadRules(NetUserId player, DateTimeOffset time); + Task SetLastReadRules(NetUserId player, DateTimeOffset? time); #endregion @@ -830,7 +830,7 @@ public Task PurgeUploadedResourceLogAsync(int days) return RunDbCommand(() => _db.GetLastReadRules(player)); } - public Task SetLastReadRules(NetUserId player, DateTimeOffset time) + public Task SetLastReadRules(NetUserId player, DateTimeOffset? time) { DbWriteOpsMetric.Inc(); return RunDbCommand(() => _db.SetLastReadRules(player, time)); diff --git a/Content.Server/Info/RulesManager.cs b/Content.Server/Info/RulesManager.cs index f4d9e57bd4d..224d7f7d9af 100644 --- a/Content.Server/Info/RulesManager.cs +++ b/Content.Server/Info/RulesManager.cs @@ -34,7 +34,7 @@ private async void OnConnected(object? sender, NetChannelArgs e) { PopupTime = _cfg.GetCVar(CCVars.RulesWaitTime), CoreRules = _cfg.GetCVar(CCVars.RulesFile), - ShouldShowRules = !isLocalhost && !hasCooldown + ShouldShowRules = !isLocalhost && !hasCooldown, }; _netManager.ServerSendMessage(showRulesMessage, e.Channel); } diff --git a/Content.Shared/CCVar/CCVars.Admin.cs b/Content.Shared/CCVar/CCVars.Admin.cs index bbce533ed1b..f05eb3376ea 100644 --- a/Content.Shared/CCVar/CCVars.Admin.cs +++ b/Content.Shared/CCVar/CCVars.Admin.cs @@ -89,6 +89,12 @@ public sealed partial class CCVars public static readonly CVarDef ServerBanErasePlayer = CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + /// + /// If true, will reset the last time the player has read the rules. This will mean on their next login they will be shown the rules again. + /// + public static readonly CVarDef ServerBanResetLastReadRules = + CVarDef.Create("admin.server_ban_reset_last_read_rules", true, CVar.ARCHIVE | CVar.SERVER); + /// /// Minimum players sharing a connection required to create an alert. -1 to disable the alert. /// From ab01d9bfaf3e8a7fb0c9e537a85588e53c4bcf77 Mon Sep 17 00:00:00 2001 From: c4llv07e Date: Thu, 30 Jan 2025 15:24:55 +0300 Subject: [PATCH 041/197] More robust Particle Accelerator menu (retry) (#34037) Particle Acceleratir fixed Co-authored-by: VideoKompany <135313844+VlaDOS1408@users.noreply.github.com> --- .../UI/ParticleAcceleratorControlMenu.xaml | 205 ++++++++++++++---- .../ui/particle-accelerator-control-menu.ftl | 3 +- 2 files changed, 159 insertions(+), 49 deletions(-) diff --git a/Content.Client/ParticleAccelerator/UI/ParticleAcceleratorControlMenu.xaml b/Content.Client/ParticleAccelerator/UI/ParticleAcceleratorControlMenu.xaml index 63f15837068..7cef7d58b63 100644 --- a/Content.Client/ParticleAccelerator/UI/ParticleAcceleratorControlMenu.xaml +++ b/Content.Client/ParticleAccelerator/UI/ParticleAcceleratorControlMenu.xaml @@ -1,50 +1,129 @@ - - - - - - - - - - - public float OrbitStopLength = 1.0f; - - /// - /// How far along in the orbit, from 0 to 1, is this entity? - /// - [Animatable] - public float Orbit { get; set; } = 0.0f; } From 32b5f78ea7047c18c11ee276b7c86220331a63e3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 2 Feb 2025 01:39:09 +0000 Subject: [PATCH 075/197] 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 4b7d8038834..a26d3d99c1a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Beck Thompson - changes: - - message: Recycler no longer allows basic materials to be inserted into it. - type: Fix - id: 7392 - time: '2024-09-18T21:58:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32144 - author: deltanedas changes: - message: Epinephrine now adds Adrenaline, because it is. @@ -3906,3 +3899,10 @@ id: 7891 time: '2025-02-02T01:00:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33239 +- author: Tayrtahn + changes: + - message: Ghosts and anomaly cores no longer jitter when starting to follow a target. + type: Fix + id: 7892 + time: '2025-02-02T01:38:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34797 From 4e6e796b75b3b564815c273f573b90c5f374ec76 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 2 Feb 2025 13:44:53 +1100 Subject: [PATCH 076/197] Update submodule to 242.0.1 (#34817) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index d7f6a9ba439..bd69d51d360 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit d7f6a9ba4394b34e55b3fdd4d98c5dfe2bb21642 +Subproject commit bd69d51d360ec77e79ca173e01caabb0a31a0a23 From 977326358b7a980b7226d944ddef399fd70224ec Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Sun, 2 Feb 2025 14:12:23 -0500 Subject: [PATCH 077/197] Fix diona plushie bloom visuals (#34832) --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index d65610d808b..e59174c39d1 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -533,6 +533,7 @@ - type: RefillableSolution solution: plushie - type: SolutionContainerVisuals + solutionName: plushie maxFillLevels: 1 fillBaseName: plushie_diona changeColor: false From 0a88968cc8f3f4312b6c721fb95e15d3b1f71f4c Mon Sep 17 00:00:00 2001 From: Utmanarn Date: Sun, 2 Feb 2025 20:13:58 +0100 Subject: [PATCH 078/197] Reworded the "SAY HEY LISTEN" silicon law (#34819) * Changed law Changed a must always law to have wording that does not encourage message spamming. * Fixed a mistake Forgot to remove the "YOU MUST ALWAYS" from the commit. * Reworded the law Reworded the law to be more open the other potential options. --- Resources/Prototypes/Datasets/ion_storm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Datasets/ion_storm.yml b/Resources/Prototypes/Datasets/ion_storm.yml index f4404a70ed8..e650db390a3 100644 --- a/Resources/Prototypes/Datasets/ion_storm.yml +++ b/Resources/Prototypes/Datasets/ion_storm.yml @@ -544,7 +544,7 @@ - RHYME - RAISE THE ROOF - ROLL AROUND AT THE SPEED OF SOUND - - SAY HEY LISTEN + - INCORPORATE 'HEY LISTEN' WHILE COMMUNICATING - SHOUT - SHUT DOWN EVERYTHING - SLEEP WITH THE FISHES From 7242fb48f47f6dc923190bd38a8e8eff4cc9212e Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Sun, 2 Feb 2025 14:23:41 -0500 Subject: [PATCH 079/197] Wizard Touch Spells (Smite, Cluwne's Curse, Slippery Slope) (#34531) * Renames Smite Spells yml to Touch Spells and Renames Smite Spells region to the same * Adds wizard clothes requirement to Smite. Adds Cluwne spell. Adds EnsureCompOnTouchSpellEvent and implements it in the magicsystem * Adds Smite and Cluwne to the grimore and loc for them * Adds Slippery Slope spell and SlipOnCollide * Adds handled for comp spell event * Removes super slippery * Removes EnsureCompOnTouchSpell it was redundant with ChangeComponentsSpellEvent * Makes requirement-free action for smite * checks if we should be slipping what we touch * Removes SlipOnCollide, adds negative speed for steptrigger * Removes slip on collide adds negative speed for steptrigger --- Content.Shared/Magic/SharedMagicSystem.cs | 87 ++----------------- Content.Shared/Slippery/SlipperySystem.cs | 4 +- .../Locale/en-US/magic/spells-actions.ftl | 2 + .../Locale/en-US/store/spellbook-catalog.ftl | 11 ++- .../Prototypes/Catalog/spellbook_catalog.yml | 39 +++++++++ .../Prototypes/Entities/Mobs/NPCs/space.yml | 2 +- .../Entities/Objects/Magic/books.yml | 2 +- Resources/Prototypes/Magic/smite_spells.yml | 20 ----- Resources/Prototypes/Magic/touch_spells.yml | 83 ++++++++++++++++++ 9 files changed, 145 insertions(+), 105 deletions(-) delete mode 100644 Resources/Prototypes/Magic/smite_spells.yml create mode 100644 Resources/Prototypes/Magic/touch_spells.yml diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index fe033f24987..878c4bdca4f 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -7,7 +7,6 @@ using Content.Shared.Doors.Systems; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; -using Content.Shared.Humanoid; using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Lock; @@ -15,9 +14,6 @@ using Content.Shared.Magic.Events; using Content.Shared.Maps; using Content.Shared.Mind; -using Content.Shared.Mind.Components; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Speech.Muting; @@ -37,6 +33,10 @@ namespace Content.Shared.Magic; +// TODO: Move BeforeCast & Prerequirements (like Wizard clothes) to action comp +// Alt idea - make it its own comp and split, like the Charge PR +// TODO: Move speech to actionComp or again, its own ECS +// TODO: Use the MagicComp just for pure backend things like spawning patterns? /// /// Handles learning and using spells (actions) /// @@ -60,7 +60,6 @@ public abstract class SharedMagicSystem : EntitySystem [Dependency] private readonly LockSystem _lock = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly SharedStunSystem _stun = default!; @@ -81,79 +80,6 @@ public override void Initialize() SubscribeLocalEvent(OnRandomGlobalSpawnSpell); SubscribeLocalEvent(OnMindSwapSpell); SubscribeLocalEvent(OnVoidApplause); - - // Spell wishlist - // A wishlish of spells that I'd like to implement or planning on implementing in a future PR - - // TODO: InstantDoAfterSpell and WorldDoafterSpell - // Both would be an action that take in an event, that passes an event to trigger once the doafter is done - // This would be three events: - // 1 - Event that triggers from the action that starts the doafter - // 2 - The doafter event itself, which passes the event with it - // 3 - The event to trigger once the do-after finishes - - // TODO: Inanimate objects to life ECS - // AI sentience - - // TODO: Flesh2Stone - // Entity Target spell - // Synergy with Inanimate object to life (detects player and allows player to move around) - - // TODO: Lightning Spell - // Should just fire lightning, try to prevent arc back to caster - - // TODO: Magic Missile (homing projectile ecs) - // Instant action, target any player (except self) on screen - - // TODO: Random projectile ECS for magic-carp, wand of magic - - // TODO: Recall Spell - // mark any item in hand to recall - // ItemRecallComponent - // Event adds the component if it doesn't exist and the performer isn't stored in the comp - // 2nd firing of the event checks to see if the recall comp has this uid, and if it does it calls it - // if no free hands, summon at feet - // if item deleted, clear stored item - - // TODO: Jaunt (should be its own ECS) - // Instant action - // When clicked, disappear/reappear (goes to paused map) - // option to restrict to tiles - // option for requiring entry/exit (blood jaunt) - // speed option - - // TODO: Summon Events - // List of wizard events to add into the event pool that frequently activate - // floor is lava - // change places - // ECS that when triggered, will periodically trigger a random GameRule - // Would need a controller/controller entity? - - // TODO: Summon Guns - // Summon a random gun at peoples feet - // Get every alive player (not in cryo, not a simplemob) - // TODO: After Antag Rework - Rare chance of giving gun collector status to people - - // TODO: Summon Magic - // Summon a random magic wand at peoples feet - // Get every alive player (not in cryo, not a simplemob) - // TODO: After Antag Rework - Rare chance of giving magic collector status to people - - // TODO: Bottle of Blood - // Summons Slaughter Demon - // TODO: Slaughter Demon - // Also see Jaunt - - // TODO: Field Spells - // Should be able to specify a grid of tiles (3x3 for example) that it effects - // Timed despawn - so it doesn't last forever - // Ignore caster - for spells that shouldn't effect the caster (ie if timestop should effect the caster) - - // TODO: Touch toggle spell - // 1 - When toggled on, show in hand - // 2 - Block hand when toggled on - // - Require free hand - // 3 - use spell event when toggled & click } private void OnBeforeCastSpell(Entity ent, ref BeforeCastSpellEvent args) @@ -446,7 +372,7 @@ private void SpawnSpellHelper(string? proto, EntityCoordinates position, EntityU } // End Spell Helpers #endregion - #region Smite Spells + #region Touch Spells private void OnSmiteSpell(SmiteSpellEvent ev) { if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer)) @@ -465,7 +391,8 @@ private void OnSmiteSpell(SmiteSpellEvent ev) _body.GibBody(ev.Target, true, body); } - // End Smite Spells + + // End Touch Spells #endregion #region Knock Spells /// diff --git a/Content.Shared/Slippery/SlipperySystem.cs b/Content.Shared/Slippery/SlipperySystem.cs index 19cc19aa19c..acf120ad1ba 100644 --- a/Content.Shared/Slippery/SlipperySystem.cs +++ b/Content.Shared/Slippery/SlipperySystem.cs @@ -19,7 +19,7 @@ namespace Content.Shared.Slippery; -[UsedImplicitly] +[UsedImplicitly] public sealed class SlipperySystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; @@ -83,7 +83,7 @@ private void OnEntityExit(EntityUid uid, SlipperyComponent component, ref EndCol { if (HasComp(args.OtherEntity)) _speedModifier.AddModifiedEntity(args.OtherEntity); - } + } private bool CanSlip(EntityUid uid, EntityUid toSlip) { diff --git a/Resources/Locale/en-US/magic/spells-actions.ftl b/Resources/Locale/en-US/magic/spells-actions.ftl index faf5d774369..22160180189 100644 --- a/Resources/Locale/en-US/magic/spells-actions.ftl +++ b/Resources/Locale/en-US/magic/spells-actions.ftl @@ -6,3 +6,5 @@ action-speech-spell-fireball = ONI'SOMA! action-speech-spell-summon-guns = YOR'NEE VES-KORFA action-speech-spell-summon-magic = RYGOIN FEMA-VERECO action-speech-spell-mind-swap = GIN'YU CAPAN! +action-speech-spell-cluwne = !KNOH +action-speech-spell-slip = SLEE PARRI! diff --git a/Resources/Locale/en-US/store/spellbook-catalog.ftl b/Resources/Locale/en-US/store/spellbook-catalog.ftl index 98d19817c67..b18cac4f9a7 100644 --- a/Resources/Locale/en-US/store/spellbook-catalog.ftl +++ b/Resources/Locale/en-US/store/spellbook-catalog.ftl @@ -1,6 +1,6 @@ # Spells spellbook-fireball-name = Fireball -spellbook-fireball-desc = Get most crew exploding with rage when they see this fireball heading toward them! +spellbook-fireball-desc = Get most crew exploding with rage when they see this fireball heading toward them! Upgradeable. spellbook-blink-name = Blink spellbook-blink-desc = Don't blink or you'll miss yourself teleporting away. @@ -26,6 +26,15 @@ spellbook-ethereal-jaunt-description = Slip into the ethereal plane to slip away spellbook-mind-swap-name = Mind Swap spellbook-mind-swap-description = Exchange bodies with another person! +spellbook-smite-name = Smite +spellbook-smite-desc = Don't like them? EXPLODE them into giblets! Requires Wizard Robe & Hat. + +spellbook-cluwne-name = Cluwne's Curse +spellbook-cluwne-desc = For when you really hate someone and Smite isn't enough. Requires Wizard Robe & Hat. + +spellbook-slip-name = Slippery Slope +spellbook-slip-desc = Learn the ancient ways of the Janitor and curse your target to be slippery. Requires Wizard Robe & Hat. + # Equipment spellbook-wand-polymorph-door-name = Wand of Entrance diff --git a/Resources/Prototypes/Catalog/spellbook_catalog.yml b/Resources/Prototypes/Catalog/spellbook_catalog.yml index 3246117e718..dfd171d9b27 100644 --- a/Resources/Prototypes/Catalog/spellbook_catalog.yml +++ b/Resources/Prototypes/Catalog/spellbook_catalog.yml @@ -26,6 +26,45 @@ - !type:ListingLimitedStockCondition stock: 1 +- type: listing + id: SpellbookSmite + name: spellbook-smite-name + description: spellbook-smite-desc + productAction: ActionSmite + cost: + WizCoin: 3 + categories: + - SpellbookOffensive + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookCluwne + name: spellbook-cluwne-name + description: spellbook-cluwne-desc + productAction: ActionCluwne + cost: + WizCoin: 3 + categories: + - SpellbookOffensive + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + +- type: listing + id: SpellbookSlip + name: spellbook-slip-name + description: spellbook-slip-desc + productAction: ActionSlippery + cost: + WizCoin: 2 + categories: + - SpellbookOffensive + conditions: + - !type:ListingLimitedStockCondition + stock: 1 + # Defensive - type: listing id: SpellbookForceWall diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml index 8cf2391e038..2e5139e166d 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/space.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/space.yml @@ -511,7 +511,7 @@ - type: MobStateActions actions: Alive: - - ActionSmite + - ActionSmiteNoReq Critical: - ActionCritSuccumb - ActionCritFakeDeath diff --git a/Resources/Prototypes/Entities/Objects/Magic/books.yml b/Resources/Prototypes/Entities/Objects/Magic/books.yml index e47fa00c45b..d000f784290 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/books.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/books.yml @@ -136,7 +136,7 @@ - state: overlay_blood - type: Spellbook spellActions: - ActionSmite: -1 + ActionSmiteNoReq: -1 - type: entity id: KnockSpellbook diff --git a/Resources/Prototypes/Magic/smite_spells.yml b/Resources/Prototypes/Magic/smite_spells.yml deleted file mode 100644 index 10f5bdd5389..00000000000 --- a/Resources/Prototypes/Magic/smite_spells.yml +++ /dev/null @@ -1,20 +0,0 @@ -- type: entity - id: ActionSmite - name: Smite - description: Instantly gibs a target. - components: - - type: EntityTargetAction - useDelay: 60 - itemIconStyle: BigAction - whitelist: - components: - - Body - canTargetSelf: false - interactOnMiss: false - sound: !type:SoundPathSpecifier - path: /Audio/Magic/disintegrate.ogg - icon: - sprite: Objects/Magic/magicactions.rsi - state: gib - event: !type:SmiteSpellEvent - speech: action-speech-spell-smite diff --git a/Resources/Prototypes/Magic/touch_spells.yml b/Resources/Prototypes/Magic/touch_spells.yml new file mode 100644 index 00000000000..deb036f215a --- /dev/null +++ b/Resources/Prototypes/Magic/touch_spells.yml @@ -0,0 +1,83 @@ +- type: entity + id: ActionSmite + name: Smite + description: Instantly gibs a target. + components: + - type: EntityTargetAction + useDelay: 90 + itemIconStyle: BigAction + whitelist: + components: + - Body + canTargetSelf: false + interactOnMiss: false + sound: !type:SoundPathSpecifier + path: /Audio/Magic/disintegrate.ogg + icon: + sprite: Objects/Magic/magicactions.rsi + state: gib + event: !type:SmiteSpellEvent + speech: action-speech-spell-smite + - type: Magic + requiresClothes: true + +# For the Snail +- type: entity + id: ActionSmiteNoReq + parent: ActionSmite + name: Smite + description: Instantly gibs a target. + components: + - type: Magic + +- type: entity + id: ActionCluwne + name: Cluwne's Curse + description: Turns someone into a Cluwne! + components: + - type: EntityTargetAction + useDelay: 120 + itemIconStyle: BigAction + whitelist: + components: + - Body + canTargetSelf: false + interactOnMiss: false + sound: !type:SoundPathSpecifier + path: /Audio/Items/brokenbikehorn.ogg + icon: + sprite: Clothing/Mask/cluwne.rsi + state: icon + event: !type:ChangeComponentsSpellEvent + speech: action-speech-spell-cluwne + toAdd: + - type: Cluwne + - type: Magic + requiresClothes: true + +- type: entity + id: ActionSlippery + name: Slippery Slope + description: Make someone slippery. + components: + - type: EntityTargetAction + useDelay: 60 + itemIconStyle: BigAction + whitelist: + components: + - Body + canTargetSelf: false + interactOnMiss: false + sound: !type:SoundPathSpecifier + path: /Audio/Effects/slip.ogg + icon: + sprite: Objects/Specific/Janitorial/soap.rsi + state: omega-4 + event: !type:ChangeComponentsSpellEvent + speech: action-speech-spell-slip + toAdd: + - type: Slippery + - type: StepTrigger + requiredTriggeredSpeed: -1 + - type: Magic + requiresClothes: true From 76499834db7145d912d2972e584b4955767a07a6 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sun, 2 Feb 2025 11:38:34 -0800 Subject: [PATCH 080/197] Fixes debug assertion thrown when spiking with pills (#34813) --- .../Chemistry/EntitySystems/SolutionSpikerSystem.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Content.Shared/Chemistry/EntitySystems/SolutionSpikerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SolutionSpikerSystem.cs index f179580604c..468e28f65fd 100644 --- a/Content.Shared/Chemistry/EntitySystems/SolutionSpikerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SolutionSpikerSystem.cs @@ -26,7 +26,8 @@ public override void Initialize() private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) { - TrySpike(args.Used, args.Target, args.User, entity.Comp); + if (TrySpike(args.Used, args.Target, args.User, entity.Comp)) + args.Handled = true; } /// @@ -36,7 +37,7 @@ private void OnInteractUsing(Entity entity, ref Int /// Source of the solution. /// Target to spike with the solution from source. /// User spiking the target solution. - private void TrySpike(EntityUid source, EntityUid target, EntityUid user, RefillableSolutionComponent? spikableTarget = null, + private bool TrySpike(EntityUid source, EntityUid target, EntityUid user, RefillableSolutionComponent? spikableTarget = null, SolutionSpikerComponent? spikableSource = null, SolutionContainerManagerComponent? managerSource = null, SolutionContainerManagerComponent? managerTarget = null) @@ -46,21 +47,23 @@ private void TrySpike(EntityUid source, EntityUid target, EntityUid user, Refill || !_solution.TryGetRefillableSolution((target, spikableTarget, managerTarget), out var targetSoln, out var targetSolution) || !_solution.TryGetSolution((source, managerSource), spikableSource.SourceSolution, out _, out var sourceSolution)) { - return; + return false; } if (targetSolution.Volume == 0 && !spikableSource.IgnoreEmpty) { _popup.PopupClient(Loc.GetString(spikableSource.PopupEmpty, ("spiked-entity", target), ("spike-entity", source)), user, user); - return; + return false; } if (!_solution.ForceAddSolution(targetSoln.Value, sourceSolution)) - return; + return false; _popup.PopupClient(Loc.GetString(spikableSource.Popup, ("spiked-entity", target), ("spike-entity", source)), user, user); sourceSolution.RemoveAllSolution(); if (spikableSource.Delete) QueueDel(source); + + return true; } } From d1a1182b3850d9f5e69deead2ca42656b7abfa33 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sun, 2 Feb 2025 11:39:02 -0800 Subject: [PATCH 081/197] Fixes debug assertion thrown when chopping logs (#34814) --- Content.Server/Botany/Systems/LogSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/Botany/Systems/LogSystem.cs b/Content.Server/Botany/Systems/LogSystem.cs index a0639e3708c..3d415635be2 100644 --- a/Content.Server/Botany/Systems/LogSystem.cs +++ b/Content.Server/Botany/Systems/LogSystem.cs @@ -45,5 +45,6 @@ private void OnInteractUsing(EntityUid uid, LogComponent component, InteractUsin } QueueDel(uid); + args.Handled = true; } } From b65685876041c790a12c1312e01aa7bc8f986b6e Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sun, 2 Feb 2025 11:39:23 -0800 Subject: [PATCH 082/197] Fixes debug assertion crash when inserting cash (#34812) --- Content.Server/Cargo/Systems/CargoSystem.Orders.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index ed27780a843..ef556dc607b 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -64,6 +64,7 @@ private void OnInteractUsing(EntityUid uid, CargoOrderConsoleComponent component _audio.PlayPvs(component.ConfirmSound, uid); UpdateBankAccount(stationUid.Value, bank, (int) price); QueueDel(args.Used); + args.Handled = true; } private void OnInit(EntityUid uid, CargoOrderConsoleComponent orderConsole, ComponentInit args) From a4e4ae6094cc8f407ed6c4d9a59e8712864ef4f0 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sun, 2 Feb 2025 21:00:27 +0100 Subject: [PATCH 083/197] [Admin] Omni Accent Smite (#34824) gods forgive me --- .../Systems/AdminVerbSystem.Smites.cs | 31 +++++++++++++++++++ .../Locale/en-US/administration/smites.ftl | 2 ++ 2 files changed, 33 insertions(+) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 5e002198056..7338cf5176f 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -895,5 +895,36 @@ private void AddSmiteVerbs(GetVerbsEvent args) Message = string.Join(": ", superslipName, Loc.GetString("admin-smite-super-slip-description")) }; args.Verbs.Add(superslip); + + var omniaccentName = Loc.GetString("admin-smite-omni-accent-name").ToLowerInvariant(); + Verb omniaccent = new() + { + Text = omniaccentName, + Category = VerbCategory.Smite, + Icon = new SpriteSpecifier.Rsi(new("Interface/Actions/voice-mask.rsi"), "icon"), + Act = () => + { + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + EnsureComp(args.Target); + + if (_random.Next(0, 8) == 0) + { + EnsureComp(args.Target); // was asked to make this at a low chance idk + } + }, + Impact = LogImpact.Extreme, + Message = string.Join(": ", omniaccentName, Loc.GetString("admin-smite-omni-accent-description")) + }; + args.Verbs.Add(omniaccent); } } diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index de02129917e..43480d013b4 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -57,6 +57,7 @@ admin-smite-vomit-organs-name = Vomit Organs admin-smite-ghostkick-name = Ghost Kick admin-smite-nyanify-name = Cat Ears admin-smite-kill-sign-name = Kill Sign +admin-smite-omni-accent-name = Omni-Accent ## Smite descriptions @@ -99,6 +100,7 @@ admin-smite-garbage-can-description = Turn them into a garbage bin to emphasize admin-smite-super-bonk-description = Slams them on every single table on the Station and beyond. admin-smite-super-bonk-lite-description= Slams them on every single table on the Station and beyond. Stops when the target is dead. admin-smite-super-slip-description = Slips them really, really hard. +admin-smite-omni-accent-description = Makes the target speak with almost every accent available. ## Tricks descriptions From 4ede74fcc3c94c5a6862a9c40968cc10987525e1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 2 Feb 2025 20:01:35 +0000 Subject: [PATCH 084/197] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 27333bc5cb5..138f1a0e898 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -737,5 +737,12 @@ Entries: id: 91 time: '2025-01-21T23:23:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34563 +- author: ScarKy0 + changes: + - message: Added the omni-accent smite. It adds most accents onto the target. + type: Add + id: 92 + time: '2025-02-02T20:00:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34824 Name: Admin Order: 3 From 1442b32d0f078bb2df8ff67b523bb5ec3f90f5ee Mon Sep 17 00:00:00 2001 From: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com> Date: Sun, 2 Feb 2025 21:31:32 +0000 Subject: [PATCH 085/197] Fixed Wehxplosion yaml error (#34837) --- Resources/Prototypes/Reagents/fun.yml | 18 ------------------ Resources/Prototypes/Recipes/Reactions/fun.yml | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index 2215b6f33da..00d31cbd102 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -381,21 +381,3 @@ conditions: - !type:ReagentThreshold min: 50 - -- type: reaction - id: WehHewExplosion - impact: High - priority: 20 - reactants: - JuiceThatMakesYouWeh: - amount: 1 - JuiceThatMakesYouHew: - amount: 1 - effects: - - !type:ExplosionReactionEffect - explosionType: Radioactive - maxIntensity: 200 - intensityPerUnit: 2 - intensitySlope: 1 - maxTotalIntensity: 250 - tileBreakScale: 0.00001 diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml index 86d1fcc2fec..3b5d104b982 100644 --- a/Resources/Prototypes/Recipes/Reactions/fun.yml +++ b/Resources/Prototypes/Recipes/Reactions/fun.yml @@ -227,3 +227,21 @@ effects: - !type:CreateEntityReactionEffect entity: IngotSilver1 + +- type: reaction + id: WehHewExplosion + impact: High + priority: 20 + reactants: + JuiceThatMakesYouWeh: + amount: 1 + JuiceThatMakesYouHew: + amount: 1 + effects: + - !type:ExplosionReactionEffect + explosionType: Radioactive + maxIntensity: 200 + intensityPerUnit: 2 + intensitySlope: 1 + maxTotalIntensity: 250 + tileBreakScale: 0.00001 From 3816440034c2dae69cd12cbb1002a5a7412d3efa Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Sun, 2 Feb 2025 22:59:45 +0100 Subject: [PATCH 086/197] HOTFIX revert lecter visual update #34589 (#34826) --- .../Weapons/Guns/Rifles/lecter.rsi/base.png | Bin 583 -> 465 bytes .../Guns/Rifles/lecter.rsi/bolt-open.png | Bin 587 -> 459 bytes .../Rifles/lecter.rsi/equipped-BACKPACK.png | Bin 1246 -> 1045 bytes .../lecter.rsi/equipped-SUITSTORAGE.png | Bin 1280 -> 1045 bytes .../Weapons/Guns/Rifles/lecter.rsi/icon.png | Bin 645 -> 488 bytes .../Guns/Rifles/lecter.rsi/inhand-left.png | Bin 880 -> 391 bytes .../Guns/Rifles/lecter.rsi/inhand-right.png | Bin 883 -> 398 bytes .../Weapons/Guns/Rifles/lecter.rsi/mag-0.png | Bin 181 -> 196 bytes .../Weapons/Guns/Rifles/lecter.rsi/meta.json | 2 +- .../Rifles/lecter.rsi/wielded-inhand-left.png | Bin 922 -> 832 bytes .../lecter.rsi/wielded-inhand-right.png | Bin 905 -> 822 bytes 11 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/base.png index c2c3b87a546468b8a637f33dd5b253de78cf952c..e30d896202d3f6b8464d3674ee77f473f05c4f5e 100644 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP%uBhC&U#SOD1`PPVG5sxB@r`I!ky zN=iUwK%l9nA}uYQmXBLcmo4y` zXr$7!aaNQV*Vicimu}fSe8LPjgqE8uz5dx@A*ZG5ISD~?SGn_f`~eclbBjZSw8N&Z zdbP_=L{09z4%_R#GrsYRs(!iEa;7hN*JUnob8$;ft8BS*;UCk3HO!fcmm`u_>?x~N zl)rXi;){a<8+T4zxpz&%mwy%3ucqzd`RhCBcg@*L2hL6Z&2sbnE{nK7=jQ8wV#xTw VW91)NvjFHT22WQ%mvv4FO#s44t#$wa delta 569 zcmV-90>=H(1IGlA8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00IF?L_t(oh3%BVOB7KU zz<*EX5H=zO9VBME2)o`Yty`pcT0BHTwVB7x)u|xpAfD5(6L<0E z77-iadRPbt)0HK99cJJ3=FP6Nc5QyAH{W~T`+eWMHv?5L7IhhUqDM9k+$i|M2S@)14rAkQmF_4E0f8{O7G>4 z$#eH?rr-Vy#neXn<|m=AS4b%lLilf>Z)B3fvzv^*`~VOd_ns-BI#>KYd*Q^*P4x9< z5f%`fsV>&fS$`h`6yD7;I{pHHnQOw$mRUYYyo(+uK)}` zd`0Q?Q}mcQ2Dmcx09vsp%K){|e5nR2_y1n6X5%0<{~V}Rs{{q;=tbb|a&&Bi_rrhg zzX*WyWigcVeekZiO+>u3wgtdmeIMwdSS*U*4k)pb4u9Wy?2pR}V!G@PrzWn;sauzr zUtVVe$Y!(T^LddeK@{oCO|{#S9GG z!XV7ZFl&wkP%tOJC&U#SOD1`PPVG5sxB@r`I!ky zN=iUwK%l9nA}uYQmXfo4B}mczC#>p`o_6wgd=>1JzhsS^`N~Sy>5j(T7Lx zMF8znDGBlmW?=g9`#%u;{`dd?9}wgJKV~omAy_zm|L1sjbYUe>{RvMO$B>FSZzrA> zYBJz)ZB}E|HeH|_B`Es$f4xa=x&&kCQ$PRBFYnBD4{o@xTCJ`#ZHC}Mf#86r9;`yk zB7AkZTdUT#XRkDMYwu*p=_sBh^hGNu+v(gyZnq!jv*^~O>v)8($TE-PWKj? zy{t$xj3`gZb7q}lQF^!Xii$+cZLi*zo?~Y|ah$yHkLkf0=1j%Q5y>ldep@)9Kl_E} zmkf^^r%qgn3p1#yKjpV;={|@0$){`grDY~OKV94OCOuY0zwY^Y@k)kHL++bDTH-*_ O#o+1c=d#Wzp$P!x4y_OX delta 573 zcmV-D0>b^v1Iq-E8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00IR`L_t(oh3%9vXcJKw z$A7QfAoWU7a42$d>5y(}tD9Qs6dZ~LZLA$TtCNc0AWjMe*Bp-0R_Ri(OFlIQ;gb@A{=ouO#|L7XSFFpZ;>h2SH)Z~gkC(p!gZlbR@ zLs&rYPIY7bJ%8&pK>ovXhDV+P@a)n7)6=hldq1x}roZo$Vf8z7wFhLg{$aKNyy^x3 zgHtalzJ7?_Gi!hg19zd>d$0iX-#)xq-Jn>7_jeADSEIfg(mw$zl?p)s9X$lz7W)S_ zct8B>-m?HW-`|Ban|c5Z-FSX!4S?<14$wuRP!PcxP=ChCbnw=Fzb?&*$&z1A+_)?! zM$a*`u*?dO$z;goaw3&VMGv93MWcS2`K7g{A$B6JT{pqjMsP6_7IgTR%Y}<|)o9M=7khat6=IW6yuYL>Z zT1}=Kwl-R$`W^iV5CL|;zB*gI-hS1?<8@d#U00000 LNkvXXu0mjfYL^g^ diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-BACKPACK.png index 31598a8d1d3a2642d3a347da7f26aa179183dd15..7e73d94ffa2ce457cba48ff86dd213181f594da7 100644 GIT binary patch delta 1011 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 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-SUITSTORAGE.png index f77d6fed5bb78a22785aa6230a4c1999c3cf48df..7e73d94ffa2ce457cba48ff86dd213181f594da7 100644 GIT binary patch delta 1011 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 delta 631 zcmV--0*L+S1BC^U8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00KWrL_t(oh3%6;YZFlv zg}+y3AxTPA6fE-6g{4Vdh}znnnBr=1AuXt}cImphQV?8-EByxvE{jy@rXU0g+DH+i zv_V{GEGnrXQHY44wkbh;E+#X+nQ4>Mg$T}pfjjrTbI-YV?tegl00I7Yh#fPIC)FRT zs z8G+hY>%He70P@{K7pK&J-dn~eJUhPxz^Cdrpo?5CCx4tBu!U{Wp>tQPI6osM^Hw-< zW<*V#?c@I30*ioYnxs-G5sgOuOIRz@sPAQVeyJ%4PoBTs@^3M`#7=%IfOI-7(&;o( zN;e;n)n|-NeH3F;R$2&w5CWzAUJaeNow(KgD2@7>(~*=?0YoAZho1-)8901|OvcUE zg}p}Fc5thU+aq0gvEt)NDb=AqYey^-8A_#+bI;qo5Y|ywI|D#laT}k%SkqZ~{R-1G zohjLZ`s3s~F)%tZ;1p_QKuW2?;V=jG?dJVz*)@T`1}UY|I}Z>bK!AT9zX0EL@aJsx REII%H002ovPDHLkV1l!AC=&nx diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-left.png index a3344cc76ce37828c1a8fe04752aca91fdfde6c6..27972c97f500054d5e88d1af644ff92921307c44 100644 GIT binary patch delta 376 zcmeys*3LXZqMn7Bfq@~yJ?AZuVk{1FcVfJGQl}os;VkfoEM{Qf76xHPhFNnYfPxYM zJ|V6^+R@HdTT@*_L&MzMJjl<>+uM8cgu(AmF-O?F)mYqsZ;j1@#N_nkT+_%gJ(7&f&u!)5%v{WnOO6tz$`k_B>tb z38T!fYR;^no24_hPBQq?+vT_8Nyw2Ez7i1`-Ax8NIv>wA-o<*szg2JhfP}&*$DoA_PxftC)j*+@Dk_XvO)V7>ceSbn%>co*vTf`2O&tlMMSM_)ox|heU zu$}L3N6x3YOWV|T7O2mZxL5HZ=~|Akl3deIzdQFk*!9n)ef4;)^XTB|kmTuQ3^qW< zxxZ!I#Rr@-9(oz5JYp=5mYDQ!swlt227{Cv^O!z1+)DSD@%Mnh54*NK49^1PKi{$0 RxfB=z44$rjF6*2UngG)ppH~0? delta 869 zcmV-r1DgDY1Mmir7=H)`00020X>r~F0004VQb$4nuFf3k0009jNklShB9o8aFN7_#!J5XXTcTe|Veju^@+EomzK`Gc<$v%#06`E0K@bE%5ClQo ze6nRGNfP4~F2F00MYhbW-{CRm*stEa1uqf!3jhGwG7HIybv$bf=eb&mSf{*1;4VNo zS%6jiyf{Qqw!dL0!s^pHZVB^G0$*l8;G&Psm9xRg!H(d07G%o|2Rnju`1P|GlzLNG zjo%Y+up=DzK7Wnf<2l!P12{2z9hkiiHo6OFRP$HGxD~;6f1{eWhSf?0KYyI_P8V}4 zIEJmzaI%0G`CnLn*&Pf__*bVr->BxX(OrPq>$rPvMz{wSMUer3vGf?gK!o3SmvH_; zbuBlNS+>MR}$H9}yGMS0bW-=K>-#s5Get69uk2k(;E>0v#V&QNY0IV95}x7$h8Q!{YW4rD}!F3UpU2`&~tR#I_EwEHdoHB8lis7g3Fj8SwTov z5Kb1x@A1%0<}Sd@z5qAaj1!wHXCobCb!&~OTYqbw-^F(cWXsI#b+CZ~8r3}30sh5b z8Ye98fDL;;(JfqOKryHTfaMV3<`o*kxp;uH0Etu@#h~up7vPeRtc(<24CB$jx_qt=gfRL=rXK9;YoG1o$41EJbSIR7K+XI|Ee5KwL)U7q9Y+v~TG)?my zS6-4NrU7HdiOb6@kxByq48xcyZ{PdyfAa;np;Rid!^1;p!G~kUiQ+uM8c0Jnuw9CqI}e|J`+w!o`i{rG#$R&w9s0Y4XF;9_o5mg4FRU-hYvdoK z)pzz4^2m7He;hNpG@317!u7=H)`00020X>r~F0004VQb$4nuFf3k0009mNkln9i3IE zAR>aTD-1fyycC2|bg+%R9hziKli4;+oW1s<>~`ow z764Egc?tlK!U_C-G=ln(=4ilxWvfNJwm6KBXTMM?gnx_?q905c9}VHf)MGrK9)P-) zgA`667*$aRM5_trJAiX809eGU=?u$evut8&_O>;+W_&b+iK$s+vstF5GfZ0?My;4b z;HrvXR5f)Pm$kpm1b{}p2F)gf_ST>%ie)SVfQ5wxQ7)GO z0JT~T=YQwteIc|PIOjr=BmltJ*cf(pcB~p>vDlsbwdXbWMJGWJ1VIo4K@bE%5ClOG zJu)4h{J(!DHfI$)q@(uuba+ynJ)HCU+MUy!Rq&XB_CxeGbY#x%e(N3av3cr;c%Z`- z0Kie4(Q`A4^CL;3x3}v@8rEknJfFUE19Y^F6@Q^^tOx*R&&@2XO&FnT9I^^t)3pK3 zJwu>j!fJl7qcDOiT7nv0ud=QU06H+iLxNG&64XczmA#zaodE`N^}sC1Fu}8zl|xn` zIaG$%t$No6$g(VqUVL(>jMhGUFDrp_ZWFJjGi-N1&q{?;EH5v6w#r-^V2CdjPO-b6 zw_$}53?XjjRul!Hy*0#sMSf<2gt(}LxK#9wtOY@y}U}oXkrgC*RY>F(jh(?WK)e4GJQy4}-r* zS(%xbh>Ki#5o~U<#oXkJ(Q?mBZfBlHH3~88AK6)5fZ$(KO2jdVUq3yk8YRh9U-OkN zUFK7|bL%vQ0y*nB#fkHE85pLOYTt8FDXjmU`QpX%HFAu0O3#G5I%?iAu^zSVyj8fy Q8fZ6zr>mdKI;Vst09&~}xBvhE diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json index 5c000b66383..c45db54aff5 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41393/commits/1e56473177d0994d163c9edca3d13d6e5b640cc4, https://github.com/tgstation/tgstation/tree/master/icons/obj/weapons/guns backpack sprite by Peptide (copy of carbine), backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244, all sprites heavily edited by Emisse for SS14 using a palette inspired by coolstation weapon sprites https://github.com/coolstation/coolstation", + "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41393/commits/1e56473177d0994d163c9edca3d13d6e5b640cc4, https://github.com/tgstation/tgstation/tree/master/icons/obj/weapons/guns backpack sprite by Peptide (copy of carbine), backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-left.png index a3ba70d961987661ce0c4c428d5a92ef82fda567..42926b00f4705985591abade8f839204c0ee50f7 100644 GIT binary patch delta 810 zcmV+_1J(SR2fzl9BYy)2Nkl~?IK-kYl?x(T48aBs*CCZE$@+7$>@*?oZxQJ3z324a zAA{cqAP9mW2!bF8f_R3k6*V%(Bmn5Tj@#SY(x>Nnh2uRmjDIm%HmBT1#+cmM*}-@` z#?{qTZohuNFWc=l0Kjn^IF9pZl3<#qv@EM|VR9Qd=Q6J?2!dSE_4V~c5{~xwBmjK= z@>Mx8VN6Js*fgAT>AG%i{LAzU(=;UjxIe$+@L(4wXBTr%{z||wj3{O_8o_m43i>-D03Qh((`j`sItECwfM7fLG`BDx)EU*AOiv}Ob1?>C*Ep3cS3CBU*Q06=R) z!*DnPfVrpd`|y1~5yv^l`T6VMOyY68;lv}Oa_Tbs4+f~6z69eK3BCyOr2r=T-;2dE&r9l5==nb}sh<*H&|->gmU zrYlWyWkk0l-@kji^3{LTJnN4q2!bF8f*=TjAP9mW2!eR3RQms(F(!*V0!3x?I`sQ} zxhhTN!hc9u3Jbjep|Gy&QrC5~+ilEdGr4Sk0Anoj9{~5|H_!7TUqW3?-xKx;!o zST$NkEiX$q?N3P8B*PN>hmW61^-Fhv5JGa!0c3jy2CokQ{PPI-zK_F$-7s9q6Oe~# znlfASO+wT2yhL2DXGEp^GD;ILnM@)tK$d6V@_+I&>dQF?=e)8fAP>v3lr(MIPQ(p| zBW3N{M?ljw07;KPRZl=w-7L*`|0>$bmtfvtK@da}jJvWXcT?4&E9=HJv#6rIPFigZX>+01?0C0cf##i5U-L+M&ep+*xW{k>+ oZX@Tvm?X%XKoA5$5X3V01IEwN%>^*oWB>pF07*qoM6N<$f&%`6cmMzZ delta 900 zcmV-~1AF|y2AT(uBYyw^b5ch_0Itp)=>Px&R7pfZRCt{2noVdEK@`XTD^eOu8ZRl7 zbnQjT#2zYjTY6};MG%Uj5Tr?K&OutSc zgH**!Je6QA9x@)1T{pX%{m4f@==(unc4ue)Z(iQa9Nq&6f`1?gf*=TjAkH9yX>V_s zJDP1LVLsnc(;MbiHl453!5HH|r6BU@r1`>1PI5~@$A$YYBI|)xTPSNg&{JGG47Uv%DBvO3@h($^4v^R4vMj6#bS*YCctW1k~Z(>Llek9tj7bPm|s+7dYD z5Cj3iscczaGB&{hU`fhgEPbu4FCQPR``#aVzM(i_Nq@@VPTYEo+78Y+IyyRFb_P`J zkeyHwqZ`6#ua>@J2fL<*$S}ru_QF-=dA$8A#_tW|@1Hz^Q?E|U0Si$Sc{Cd3q9{7M zDjhO@yPqdx6MVS8t06kNL(mSQDDsh!5q$alQP(GLlX|hZx-Gn1_)yO&Yey7CJ~TMM zeLi19|9|}x&6!?2K@bE%5ClOG1VIo4K@h}g#Zjh3o3+u=sMNSwokES8wi6?Ac2`M< z?<54ZxW^xGUQl6E*W(Wu>efTkvOYjdp~VZ2KY)Ez&46s2_I*7gLaXcX2T*A77HblA z66GKFhPmBbq-6xix%Hl&9-T3Aoxn`rAyVtJWqiH9qPRw5Ufz9`i zb>p-(3T9YFfHt>2-n==ItzkPvY|4064Dgj_Bs0L3beB`Jdk8<()ZFj>jFTkyIFrZ)_=S2!HdlE!voQ|xm{>4GpGM@JrRT|2(bY42g6rm6zRP0`|y1~w(h!J z<=ASq7F~CUJXZTsOl>oZWm)j@86OCF`@WX>xK;DzA*YzpOiBDmwcG72sR^jdcS)p*)al8waNTaK#y%^g>JeB)Jx8UKgD6h1#+H02N8KbycrGp5B0Y+Wo;0wtsB{Kx)l-86ruQCi8j*qP+q^5X5Zr zJ_0K3MVeW3Q)K`EWxZV@@5Wp82}HH!zOyRLRC|Eud0X-`yH+R^@a=0kS4&G8?c&Zh zfMJ;EO}4N8&y^wo0000Px&LrFwIRCt{2nonpGK@`Tn1QE2XIkg~R z5mf5NOC_$wgRzmGiXxJOStRF0Dkyp>6pEDMp~tFt=-IYukbq(l#9~@cHBD(f*iaPO z2I(OeL+BrR$avW9cAIRH*=&+l`hKTmIy>LIH*Y7<_W=Y!5Pt+g5ClOG#}Jq8C;SSt zHGd&$U&E~BZrTs4=bwl$ahuuzLW5*LH9z z5&-}xZ`V+0X@4!dmvA`D0AO-*vT8v3+@+}5F)EJwPQ#jlG48h?UB>K7# z9G-!9YmueX>5}KIE1&{5@4f^8JWpnUf@%LXbzH#0dm$nvR^$OICD2hx~RVIpJ z!*6Ok-0Ey+@sVEk;C3h1zTCVE$47cg7F_xH13f)GIBH3FHTDJLQ{Nk3c3!WS1#etG za#he&ynkNr@eQ6J2!bF8f*=TjAP9mW2;zUk`Tx!}{-*2Ng}VZ*3=gv(9%JZo2GPhlj?+P3`xW`f-VKoUT5-yos4r+2sW=ug$J-)|1ESXa|r*EDVV5o{%( z*rkyhd*m|vcyyn@yU+93$o>W3Hv0XwqLutQfPIfZTU#63zW2JUW-gcGz6kjZ67%t@ z<7{_E>woKOC%=v}Q%{kH7Q9)v5t{b!D^2kU_}VWT>(|qp;P__{Xr52N+=;H2rlU(x z|5^Oq1b@Kt$}gkTGntGF6)bv(!eN*sL{U86<_v-$2!bFS@ed0*YJSnTF);uD002ov JPDHLkV1i(uuz&yn From 1cf10f40257e45dae0daa70da60b51913e3f4845 Mon Sep 17 00:00:00 2001 From: pubbi <63283968+impubbi@users.noreply.github.com> Date: Sun, 2 Feb 2025 16:02:24 -0600 Subject: [PATCH 087/197] Allowed windows to be properly clicked on (#34751) --- Content.Client/Clickable/ClickMapManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Clickable/ClickMapManager.cs b/Content.Client/Clickable/ClickMapManager.cs index 6a77c7e0543..557ef57ef10 100644 --- a/Content.Client/Clickable/ClickMapManager.cs +++ b/Content.Client/Clickable/ClickMapManager.cs @@ -20,7 +20,7 @@ internal sealed class ClickMapManager : IClickMapManager, IPostInjectInit "/Textures/Logo", }; - private const float Threshold = 0.25f; + private const float Threshold = 0.1f; private const int ClickRadius = 2; [Dependency] private readonly IResourceCache _resourceCache = default!; From 0aff2530d87477c4dc35f52f4edf8cf6567347cd Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Sun, 2 Feb 2025 23:03:31 +0100 Subject: [PATCH 088/197] Fix hitting through directional windows (and more!) (#34793) --- Content.Client/Weapons/Melee/MeleeWeaponSystem.cs | 2 +- Content.Server/Weapons/Melee/MeleeWeaponSystem.cs | 4 ++-- .../Interaction/SharedInteractionSystem.cs | 12 ++++++++---- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 8 +++++++- .../Entities/Structures/Windows/window.yml | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 26ec75f9957..dc865803699 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -170,7 +170,7 @@ protected override bool InRange(EntityUid user, EntityUid target, float range, I var targetCoordinates = xform.Coordinates; var targetLocalAngle = xform.LocalRotation; - return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range); + return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range, overlapCheck: false); } protected override void DoDamageEffect(List targets, EntityUid? user, TransformComponent targetXform) diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index ec462ae23e8..3c8314041f4 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -78,7 +78,7 @@ protected override bool ArcRaySuccessful(EntityUid targetUid, // Could also check the arc though future effort + if they're aimbotting it's not really going to make a difference. // (This runs lagcomp internally and is what clickattacks use) - if (!Interaction.InRangeUnobstructed(ignore, targetUid, range + 0.1f)) + if (!Interaction.InRangeUnobstructed(ignore, targetUid, range + 0.1f, overlapCheck: false)) return false; // TODO: Check arc though due to the aforementioned aimbot + damage split comments it's less important. @@ -193,7 +193,7 @@ protected override bool InRange(EntityUid user, EntityUid target, float range, I if (session is { } pSession) { (targetCoordinates, targetLocalAngle) = _lag.GetCoordinatesAngle(target, pSession); - return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range); + return Interaction.InRangeUnobstructed(user, target, targetCoordinates, targetLocalAngle, range, overlapCheck: false); } return Interaction.InRangeUnobstructed(user, target, range); diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 2926e1d1b38..a88f673cac7 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -667,7 +667,8 @@ public bool InRangeUnobstructed( float range = InteractionRange, CollisionGroup collisionMask = InRangeUnobstructedMask, Ignored? predicate = null, - bool popup = false) + bool popup = false, + bool overlapCheck = true) { if (!Resolve(other, ref other.Comp)) return false; @@ -687,7 +688,8 @@ public bool InRangeUnobstructed( range, collisionMask, predicate, - popup); + popup, + overlapCheck); } /// @@ -717,6 +719,7 @@ public bool InRangeUnobstructed( /// /// True if the two points are within a given range without being obstructed. /// + /// If true, if the broadphase query returns an overlap (0f distance) this function will early out true with no raycast made. public bool InRangeUnobstructed( Entity origin, Entity other, @@ -725,7 +728,8 @@ public bool InRangeUnobstructed( float range = InteractionRange, CollisionGroup collisionMask = InRangeUnobstructedMask, Ignored? predicate = null, - bool popup = false) + bool popup = false, + bool overlapCheck = true) { Ignored combinedPredicate = e => e == origin.Owner || (predicate?.Invoke(e) ?? false); var inRange = true; @@ -768,7 +772,7 @@ public bool InRangeUnobstructed( inRange = false; } // Overlap, early out and no raycast. - else if (distance.Equals(0f)) + else if (overlapCheck && distance.Equals(0f)) { return true; } diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 6d91d8265d2..f04cc195f99 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -738,7 +738,13 @@ protected HashSet ArcRayCast(Vector2 position, Angle angle, Angle arc if (res.Count != 0) { - resSet.Add(res[0].HitEntity); + // If there's exact distance overlap, we simply have to deal with all overlapping objects to avoid selecting randomly. + var resChecked = res.Where(x => x.Distance.Equals(res[0].Distance)); + foreach (var r in resChecked) + { + if (Interaction.InRangeUnobstructed(ignore, r.HitEntity, range + 0.1f, overlapCheck: false)) + resSet.Add(r.HitEntity); + } } } diff --git a/Resources/Prototypes/Entities/Structures/Windows/window.yml b/Resources/Prototypes/Entities/Structures/Windows/window.yml index c521dba8989..5ac9fd64e46 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/window.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/window.yml @@ -158,7 +158,7 @@ fix1: shape: !type:PhysShapeAabb - bounds: "-0.49,-0.49,0.49,-0.36" + bounds: "-0.5,-0.5,0.5,-0.28125" density: 1500 mask: - FullTileMask From 910386fdb8f19f61544e512ca2f2358af572c8cd Mon Sep 17 00:00:00 2001 From: DieselMohawk <173439801+DieselMohawk@users.noreply.github.com> Date: Sun, 2 Feb 2025 19:04:04 -0600 Subject: [PATCH 089/197] Security Shield Naming Structure Inconsistency Change (#34841) --- Resources/Prototypes/Entities/Objects/Shields/shields.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index eac88762660..4f76987a7b2 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -84,10 +84,10 @@ Slash: 1 - type: entity - name: ablative shield + name: laser shield parent: [ BaseShield, BaseRestrictedContraband ] id: RiotLaserShield - description: An ablative shield built for withstanding lasers, but not much else. + description: A shield built for withstanding lasers, but not much else. components: - type: Sprite state: riot_laser-icon @@ -107,7 +107,7 @@ name: ballistic shield parent: [ BaseShield, BaseRestrictedContraband ] id: RiotBulletShield - description: A ballistic shield built for protecting against firearms, but not much else. + description: A shield built for protecting against ballistics, but not much else. components: - type: Sprite state: riot_bullet-icon From 8869ac42adbe22c2e8dde0eaf6263e3117c6df29 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 3 Feb 2025 01:05:11 +0000 Subject: [PATCH 090/197] 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 a26d3d99c1a..1ebdfe25363 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Epinephrine now adds Adrenaline, because it is. - type: Tweak - id: 7393 - time: '2024-09-18T23:00:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32076 - author: ShadowCommander changes: - message: Fixed clicking on chairs and beds with an entity buckled to them not @@ -3906,3 +3899,12 @@ id: 7892 time: '2025-02-02T01:38:03.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34797 +- author: DieselMohawk + changes: + - message: Renamed ablative shield to laser shield + type: Tweak + - message: Changed description for laser shield & ballistic shield + type: Tweak + id: 7893 + time: '2025-02-03T01:04:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34841 From 0e19934c9c3f4ff864d05d9d33519cbf6a78fc23 Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:22:21 -0500 Subject: [PATCH 091/197] DSword Replacement - the Hypereutactic Blade (#32414) * hypereutactic textures * adds hypereutactic blade * adjusts attack speed and damage * adjust attack speed and adds movement modifier * Adds structural damage * Readjusts the attack rate to be 0.8 * Adds Hypereutactic blade to the upliink * Adds use delay and structural damage, fixes disappearing wielded sprite * Changes wideAngleAnimation to 180 and range to 2.5 * Adds copyright. Changes range to 2.0 * Required wield * Changes reflect chance to 100% * Comments for future todos * Description update * Removes duplicate mapping * removes from uplink * Reorder and remove indents --- .../Locale/en-US/store/uplink-catalog.ftl | 3 + .../Objects/Weapons/Melee/e_sword.yml | 56 +++++++++++- .../hypereutactic_blade.rsi/hypereutactic.png | Bin 0 -> 386 bytes .../hypereutactic_blade.png | Bin 0 -> 339 bytes .../hypereutactic_gem.png | Bin 0 -> 201 bytes .../Melee/hypereutactic_blade.rsi/icon.png | Bin 0 -> 598 bytes .../Melee/hypereutactic_blade.rsi/meta.json | 23 +++++ .../hypereutactic_right_reference.png | Bin 0 -> 1081 bytes .../inhand-left-blade.png | Bin 0 -> 1653 bytes .../inhand-left-gem.png | Bin 0 -> 537 bytes .../inhand-left.png | Bin 0 -> 815 bytes .../inhand-right-blade.png | Bin 0 -> 1586 bytes .../inhand-right-gem.png | Bin 0 -> 530 bytes .../inhand-right.png | Bin 0 -> 813 bytes .../hypereutactic_blade_inhands.rsi/meta.json | 83 ++++++++++++++++++ .../wielded-inhand-left.png | Bin 0 -> 815 bytes .../wielded-inhand-right.png | Bin 0 -> 813 bytes 17 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_blade.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_gem.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/icon.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/hypereutactic_right_reference.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left-blade.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left-gem.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-blade.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-gem.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-right.png diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 5610970c3b5..32934fc58b5 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -18,6 +18,9 @@ uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can b uplink-esword-double-name = Double Bladed Energy Sword uplink-esword-double-desc = A much more expensive counter part to the normal energy sword: with a much higher reflection chance, larger attack angle, higher structural damage, and faster swing. Makes a lot of noise when used or turned on. +uplink-hypereutactic-blade-name = Hypereutactic Blade +uplink-hypereutactic-blade-desc = A gigantic energy sword with power that matches its looks. Requires two hands. Slow and unwieldy, yet pretty adept at reflecting. Previously made infamous by an operative wearing a joy mask. You wouldn't want to see this coming at you down the hall! + uplink-edagger-name = Energy Dagger uplink-edagger-desc = A small energy blade conveniently disguised in the form of a pen. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 20a6af5e077..9071b811e4a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -70,7 +70,7 @@ color: white netsync: false - type: Appearance - - type: ToggleableLightVisuals + - type: ToggleableLightVisuals # Add support for multiple layers spriteLayer: blade inhandVisuals: left: @@ -353,6 +353,60 @@ - type: UseDelay delay: 1 +# Item will look weird in handslot. Will need to adjust handstorage visuals in a future PR +- type: entity + parent: EnergySwordDouble + id: HyperEutacticBlade + name: hypereutactic-blade + description: A supermassive weapon envisioned to cleave the very fabric of space and time itself in twain, the hypereutactic blade dynamically flash-forges a hypereutactic crystaline nanostructure capable of passing through most known forms of matter like a hot knife through butter. + components: + - type: MeleeWeapon + wideAnimationRotation: 180 + attackRate: 0.8 #0.7 and below is too slow + angle: 100 + range: 2.0 + damage: + types: + Blunt: 4.5 + - type: ItemToggleMeleeWeapon + activatedSoundOnSwing: + path: /Audio/Weapons/eblademiss.ogg + params: + volume: -3 + variation: 0.250 + activatedDamage: + types: + Slash: 20 + Heat: 20 + Structural: 20 + - type: MeleeRequiresWield + - type: HeldSpeedModifier #slowdown is what balances this compared to a dsword + walkModifier: 0.6 + sprintModifier: 0.6 + - type: UseDelay + delay: 1.5 + - type: Sprite + sprite: Objects/Weapons/Melee/hypereutactic_blade.rsi + layers: + - state: hypereutactic + - state: hypereutactic_blade + color: "#FFFFFF" + visible: false + shader: unshaded + map: [ "blade" ] + - state: hypereutactic_gem + color: "#FFFFFF" + visible: false + shader: unshaded + map: [ "gem" ] + - type: Item + size: Small + sprite: Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi + - type: Reflect + reflectProb: 1.0 + spread: 75 + +# Borgs - type: entity suffix: One-Handed, For Borgs parent: EnergySwordDouble diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic.png new file mode 100644 index 0000000000000000000000000000000000000000..2c52d5a778757426b741ef8d4b88a096155a1f25 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_4Q z#M8wwq+-t7s~fWpImobm(0?G^!K%*6zOY2F=F?xt9ToTf*4HWS6#BQ5L!p6z2|KaCAR$NL%vWpa zTW1+wE?dU9rtIVM&)gEek5<0yZVUWxG(E1Ecd~V3$>SwE?P3mnwlS3NUB2F*X`I)bZveMxjF&oIftq>?AyLpF*|hjO-ET~FbD@Q={)PZ_U=WZ z(LQU1DpC9IGKCg9bz2@+@9SFp>?G&SHL?4&y8^r()cnwxUc)3*n0}ShqoPBJ`I%+~ QFi;shUHx3vIVCg!04`3Rg8%>k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_blade.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_blade.png new file mode 100644 index 0000000000000000000000000000000000000000..a398c85f402287185641a5224be042ceb4710cf7 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZnt_3l z)zif>q+-t78y9(-3>0Po*{p6gyViXE}&Qw?|DE8DfGqU!hwwliw^TVI~bed3zJc;?Aov+b4~<_CP_ zc1-yde8N%Z7uz)s@dJBmk3Y@XRq`aJHFqu0Q6TW2*I?#`g_-gRixu77eArGn7%kxO z3AXBUU0chxBpITHAwpKb^W?#jofDNscQfwiU?_0f#J1qlty+(lOfG%TQ+_^={=DY# zF4fzg>@N8Vh`!B>UU#~FQg+>H_VDX1>3T6wW?o-D)r08;!@7Q-h4IPK^^8z+88&1e YkdFCO^sRf=v?7q0r>mdKI;Vst0LCkTQ~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_gem.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/hypereutactic_gem.png new file mode 100644 index 0000000000000000000000000000000000000000..8bacb558131bf4ee71071e4dcb1c4bc8c4b7f08a GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZ8YJiG z;uumf=k29~oCg$m90Ivzk5|U1r^r4JyzaU6f?QR1tJuT;-3PtzDOUfm1gggh5^5X1 z9^3uZj(tkdnrl_(4c*L>q!g5{MR98`EzUf5^Vs}Vy96#bJYU59DEF^23&ezopr09ejE?*IS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a3d5056c61f26d0355dd2166d1877ccb6d5b78 GIT binary patch literal 598 zcmV-c0;&CpP)8kL{6kq@bU;qYSfd37kRKmLzME$k$ z98hQ!)2WE11Bi`iL)zFY$HgwIp2uuHd6vsD126ysFaQHEK=}a*N;35X)Ns`_Ms-TD zKEO8^18|4L8lbWlo%H{Bq2Hv`11Mx_@(UW4)-qkteq{@}4(${!?m zX&lEm5>6Ec+}Kh68g)F5WMl)~!V3x|Za-6^B!KV)(w@IG1tibq@9J8Nm*sq95ttl) zi@BiQ`WSpx0ELOY7o3YZ!zzzVPeRsaY4abI75$npFi2cS>!$Y9(pPKh2kUw!w>3P8!d3fa~6Hm3_= kr9dPGYcp5CK<;Ap3isO6=jIiu4t z^H7qz&fOyBoD`$FyE3LuiiMB*KYz5@&nmJq^YQom;~SOdsykhfV6b3g=wob1W_Umx z^IZl*_<87S4uRtvb*7(wbyBi%cZuEVt6s}4uY6J&_c}d`b;055 z>ZvU6ZprRDr`feA%D&u$L3W#+rE`QhqY^O+eCOQtG74%vRM83qcr(!foig6%enB_%lg~XMN;S9>COH7o8g!Ht9k1WUoR5xuKbyy zRU&80bZ5Qmx^=rPH|Ci#*gm}cy~g&-_qNi`X|hQ#K<8fB5|tytk;m`I!RZ0_2irX{^owxYPicf z<&(|!Z{=K|!{$yM2Tn57NbGx9&2o5xuOQnQu`hTvxG6NnC3XwbD{UrWA$!A{@n>}`ER-%;@3xV-w?fa zj`7%eSF^*>C-s#&-?Kgauo);jgCphludt$MyICFHYgj)#{vIRtUhZ4Z@2%@5*>V+S zM)o><{{xJ0&q)^FrPi`eShg~+=h4;8A*)0;pWfc`^US$lJ7X_Sjzopr0Jpu<=Kufz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left-blade.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left-blade.png new file mode 100644 index 0000000000000000000000000000000000000000..e697fb18e536f0341213f7680a4c64ef7e0fc35d GIT binary patch literal 1653 zcmb`ISx{346ozj|Sd0Xcp)ipsL1VQQ5d@V@NWwC}v>@XckXA$xBvrPCr7W7z$b^Cj zxByBhBrO&TEy3!rge73034~2h7Lg)LN{|K;&=}z6rm@pLwY4)HAI>uW%X#?zb53qh zpf3t(i39)uC3g*3hF1p+_DMvDw zYlyGabJKSimCGZxtomlaQ`^a_L8h#a5TVq=T8%gj&{rR4pb7mnGElXO1;s$t60GrxPz=qP79)>ba#B7I9mibx5c_DQrEb!Kw9v`UV}b zu-4q8REl?Hapfq{+`(G6jGB9LlzeQ$E@_~c<<26G#hHa7(03DP?|X>^CAI?^CkZX% zVlbYBqCdoqCQmr-S=jq?t*P~Lm&$?DObUU@3j~>asPHh2BIk)AdUoK4CH~GI!LUVj z>G&^-{Znyf&BhGfJkkzmcj+8&U%3ADpCaB0=wGE&G))bwILuzsNx;`;ETU zn%?m$!#$q}W{)4cGClTEmn)rT4MzUQdRahCU{a%QNHXW!SiEy%-J5!CtLB3ZFhFrEH1`#%M zy~Ng4(KOMaRC^R&g`bxW@twi71DSmK%fR}r zPE2(|6`C)a-f$(P9T7|Bfykk=vKFuUHx|JvHuD&}th6P4u5e=?QuB7pE1afqlXMHQ za2HRnyVp10dJ)fvKup})L9$Gqz0FCoFsj(%@L+rscr4)_dVbnO`q?9=hx;ncx&jDd z@$3o$_a$b2{=-jq=64v;ln>fSUYMZ#Ke!)35>6IY$Fr7v6Fn-~X+7wRdz`zKEpd_V z745h~s7zyG+@$wk++U?nq{<++kK1TNuIURUZ%U%4$Wl?thX7F_Nb6Mw<&;$VFAH6RC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9d05f2cce99344657ac5693ec8f63410bb432fc6 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|V1T zPZ!6KiaBrZ8s-THia1&W(nt+JUU&bJqTI2)N!St ziP<90=e!ptW_>V@(425dpn6{I`%ImsCvO!0|6_l(TENMe!GgJg3dD{{j9cOtojrfA z`$enSsuYH^l^Nb%YzCJ7_fkaOK8@V6T-}b-Y-I|=%O8bD&OS7G#_oPvcj5haK`c94 z&+?~TeEFO*O3?c0aG9R@A>(;`DWIcn(32|on|$V;j6y8bOx@0<9h-(R1?@Y>jcO`!T!+4=Wr zPuEZ7Nzkod;@PhL#CON*%xMRo&-j@u*W}IaFxmY7mz3TAFEenxeDw7?!vh|MbL0{4 Z%sEY3R|nT-ECl8N22WQ%mvv4FO#sTRKq~+M literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-blade.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-blade.png new file mode 100644 index 0000000000000000000000000000000000000000..da9f049f215bf9db154001c4d71e4dafdb94bece GIT binary patch literal 1586 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcaloCO|{#S9F5M?jcysy3fA0|V<5 zPZ!6KiaBp@KPTei<< zpR}3tUxeRpH-IND!t=_;__ooiwBpY-Y4P2tT?y*JNlv%i+VHLCaD z--8TE7amKOwm(>%A2dng!+GO>eHDLHU-17ASATa=`#=E8l-mn8a;!RkTX8+p=_`BR z?o9h}xW1lC8kJ7iPn|#t$nEy5#@a{rY(R;k38B_YET%?&b<_Ir=_-_6pg5Cv&#n-d}8b zT=wV_`OchKY&(C<72k93+nI!QJ3kp8Bq}y>L^8#~uIz|pvdCxSzN2gc{^vec+$r6s zr`L4&;e}<#eJ@`TJrVLcI)>rp8lc?El2vB2eQnlx2_KIC^s#qlRc$xdg6c32|8sTw z*N3eR4ectqrvLTFKBMEm#6%q~)fZiR{q_B%y!v0q-FN?;SybE2sW4a8OYYyhT>ji2 z&!g@uF-cSxc^R4f5h-4m|BbPxG_Av4|KXeWGwb(#J!{2~Uw!JE@ax&R41D!B>#}M$ z^Bj1nf7^duei@_1pVZ$kzn;}>>p0~-is#aXy;bs2+ z;~VDZGv5m8e_t8(z9z=^5tR1 zg2VG|Uj5k2=`gDqYeu9vj__o1B(oc|x8(kwC3n5_Z`ewSa8@iCK48M?^$f4S?z;8< z`*ev6!IqLg>AO1=B%J=O<5Li;-+c2=uR>kFh|~8U=k>x_*0cTGt<@m$MdH^xfi+>P zyA;^|eD2w=ELZ<>-99EBSBIUlQr!!F?UDVYHDP`Je-VvyHAgrm{red1HeqW%>jbvB z6{;^{SewF|obG(FWB6L8!MkI-^V1zaVcFNH{JQl)V1C`XyIQ+NP{Q$?+D+~hmj7-a zzI;hxk(`lZJV%gcU*xlGovpJ=%wI&Xyga|EX(`8}Gw-)`*7)p`y_GBc_URdan}0HA zKUFg1x3|Sh%&)IxjhGQ>FJQbOm!Y-pkL3*AhIiXKKSyr-VO$?xf1Bm)k7A?W?n<+l xIqKCtXI;PDmit+HQ!A0BDN;ZaD0}M}YX81Ea$$i-FR&6|@O1TaS?83{1OOnN$G!jn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-gem.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right-gem.png new file mode 100644 index 0000000000000000000000000000000000000000..044a0810b0255c314192fbe9a7ff665cd980b338 GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|Vm` zPZ!6KiaBrZUd%jfAmR`xZsq&I>YSD0Yn9hC);v~v!IUe=xA%F^g7Vy#?`!pza4PsQ z6f$)PJIrBt#3G>HV8M8VY$0Fng!|tgf34EJ{`zb3!|TT^*S)rS%d?!-plyHd?V{ax z`+on`Yl@e8ZgF`F!?Ef4KkChY^ILu8P5ANtys`oHoI$qx;TrF(WVDg%e_XUv=k>0C zzf~{)-Y1_d`sYpV1N+h_hUBe(w&kAw{4<8@Ug3|!nT$2-r`c<1Kf4d)tPFQZ{qg<` drJniCw87s}_UFdO&A>=z@O1TaS?83{1OWcGxoH3Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c4eff9c215b1f3a4618beb4204b41dc68f42d1 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|V22 zPZ!6KiaBrZ+UH$PkZAa5E+lkw2LpRUkRog8x`>FxuKo$KdJ}#y7${v-p3u2YN5i;D zwKHPZQ>Gk)nS1m^S6va)>`gX5|2bMI)kEa@&wn>gm+QBrF%+;dq*Hxz1d$*$Oo5G8a2QNpk3+%dg`tjZR=jWJyeE7F^@qhbU6%o%CCs;5y7&8ns zk*(TblVlcu+d|EE`c@%_n+G^&-15<8ymEX&-=b5CgFbKZIps59|My2a57uSm@*7l4 zaX(Yv|Ynd08TrzWPS?^36T9lCFUz zdY`T_X`D9Fcl-LrQSxi&&DW}lHn-M4RdBC+SN`ccua(&+{Vi3}Kg^q=*aWIyt$O@m zchYjkCu%F?-iF6as7l_EUd~>gXm&f3VdvxU?QcvP?gc93eSaq;&w5yrVGiQ~a)>+f Zf8;xsY>c1x4VeBJJYD@<);T3K0RY|@Im!S4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/meta.json new file mode 100644 index 00000000000..1f4d5ca6c2a --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/meta.json @@ -0,0 +1,83 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Toriate. Taken from Citadel Station at https://github.com/Citadel-Station-13/Citadel-Station-13", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "inhand-right-blade", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ] + ] + }, + { + "name": "inhand-right-gem", + "directions": 4 + }, + { + "name": "hypereutactic_right_reference", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "inhand-left-blade", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ], + [ + 0.2, + 0.2 + ] + ] + }, + { + "name": "inhand-left-gem", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9d05f2cce99344657ac5693ec8f63410bb432fc6 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|V1T zPZ!6KiaBrZ8s-THia1&W(nt+JUU&bJqTI2)N!St ziP<90=e!ptW_>V@(425dpn6{I`%ImsCvO!0|6_l(TENMe!GgJg3dD{{j9cOtojrfA z`$enSsuYH^l^Nb%YzCJ7_fkaOK8@V6T-}b-Y-I|=%O8bD&OS7G#_oPvcj5haK`c94 z&+?~TeEFO*O3?c0aG9R@A>(;`DWIcn(32|on|$V;j6y8bOx@0<9h-(R1?@Y>jcO`!T!+4=Wr zPuEZ7Nzkod;@PhL#CON*%xMRo&-j@u*W}IaFxmY7mz3TAFEenxeDw7?!vh|MbL0{4 Z%sEY3R|nT-ECl8N22WQ%mvv4FO#sTRKq~+M literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/hypereutactic_blade_inhands.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c4eff9c215b1f3a4618beb4204b41dc68f42d1 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|V22 zPZ!6KiaBrZ+UH$PkZAa5E+lkw2LpRUkRog8x`>FxuKo$KdJ}#y7${v-p3u2YN5i;D zwKHPZQ>Gk)nS1m^S6va)>`gX5|2bMI)kEa@&wn>gm+QBrF%+;dq*Hxz1d$*$Oo5G8a2QNpk3+%dg`tjZR=jWJyeE7F^@qhbU6%o%CCs;5y7&8ns zk*(TblVlcu+d|EE`c@%_n+G^&-15<8ymEX&-=b5CgFbKZIps59|My2a57uSm@*7l4 zaX(Yv|Ynd08TrzWPS?^36T9lCFUz zdY`T_X`D9Fcl-LrQSxi&&DW}lHn-M4RdBC+SN`ccua(&+{Vi3}Kg^q=*aWIyt$O@m zchYjkCu%F?-iF6as7l_EUd~>gXm&f3VdvxU?QcvP?gc93eSaq;&w5yrVGiQ~a)>+f Zf8;xsY>c1x4VeBJJYD@<);T3K0RY|@Im!S4 literal 0 HcmV?d00001 From 36323deca60c7c5d7f76eb67c41827bff0ff9f08 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 3 Feb 2025 21:23:30 +0000 Subject: [PATCH 092/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1ebdfe25363..66935125542 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ShadowCommander - changes: - - message: Fixed clicking on chairs and beds with an entity buckled to them not - unbuckling them. - type: Fix - id: 7394 - time: '2024-09-18T23:55:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29998 - author: Winkarst-cpu changes: - message: Now fire leaves burn marks on the tiles that were affected by it. @@ -3908,3 +3900,12 @@ id: 7893 time: '2025-02-03T01:04:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34841 +- author: keronshb + changes: + - message: The Hypereutactic Blade has been added to the game as an alternative + to the double bladed energy sword. It's a massive sword with high attack power, + 100% reflect chance, but slow movement and use speed. + type: Add + id: 7894 + time: '2025-02-03T21:22:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32414 From 7c9c24028685a207d142fa05b914425ba29b000f Mon Sep 17 00:00:00 2001 From: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com> Date: Mon, 3 Feb 2025 21:29:43 +0000 Subject: [PATCH 093/197] fixed effect string typos (#34858) fixed typos --- Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl index 13d9ed5d6bf..33793048c61 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl @@ -1,12 +1,12 @@ reagent-effect-status-effect-Stun = stunning reagent-effect-status-effect-KnockedDown = knockdown reagent-effect-status-effect-Jitter = jittering -reagent-effect-status-effect-TemporaryBlindness = blindess +reagent-effect-status-effect-TemporaryBlindness = blindness reagent-effect-status-effect-SeeingRainbows = hallucinations reagent-effect-status-effect-Muted = inability to speak reagent-effect-status-effect-Stutter = stuttering reagent-effect-status-effect-ForcedSleep = unconsciousness -reagent-effect-status-effect-Drunk = drunkness +reagent-effect-status-effect-Drunk = drunkenness reagent-effect-status-effect-PressureImmunity = pressure immunity reagent-effect-status-effect-Pacified = combat pacification reagent-effect-status-effect-RatvarianLanguage = ratvarian language patterns From 397ef7345d27f6d070302e327a216ba7bd4b3f83 Mon Sep 17 00:00:00 2001 From: ActiveMammmoth <140334666+ActiveMammmoth@users.noreply.github.com> Date: Mon, 3 Feb 2025 17:11:06 -0500 Subject: [PATCH 094/197] Store Test Change (#34844) --- Content.IntegrationTests/Tests/StoreTests.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Content.IntegrationTests/Tests/StoreTests.cs b/Content.IntegrationTests/Tests/StoreTests.cs index 3f010245d89..1f7d357bc05 100644 --- a/Content.IntegrationTests/Tests/StoreTests.cs +++ b/Content.IntegrationTests/Tests/StoreTests.cs @@ -5,6 +5,7 @@ using Content.Server.Traitor.Uplink; using Content.Shared.FixedPoint; using Content.Shared.Inventory; +using Content.Shared.Mind; using Content.Shared.Store; using Content.Shared.Store.Components; using Content.Shared.StoreDiscount.Components; @@ -64,6 +65,7 @@ public async Task StoreDiscountAndRefund() await server.WaitAssertion(() => { var invSystem = entManager.System(); + var mindSystem = entManager.System(); human = entManager.SpawnEntity("HumanUniformDummy", coordinates); uniform = entManager.SpawnEntity("UniformDummy", coordinates); @@ -72,6 +74,9 @@ await server.WaitAssertion(() => Assert.That(invSystem.TryEquip(human, uniform, "jumpsuit")); Assert.That(invSystem.TryEquip(human, pda, "id")); + var mind = mindSystem.CreateMind(null); + mindSystem.TransferTo(mind, human, mind: mind); + FixedPoint2 originalBalance = 20; uplinkSystem.AddUplink(human, originalBalance, null, true); From 869bf2d20a2654126c7190e2feaceddd9953d8b7 Mon Sep 17 00:00:00 2001 From: Smith <182301147+AgentSmithRadio@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:33:14 -0500 Subject: [PATCH 095/197] contrabandInventory Changes (Fixed) (#32934) * Reimport of .yml files, edit to medidrobe.yml * Fixed typo for "Richard" in AutoDrobe contrabandInventory * contrabandInventory Revision * Add a spare bible to PietyVend (#32363) Update chapel.yml * Bible to normal inventory, not contraband * Balance changes based on maintainer feedback. * VendoMat change to Proximity Sensor and Borg Arm. * Revert "VendoMat change to Proximity Sensor and Borg Arm." This reverts commit 44c68daaaedeea26f9376db7f65d1e01771a761e. * PR Rebase, Fixing Reversion * seeds.yml Bungo Seeds swapped for Tobacco Seeds. --------- Co-authored-by: Jarmer123 <148848017+Jarmer123@users.noreply.github.com> --- .../Inventories/atmosdrobe.yml | 4 +- .../VendingMachines/Inventories/bardrobe.yml | 3 +- .../VendingMachines/Inventories/boozeomat.yml | 3 + .../Inventories/cargodrobe.yml | 4 + .../VendingMachines/Inventories/cart.yml | 3 + .../VendingMachines/Inventories/centdrobe.yml | 3 + .../VendingMachines/Inventories/chang.yml | 3 + .../VendingMachines/Inventories/chapel.yml | 8 +- .../VendingMachines/Inventories/chefdrobe.yml | 2 + .../VendingMachines/Inventories/chefvend.yml | 16 ++- .../VendingMachines/Inventories/chemdrobe.yml | 9 +- .../VendingMachines/Inventories/chemvend.yml | 8 +- .../VendingMachines/Inventories/cigs.yml | 6 +- .../Inventories/clothesmate.yml | 2 + .../VendingMachines/Inventories/coffee.yml | 4 +- .../VendingMachines/Inventories/cola.yml | 2 + .../Inventories/condiments.yml | 5 + .../VendingMachines/Inventories/curadrobe.yml | 2 + .../VendingMachines/Inventories/detdrobe.yml | 48 +++++--- .../Inventories/dinnerware.yml | 8 +- .../VendingMachines/Inventories/discount.yml | 5 +- .../VendingMachines/Inventories/donut.yml | 3 + .../VendingMachines/Inventories/engidrobe.yml | 2 + .../VendingMachines/Inventories/engivend.yml | 3 + .../VendingMachines/Inventories/games.yml | 4 + .../VendingMachines/Inventories/gib.yml | 6 +- .../VendingMachines/Inventories/happyhonk.yml | 6 +- .../VendingMachines/Inventories/hydrobe.yml | 5 +- .../VendingMachines/Inventories/janidrobe.yml | 17 ++- .../VendingMachines/Inventories/lawdrobe.yml | 1 + .../VendingMachines/Inventories/medical.yml | 3 +- .../VendingMachines/Inventories/medidrobe.yml | 5 +- .../VendingMachines/Inventories/nutri.yml | 3 + .../VendingMachines/Inventories/pwrgame.yml | 2 + .../VendingMachines/Inventories/robotics.yml | 2 + .../VendingMachines/Inventories/salvage.yml | 4 +- .../VendingMachines/Inventories/scidrobe.yml | 1 + .../VendingMachines/Inventories/sec.yml | 7 +- .../VendingMachines/Inventories/secdrobe.yml | 3 + .../VendingMachines/Inventories/seeds.yml | 3 + .../Inventories/shamblersjuice.yml | 3 +- .../VendingMachines/Inventories/snack.yml | 3 +- .../VendingMachines/Inventories/soda.yml | 4 +- .../Inventories/sovietsoda.yml | 2 + .../VendingMachines/Inventories/spaceup.yml | 5 +- .../VendingMachines/Inventories/starkist.yml | 4 +- .../Inventories/sustenance.yml | 7 ++ .../Inventories/syndiedrobe.yml | 5 +- .../VendingMachines/Inventories/theater.yml | 115 +++++++++--------- .../VendingMachines/Inventories/vendomat.yml | 3 + .../VendingMachines/Inventories/wallmed.yml | 2 + 51 files changed, 269 insertions(+), 112 deletions(-) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml index f2cc7e8a54d..5dce8375b61 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/atmosdrobe.yml @@ -13,4 +13,6 @@ ClothingOuterSuitFire: 2 ClothingOuterWinterAtmos: 2 ClothingNeckScarfStripedLightBlue: 3 - ClothingShoesBootsWinterAtmos: 2 #Delta V: Add departmental winter boots + ClothingShoesBootsWinterAtmos: 2 # DeltaV - Add departmental winter boots + contrabandInventory: + ToyFigurineAtmosTech: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml index 3048560ee88..fbf8b482daf 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/bardrobe.yml @@ -18,4 +18,5 @@ ClothingOuterVest: 2 ClothingBeltBandolier: 2 ClothingEyesGlassesSunglasses: 2 - + contrabandInventory: + ToyFigurineBartender: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml index 2f1afa808ed..f2d592a25da 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml @@ -47,5 +47,8 @@ DrinkSakeBottleFull: 3 DrinkBeerCan: 5 DrinkWineCan: 5 + contrabandInventory: + EthanolChemistryBottle: 3 + DrinkBottleOfNothingFull: 1 emaggedInventory: DrinkPoisonWinebottleFull: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml index d1e80ba0c80..4477c026971 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml @@ -15,3 +15,7 @@ ClothingOuterWinterMiner: 2 ClothingNeckScarfStripedBrown: 3 ClothingShoesBootsWinterCargo: 2 + contrabandInventory: + ToyFigurineCargoTech: 1 + ToyFigurineSalvage: 1 + ToyFigurineQuartermaster: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml index c8dfa9203ac..3a15aaf62ac 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml @@ -34,3 +34,6 @@ # EncryptionKeySecurity: 1 # End Delta-V subtractions EncryptionKeyService: 3 + contrabandInventory: + BalloonNT: 2 + LuxuryPen: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml index 1630dd2a0ba..9f3d2f2f732 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/centdrobe.yml @@ -19,3 +19,6 @@ ClothingNeckScarfStripedCentcom: 3 ClothingShoesBootsWinterCentCom: 2 #Delta V: Add departmental winter boots ClothingNeckCloakCentcom: 3 + contrabandInventory: + ToyFigurineCaptain: 1 + ToyFigurineHeadOfPersonnel: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml index 5befd85ca84..c7a08853a5d 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chang.yml @@ -8,4 +8,7 @@ FoodSnackChowMein: 3 FoodSnackDanDanNoodles: 3 PairedChopsticks: 3 + contrabandInventory: + FoodBakedDumplings: 2 + FoodSoupMiso: 2 # rice? diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml index 80df851b70c..a6a9ddd783a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chapel.yml @@ -23,8 +23,12 @@ BoxCandleSmall: 2 Urn: 5 Bible: 1 - SilverRing: 2 # Delta-V - RingBox: 2 # Delta-V + SilverRing: 2 # DeltaV + RingBox: 2 # DeltaV + contrabandInventory: + FoodBakedBunHotX: 2 + DrinkWineBottleFull: 1 + ToyFigurineChaplain: 1 emaggedInventory: ClothingOuterArmorCult: 1 ClothingHeadHelmetCult: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml index cc4f21980cf..b73ea375ff6 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefdrobe.yml @@ -13,3 +13,5 @@ ClothingShoesBootsWinterChef: 2 #Delta V: Add departmental winter boots ClothingShoesChef: 2 ClothingBeltChef: 2 + contrabandInventory: + ToyFigurineChef: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml index a3549710a51..358288f57f5 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml @@ -20,7 +20,15 @@ FoodButter: 3 FoodCheese: 1 FoodMeat: 6 - LunchboxGenericFilledRandom: 5 # Delta-V Adds Lunchbox - ReagentContainerSalt: 1 # DeltaV adds big containers - ReagentContainerPepper: 1 # DeltaV adds big containers - ReagentContainerChocolate: 1 # DeltaV adds big containers + # Begin DeltaV Additions + LunchboxGenericFilledRandom: 5 + ReagentContainerSalt: 1 + ReagentContainerPepper: 1 + ReagentContainerChocolate: 1 + # End DeltaV Additions + contrabandInventory: + EggBoxBroken: 1 + FoodBoxDonkpocket: 1 + FoodFrozenSandwich: 2 + FoodFrozenSandwichStrawberry: 2 + diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml index b08e3829c69..577dd87e010 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml @@ -14,7 +14,7 @@ ClothingHandsGlovesLatex: 2 ClothingHeadsetMedical: 2 ClothingOuterWinterChem: 2 - # DeltaV - Personal Protective Equipment - Add various PPE equipment including new clothings + # Begin DeltaV Additions - Personal Protective Equipment ClothingUniformJumpsuitChemShirt: 2 # New chemist jumpsuit, formal variant ClothingNeckTieChem: 2 # Chemist's tie to go along a new variant of their suit ClothingShoesEnclosedChem: 2 # Realistic chemistry shoes @@ -22,10 +22,11 @@ ClothingOuterExplorerCoat: 2 # Really nice labcoat ClothingEyesGlassesChemist: 2 # Safety glasses ClothingHandsGlovesChemist: 2 # Heavy duty chemistry gloves - # End of modified code - # Begin DeltaV modifications - Add contraband to the chemdrobe + # End DeltaV Additions contrabandInventory: + ToyFigurineChemist: 1 + # Begin DeltaV Additions - Interdyne clothing ClothingMaskInterdyneChemistry: 1 ClothingOuterInterdyneChemistrySuit: 1 ClothingUniformInterdyneChemist: 1 - # End of DeltaV modifications + # End DeltaV Additions diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml index 7c44ce1cdda..2501901b83a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml @@ -22,6 +22,9 @@ JugSodium: 2 JugSugar: 3 JugSulfur: 1 + contrabandInventory: + DrinkLithiumFlask: 1 + StrangePill: 3 emaggedInventory: ToxinChemistryBottle: 1 LeadChemistryBottle: 2 # DeltaV: Added lead to standard chemvend @@ -50,7 +53,10 @@ JugSodium: 2 JugSugar: 3 JugSulfur: 1 - JugWeldingFuel: 2 # DeltaV: raised to 2 from 1 + JugWeldingFuel: 2 # DeltaV - raised to 2 from 1 + contrabandInventory: + DrinkLithiumFlask: 1 + StrangePill: 3 emaggedInventory: PaxChemistryBottle: 3 MuteToxinChemistryBottle: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cigs.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cigs.yml index 9ea895b629e..132465b3a11 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cigs.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cigs.yml @@ -5,7 +5,7 @@ CigPackRed: 2 CigPackBlue: 2 CigPackBlack: 2 - CigPackPurple: 2 # DeltaV + CigPackPurple: 2 # DeltaV CigPackCandy: 2 # DeltaV CigPackMixed: 2 CigarCase: 1 @@ -16,5 +16,9 @@ CheapLighter: 4 Lighter: 2 FlippoLighter: 2 + contrabandInventory: + GroundTobacco: 3 + CigarGold: 2 + Igniter: 1 emaggedInventory: CigPackSyndicate: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index a3365b8571a..190fb102b1f 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -121,4 +121,6 @@ ClothingMaskNeckGaiter: 2 ClothingUniformJumpsuitTacticool: 1 ClothingUniformJumpskirtTacticool: 1 + ToyFigurinePassenger: 1 + ToyFigurineGreytider: 1 # DO NOT ADD MORE, USE UNIFORM DYING diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/coffee.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/coffee.yml index 2d65fa1f71e..84837be754c 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/coffee.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/coffee.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: HotDrinksMachineInventory startingInventory: DrinkHotCoffee: 5 @@ -6,5 +6,7 @@ DrinkTeacup: 5 DrinkGreenTea: 5 DrinkHotCoco: 5 + contrabandInventory: + DrinkTeapot: 2 emaggedInventory: DrinkNothing: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml index 30166ca371a..972c0fca0e0 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml @@ -9,6 +9,8 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + DrinkColaBottleFull: 2 emaggedInventory: DrinkNukieCan: 2 DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/condiments.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/condiments.yml index d0304bd4ad6..e485a2ffd73 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/condiments.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/condiments.yml @@ -18,3 +18,8 @@ KnifePlastic: 10 FoodPlatePlastic: 10 FoodPlateSmallPlastic: 10 + contrabandInventory: + FoodShakerSalt: 1 + FoodShakerPepper: 1 + FoodCondimentBottleKetchup: 1 + ReagentContainerMayo: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml index bdd9a8e31ed..bfca2a4edac 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml @@ -16,4 +16,6 @@ ClothingUniformBrownSuitSkirt: 2 #imp ClothingShoesBootsLaceup: 2 ClothingHeadsetService: 2 + contrabandInventory: + ToyFigurineLibrarian: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml index 0f799b58e54..ab2184e1166 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml @@ -1,26 +1,34 @@ - type: vendingMachineInventory id: DetDrobeInventory startingInventory: -# ClothingUniformJumpsuitDetective: 2 # DeltaV - removed for incongruence -# ClothingUniformJumpskirtDetective: 2 # DeltaV - removed for incongruence -# ClothingShoesColorBrown: 2 # DeltaV - removed for incongruence -# ClothingOuterCoatDetectiveLoadout: 2 # DeltaV - removed for incongruence -# ClothingHeadHatFedoraBrown: 2 # DeltaV - removed for incongruence -# ClothingUniformJumpsuitDetectiveGrey: 2 # DeltaV - removed for incongruence -# ClothingUniformJumpskirtDetectiveGrey: 2 # DeltaV - removed for incongruence -# ClothingOuterVestDetective: 2 # DeltaV - removed for incongruence -# ClothingNeckTieDet: 2 # DeltaV - removed for incongruence -# ClothingHeadHatFedoraGrey: 2 # DeltaV - removed for incongruence - ClothingUniformJumpsuitForensicSpec: 2 # DeltaV - ClothingUniformJumpskirtForensicSpec: 2 # DeltaV + # Begin DeltaV Removals - this clothing was removed for incongruence + #ClothingUniformJumpsuitDetective: 2 + #ClothingUniformJumpskirtDetective: 2 + #ClothingShoesColorBrown: 2 + #ClothingOuterCoatDetectiveLoadout: 2 + #ClothingHeadHatFedoraBrown: 2 + #ClothingUniformJumpsuitDetectiveGrey: 2 + #ClothingUniformJumpskirtDetectiveGrey: 2 + #ClothingOuterVestDetective: 2 + #ClothingNeckTieDet: 2 + #ClothingHeadHatFedoraGrey: 2 + # End DeltaV Removals ClothingHandsGlovesColorBlack: 2 ClothingHandsGlovesLatex: 2 ClothingHeadsetSecurity: 2 - ForensicPad: 10 # DeltaV - BoxFolderBlack: 2 # DeltaV - BoxEvidenceMarkers: 1 # DeltaV - HandLabeler: 1 # DeltaV - ClothingUniformDetectiveSuit: 2 #imp - ClothingUniformDetectiveSuitSkirt: 2 #imp - ClothingUniformMiamiVice: 2 #imp - ClothingUniformMiamiViceSkirt: 2 #imp + # Begin DeltaV Additions + ClothingUniformJumpsuitForensicSpec: 2 + ClothingUniformJumpskirtForensicSpec: 2 + ForensicPad: 10 + BoxFolderBlack: 2 + BoxEvidenceMarkers: 1 + HandLabeler: 1 + # End DeltaV Additions + # Begin Impstation Additions + ClothingUniformDetectiveSuit: 2 + ClothingUniformDetectiveSuitSkirt: 2 + ClothingUniformMiamiVice: 2 + ClothingUniformMiamiViceSkirt: 2 + # End Impstation Additions + contrabandInventory: + ToyFigurineDetective: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml index 5051caf8555..f8bd047c5fa 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/dinnerware.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: DinnerwareInventory startingInventory: ButchCleaver: 1 @@ -27,4 +27,8 @@ DrinkMugOne: 1 DrinkMugRainbow: 2 DrinkMugRed: 2 - LunchboxGeneric: 10 # Delta-V Adds Lunchbox + LunchboxGeneric: 10 # DeltaV - Adds Lunchbox + contrabandInventory: + CandyBowl: 1 + BarSpoon: 2 + DrinkShaker: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml index fc8492dcf19..9708373dbfc 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/discount.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: DiscountDansInventory startingInventory: FoodSnackCheesie: 3 @@ -8,3 +8,6 @@ FoodSnackPopcorn: 3 FoodSnackEnergy: 3 CigPackMixed: 2 + contrabandInventory: + FoodSnackDanDanNoodles: 3 + FoodBakedBunHoney: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml index 16dc3e628f8..fadd3a7d445 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml @@ -5,5 +5,8 @@ FoodDonutApple: 3 FoodDonutPink: 3 FoodDonutBungo: 3 + contrabandInventory: + FoodBagel: 2 + FoodBagelPoppy: 2 emaggedInventory: FoodDonutPoison: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml index d225340335e..535d81f95d0 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engidrobe.yml @@ -18,3 +18,5 @@ ClothingShoesBootsWinterEngi: 2 contrabandInventory: ClothingUniformCybersunHazard: 1 # DeltaV + ToyFigurineEngineer: 1 + ToyFigurineChiefEngineer: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml index a35793b4bd7..63089773b1c 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml @@ -10,3 +10,6 @@ ClothingHandsGlovesColorYellow: 6 BoxInflatable: 2 ClothingHeadHatCone: 4 + contrabandInventory: + CowToolboxFilled: 1 + DrinkBeerCan: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml index f022b4b9a59..0fe813178ff 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/games.yml @@ -16,3 +16,7 @@ PaperCNCSheet: 6 MysteryFigureBox: 2 BooksBag: 3 + contrabandInventory: + Basketball: 1 + FoodSnackBoritos: 3 + DrinkSpaceMountainWindCan: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml index 34c8981b75f..eebba420dee 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml @@ -2,7 +2,7 @@ id: DrGibbInventory startingInventory: DrinkDrGibbCan: 4 - DrinkDrGibbBloodRedCan: 2 # Delta-V + DrinkDrGibbBloodRedCan: 2 # DeltaV DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 @@ -10,6 +10,10 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + ClothingNeckStethoscope: 2 + Saw: 2 + Tourniquet: 3 emaggedInventory: DrinkNukieCan: 2 DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml index 50695edc194..62c1d6ffcd1 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/happyhonk.yml @@ -1,8 +1,12 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: HappyHonkDispenserInventory startingInventory: HappyHonk: 10 HappyHonkMime: 4 + contrabandInventory: + ToyFigurineClown: 1 + ToyFigurineMime: 1 + ToyFigurineNukie: 1 emaggedInventory: HappyHonkCluwne: 1 HappyHonkNukie: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml index ce19440df14..e843a690e9b 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/hydrobe.yml @@ -12,4 +12,7 @@ ClothingHeadBandBotany: 3 ClothingHeadsetService: 2 ClothingOuterWinterHydro: 2 - ClothingShoesBootsWinterHydro: 2 #Delta V: Add departmental winter boots + ClothingShoesBootsWinterHydro: 2 # DeltaV - Add departmental winter boots + contrabandInventory: + ToyFigurineBotanist: 1 + diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml index a1c15cf9b09..1732b778a55 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/janidrobe.yml @@ -10,11 +10,20 @@ ClothingHeadsetService: 2 ClothingOuterWinterJani: 2 ClothingNeckScarfStripedPurple: 3 - ClothingShoesBootsWinterJani: 2 #Delta V: Add departmental winter boots - ClothingUniformJumpskirtJanimaid: 2 # Delta V: the maiden outfits no longer require emagging. + # Begin DeltaV Additions + ClothingShoesBootsWinterJani: 2 + ClothingUniformJumpskirtJanimaid: 2 ClothingUniformJumpskirtJanimaidmini: 1 - - emaggedInventory: # Delta V: tactical maid outfit set is now the emagg reward. + # End DeltaV Additions + contrabandInventory: + ToyFigurineJanitor: 1 + emaggedInventory: + # Begin DeltaV Removals - moved to main inventory + #ClothingUniformJumpskirtJanimaid: 2 + #ClothingUniformJumpskirtJanimaidmini: 1 + # End DeltaV Removals + # Begin DeltaV Additions - Emag for tactical maid set instead of maid skirts ClothingHandsTacticalMaidGloves: 1 ClothingUniformJumpskirtTacticalMaid: 1 ClothingHeadHatTacticalMaidHeadband: 1 + # End DeltaV Additions diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml index fc6af251460..9b5858a96a2 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml @@ -34,6 +34,7 @@ ClothingHeadHatPwig: 1 # "Legally" obtained currency SpaceCash100: 2 + ToyFigurineLawyer: 1 # Begin DeltaV additions ClothingUniformCybersunAttorney: 1 CybersunBriefcase: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index 0bd98909d00..dd49c7b5cdf 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -11,4 +11,5 @@ Portafib: 1 # DeltaV - Add Portafibs, see Prototypes/_DV/Entities/Objects/Devices/Medical/portafib.yml ClothingEyesHudMedical: 2 ClothingEyesEyepatchHudMedical: 2 - + contrabandInventory: + FoodApple: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml index 57916eadf19..448fbb6ddf4 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml @@ -25,9 +25,12 @@ ClothingHeadHatSurgcapPurple: 4 ClothingShoesBootsWinterMed: 2 contrabandInventory: - ClothingUniformJumpskirtOfLife: 1 # Begin Delta-V additions UniformScrubsColorCybersun: 1 ClothingHeadHatSurgcapCybersun: 1 ClothingOuterCoatCybersunWindbreaker: 1 # End Delta-V additions + ClothingUniformJumpskirtOfLife: 1 + ToyFigurineMedicalDoctor: 1 + ToyFigurineParamedic: 1 + ToyFigurineChiefMedicalOfficer: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/nutri.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/nutri.yml index b194755e864..3b09aa1b5a4 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/nutri.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/nutri.yml @@ -19,5 +19,8 @@ BoxAgrichem: 1 #TO DO: #plant analyzer + contrabandInventory: + UnstableMutagenChemistryBottle: 1 + Joint: 1 emaggedInventory: Left4ZedChemistryBottle: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml index d51075c3584..b48e876a58f 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml @@ -10,6 +10,8 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + DrinkDrGibbCan: 3 emaggedInventory: DrinkNukieCan: 2 DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml index c53efb3e729..914a03a45bf 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/robotics.yml @@ -18,3 +18,5 @@ Welder: 1 Screwdriver: 2 Crowbar: 2 + contrabandInventory: + FoodBurgerRobot: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml index 7761453327a..a2765923def 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: SalvageEquipmentInventory startingInventory: Crowbar: 2 @@ -10,3 +10,5 @@ RadioHandheld: 2 WeaponGrapplingGun: 4 WeaponProtoKineticAccelerator: 4 + contrabandInventory: + PlushieCarp: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml index 1dd88c9b9c7..338c5926103 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/scidrobe.yml @@ -19,3 +19,4 @@ ClothingOuterExplorerCoat: 3 # DeltaV contrabandInventory: ClothingUniformCybersunRND: 1 # DeltaV + ToyFigurineResearchDirector: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml index 20040d40681..4399b740e82 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml @@ -28,6 +28,9 @@ BreachingCharge: 8 # DeltaV - added breaching charges # security officers need to follow a diet regimen! contrabandInventory: -# FoodDonutHomer: 12 # DeltaV - removed for incongruence at maintainer request -# FoodBoxDonut: 2 # DeltaV - removed for incongruence at maintainer request + WeaponMeleeNeedle: 2 + # Begin DeltaV Removals - donuts removed for incongruence + #FoodDonutHomer: 12 + #FoodBoxDonut: 2 + # End DeltaV Removals #box evidence diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index ff8c55d770c..dba024b86bd 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -36,3 +36,6 @@ # ClothingHeadHelmetJustice: 1 # DeltaV - lrp contrabandInventory: # ClothingMaskClownSecurity: 1 # DeltaV - removed for incongruency + ToyFigurineSecurity: 1 + ToyFigurineWarden: 1 + ToyFigurineHeadOfSecurity: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml index 327f0aea5f8..de7801d272a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml @@ -41,5 +41,8 @@ TowercapSeeds: 5 WheatSeeds: 5 WatermelonSeeds: 5 + contrabandInventory: + TobaccoSeeds: 2 + FoodSnackSemki: 2 emaggedInventory: FlyAmanitaSeeds: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml index 6b9ff67f2bb..7ec384a9d0e 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml @@ -9,6 +9,7 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + DrinkChangelingStingCan: 2 emaggedInventory: DrinkNukieCan: 2 - DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/snack.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/snack.yml index b797f588fe5..cd89dbeb167 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/snack.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/snack.yml @@ -7,6 +7,5 @@ FoodSnackPistachios: 3 FoodSnackSus: 3 FoodSnackSemki: 3 - emaggedInventory: + contrabandInventory: FoodSnackSyndi: 3 - diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml index 4b2a9228135..5566ea7d0d1 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: SodaInventory startingInventory: DrinkColaCan: 3 @@ -9,6 +9,8 @@ DrinkLemonLimeCan: 3 DrinkLemonLimeCranberryCan: 3 DrinkFourteenLokoCan: 3 + contrabandInventory: + DrinkColaBottleFull: 2 emaggedInventory: DrinkNukieCan: 3 DrinkChangelingStingCan: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sovietsoda.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sovietsoda.yml index 34f0906366a..8ad65643271 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sovietsoda.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sovietsoda.yml @@ -3,4 +3,6 @@ startingInventory: DrinkSodaWaterCan: 10 #typically hacked product. Default product is "soda" contrabandInventory: + DrinkSodaWaterBottleFull: 2 DrinkColaCan: 10 + ClothingHeadHatUshanka: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml index 7b36a3fc81c..b368534eebf 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: SpaceUpInventory startingInventory: DrinkSpaceUpCan: 3 @@ -10,6 +10,9 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + DrinkSpaceMountainWindBottleFull: 2 + DrinkSpaceUpBottleFull: 2 emaggedInventory: DrinkNukieCan: 2 DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml index 0e7dcf7482e..194e0b7a39a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml @@ -1,4 +1,4 @@ -- type: vendingMachineInventory +- type: vendingMachineInventory id: StarkistInventory startingInventory: DrinkStarkistCan: 4 @@ -9,6 +9,8 @@ DrinkLemonLimeCan: 2 DrinkLemonLimeCranberryCan: 2 DrinkFourteenLokoCan: 2 + contrabandInventory: + FoodBurgerCarp: 2 emaggedInventory: DrinkNukieCan: 2 DrinkChangelingStingCan: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sustenance.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sustenance.yml index 7722f001a3b..ed3b7aedeba 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sustenance.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sustenance.yml @@ -5,8 +5,15 @@ FoodSnackNutribrick: 5 FoodSnackMREBrownie: 5 FoodCondimentPacketKetchup: 5 + # Begin DeltaV Additions ReagentTinPowderedMilkSoy: 2 ReagentTinPowderedJuiceOrange: 1 + # End DeltaV Additions + contrabandInventory: + FoodTinMRE: 3 + FoodTinBeans: 3 + FoodTinPeaches: 3 + DrinkBeerCan: 6 emaggedInventory: KitchenKnife: 2 SpaceMedipen: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml index 8e1f6a1c3ac..688706462bb 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/syndiedrobe.yml @@ -15,7 +15,10 @@ ClothingNeckScarfStripedSyndieGreen: 2 ClothingNeckScarfStripedSyndieRed: 2 ClothingShoesBootsWinterSyndicate: 2 - + contrabandInventory: + ToyFigurineFootsoldier: 1 + ToyFigurineNukieElite: 1 + ToyFigurineNukieCommander: 1 emaggedInventory: ClothingOuterCoatSyndieCapArmored: 1 ClothingOuterWinterSyndieCapArmored: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 05910970c4b..b112d42ee1f 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -53,46 +53,52 @@ FoodPoppy: 1 ClothingHeadHatGladiator: 1 ClothingUniformJumpsuitGladiator: 1 - ClothingUniformSkirtTurtle: 2 # Nyano - Clothing addition - ClothingUniformSwimsuitBlue: 2 # Nyano - Clothing addition - ClothingCostumeBunnySuit: 2 # Nyano - Clothing addition - ClothingHeadHatBunny: 2 # Nyano - Clothing addition - ClothingUniformDressRed: 1 # Nyano - Clothing addition - ClothingHeadHatCake: 2 # Nyano - Clothing addition - ClothingUniformSchoolGakuranBlack: 2 # Nyano - Clothing addition - UniformSchoolgirlBlack: 1 # Nyano - Clothing addition - UniformSchoolgirlBlue: 1 # Nyano - Clothing addition - UniformSchoolgirlCyan: 1 # Nyano - Clothing addition - UniformSchoolgirlGreen: 1 # Nyano - Clothing addition - UniformSchoolgirlOrange: 1 # Nyano - Clothing addition - UniformSchoolgirlPink: 1 # Nyano - Clothing addition - UniformSchoolgirlPurple: 1 # Nyano - Clothing addition - UniformSchoolgirlRed: 1 # Nyano - Clothing addition - UniformSchoolgirlDusk: 1 # Nyano - Clothing addition - UniformSchoolgirlBlazerTan: 1 # Nyano - Clothing addition - UniformGeisha: 1 # Nyano - Clothing addition - ClothingKimonoBlue: 2 # Nyano - Clothing addition - ClothingKimonoPink: 2 # Nyano - Clothing addition - ClothingKimonoPurple: 2 # Nyano - Clothing addition - ClothingKimonoSky: 2 # Nyano - Clothing addition - ClothingKimonoGreen: 2 # Nyano - Clothing addition - ClothingMaskOniBlue: 1 # Nyano - Clothing addition - ClothingMaskOniRed: 1 # Nyano - Clothing addition - ClothingCostumeArcDress: 1 # Nyano - Clothing addition - ClothingCostumeMioSkirt: 1 # Nyano - Clothing addition - ClothingCostumeNaota: 1 # Nyano - Clothing addition - ClothingUniformJumpsuitSober: 1 # DeltaV - Clothing addition - ClothingOuterSuitCarp: 2 # DeltaV - Move carp suit out of syndicate uplink into the AutoDrobe - ClothingShoesBootsWinterClown: 2 #Delta V: Add departmental winter boots - ClothingShoesBootsWinterMime: 2 #Delta V: Add departmental winter boots - ClothingUniformJumpsuitDetective: 1 # DeltaV - moved from detdrobe - ClothingUniformJumpskirtDetective: 1 # DeltaV - moved from detdrobe - ClothingUniformJumpsuitDetectiveGrey: 1 # DeltaV - moved from detdrobe - ClothingUniformJumpskirtDetectiveGrey: 1 # DeltaV - moved from detdrobe - ClothingOuterCoatDetectiveLoadout: 1 # DeltaV - moved from detdrobe - ClothingNeckTieDet: 1 # DeltaV - moved from detdrobe - ClothingHeadHatFedoraBrown: 1 # DeltaV - moved from detdrobe - ClothingHeadHatFedoraGrey: 1 # DeltaV - moved from detdrobe + # Begin DeltaV Additions + ClothingUniformSkirtTurtle: 2 + ClothingUniformSwimsuitBlue: 2 + ClothingCostumeBunnySuit: 2 + ClothingHeadHatBunny: 2 + ClothingUniformDressRed: 1 + ClothingHeadHatCake: 2 + ClothingUniformSchoolGakuranBlack: 2 + UniformSchoolgirlBlack: 1 + UniformSchoolgirlBlue: 1 + UniformSchoolgirlCyan: 1 + UniformSchoolgirlGreen: 1 + UniformSchoolgirlOrange: 1 + UniformSchoolgirlPink: 1 + UniformSchoolgirlPurple: 1 + UniformSchoolgirlRed: 1 + UniformSchoolgirlDusk: 1 + UniformSchoolgirlBlazerTan: 1 + UniformGeisha: 1 + ClothingKimonoBlue: 2 + ClothingKimonoPink: 2 + ClothingKimonoPurple: 2 + ClothingKimonoSky: 2 + ClothingKimonoGreen: 2 + ClothingMaskOniBlue: 1 + ClothingMaskOniRed: 1 + ClothingCostumeArcDress: 1 + ClothingCostumeMioSkirt: 1 + ClothingCostumeNaota: 1 + ClothingUniformJumpsuitSober: 1 + ClothingOuterSuitCarp: 2 # moved out of syndicate uplink + ClothingShoesBootsWinterClown: 2 + ClothingShoesBootsWinterMime: 2 + ClothingUniformJumpsuitDetective: 1 + ClothingUniformJumpskirtDetective: 1 + ClothingUniformJumpsuitDetectiveGrey: 1 + ClothingUniformJumpskirtDetectiveGrey: 1 + ClothingOuterCoatDetectiveLoadout: 1 + ClothingNeckTieDet: 1 + ClothingHeadHatFedoraBrown: 1 + ClothingHeadHatFedoraGrey: 1 + ClothingHeadTechPriest: 2 # moved from robodrobe + ClothingOuterRobeTechPriest: 2 + ClothingMaskBlushingClown: 1 # moved from emag inventory + ClothingMaskBlushingMime: 1 + # End DeltaV Additions ClothingHeadHatCowboyBrown: 1 ClothingHeadHatCowboyBlack: 1 ClothingHeadHatCowboyWhite: 1 @@ -100,23 +106,22 @@ ClothingShoesBootsCowboyBrown: 1 ClothingShoesBootsCowboyBlack: 1 ClothingShoesBootsCowboyWhite: 1 - ClothingHeadTechPriest: 2 #Delta V: Added Techpriest Robe to Inventory - ClothingOuterRobeTechPriest: 2 - # Begin DeltaV modifications - Moved to regular inventory. - ClothingMaskBlushingClown: 1 - ClothingMaskBlushingMime: 1 - # End of DeltaV modifications. - - ClothingUniformHitmanSuit: 1 #imp - ClothingUniformHitmanSuitSkirt: 1 #imp - ClothingUniformBrosBlazer: 1 #imp - ClothingUniformBrosBlazerSkirt: 1 #imp + # Begin Impstation Additions + ClothingUniformHitmanSuit: 1 + ClothingUniformHitmanSuitSkirt: 1 + ClothingUniformBrosBlazer: 1 + ClothingUniformBrosBlazerSkirt: 1 + # End Impstation Additions + contrabandInventory: + ClothingHeadHatRichard: 1 + ToyFigurineBoxer: 1 + ToyFigurineMusician: 1 emaggedInventory: ClothingShoesBling: 1 ClothingShoesBootsCowboyFancy: 1 ClothingOuterDogi: 1 -# Begin DeltaV modifications - Moved to regular inventory. -# ClothingMaskBlushingClown: 1 -# ClothingMaskBlushingMime: 1 -# End of DeltaV modifications. + # Begin DeltaV Removals - Moved to regular inventory + #ClothingMaskBlushingClown: 1 + #ClothingMaskBlushingMime: 1 + # End DeltaV Removals ClothingHeadHatCowboyBountyHunter: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/vendomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/vendomat.yml index da7e30fd763..d3b804f9014 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/vendomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/vendomat.yml @@ -10,3 +10,6 @@ MatterBinStockPart: 4 CapacitorStockPart: 4 MicroManipulatorStockPart: 4 + contrabandInventory: + ProximitySensor: 1 + LeftArmBorg: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml index 405e2eff564..e0e0dcd1dac 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml @@ -6,3 +6,5 @@ Bloodpack: 3 EpinephrineChemistryBottle: 3 Syringe: 3 + contrabandInventory: + PowerCellSmall: 2 From 625244d645844028a8cbbebcefce9125e21d984a Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 3 Feb 2025 23:34:21 +0000 Subject: [PATCH 096/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 66935125542..362e8427e2d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Winkarst-cpu - changes: - - message: Now fire leaves burn marks on the tiles that were affected by it. - type: Add - id: 7395 - time: '2024-09-19T00:23:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31939 - author: ArchRBX changes: - message: Mass scanners and shuttle consoles now display coordinates beneath IFF @@ -3909,3 +3902,11 @@ id: 7894 time: '2025-02-03T21:22:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32414 +- author: AgentSmithRadio + changes: + - message: Added manager wire hacking menus to nearly all vending machines. Get + hacking and see what's hidden! + type: Add + id: 7895 + time: '2025-02-03T23:33:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32934 From 1cb584a24ed878d14bc8778b1d306ca75043d1e4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 4 Feb 2025 07:53:17 +0000 Subject: [PATCH 097/197] 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 362e8427e2d..f24c993dedf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: ArchRBX - changes: - - message: Mass scanners and shuttle consoles now display coordinates beneath IFF - labels - type: Add - - message: IFF labels that are beyond the viewport extents maintain their heading - and don't hug corners - type: Fix - id: 7396 - time: '2024-09-19T01:25:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31501 - author: coffeeware changes: - message: a powered TEG won't produce infinite power when destroyed @@ -3910,3 +3899,10 @@ id: 7895 time: '2025-02-03T23:33:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32934 +- author: ps3moira + changes: + - message: Changed 3D item sprites to cabinet perspective + type: Tweak + id: 7896 + time: '2025-02-04T07:52:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34293 From 560f867748e41a785266ce791e4caf32d15454eb Mon Sep 17 00:00:00 2001 From: pubbi <63283968+impubbi@users.noreply.github.com> Date: Tue, 4 Feb 2025 10:11:46 -0600 Subject: [PATCH 098/197] Fixed bola effect stacking (#34723) --- .../Components/EnsnareableComponent.cs | 4 ++-- .../Components/EnsnaringComponent.cs | 6 ++++++ .../Ensnaring/SharedEnsnareableSystem.cs | 21 +++++++------------ .../Objects/Weapons/Throwable/bola.yml | 1 + 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs index 307a5e19863..126031dc6b0 100644 --- a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs @@ -13,13 +13,13 @@ public sealed partial class EnsnareableComponent : Component /// /// How much should this slow down the entities walk? /// - [DataField] + [DataField, AutoNetworkedField] public float WalkSpeed = 1.0f; /// /// How much should this slow down the entities sprint? /// - [DataField] + [DataField, AutoNetworkedField] public float SprintSpeed = 1.0f; /// diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs index f900d863c2a..b05ce151d84 100644 --- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs @@ -38,6 +38,12 @@ public sealed partial class EnsnaringComponent : Component [DataField] public float StaminaDamage = 55f; + /// + /// How many times can the ensnare be applied to the same target? + /// + [DataField] + public float MaxEnsnares = 1; + /// /// Should this ensnare someone when thrown? /// diff --git a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs index 551c76ff8d5..dacb7734708 100644 --- a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs +++ b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs @@ -256,23 +256,18 @@ public bool TryEnsnare(EntityUid target, EntityUid ensnare, EnsnaringComponent c if (!TryComp(target, out var ensnareable)) return false; - // Need to insert before free legs check. - Container.Insert(ensnare, ensnareable.Container); - - var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count(); - var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count); - var freeLegs = legs - ensnaredLegs; + var numEnsnares = ensnareable.Container.ContainedEntities.Count; - if (freeLegs > 0) + //Don't do anything if the maximum number of ensnares is applied. + if (numEnsnares >= component.MaxEnsnares) return false; - // Apply stamina damage to target if they weren't ensnared before. - if (ensnareable.IsEnsnared != true) + Container.Insert(ensnare, ensnareable.Container); + + // Apply stamina damage to target + if (TryComp(target, out var stamina)) { - if (TryComp(target, out var stamina)) - { - _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina); - } + _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina); } component.Ensnared = target; diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml index f8d5efb8c68..f6630adbb32 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml @@ -47,4 +47,5 @@ staminaDamage: 0 # anything but this is gamebreaking canThrowTrigger: true canMoveBreakout: true + maxEnsnares: 1 - type: LandAtCursor From 069e37c6fc37526ea86758a5437dd60592220677 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 4 Feb 2025 16:12:55 +0000 Subject: [PATCH 099/197] 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 f24c993dedf..4ea524d19aa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: coffeeware - changes: - - message: a powered TEG won't produce infinite power when destroyed - type: Fix - id: 7397 - time: '2024-09-19T02:15:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29972 - author: Boaz1111 changes: - message: Added plasma and uranium arrows. @@ -3906,3 +3899,10 @@ id: 7896 time: '2025-02-04T07:52:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34293 +- author: impubbi + changes: + - message: Bolas will now only be applied once. + type: Fix + id: 7897 + time: '2025-02-04T16:11:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34723 From a3014569089389cbc1e95dd8e0c4a2e77f5b8196 Mon Sep 17 00:00:00 2001 From: ActiveMammmoth <140334666+ActiveMammmoth@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:25:54 -0500 Subject: [PATCH 100/197] Mind Swap Fix (#33553) * Stores owned by mind instead of body * Requested changes, traitor uplink fixed * Store, listings fixed and now use Entity * Removed duplicate code * test change * test change 2 * back to mind entityuid * MilonPL requested minor changes * ScarKy0 requested changes --- .../Store/Conditions/BuyerAntagCondition.cs | 7 +++---- .../Store/Conditions/BuyerDepartmentCondition.cs | 8 +++----- Content.Server/Store/Conditions/BuyerJobCondition.cs | 8 +++----- .../Store/Conditions/BuyerSpeciesCondition.cs | 6 +++++- Content.Server/Store/Systems/StoreSystem.cs | 8 ++++++-- Content.Server/Traitor/Uplink/UplinkSystem.cs | 12 +++++++++--- Content.Shared/Store/Components/StoreComponent.cs | 4 ++-- Resources/Prototypes/Magic/mindswap_spell.yml | 1 + 8 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Content.Server/Store/Conditions/BuyerAntagCondition.cs b/Content.Server/Store/Conditions/BuyerAntagCondition.cs index 4b1b6013eb8..0d1c33a61aa 100644 --- a/Content.Server/Store/Conditions/BuyerAntagCondition.cs +++ b/Content.Server/Store/Conditions/BuyerAntagCondition.cs @@ -27,13 +27,12 @@ public sealed partial class BuyerAntagCondition : ListingCondition public override bool Condition(ListingConditionArgs args) { var ent = args.EntityManager; - var minds = ent.System(); - if (!minds.TryGetMind(args.Buyer, out var mindId, out var mind)) - return true; + if (!ent.HasComponent(args.Buyer)) + return true; // inanimate objects don't have minds var roleSystem = ent.System(); - var roles = roleSystem.MindGetAllRoleInfo(mindId); + var roles = roleSystem.MindGetAllRoleInfo(args.Buyer); if (Blacklist != null) { diff --git a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs index 43c06efad3c..ce2cb470736 100644 --- a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs +++ b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs @@ -30,14 +30,12 @@ public override bool Condition(ListingConditionArgs args) var prototypeManager = IoCManager.Resolve(); var ent = args.EntityManager; - var minds = ent.System(); - // this is for things like surplus crate - if (!minds.TryGetMind(args.Buyer, out var mindId, out _)) - return true; + if (!ent.TryGetComponent(args.Buyer, out var _)) + return true; // inanimate objects don't have minds var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job); + jobs.MindTryGetJob(args.Buyer, out var job); if (Blacklist != null && job != null) { diff --git a/Content.Server/Store/Conditions/BuyerJobCondition.cs b/Content.Server/Store/Conditions/BuyerJobCondition.cs index 1ff4a97c33c..eb452e0dcff 100644 --- a/Content.Server/Store/Conditions/BuyerJobCondition.cs +++ b/Content.Server/Store/Conditions/BuyerJobCondition.cs @@ -27,14 +27,12 @@ public sealed partial class BuyerJobCondition : ListingCondition public override bool Condition(ListingConditionArgs args) { var ent = args.EntityManager; - var minds = ent.System(); - // this is for things like surplus crate - if (!minds.TryGetMind(args.Buyer, out var mindId, out _)) - return true; + if (!ent.TryGetComponent(args.Buyer, out var _)) + return true; // inanimate objects don't have minds var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job); + jobs.MindTryGetJob(args.Buyer, out var job); if (Blacklist != null) { diff --git a/Content.Server/Store/Conditions/BuyerSpeciesCondition.cs b/Content.Server/Store/Conditions/BuyerSpeciesCondition.cs index 1df4fce177f..a4f1227eccf 100644 --- a/Content.Server/Store/Conditions/BuyerSpeciesCondition.cs +++ b/Content.Server/Store/Conditions/BuyerSpeciesCondition.cs @@ -2,6 +2,7 @@ using Content.Shared.Store; using Content.Shared.Humanoid.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; +using Content.Shared.Mind; namespace Content.Server.Store.Conditions; @@ -27,7 +28,10 @@ public override bool Condition(ListingConditionArgs args) { var ent = args.EntityManager; - if (!ent.TryGetComponent(args.Buyer, out var appearance)) + if (!ent.TryGetComponent(args.Buyer, out var mind)) + return true; // needed to obtain body entityuid to check for humanoid appearance + + if (!ent.TryGetComponent(mind.OwnedEntity, out var appearance)) return true; // inanimate or non-humanoid entities should be handled elsewhere, main example being surplus crates if (Blacklist != null) diff --git a/Content.Server/Store/Systems/StoreSystem.cs b/Content.Server/Store/Systems/StoreSystem.cs index 33727fe37d1..4aca9a3cfa7 100644 --- a/Content.Server/Store/Systems/StoreSystem.cs +++ b/Content.Server/Store/Systems/StoreSystem.cs @@ -10,6 +10,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Utility; using System.Linq; +using Content.Shared.Mind; namespace Content.Server.Store.Systems; @@ -69,10 +70,13 @@ private void OnStoreOpenAttempt(EntityUid uid, StoreComponent component, Activat if (!component.OwnerOnly) return; - component.AccountOwner ??= args.User; + if (!_mind.TryGetMind(args.User, out var mind, out _)) + return; + + component.AccountOwner ??= mind; DebugTools.Assert(component.AccountOwner != null); - if (component.AccountOwner == args.User) + if (component.AccountOwner == mind) return; _popup.PopupEntity(Loc.GetString("store-not-account-owner", ("store", uid)), uid, args.User); diff --git a/Content.Server/Traitor/Uplink/UplinkSystem.cs b/Content.Server/Traitor/Uplink/UplinkSystem.cs index 4c0a990b148..f30d2d7b4c6 100644 --- a/Content.Server/Traitor/Uplink/UplinkSystem.cs +++ b/Content.Server/Traitor/Uplink/UplinkSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Implants; using Content.Shared.Inventory; +using Content.Shared.Mind; using Content.Shared.PDA; using Content.Shared.Store; using Content.Shared.Store.Components; @@ -19,6 +20,7 @@ public sealed class UplinkSystem : EntitySystem [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly StoreSystem _store = default!; [Dependency] private readonly SharedSubdermalImplantSystem _subdermalImplant = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; [ValidatePrototypeId] public const string TelecrystalCurrencyPrototype = "Telecrystal"; @@ -61,8 +63,12 @@ public bool AddUplink( /// private void SetUplink(EntityUid user, EntityUid uplink, FixedPoint2 balance, bool giveDiscounts) { + if (!_mind.TryGetMind(user, out var mind, out _)) + return; + var store = EnsureComp(uplink); - store.AccountOwner = user; + + store.AccountOwner = mind; store.Balance.Clear(); _store.TryAddCurrency(new Dictionary { { TelecrystalCurrencyPrototype, balance } }, @@ -70,10 +76,10 @@ private void SetUplink(EntityUid user, EntityUid uplink, FixedPoint2 balance, bo store); var uplinkInitializedEvent = new StoreInitializedEvent( - TargetUser: user, + TargetUser: mind, Store: uplink, UseDiscounts: giveDiscounts, - Listings: _store.GetAvailableListings(user, uplink, store) + Listings: _store.GetAvailableListings(mind, uplink, store) .ToArray()); RaiseLocalEvent(ref uplinkInitializedEvent); } diff --git a/Content.Shared/Store/Components/StoreComponent.cs b/Content.Shared/Store/Components/StoreComponent.cs index e5171dec418..19d13e6d052 100644 --- a/Content.Shared/Store/Components/StoreComponent.cs +++ b/Content.Shared/Store/Components/StoreComponent.cs @@ -37,10 +37,10 @@ public sealed partial class StoreComponent : Component public HashSet> CurrencyWhitelist = new(); /// - /// The person who "owns" the store/account. Used if you want the listings to be fixed + /// The person/mind who "owns" the store/account. Used if you want the listings to be fixed /// regardless of who activated it. I.E. role specific items for uplinks. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public EntityUid? AccountOwner = null; /// diff --git a/Resources/Prototypes/Magic/mindswap_spell.yml b/Resources/Prototypes/Magic/mindswap_spell.yml index 19b3d41e707..bc2a8d11be0 100644 --- a/Resources/Prototypes/Magic/mindswap_spell.yml +++ b/Resources/Prototypes/Magic/mindswap_spell.yml @@ -9,6 +9,7 @@ whitelist: components: - Body + - MindContainer canTargetSelf: false interactOnMiss: false sound: !type:SoundPathSpecifier From ab6797bf44c94afede1f56211333e19bbe7627d7 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:46:49 +0100 Subject: [PATCH 101/197] Add binoculars (#34687) * add binoculars * tabs evil * give one to warden * buff --- .../Catalog/Fills/Lockers/security.yml | 1 + .../Markers/Spawners/Random/maintenance.yml | 1 + .../Entities/Objects/Tools/binoculars.yml | 24 ++++++++++++++ .../Objects/Tools/binoculars.rsi/icon.png | Bin 0 -> 611 bytes .../Tools/binoculars.rsi/inhand-left.png | Bin 0 -> 295 bytes .../Tools/binoculars.rsi/inhand-right.png | Bin 0 -> 295 bytes .../Objects/Tools/binoculars.rsi/meta.json | 30 ++++++++++++++++++ .../binoculars.rsi/wielded-inhand-left.png | Bin 0 -> 421 bytes .../binoculars.rsi/wielded-inhand-right.png | Bin 0 -> 421 bytes 9 files changed, 56 insertions(+) create mode 100644 Resources/Prototypes/Entities/Objects/Tools/binoculars.yml create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/icon.png create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/meta.json create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/binoculars.rsi/wielded-inhand-right.png diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 592ae121f4a..c25f829caa2 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -67,6 +67,7 @@ amount: 2 - id: RemoteSignaller amount: 2 + - id: Binoculars - type: entity id: LockerSecurityFilled diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 3924d5fadeb..1c30f70553c 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -282,6 +282,7 @@ - !type:GroupSelector weight: 2 children: + - id: Binoculars - id: LanternFlash - id: PowerCellHigh - id: NetProbeCartridge diff --git a/Resources/Prototypes/Entities/Objects/Tools/binoculars.yml b/Resources/Prototypes/Entities/Objects/Tools/binoculars.yml new file mode 100644 index 00000000000..06712e67def --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/binoculars.yml @@ -0,0 +1,24 @@ +- type: entity + name: binoculars + parent: BaseItem + id: Binoculars + description: Used for long-distance surveillance. + components: + - type: Sprite + sprite: Objects/Tools/binoculars.rsi + state: icon + - type: Item + size: Normal + - type: Wieldable + - type: UseDelay + delay: 1.0 + - type: CursorOffsetRequiresWield + - type: EyeCursorOffset + maxOffset: 5 + pvsIncrease: 0.5 + - type: PhysicalComposition + materialComposition: + Steel: 100 + Glass: 50 + - type: StaticPrice + price: 100 diff --git a/Resources/Textures/Objects/Tools/binoculars.rsi/icon.png b/Resources/Textures/Objects/Tools/binoculars.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee368b680dfc3424f7176c18abb0a9f334f1c313 GIT binary patch literal 611 zcmV-p0-XJcP)_q((fuuMTRg1fcg0LI!%v^&`C5(;jJJ8*bDB{ z^1>K>#CmBcK1_FO2h^-}S4^jn#Fc8F>I7ik*JxD07-^f>?g4-_LcUG%uFlia;RTx) z`#~%Vgwi0%RKmOuD)vC?^LssRlDJ8-NU>{-Je2~(&ud{Us-`BC1yiv!Fh*?)^$oEk zWMkeNDk%YAz>P%7r9pr2PM6J}t}ofx>Cz~9pSBNxxFTCY9R_9+OJgSN8YTP4=h?!p zwiZ0jx&dLo2TBk{;bt0N zJmhphVVaz~H}Cb+Txo#<#hj z@4ddkIQ90Hw@=HT2rAexa`-bG5^ngwf`hpykTGt*L;csEIUx+sD(&>Pr$+iI^KgH- zwolnl@elWbmn;bv-aX%!a&84fs=Z$iSHLuw`^@94W#bA{6%2u%WbkzLb6Mw<&;$VD Cf@-G# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/binoculars.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/binoculars.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6ca1a7e3bbb0cdac9b13bd7407e666152c4c31 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1GUw zi(^Q|oVPbO@-`cYus!UavQVPMP_kvMP}3w0)=9mWKa~8x9?&qMcGKM-eKAZ5(-}^v zG8Az(pfFAD+21=a{k5cb?@p#=nYZeM5Z*Ys{O&5N` zBB-o$@FHi5ZZ- z_L#7i^-Q{P_4hA5f1R6;9<|)F@o$9QaS?t!(R9zDz2!5VY> zce2WfC43*$XTLh){zVLEB14f1!xImN6B8LGC^IU!Gdc9JK&(QM*vQHe{GlE%ZlA{Bv*Z5 bs$+bxHP^TIy3Z6~xHEXV`njxgN@xNAXK||_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/binoculars.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Tools/binoculars.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d91a914e442ac3caaa102130f418ae578760c041 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5Y zr;B4q#hkaZ484vxNVLv3;BY&^sIpD-(%X5C0wN;b+WLt*BOM5Z*Ys{O&5N` zBB-o$@FHi5ZZ- z_L#7i^-Q{P_4hA5f1R6;9<|)F@o$9QaS?t!(R9zDz2!5VY> zce2WfC43*$XTLh){zVLEB14f1!xImN6B8LGC^IU!Gdc9JK&(QM*vQHe{GlE%ZlA{Bv*Z5 bs$+bxHP^TIy3Z6~xHEXV`njxgN@xNAXK||_ literal 0 HcmV?d00001 From e363a4d5bfc31e27cec7161a4ccf8136163bab83 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 4 Feb 2025 21:47:58 +0000 Subject: [PATCH 102/197] 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 4ea524d19aa..1d2f7f48689 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Boaz1111 - changes: - - message: Added plasma and uranium arrows. - type: Add - id: 7398 - time: '2024-09-19T08:41:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31241 - author: Ertanic changes: - message: Wanted list program and its cartridge. @@ -3906,3 +3899,10 @@ id: 7897 time: '2025-02-04T16:11:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34723 +- author: slarticodefast + changes: + - message: Added binoculars. You can find them in maints loot and the warden's locker. + type: Add + id: 7898 + time: '2025-02-04T21:46:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34687 From 829fd43b0773cdbb71b0d7901c5263246dd995c1 Mon Sep 17 00:00:00 2001 From: Menshin Date: Tue, 4 Feb 2025 23:56:42 +0100 Subject: [PATCH 103/197] Dehardcoded Space Heaters UI window title (#34884) --- Content.Client/Atmos/UI/SpaceHeaterWindow.xaml | 2 +- Resources/Locale/en-US/components/space-heater-component.ftl | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Client/Atmos/UI/SpaceHeaterWindow.xaml b/Content.Client/Atmos/UI/SpaceHeaterWindow.xaml index 1b7bd490b85..003a2203d56 100644 --- a/Content.Client/Atmos/UI/SpaceHeaterWindow.xaml +++ b/Content.Client/Atmos/UI/SpaceHeaterWindow.xaml @@ -1,6 +1,6 @@ + MinSize="280 160" Title="{Loc comp-space-heater-ui-title}"> diff --git a/Resources/Locale/en-US/components/space-heater-component.ftl b/Resources/Locale/en-US/components/space-heater-component.ftl index 48cd17cbf1d..a9089e75591 100644 --- a/Resources/Locale/en-US/components/space-heater-component.ftl +++ b/Resources/Locale/en-US/components/space-heater-component.ftl @@ -1,4 +1,5 @@ -comp-space-heater-ui-thermostat = Thermostat: +comp-space-heater-ui-title = Temperature Control Unit +comp-space-heater-ui-thermostat = Thermostat: comp-space-heater-ui-mode = Mode comp-space-heater-ui-status-disabled = Off comp-space-heater-ui-status-enabled = On From b909dd1ab2b3caa5a4644bf60499d742a33449ba Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Sun, 9 Feb 2025 21:44:27 +0000 Subject: [PATCH 104/197] shift tape recorder box sprite --- .../_DV/Objects/Storage/boxes.rsi/recorder.png | Bin 189 -> 187 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/_DV/Objects/Storage/boxes.rsi/recorder.png b/Resources/Textures/_DV/Objects/Storage/boxes.rsi/recorder.png index e91a2d02ff09b956cd7aa890c9ada6d08bc23419..449682923b8b69838eb0379453ecc4a60314320b 100644 GIT binary patch delta 159 zcmdnXxSMf;N6D&MCnP;5X@JCa~?&6^X34Wc-5hpH+2n!!B`17N%O;q4r za+`Me3t^@$49xEsHZ4jxIZ3ryS-j!ERPFG2y<%!0qa~UYc^Mj>i)QY+^x_}TW(H4J KKbLh*2~7aBqdpb@ delta 161 zcmdnZxR-H)NGZx^prw85kJKJzX3_B3hFZBv=DBNFjXgmZpIVuFGCaUHQDlY~mw55@O;hKbK=8E02(}8Ya N@O1TaS?83{1OQDpJJ0|C From 73284bcc4701f2b01626fbe943f60eb665d82fa5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 4 Feb 2025 22:59:38 +0000 Subject: [PATCH 105/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1d2f7f48689..fdac8810775 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: Ertanic - changes: - - message: Wanted list program and its cartridge. - type: Add - - message: The cartridge has been added to the HOS locker. - type: Add - - message: Added target to thief on wanted list cartridge. - type: Add - id: 7399 - time: '2024-09-19T10:22:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31223 - author: Errant changes: - message: Crew monitor list can now be filtered by name and job. @@ -3906,3 +3895,11 @@ id: 7898 time: '2025-02-04T21:46:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34687 +- author: Spacemann + changes: + - message: Added 4 randomized maintenance rooms to in Convex station. These will + change every round with a different layout. + type: Add + id: 7899 + time: '2025-02-04T22:58:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34866 From b0abbaa0fb2ef463e1d8ed32d9395d147658efb2 Mon Sep 17 00:00:00 2001 From: tosatur <63034378+tosatur@users.noreply.github.com> Date: Tue, 20 Aug 2024 03:51:54 +1000 Subject: [PATCH 106/197] Change text for ghost visibility button (#30998) * add new text * changed loc names * fixes --- Content.Client/Ghost/GhostSystem.cs | 4 ++-- Resources/Locale/en-US/ghost/ghost-gui.ftl | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Client/Ghost/GhostSystem.cs b/Content.Client/Ghost/GhostSystem.cs index 94872a58ef9..f4f7e3459fb 100644 --- a/Content.Client/Ghost/GhostSystem.cs +++ b/Content.Client/Ghost/GhostSystem.cs @@ -99,8 +99,8 @@ private void OnToggleGhosts(EntityUid uid, GhostComponent component, ToggleGhost if (args.Handled) return; - Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-ghost-visibility-popup"), args.Performer); - + var locId = GhostVisibility ? "ghost-gui-toggle-ghost-visibility-popup-off" : "ghost-gui-toggle-ghost-visibility-popup-on"; + Popup.PopupEntity(Loc.GetString(locId), args.Performer); if (uid == _playerManager.LocalEntity) ToggleGhostVisibility(); diff --git a/Resources/Locale/en-US/ghost/ghost-gui.ftl b/Resources/Locale/en-US/ghost/ghost-gui.ftl index 5b19c73ea38..7d3939abb13 100644 --- a/Resources/Locale/en-US/ghost/ghost-gui.ftl +++ b/Resources/Locale/en-US/ghost/ghost-gui.ftl @@ -1,7 +1,8 @@ ghost-gui-return-to-body-button = Return to body ghost-gui-ghost-warp-button = Ghost Warp ghost-gui-ghost-roles-button = Ghost Roles ({$count}) -ghost-gui-toggle-ghost-visibility-popup = Toggled visibility of ghosts. +ghost-gui-toggle-ghost-visibility-popup-on = Enabled visibility of ghosts. +ghost-gui-toggle-ghost-visibility-popup-off = Disabled visibility of ghosts. ghost-gui-toggle-lighting-manager-popup = Toggled all lighting. ghost-gui-toggle-fov-popup = Toggled field-of-view. From 6d69f92baeede94f9ab6c2b2995b385d61e7187f Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Wed, 5 Feb 2025 02:26:06 +0300 Subject: [PATCH 107/197] Add clientside personal pointlight for observers (#33607) * Observer personal pointlight * Bigger light * combine actions --------- Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Client/Ghost/GhostSystem.cs | 24 +++++++++++++++++-- Resources/Locale/en-US/ghost/ghost-gui.ftl | 4 +++- .../Entities/Mobs/Player/observer.yml | 7 ++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Content.Client/Ghost/GhostSystem.cs b/Content.Client/Ghost/GhostSystem.cs index f4f7e3459fb..8e977b418b0 100644 --- a/Content.Client/Ghost/GhostSystem.cs +++ b/Content.Client/Ghost/GhostSystem.cs @@ -13,6 +13,7 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly IClientConsoleHost _console = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly PointLightSystem _pointLightSystem = default!; [Dependency] private readonly ContentEyeSystem _contentEye = default!; public int AvailableGhostRoleCount { get; private set; } @@ -79,8 +80,27 @@ private void OnToggleLighting(EntityUid uid, EyeComponent component, ToggleLight if (args.Handled) return; - Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup"), args.Performer); - _contentEye.RequestToggleLight(uid, component); + TryComp(uid, out var light); + + if (!component.DrawLight) + { + // normal lighting + Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-normal"), args.Performer); + _contentEye.RequestEye(component.DrawFov, true); + } + else if (!light?.Enabled ?? false) // skip this option if we have no PointLightComponent + { + // enable personal light + Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-personal-light"), args.Performer); + _pointLightSystem.SetEnabled(uid, true, light); + } + else + { + // fullbright mode + Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-fullbright"), args.Performer); + _contentEye.RequestEye(component.DrawFov, false); + _pointLightSystem.SetEnabled(uid, false, light); + } args.Handled = true; } diff --git a/Resources/Locale/en-US/ghost/ghost-gui.ftl b/Resources/Locale/en-US/ghost/ghost-gui.ftl index 7d3939abb13..02beef12db9 100644 --- a/Resources/Locale/en-US/ghost/ghost-gui.ftl +++ b/Resources/Locale/en-US/ghost/ghost-gui.ftl @@ -3,7 +3,9 @@ ghost-gui-ghost-warp-button = Ghost Warp ghost-gui-ghost-roles-button = Ghost Roles ({$count}) ghost-gui-toggle-ghost-visibility-popup-on = Enabled visibility of ghosts. ghost-gui-toggle-ghost-visibility-popup-off = Disabled visibility of ghosts. -ghost-gui-toggle-lighting-manager-popup = Toggled all lighting. +ghost-gui-toggle-lighting-manager-popup-normal = Lighting normal. +ghost-gui-toggle-lighting-manager-popup-personal-light = Enabled personal light. +ghost-gui-toggle-lighting-manager-popup-fullbright = Fullbright mode. ghost-gui-toggle-fov-popup = Toggled field-of-view. ghost-gui-toggle-hearing-popup-on = You can now hear all messages. diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 45fb7a1f44a..b83fd2edbbc 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -68,6 +68,9 @@ - type: Tag tags: - BypassInteractionRangeChecks + - type: PointLight + radius: 6 + enabled: false # proto for player ghosts specifically - type: entity @@ -90,8 +93,8 @@ - type: entity id: ActionToggleLighting - name: Toggle All Lighting - description: Toggle all light rendering to better observe dark areas. + name: Toggle Lighting + description: Toggle light rendering to better observe dark areas. components: - type: InstantAction icon: Interface/VerbIcons/light.svg.192dpi.png From 64dc2069705073c79cc0180d45804554c0deaf6c Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 4 Feb 2025 23:27:12 +0000 Subject: [PATCH 108/197] 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 fdac8810775..bc2c1411269 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Errant - changes: - - message: Crew monitor list can now be filtered by name and job. - type: Add - id: 7400 - time: '2024-09-19T10:23:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31659 - author: deltanedas changes: - message: Removed the flare blueprint from salvage, it's now unlocked roundstart @@ -3903,3 +3896,10 @@ id: 7899 time: '2025-02-04T22:58:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34866 +- author: Winkarst-cpu + changes: + - message: Observers now have a personal point light and can toggle it. + type: Add + id: 7900 + time: '2025-02-04T23:26:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33607 From ad57d70ada1479ba01d723bbf9946e12c5dcbdac Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:23:30 -0500 Subject: [PATCH 109/197] HealingSystem: check blood restoration, staunching (#33526) * HealingSystem: check blood restoration, staunching * Milon's suggestions * beck-thompson's requests --- Content.Server/Medical/HealingSystem.cs | 33 ++++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Content.Server/Medical/HealingSystem.cs b/Content.Server/Medical/HealingSystem.cs index 728f0b48f01..92fffbeb748 100644 --- a/Content.Server/Medical/HealingSystem.cs +++ b/Content.Server/Medical/HealingSystem.cs @@ -126,15 +126,15 @@ entity.Comp.DamageContainerID is not null && _audio.PlayPvs(healing.HealingEndSound, entity.Owner, AudioHelpers.WithVariation(0.125f, _random).WithVolume(-5f)); // Logic to determine the whether or not to repeat the healing action - args.Repeat = HasDamage(entity.Comp, healing) && !dontRepeat || IsPartDamaged(args.User, entity); // Shitmed Change + args.Repeat = (HasDamage(entity, healing) && !dontRepeat) || IsPartDamaged(args.User, entity); // Shitmed Change if (!args.Repeat && !dontRepeat) _popupSystem.PopupEntity(Loc.GetString("medical-item-finished-using", ("item", args.Used)), entity.Owner, args.User); args.Handled = true; } - private bool HasDamage(DamageableComponent component, HealingComponent healing) + private bool HasDamage(Entity ent, HealingComponent healing) { - var damageableDict = component.Damage.DamageDict; + var damageableDict = ent.Comp.Damage.DamageDict; var healingDict = healing.Damage.DamageDict; foreach (var type in healingDict) { @@ -144,6 +144,23 @@ private bool HasDamage(DamageableComponent component, HealingComponent healing) } } + if (TryComp(ent, out var bloodstream)) + { + // Is ent missing blood that we can restore? + if (healing.ModifyBloodLevel > 0 + && _solutionContainerSystem.ResolveSolution(ent.Owner, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution) + && bloodSolution.Volume < bloodSolution.MaxVolume) + { + return true; + } + + // Is ent bleeding and can we stop it? + if (healing.BloodlossModifier < 0 && bloodstream.BleedAmount > 0) + { + return true; + } + } + return false; } @@ -200,15 +217,7 @@ targetDamage.DamageContainerID is not null && if (TryComp(uid, out var stack) && stack.Count < 1) return false; - var anythingToDo = - HasDamage(targetDamage, component) || - IsPartDamaged(user, target) || // Shitmed Change - component.ModifyBloodLevel > 0 // Special case if healing item can restore lost blood... - && TryComp(target, out var bloodstream) - && _solutionContainerSystem.ResolveSolution(target, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution) - && bloodSolution.Volume < bloodSolution.MaxVolume; // ...and there is lost blood to restore. - - if (!anythingToDo) + if (!HasDamage((target, targetDamage), component) && !IsPartDamaged(user, target)) // Shitmed Change { _popupSystem.PopupEntity(Loc.GetString("medical-item-cant-use", ("item", uid)), uid, user); return false; From 8ae92368ff27afa8ba220950c8141ce78768eea5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 5 Feb 2025 03:24:37 +0000 Subject: [PATCH 110/197] 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 bc2c1411269..4a9185ba0e1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Removed the flare blueprint from salvage, it's now unlocked roundstart - in autolathes. - type: Remove - id: 7401 - time: '2024-09-19T13:45:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32303 - author: deltanedas changes: - message: Increased the thieving beacon's range to 2 tiles. @@ -3903,3 +3895,10 @@ id: 7900 time: '2025-02-04T23:26:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33607 +- author: whatston3 + changes: + - message: Healing items that reduce bleeding can now be applied to undamaged mobs. + type: Tweak + id: 7901 + time: '2025-02-05T03:23:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33526 From 4f221d1e089779bee097706920536dec01f8cfb3 Mon Sep 17 00:00:00 2001 From: DuckManZach <144298822+DuckManZach@users.noreply.github.com> Date: Wed, 5 Feb 2025 08:42:27 +0000 Subject: [PATCH 111/197] Expand variety of strange pills (#34843) * Added da pills * Revert "Added da pills" This reverts commit 3d6b8fce3386107ac4c46543252fc31764a0c1c7. * Updated to use existing weights, added larger chem variety * Reweighed charcoal * Rebalance of certain quantities * Removed grey matter, weight balancing changes * corrected comment * adjusted balance for lead --- .../Objects/Specific/Medical/randompill.yml | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/randompill.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/randompill.yml index cdff0cdbe4a..941abd1a430 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/randompill.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/randompill.yml @@ -11,10 +11,15 @@ weight: 5 reagents: - Ichor + - Necrosol - quantity: 5 - weight: 5 + weight: 4 reagents: - Cognizine + - quantity: 10 + weight: 1 + reagents: + - Vestine # Good - weight: 25 - quantity: 20 weight: 25 @@ -24,21 +29,29 @@ - Omnizine - Tricordrazine - Vitamin + - PolypyryliumOligomers + - Charcoal # Neutral - weight: 20 - quantity: 20 weight: 17.5 reagents: - - Ipecac + - Ipecac - SodiumPolyacrylate - SpaceDrugs - SpaceGlue - Laughter - JuiceThatMakesYouWeh - Lipozine + - Carpetium + - Bananadine + - THC + - MindbreakerToxin + - Mustard + - HorseradishSauce - quantity: 5 weight: 2.5 reagents: - - Honk + - Honk # Bad - weight: 25 - quantity: 20 weight: 10.5 @@ -46,12 +59,15 @@ - MuteToxin - Pax - Fresium + - Cryptobiolin - quantity: 10 weight: 10.5 reagents: - Uranium - Licoxide - Razorium + - Potassium + - Phlogiston - quantity: 5 weight: 4 reagents: @@ -60,7 +76,7 @@ - quantity: 20 weight: 2.5 reagents: - - ChloralHydrate + - Nocturine - quantity: 10 weight: 10 reagents: @@ -68,10 +84,12 @@ - CarpoToxin - BuzzochloricBees - Amatoxin + - Tazinide - quantity: 5 weight: 2.5 reagents: - Lexorin + - Lead - type: entity name: strange pill From 38e138c147adc79769b6c6a8da4ec7d40a0272fa Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 5 Feb 2025 08:43:33 +0000 Subject: [PATCH 112/197] 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 4a9185ba0e1..a17bfd12308 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Increased the thieving beacon's range to 2 tiles. - type: Tweak - id: 7402 - time: '2024-09-19T13:55:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31340 - author: Winkarst-cpu changes: - message: The first editable line in the dialog window now grabs the keyboard focus @@ -3902,3 +3895,10 @@ id: 7901 time: '2025-02-05T03:23:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33526 +- author: DuckManZach + changes: + - message: Floor pills have some new interesting surprises! + type: Add + id: 7902 + time: '2025-02-05T08:42:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34843 From ef0a0cedca05db048ff38501cccd68e54a2efef0 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Thu, 6 Feb 2025 00:39:26 +1200 Subject: [PATCH 113/197] Remove Vector assets and renames Vector SMG magazines (#34603) * remove vector and assets * reverts vector magazine removal; vector magazines renamed to SMG magazine (.45 magnum) * remove vector from suspicion loot table * vector migration set to null --- Resources/Migrations/migration.yml | 4 ++ .../Catalog/Fills/Boxes/ammunition.yml | 9 ++-- .../Guns/Ammunition/Magazines/magnum.yml | 13 ++--- .../Objects/Weapons/Guns/SMGs/smgs.yml | 48 ------------------ .../LootTables/suspicion_loot_table.yml | 3 -- .../Weapons/Guns/SMGs/vector.rsi/base.png | Bin 357 -> 0 bytes .../Guns/SMGs/vector.rsi/bolt-open.png | Bin 346 -> 0 bytes .../SMGs/vector.rsi/equipped-BACKPACK.png | Bin 853 -> 0 bytes .../SMGs/vector.rsi/equipped-SUITSTORAGE.png | Bin 853 -> 0 bytes .../Weapons/Guns/SMGs/vector.rsi/icon.png | Bin 380 -> 0 bytes .../Guns/SMGs/vector.rsi/inhand-left.png | Bin 334 -> 0 bytes .../Guns/SMGs/vector.rsi/inhand-right.png | Bin 339 -> 0 bytes .../Weapons/Guns/SMGs/vector.rsi/mag-0.png | Bin 175 -> 0 bytes .../Weapons/Guns/SMGs/vector.rsi/meta.json | 39 -------------- 14 files changed, 16 insertions(+), 100 deletions(-) delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/base.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/bolt-open.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/equipped-BACKPACK.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/equipped-SUITSTORAGE.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/icon.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/mag-0.png delete mode 100644 Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/meta.json diff --git a/Resources/Migrations/migration.yml b/Resources/Migrations/migration.yml index 9c4bf95c31b..c209d183fdc 100644 --- a/Resources/Migrations/migration.yml +++ b/Resources/Migrations/migration.yml @@ -534,3 +534,7 @@ ClothingMaskSexyMime: ClothingMaskBlushingMime # 2025-01-27 FoodCondimentPacketFrostoil: FoodCondimentPacketColdsauce + +#2025-02-05 +WeaponSubMachineGunVector: null +WeaponSubMachineGunVectorRubber: null diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml index a9fffddd2a5..a42d653d528 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml @@ -56,11 +56,12 @@ - id: MagazineLightRiflePractice amount: 4 +# Magnum - type: entity - name: box of Vector magazines + name: box of SMG .45 magnum magazines parent: BoxMagazine id: BoxMagazineMagnumSubMachineGun - description: A box full of Vector magazines. + description: A box full of SMG .45 magnum magazines. components: - type: StorageFill contents: @@ -68,10 +69,10 @@ amount: 3 - type: entity - name: box of Vector (practice) magazines + name: box of SMG .45 magnum (practice) magazines parent: BoxMagazine id: BoxMagazineMagnumSubMachineGunPractice - description: A box full of Vector (practice) magazines. + description: A box full of SMG .45 magnum (practice) magazines. components: - type: StorageFill contents: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml index 4f6f101be4c..b7378b99918 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml @@ -16,7 +16,7 @@ - type: entity id: BaseMagazineMagnumSubMachineGun - name: "Vector magazine (.45 magnum)" + name: SMG magazine (.45 magnum) parent: BaseItem abstract: true components: @@ -116,9 +116,10 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] + - type: entity id: MagazineMagnumSubMachineGunEmpty - name: "Vector magazine (.45 magnum any)" + name: SMG magazine (.45 magnum any) suffix: empty parent: BaseMagazineMagnumSubMachineGun components: @@ -131,7 +132,7 @@ - type: entity id: MagazineMagnumSubMachineGun - name: "Vector magazine (.45 magnum)" + name: SMG magazine (.45 magnum) parent: BaseMagazineMagnumSubMachineGun components: - type: BallisticAmmoProvider @@ -145,7 +146,7 @@ - type: entity id: MagazineMagnumSubMachineGunPractice - name: "Vector magazine (.45 magnum practice)" + name: SMG magazine (.45 magnum practice) parent: BaseMagazineMagnumSubMachineGun components: - type: BallisticAmmoProvider @@ -159,7 +160,7 @@ - type: entity id: MagazineMagnumSubMachineGunUranium - name: "Vector magazine (.45 magnum uranium)" + name: SMG magazine (.45 magnum uranium) parent: BaseMagazineMagnumSubMachineGun components: - type: BallisticAmmoProvider @@ -173,7 +174,7 @@ - type: entity id: MagazineMagnumSubMachineGunPiercing - name: "Vector magazine (.45 magnum armor-piercing)" + name: SMG magazine (.45 magnum armour-piercing) parent: BaseMagazineMagnumSubMachineGun components: - type: BallisticAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 30bbb1315d8..5f94c0a8e1c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -177,54 +177,6 @@ zeroVisible: true - type: Appearance -- type: entity - name: Vector - parent: BaseWeaponSubMachineGun - id: WeaponSubMachineGunVector - suffix: Deprecated use Drozd - description: An excellent fully automatic Heavy SMG. Uses .45 magnum ammo. - components: - - type: Sprite - sprite: Objects/Weapons/Guns/SMGs/vector.rsi - layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: mag-0 - map: ["enum.GunVisualLayers.Mag"] - - type: Clothing - sprite: Objects/Weapons/Guns/SMGs/vector.rsi - - type: Gun - fireRate: 6 - selectedMode: FullAuto - soundGunshot: - path: /Audio/Weapons/Guns/Gunshots/atreides.ogg - availableModes: - - FullAuto - - type: ItemSlots - slots: - gun_magazine: - name: Magazine - startingItem: MagazineMagnumSubMachineGun - insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg - ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg - priority: 2 - whitelist: - tags: - - MagazineMagnumSubMachineGun - gun_chamber: - name: Chamber - startingItem: CartridgeMagnum - priority: 1 - whitelist: - tags: - - CartridgeMagnum - whitelistFailPopup: gun-magazine-whitelist-fail - - type: MagazineVisuals - magState: mag - steps: 1 - zeroVisible: true - - type: Appearance - - type: entity name: WT550 parent: [ BaseWeaponSubMachineGun, BaseRestrictedContraband ] diff --git a/Resources/Prototypes/LootTables/suspicion_loot_table.yml b/Resources/Prototypes/LootTables/suspicion_loot_table.yml index c2b00488a8b..58414f3d28d 100644 --- a/Resources/Prototypes/LootTables/suspicion_loot_table.yml +++ b/Resources/Prototypes/LootTables/suspicion_loot_table.yml @@ -68,9 +68,6 @@ - id: WeaponSubMachineGunC20r amount: 0 maxAmount: 5 - - id: WeaponSubMachineGunVector - amount: 0 - maxAmount: 5 - id: WeaponSubMachineGunWt550 amount: 0 maxAmount: 5 diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/base.png deleted file mode 100644 index 4545503c5783e087e03759dea7613b671d2d8e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9F3 z${@^GvDCf{DCipC6XFV_B_t%&)YN2UWg{aa_4M={9UW&dFmQ2kSz207ojO%YO3KjC zP+m?}Sy|c7&reWLaPs5{J9logHZd;ANf8zn4)*i8_+cXp&>-=WAirRS|5(9>?&AAE zCDS}z978JRyq$2D?~npd>usx7UN`%lYyZ1X6*?gyB`mD}eQLMb^OkQS51y0@{JwtD zWqPt`Y5|*3y!%7h^EvT6o?*kV((X8lHyA+7trjG zOky(3f2okM+Wy)a`{dpSv-n$z?n~bZzZrs& b|0%2YX7gTe~DWM4fVpN3< diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/bolt-open.png deleted file mode 100644 index f616d25f874791042cf4ffe6ea41266dfdc575ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 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 RG#lsz22WQ%mvv4FO#qR_eR}`^ diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/inhand-right.png deleted file mode 100644 index afb543219fa67f4b8f3b0777b7cc1da392b11ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@3A^6XFV_B_$<|jEwB;>{L}%Q&Lil_4OR>Y?YOjw=LNu1kzg)FVdQ&MBb@08veC8UO$Q diff --git a/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/mag-0.png b/Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/mag-0.png deleted file mode 100644 index 6aafc0267003aa46d97f6e54933ef80eceff8aa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?31 zWe{epSZZGe6yy)^32_C|%F4=VX=#p*j#H;j-9IaN6;Oz^B*-tA;Xe?_Tu=iUui@$9 z7*a7OIYEMznX`o_@Mn)(R|b Date: Wed, 5 Feb 2025 08:08:53 -0500 Subject: [PATCH 114/197] Changed utensil sprites to appear smaller. (#34277) * Changed utensil sprites to appear smaller. * Added self to author section * Added my name and update to copyright section * Adjusted plastic spoon sprite * Adjusted spoon sprite --- .../Textures/Objects/Misc/utensils.rsi/fork.png | Bin 175 -> 202 bytes .../Objects/Misc/utensils.rsi/meta.json | 2 +- .../Objects/Misc/utensils.rsi/plastic_fork.png | Bin 169 -> 194 bytes .../Objects/Misc/utensils.rsi/plastic_knife.png | Bin 181 -> 173 bytes .../Objects/Misc/utensils.rsi/plastic_spoon.png | Bin 195 -> 211 bytes .../Objects/Misc/utensils.rsi/spoon.png | Bin 199 -> 205 bytes 6 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/fork.png b/Resources/Textures/Objects/Misc/utensils.rsi/fork.png index e9b3816db5e217eff85d820497b92b80422239e2..cf2d1e3bb7de74ea96f04c2e81d12edae9f5046d 100644 GIT binary patch delta 147 zcmZ3_c#3g?gct`i0|SH0lCEPwim^Dz-HBn{IhmIe6}5^uOM?7@8U90oIn(SbKqVfY zE{-7E)6M!MUS<(ty{NugMaBoaJ^a`+{J3XGvS;05E@Ifrq_l_q u{~^&Cxf`?uT{f4B2i*E}3W%y1SbnK0|P^2Nc!=KdRi%rB|(0{3=Yq3qyYt;JY5_^G|nd{9N?3Xl;q^# zFf!s25J+$p=iqe_72xGoRX89a*73~9k+EdCk$_ObvTg?MT@J2{vl_Y%1q2>sNoHVp X)6UhjbGmgi&@={5S3j3^P6!5sMIn|$P9hPQ{0Wc+@^sv&q^^R(0E8ny%m2PT6D94B~B%$gYd ve4+J~4)%s;MLZMlzS+TWL;0`#yemvTw-`P-MBZcsn#thl>gTe~DWM4fB3C;3 delta 120 zcmV-;0Ehp=0jU9y7zqRe0001iRAl8ojuQv);sRt&cfi~tk5fS3T9fRVu<6~J&Q a+;afW!U_F%j8T990000xRr5&1SbnK0|P^2Nc!=Kih5~`B|(0{3=Yq3qyYt8JY5_^G|nd{9AI_2z}j>1 z$C`5)Ob6XEm~>t+DP}OOQG1~k!`8`_ULtzVD?@9>Mb;SxAreBDoa9A&+FD{xDRgLy aGBAig;`kgI#d#QL9)qW=pUXO@geCyFxG3!a diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/plastic_spoon.png b/Resources/Textures/Objects/Misc/utensils.rsi/plastic_spoon.png index 50bea293058679db746058ead717fe357e3a63d5..7abfafd32ac936fdfbf7718907f2b3352db526ac 100644 GIT binary patch delta 195 zcmX@ic$sm6L_G&H0|SH0lCEPwim^Dz-HBn{IhmJ0j&y)eh%1mzOiU~;E}l7a=KA&P zPn|k->C&Zl@7@8$Z#eAa08*SKL4Lsu|DnK~Y4#PMV4$aqV~9oX-HQi#4;b(;IS9$z zsDE6=^k+p>Xz9E;8`dz`&slZK@~DPam<`LOwb2iD#4}y!WQ`5nx!~x8{fwW&8BE%F oFVAd0-)!1&b}r+!3H8N#YuFgo*{1$i2b#{{>FVdQ&MBb@0NTA!Jpcdz delta 179 zcmcc2c$jg5L_G^L0|P^2NcwRg#aJBV?!>U}oXkrgMvp delta 128 zcmX@hc${&91SbnK0|P^2Nc!=KidH#{B|(0{3=Yq3qyYuJJY5_^G$tk|D2TPNE%+2^ z9UaJe$of{`RF9G}js;w2<}|7W1U70Z#KrY#9f*kNc*f_*=)`n}$3!5(QQX7dK{y~# gLQ89gL Date: Wed, 5 Feb 2025 13:09:59 +0000 Subject: [PATCH 115/197] 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 a17bfd12308..3c93e6d5ee0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Winkarst-cpu - changes: - - message: The first editable line in the dialog window now grabs the keyboard focus - once it's open. - type: Fix - id: 7403 - time: '2024-09-19T14:01:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31294 - author: Plykiya changes: - message: You can now transfer someone from a rollerbed to a bed directly. @@ -3902,3 +3894,10 @@ id: 7902 time: '2025-02-05T08:42:27.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34843 +- author: Gavin-TC + changes: + - message: Changed common utensil sprites to appear smaller and more proportionate. + type: Tweak + id: 7903 + time: '2025-02-05T13:08:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34277 From b77aa750c135db1cc1a807c2fb7ecad5fc34ed79 Mon Sep 17 00:00:00 2001 From: Booblesnoot42 <108703193+Booblesnoot42@users.noreply.github.com> Date: Wed, 5 Feb 2025 09:46:21 -0500 Subject: [PATCH 116/197] Remove instant cryobed insertion (#34619) * added optional delay to DragInsertContainerComponent * comments * Change EntryDelay on DragInsertContainerComponent to use TimeSpan + cleanup * changed drag insert container comp to match naming conventions --- .../DragInsertContainerComponent.cs | 12 ++++++ .../Containers/DragInsertContainerSystem.cs | 40 ++++++++++++++++++- .../Structures/cryogenic_sleep_unit.yml | 1 + 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Containers/DragInsertContainerComponent.cs b/Content.Shared/Containers/DragInsertContainerComponent.cs index e4cae26fcb1..23cf3f65580 100644 --- a/Content.Shared/Containers/DragInsertContainerComponent.cs +++ b/Content.Shared/Containers/DragInsertContainerComponent.cs @@ -17,4 +17,16 @@ public sealed partial class DragInsertContainerComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool UseVerbs = true; + + /// + /// The delay in seconds before a drag will be completed. + /// + [DataField] + public TimeSpan EntryDelay = TimeSpan.Zero; + + /// + /// If entry delay isn't zero, this sets whether an entity dragging itself into the container should be delayed. + /// + [DataField] + public bool DelaySelfEntry = false; } diff --git a/Content.Shared/Containers/DragInsertContainerSystem.cs b/Content.Shared/Containers/DragInsertContainerSystem.cs index b7f5eb500be..8ccf0037033 100644 --- a/Content.Shared/Containers/DragInsertContainerSystem.cs +++ b/Content.Shared/Containers/DragInsertContainerSystem.cs @@ -2,24 +2,28 @@ using Content.Shared.Administration.Logs; using Content.Shared.Climbing.Systems; using Content.Shared.Database; +using Content.Shared.DoAfter; using Content.Shared.DragDrop; using Content.Shared.Verbs; using Robust.Shared.Containers; +using Robust.Shared.Serialization; namespace Content.Shared.Containers; -public sealed class DragInsertContainerSystem : EntitySystem +public sealed partial class DragInsertContainerSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLog = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] private readonly ClimbSystem _climb = default!; [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnDragDropOn, before: new []{ typeof(ClimbSystem)}); + SubscribeLocalEvent(OnDragFinished); SubscribeLocalEvent(OnCanDragDropOn); SubscribeLocalEvent>(OnGetAlternativeVerb); } @@ -33,7 +37,34 @@ private void OnDragDropOn(Entity ent, ref DragDrop if (!_container.TryGetContainer(ent, comp.ContainerId, out var container)) return; - args.Handled = Insert(args.Dragged, args.User, ent, container); + if (comp.EntryDelay <= TimeSpan.Zero || + !comp.DelaySelfEntry && args.User == args.Dragged) + { + //instant insertion + args.Handled = Insert(args.Dragged, args.User, ent, container); + return; + } + + //delayed insertion + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, comp.EntryDelay, new DragInsertContainerDoAfterEvent(), ent, args.Dragged, ent) + { + BreakOnDamage = true, + BreakOnMove = true, + NeedHand = false, + }; + _doAfter.TryStartDoAfter(doAfterArgs); + args.Handled = true; + } + + private void OnDragFinished(Entity ent, ref DragInsertContainerDoAfterEvent args) + { + if (args.Handled || args.Cancelled || args.Args.Target == null) + return; + + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return; + + Insert(args.Args.Target.Value, args.User, ent, container); } private void OnCanDragDropOn(Entity ent, ref CanDropTargetEvent args) @@ -117,4 +148,9 @@ public bool Insert(EntityUid target, EntityUid user, EntityUid containerEntity, _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):player} inserted {ToPrettyString(target):player} into container {ToPrettyString(containerEntity)}"); return true; } + + [Serializable, NetSerializable] + public sealed partial class DragInsertContainerDoAfterEvent : SimpleDoAfterEvent + { + } } diff --git a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml index e9e9294e636..6ba988dc801 100644 --- a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml +++ b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml @@ -25,6 +25,7 @@ canCollide: false - type: DragInsertContainer containerId: storage + entryDelay: 2 - type: ExitContainerOnMove containerId: storage - type: PointLight From e656f3a737fcc34931b580a6c78aa1a79a98c973 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 5 Feb 2025 14:47:28 +0000 Subject: [PATCH 117/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3c93e6d5ee0..eb442a1b778 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: You can now transfer someone from a rollerbed to a bed directly. - type: Tweak - id: 7404 - time: '2024-09-19T14:08:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32089 - author: SaphireLattice changes: - message: Fland now has public glass airlocks sectioning the hallway. @@ -3901,3 +3894,11 @@ id: 7903 time: '2025-02-05T13:08:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34277 +- author: Booblesnoot42 + changes: + - message: Inserting another person into a cryogenic sleeping unit is no longer + instant. + type: Tweak + id: 7904 + time: '2025-02-05T14:46:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34619 From 6dbcac80a5e096d26f6b9fba4cfdce6980925445 Mon Sep 17 00:00:00 2001 From: hyperDelegate Date: Wed, 5 Feb 2025 05:54:45 -0900 Subject: [PATCH 118/197] Reduce NukeOps Reinforcement price from 35TC to 30TC (#34675) * Reduce NukeOps Reinforcement to 25TC from 35TC * price adjustment to 30 * Revert "price adjustment to 30" This reverts commit f337f5a178a344db34a414a47283f43242ea531f. * revert "price adjustment to 30" This reverts commit f337f5a178a344db34a414a47283f43242ea531f. submodule?! YAML preserve me... * Revert "price adjustment to 30" This reverts commit f337f5a178a344db34a414a47283f43242ea531f. submodule!?!? yaml save me * attempt #2 at changing to 30 --- Resources/Prototypes/Catalog/uplink_catalog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 1b1c8986594..a5bf764e093 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -1163,7 +1163,7 @@ productEntity: ReinforcementRadioSyndicateNukeops icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-nukeop } cost: - Telecrystal: 20 # DeltaV - Was 35 + Telecrystal: 20 # DeltaV - Was 30 categories: - UplinkAllies conditions: From 25792057c6b1d0dabd890322def284bca9a064d9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 5 Feb 2025 14:55:52 +0000 Subject: [PATCH 119/197] 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 eb442a1b778..62a8da8bd7c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: SaphireLattice - changes: - - message: Fland now has public glass airlocks sectioning the hallway. - type: Fix - id: 7405 - time: '2024-09-19T19:17:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32264 - author: Plykiya changes: - message: Cockroaches and mothroaches can no longer damage things with their bites. @@ -3902,3 +3895,10 @@ id: 7904 time: '2025-02-05T14:46:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34619 +- author: hyperDelegate + changes: + - message: The Nuclear Operative Reinforcement Teleporter now costs 30TC (was 35). + type: Tweak + id: 7905 + time: '2025-02-05T14:54:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34675 From ece36cc74944afba065947df7d4af8c8f96a65ca Mon Sep 17 00:00:00 2001 From: Farrellka <104170263+Farrellka-dev@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:49:04 +0300 Subject: [PATCH 120/197] Elf Ears (#33572) * Elf Supremacy * Delete old ears * Review Fix --- Resources/Locale/en-US/markings/ears.ftl | 7 ++- .../Mobs/Customization/Markings/ears.yml | 57 +++++++++++++++++- .../Mobs/Customization/ears.rsi/long_ears.png | Bin 186 -> 0 bytes .../ears.rsi/long_ears_small.png | Bin 0 -> 753 bytes .../ears.rsi/long_ears_standard.png | Bin 0 -> 686 bytes .../Customization/ears.rsi/long_ears_tall.png | Bin 0 -> 826 bytes .../Customization/ears.rsi/long_ears_thin.png | Bin 0 -> 601 bytes .../ears.rsi/long_ears_upwards.png | Bin 0 -> 789 bytes .../Customization/ears.rsi/long_ears_wide.png | Bin 0 -> 675 bytes .../Mobs/Customization/ears.rsi/meta.json | 25 +++++++- 10 files changed, 84 insertions(+), 5 deletions(-) delete mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png create mode 100644 Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png diff --git a/Resources/Locale/en-US/markings/ears.ftl b/Resources/Locale/en-US/markings/ears.ftl index 62921f5e446..4c35ed9f418 100644 --- a/Resources/Locale/en-US/markings/ears.ftl +++ b/Resources/Locale/en-US/markings/ears.ftl @@ -1 +1,6 @@ -marking-HumanLongEars = Long Ears +marking-HumanLongEars = Long Ears Standard +marking-LongEarsWide = Long Ears Wide +marking-LongEarsSmall = Long Ears Small +marking-LongEarsUpwards = Long Ears Upwards +marking-LongEarsTall = Long Ears Tall +marking-LongEarsThin = Long Ears Thin diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/ears.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/ears.yml index 6e350880329..c32348b273d 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/ears.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/ears.yml @@ -2,9 +2,64 @@ id: HumanLongEars bodyPart: HeadTop markingCategory: HeadTop + forcedColoring: true + followSkinColor: true speciesRestriction: [Human, Dwarf] + sprites: + - sprite: Mobs/Customization/ears.rsi + state: long_ears_standard + +- type: marking + id: LongEarsWide + bodyPart: HeadTop + markingCategory: HeadTop forcedColoring: true followSkinColor: true + speciesRestriction: [Human] + sprites: + - sprite: Mobs/Customization/ears.rsi + state: long_ears_wide + +- type: marking + id: LongEarsSmall + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: true + followSkinColor: true + speciesRestriction: [Human, Dwarf] + sprites: + - sprite: Mobs/Customization/ears.rsi + state: long_ears_small + +- type: marking + id: LongEarsUpwards + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: true + followSkinColor: true + speciesRestriction: [Human] + sprites: + - sprite: Mobs/Customization/ears.rsi + state: long_ears_upwards + +- type: marking + id: LongEarsTall + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: true + followSkinColor: true + speciesRestriction: [Human] + sprites: + - sprite: Mobs/Customization/ears.rsi + state: long_ears_tall + +- type: marking + id: LongEarsThin + bodyPart: HeadTop + markingCategory: HeadTop + forcedColoring: true + followSkinColor: true + speciesRestriction: [Human, Dwarf] sprites: - sprite: Mobs/Customization/ears.rsi - state: long_ears + state: long_ears_thin diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears.png deleted file mode 100644 index 6779427f10a258cdba250d689807facf126133d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|N<3X0Ln`LH zy|t0^Z~za>h0{XvHm%>~or5|43Hd!eXHl3abh!GhqTk*r3Tc%G+iM@XMbNP*WrehM3)1LmDd+yzr{SV9` bs(u`kF4>WGs!jRi3Xp)OtDnm{r-UW|q1j2p diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_small.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cdebef00521c119c35fbefe0efc9c82d6b4b29 GIT binary patch literal 753 zcmVEX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`ULSWNx zf)4Io{0hE&*jm4WOZE&E(j}5kMhHzIAjic>3`7$Wwd()31@6sr?mc%r5&-;T?z086 z=|sbQ&x-HE^KtE-hdcjm-SRPZl5~1`-KoH8eq9aa>>|HOwrf&E7RHif+s6lT&eiTQ zGh59UlH>*>ueUCh^NYI6Wtf>HnIyH%-)OREF!B@yzI*+7t<`*?DDZndd^JB$QdN84 zoKv2pUzQI500000000000KZ=FQEDoj?TumxjWR>-p)s}65oCSd6L@m(^663x9YrW`w|K#7gt)R3%I|%k<@)8 j2LJ#700000fIsX7D^!sPg4vV500000NkvXXu0mjf7kgDr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_standard.png new file mode 100644 index 0000000000000000000000000000000000000000..38d7137e61b3d457bc55880eb9ae2caa0b210bd5 GIT binary patch literal 686 zcmV;f0#W^mP)EX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`ULb7kh-rFMN+8^##XzBzY&+k|tKySq^5YLQpf z)^Bv_?4i-6S+YI=00000000000Q|Jx^Ybi@#Np@-o)K8nm|2EVvN-BJqhHfk<^!IK zU}pd}w*YmnCd~)zh6ep06h)edN-J5U$>u(RB28qamE4~_erx~$00000006i>0AZ`i U|6;tX>;M1&07*qoM6N<$f&!T?2LJ#7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..f42a86613a91e271169c6539cca1b69bd1e56120 GIT binary patch literal 826 zcmV-A1I7G_P)EX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`UL?m{+ z>d?KPqAwpd#@)%q-629i2xRL?4+A}rr;CwTt#?Tyk^29wUha9x#pOAG=%g%8k;SQ$ zd`7Z3{TJ~803ss3Nn~*Z@CskVSvSW1ORCFx+mA> zzc0okL}7p^4E|hrai4at`|F-j80_NL6?^YH{QCHW&l}jTtNni{kH0;Q$4+Ra_${AB zok1VV=>!0jW2stBC+H0NwKgD+pUh{LaxyooHLNzuYU5oz;GXv%boJrs8SP#dxA%7kbNVJ5V70+!wMH_Z zc^6-*0Y5*7$CtN@YCwLCr%drgL_|bHL_|bHL_}BS8_B69Xc=)$qyPW_07*qoM6N<$ Ef=F$8X#fBK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_thin.png new file mode 100644 index 0000000000000000000000000000000000000000..a910e67f6d07167dd7bdcc25745d90da09a95c24 GIT binary patch literal 601 zcmV-f0;c_mP)EX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`UL>rFpo zZfx@b00000000=X?EbuK+K7nH_3v+Z{1*@rsi?}Vy_4J_*8@|;rGuZ&XFqd`$6Xz# n{UH{sW%8y0000000G>Dliy|+{59 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_upwards.png new file mode 100644 index 0000000000000000000000000000000000000000..8454708d9e41e25fcae454885b23a85f80053214 GIT binary patch literal 789 zcmV+w1M2*VP)EX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`UL#eG)o>TsHRYBl7zn^a&?*FZ|znA~>^!$3#!VmKU*ZFhIz;%xD zPtD%Dr@lYGq|Oc$b)7#0Y`&_>;U?Sf+T>5_6iw$diF{8)#8i};$oFJApLKcxZ2o4o zGx|vRN&A$p-)c00000006+n>E*rqz;m3m2+$EPzTdeOZ(((e7s2)h zG;L34)E{6~^$852Jf|l80hPBvd5}CwB@1Jdg|YP12-5mwW??K@7@IsvYcIa`Gr$g3 z^a#k+-K`nh39xgDe6LYwNTY?6Z->Xl%Tc4kkSE~d{jJf?0{{R300000aDjdRWC-8- TTJhfo00000NkvXXu0mjfU0HEx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png b/Resources/Textures/Mobs/Customization/ears.rsi/long_ears_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..2a643bf6c61c3eb38eddf9c80e635360a6a451ed GIT binary patch literal 675 zcmV;U0$lxxP)EX>4Tx04R}tkv&MmP!xqvQ^g_`1v`i+WT;MdQ4z;lg(6f4wL+^7CNKSiCJjl7 zi=*ILaPVib>fqw6tAnc`2>yULJ2)x2NQw6)g%&YBxV(?^-Z|WNA0RX;OtZS;fTr7K zI++l&xmB^}6(NK%Ks72e%b1g-6nxj$Jpz2ci}5V~dw;GzHE%H>AQH!!VcNtS#50?= z!FiuJ!b-AAd`>)JQiH^gTvt4P<6LxE;F%FKlb$Dz5R1hQRyvrKOpSP&II3zo)|5Tqat9cCGGtSBr6841C;;zg^i4Tn@D}J@^XAq%$LRx*p;@JFfP+I| zyhz#WKJN~7&h6hjt@-@`UL Date: Wed, 5 Feb 2025 16:50:11 +0000 Subject: [PATCH 121/197] 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 62a8da8bd7c..3569fe5ed04 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Cockroaches and mothroaches can no longer damage things with their bites. - type: Tweak - id: 7406 - time: '2024-09-19T22:15:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32221 - author: PopGamer46 changes: - message: The rat king's rats now follow you instead of idling when there is no @@ -3902,3 +3895,12 @@ id: 7905 time: '2025-02-05T14:54:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34675 +- author: Farrellka + changes: + - message: Removed the old long ears for human! + type: Remove + - message: Added more long (elf) ears for human! + type: Add + id: 7906 + time: '2025-02-05T16:49:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33572 From 7eb15610b3c8e40e3c1b20f77f47e2ecec5ef865 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Wed, 5 Feb 2025 11:48:28 -0800 Subject: [PATCH 122/197] Make hacking energy swords predicted (#34877) * Make hacking energy swords predicted * Fix up component, add dirty call * access * Dirty Entity * false --- .../Melee/EnergySword/EnergySwordComponent.cs | 28 ------------- .../Melee/EnergySword/EnergySwordComponent.cs | 40 +++++++++++++++++++ .../Melee/EnergySword/EnergySwordSystem.cs | 32 +++++++++------ 3 files changed, 59 insertions(+), 41 deletions(-) delete mode 100644 Content.Server/Weapons/Melee/EnergySword/EnergySwordComponent.cs create mode 100644 Content.Shared/Weapons/Melee/EnergySword/EnergySwordComponent.cs rename {Content.Server => Content.Shared}/Weapons/Melee/EnergySword/EnergySwordSystem.cs (53%) diff --git a/Content.Server/Weapons/Melee/EnergySword/EnergySwordComponent.cs b/Content.Server/Weapons/Melee/EnergySword/EnergySwordComponent.cs deleted file mode 100644 index 458c88af3ec..00000000000 --- a/Content.Server/Weapons/Melee/EnergySword/EnergySwordComponent.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace Content.Server.Weapons.Melee.EnergySword; - -[RegisterComponent] -internal sealed partial class EnergySwordComponent : Component -{ - [ViewVariables(VVAccess.ReadWrite), DataField("activatedColor"), AutoNetworkedField] - public Color ActivatedColor = Color.DodgerBlue; - - /// - /// A color option list for the random color picker. - /// - [DataField("colorOptions")] - public List ColorOptions = new() - { - Color.Tomato, - Color.DodgerBlue, - Color.Aqua, - Color.MediumSpringGreen, - Color.MediumOrchid - }; - - public bool Hacked = false; - /// - /// RGB cycle rate for hacked e-swords. - /// - [DataField("cycleRate")] - public float CycleRate = 1f; -} diff --git a/Content.Shared/Weapons/Melee/EnergySword/EnergySwordComponent.cs b/Content.Shared/Weapons/Melee/EnergySword/EnergySwordComponent.cs new file mode 100644 index 00000000000..ba84acb6170 --- /dev/null +++ b/Content.Shared/Weapons/Melee/EnergySword/EnergySwordComponent.cs @@ -0,0 +1,40 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Weapons.Melee.EnergySword; + +[RegisterComponent, NetworkedComponent, Access(typeof(EnergySwordSystem))] +[AutoGenerateComponentState] +public sealed partial class EnergySwordComponent : Component +{ + /// + /// What color the blade will be when activated. + /// + [DataField, AutoNetworkedField] + public Color ActivatedColor = Color.DodgerBlue; + + /// + /// A color option list for the random color picker. + /// + [DataField] + public List ColorOptions = new() + { + Color.Tomato, + Color.DodgerBlue, + Color.Aqua, + Color.MediumSpringGreen, + Color.MediumOrchid + }; + + /// + /// Whether the energy sword has been pulsed by a multitool, + /// causing the blade to cycle RGB colors. + /// + [DataField, AutoNetworkedField] + public bool Hacked; + + /// + /// RGB cycle rate for hacked e-swords. + /// + [DataField] + public float CycleRate = 1f; +} diff --git a/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs b/Content.Shared/Weapons/Melee/EnergySword/EnergySwordSystem.cs similarity index 53% rename from Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs rename to Content.Shared/Weapons/Melee/EnergySword/EnergySwordSystem.cs index c9be87c6231..7ca3de9cc5c 100644 --- a/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs +++ b/Content.Shared/Weapons/Melee/EnergySword/EnergySwordSystem.cs @@ -5,7 +5,7 @@ using Content.Shared.Tools.Systems; using Robust.Shared.Random; -namespace Content.Server.Weapons.Melee.EnergySword; +namespace Content.Shared.Weapons.Melee.EnergySword; public sealed class EnergySwordSystem : EntitySystem { @@ -22,18 +22,22 @@ public override void Initialize() SubscribeLocalEvent(OnInteractUsing); } // Used to pick a random color for the blade on map init. - private void OnMapInit(EntityUid uid, EnergySwordComponent comp, MapInitEvent args) + private void OnMapInit(Entity entity, ref MapInitEvent args) { - if (comp.ColorOptions.Count != 0) - comp.ActivatedColor = _random.Pick(comp.ColorOptions); + if (entity.Comp.ColorOptions.Count != 0) + { + entity.Comp.ActivatedColor = _random.Pick(entity.Comp.ColorOptions); + Dirty(entity); + } - if (!TryComp(uid, out AppearanceComponent? appearanceComponent)) + if (!TryComp(entity, out AppearanceComponent? appearanceComponent)) return; - _appearance.SetData(uid, ToggleableLightVisuals.Color, comp.ActivatedColor, appearanceComponent); + + _appearance.SetData(entity, ToggleableLightVisuals.Color, entity.Comp.ActivatedColor, appearanceComponent); } - // Used to make the make the blade multicolored when using a multitool on it. - private void OnInteractUsing(EntityUid uid, EnergySwordComponent comp, InteractUsingEvent args) + // Used to make the blade multicolored when using a multitool on it. + private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) { if (args.Handled) return; @@ -42,14 +46,16 @@ private void OnInteractUsing(EntityUid uid, EnergySwordComponent comp, InteractU return; args.Handled = true; - comp.Hacked = !comp.Hacked; + entity.Comp.Hacked = !entity.Comp.Hacked; - if (comp.Hacked) + if (entity.Comp.Hacked) { - var rgb = EnsureComp(uid); - _rgbSystem.SetCycleRate(uid, comp.CycleRate, rgb); + var rgb = EnsureComp(entity); + _rgbSystem.SetCycleRate(entity, entity.Comp.CycleRate, rgb); } else - RemComp(uid); + RemComp(entity); + + Dirty(entity); } } From 8cbead85492ebaf7144147aaf5d9e09efe6dd29e Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Wed, 5 Feb 2025 18:12:07 -0500 Subject: [PATCH 123/197] Sec Balance Part 1: Buffs Disabler and Disabler SMG (#34890) * Increases Disabler Bolt to 47 stamina damage per. Increases fire rate to 3 and lowers shot cost by 50 for practice and disabler * lowers stam per shot to 40 * increases disabler proj speed to 35 * ACTUALLY 4 shot * Reverts disabler projectile to be 33 stamina damage per again. decreased disabler fire rate to 2.5 and increased projectile speed to 35. decrease disabler smg fire rate to 3.5 * Fire rate back down to 2 --- .../Objects/Weapons/Guns/Battery/battery_guns.yml | 9 +++++---- .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 722e9d01ed8..405dac0897f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -446,11 +446,12 @@ price: 100 - type: Gun fireRate: 2 + projectileSpeed: 35 # any higher and this causes issues in lag soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser2.ogg - type: ProjectileBatteryAmmoProvider proto: BulletDisablerPractice - fireCost: 100 + fireCost: 50 - type: Tag tags: - Taser @@ -479,7 +480,7 @@ - Belt - type: ProjectileBatteryAmmoProvider proto: BulletDisabler - fireCost: 100 + fireCost: 50 - type: GuideHelp guides: - Security @@ -506,7 +507,7 @@ shader: unshaded - type: Gun selectedMode: FullAuto - fireRate: 4 + fireRate: 4.5 availableModes: - SemiAuto - FullAuto @@ -514,7 +515,7 @@ path: /Audio/Weapons/Guns/Gunshots/taser2.ogg - type: ProjectileBatteryAmmoProvider proto: BulletDisablerSmg - fireCost: 33 + fireCost: 25 - type: MagazineVisuals magState: mag steps: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index d91623e7d5f..bc9789fa77f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -249,7 +249,7 @@ fly-by: *flybyfixture - type: Ammo - type: StaminaDamageOnCollide - damage: 30 + damage: 33 - type: Projectile impactEffect: BulletImpactEffectDisabler damage: From 33b5311873afe3ff207f8f8800c27b9e9a8b07d2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 5 Feb 2025 23:13:15 +0000 Subject: [PATCH 124/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3569fe5ed04..24968497701 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: PopGamer46 - changes: - - message: The rat king's rats now follow you instead of idling when there is no - one to attack during the CheeseEm order - type: Tweak - id: 7407 - time: '2024-09-19T23:27:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32181 - author: JIPDawg changes: - message: Small Hydraulic clamp now correctly consumes 2% battery instead of recharging @@ -3904,3 +3896,12 @@ id: 7906 time: '2025-02-05T16:49:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33572 +- author: keronshb + changes: + - message: Disabler - decreased fire cost, increased projectile speed. + type: Tweak + - message: Disabler SMG - decreased fire cost, increased fire rate. + type: Tweak + id: 7907 + time: '2025-02-05T23:12:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34890 From 3606f779b40e83a95a066ace4e9061a577f4237b Mon Sep 17 00:00:00 2001 From: Palladinium Date: Thu, 6 Feb 2025 16:10:21 +1100 Subject: [PATCH 125/197] Add air alarm admin logs (#33426) --- .../Atmos/Monitor/Systems/AirAlarmSystem.cs | 20 +++++ .../Monitor/Systems/AtmosMonitoringSystem.cs | 56 ++++++++++++++ .../Unary/EntitySystems/GasVentPumpSystem.cs | 41 ++++++++++ .../EntitySystems/GasVentScrubberSystem.cs | 40 ++++++++++ Content.Shared.Database/LogType.cs | 5 ++ .../Atmos/Monitor/AtmosAlarmThreshold.cs | 75 ++++++++++++++++++- 6 files changed, 236 insertions(+), 1 deletion(-) diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index 63dbb19a571..0ed91a9bc86 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -9,10 +9,12 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; +using Content.Shared.Administration.Logs; using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Monitor.Components; using Content.Shared.Atmos.Piping.Unary.Components; +using Content.Shared.Database; using Content.Shared.DeviceLinking; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Systems; @@ -37,6 +39,7 @@ namespace Content.Server.Atmos.Monitor.Systems; public sealed class AirAlarmSystem : EntitySystem { [Dependency] private readonly AccessReaderSystem _access = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!; [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNet = default!; @@ -296,6 +299,7 @@ private void OnUpdateAlarmMode(EntityUid uid, AirAlarmComponent component, AirAl addr = netConn.Address; } + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} changed {ToPrettyString(uid)} mode to {args.Mode}"); SetMode(uid, addr, args.Mode, false); } else @@ -307,15 +311,26 @@ private void OnUpdateAlarmMode(EntityUid uid, AirAlarmComponent component, AirAl private void OnUpdateAutoMode(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAutoModeMessage args) { component.AutoMode = args.Enabled; + + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} changed {ToPrettyString(uid)} auto mode to {args.Enabled}"); UpdateUI(uid, component); } private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmThresholdMessage args) { if (AccessCheck(uid, args.Actor, component)) + { + if (args.Gas != null) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} changed {args.Address} {args.Gas} {args.Type} threshold using {ToPrettyString(uid)}"); + else + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} changed {args.Address} {args.Type} threshold using {ToPrettyString(uid)}"); + SetThreshold(uid, args.Address, args.Type, args.Threshold, args.Gas); + } else + { UpdateUI(uid, component); + } } private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateDeviceDataMessage args) @@ -323,6 +338,8 @@ private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirA if (AccessCheck(uid, args.Actor, component) && _deviceList.ExistsInDeviceList(uid, args.Address)) { + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} changed {args.Address} settings using {ToPrettyString(uid)}"); + SetDeviceData(uid, args.Address, args.Data); } else @@ -344,6 +361,7 @@ private void OnCopyDeviceData(EntityUid uid, AirAlarmComponent component, AirAla case GasVentPumpData ventData: foreach (string addr in component.VentData.Keys) { + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} copied settings to vent {addr}"); SetData(uid, addr, args.Data); } break; @@ -351,6 +369,7 @@ private void OnCopyDeviceData(EntityUid uid, AirAlarmComponent component, AirAla case GasVentScrubberData scrubberData: foreach (string addr in component.ScrubberData.Keys) { + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(args.Actor)} copied settings to scrubber {addr}"); SetData(uid, addr, args.Data); } break; @@ -379,6 +398,7 @@ private bool AccessCheck(EntityUid uid, EntityUid? user, AirAlarmComponent? comp if (!_access.IsAllowed(user.Value, uid, reader)) { _popup.PopupEntity(Loc.GetString("air-alarm-ui-access-denied"), user.Value, user.Value); + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Low, $"{ToPrettyString(user)} attempted to access {ToPrettyString(uid)} without access"); return false; } diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs index 3805c012b7f..99cf0109bbb 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs @@ -9,9 +9,11 @@ using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Administration.Logs; using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Piping.Components; +using Content.Shared.Database; using Content.Shared.DeviceNetwork; using Content.Shared.Power; using Content.Shared.Tag; @@ -25,6 +27,7 @@ namespace Content.Server.Atmos.Monitor.Systems; // a danger), and atmos (which triggers based on set thresholds). public sealed class AtmosMonitorSystem : EntitySystem { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosDeviceSystem _atmosDeviceSystem = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetSystem = default!; @@ -393,21 +396,74 @@ public void SetThreshold(EntityUid uid, AtmosMonitorThresholdType type, AtmosAla if (!Resolve(uid, ref monitor)) return; + // Used for logging after the switch statement + string logPrefix = ""; + string logValueSuffix = ""; + AtmosAlarmThreshold? logPreviousThreshold = null; + switch (type) { case AtmosMonitorThresholdType.Pressure: + logPrefix = "pressure"; + logValueSuffix = "kPa"; + logPreviousThreshold = monitor.PressureThreshold; + monitor.PressureThreshold = threshold; break; case AtmosMonitorThresholdType.Temperature: + logPrefix = "temperature"; + logValueSuffix = "K"; + logPreviousThreshold = monitor.TemperatureThreshold; + monitor.TemperatureThreshold = threshold; break; case AtmosMonitorThresholdType.Gas: if (gas == null || monitor.GasThresholds == null) return; + + logPrefix = ((Gas) gas).ToString(); + logValueSuffix = "kPa"; + monitor.GasThresholds.TryGetValue((Gas) gas, out logPreviousThreshold); + monitor.GasThresholds[(Gas) gas] = threshold; break; } + // Admin log each change separately rather than logging the whole state + if (logPreviousThreshold != null) + { + if (threshold.Ignore != logPreviousThreshold.Ignore) + { + string enabled = threshold.Ignore ? "disabled" : "enabled"; + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} {logPrefix} thresholds {enabled}" + ); + } + + foreach (var change in threshold.GetChanges(logPreviousThreshold)) + { + if (change.Current.Enabled != change.Previous?.Enabled) + { + string enabled = change.Current.Enabled ? "enabled" : "disabled"; + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} {logPrefix} {change.Type} {enabled}" + ); + } + + if (change.Current.Value != change.Previous?.Value) + { + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} {logPrefix} {change.Type} changed from {change.Previous?.Value} {logValueSuffix} to {change.Current.Value} {logValueSuffix}" + ); + } + } + } } /// diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index 23016debeb6..c58d6eb14bc 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -9,6 +9,7 @@ using Content.Server.DeviceNetwork.Systems; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; +using Content.Shared.Administration.Logs; using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Piping.Components; @@ -16,6 +17,7 @@ using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Atmos.Visuals; using Content.Shared.Audio; +using Content.Shared.Database; using Content.Shared.DeviceNetwork; using Content.Shared.DoAfter; using Content.Shared.Examine; @@ -30,6 +32,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems [UsedImplicitly] public sealed class GasVentPumpSystem : EntitySystem { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetSystem = default!; [Dependency] private readonly DeviceLinkSystem _signalSystem = default!; @@ -232,6 +235,44 @@ private void OnPacketRecv(EntityUid uid, GasVentPumpComponent component, DeviceN if (!args.Data.TryGetValue(DeviceNetworkConstants.CmdSetState, out GasVentPumpData? setData)) break; + var previous = component.ToAirAlarmData(); + + if (previous.Enabled != setData.Enabled) + { + string enabled = setData.Enabled ? "enabled" : "disabled" ; + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} {enabled}"); + } + + if (previous.PumpDirection != setData.PumpDirection) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} direction changed to {setData.PumpDirection}"); + + if (previous.PressureChecks != setData.PressureChecks) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} pressure check changed to {setData.PressureChecks}"); + + if (previous.ExternalPressureBound != setData.ExternalPressureBound) + { + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} external pressure bound changed from {previous.ExternalPressureBound} kPa to {setData.ExternalPressureBound} kPa" + ); + } + + if (previous.InternalPressureBound != setData.InternalPressureBound) + { + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} internal pressure bound changed from {previous.InternalPressureBound} kPa to {setData.InternalPressureBound} kPa" + ); + } + + if (previous.PressureLockoutOverride != setData.PressureLockoutOverride) + { + string enabled = setData.PressureLockoutOverride ? "enabled" : "disabled" ; + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} pressure lockout override {enabled}"); + } + component.FromAirAlarmData(setData); UpdateState(uid, component); diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs index a633d29e41d..02075353981 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs @@ -10,12 +10,14 @@ using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; +using Content.Shared.Administration.Logs; using Content.Shared.Atmos; using Content.Shared.Atmos.Piping.Unary.Visuals; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Piping.Components; using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Audio; +using Content.Shared.Database; using Content.Shared.DeviceNetwork; using Content.Shared.Power; using Content.Shared.Tools.Systems; @@ -27,6 +29,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems [UsedImplicitly] public sealed class GasVentScrubberSystem : EntitySystem { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetSystem = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; @@ -163,6 +166,43 @@ private void OnPacketRecv(EntityUid uid, GasVentScrubberComponent component, Dev if (!args.Data.TryGetValue(DeviceNetworkConstants.CmdSetState, out GasVentScrubberData? setData)) break; + var previous = component.ToAirAlarmData(); + + if (previous.Enabled != setData.Enabled) + { + string enabled = setData.Enabled ? "enabled" : "disabled" ; + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} {enabled}"); + } + + // TODO: IgnoreAlarms? + + if (previous.PumpDirection != setData.PumpDirection) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} direction changed to {setData.PumpDirection}"); + + // TODO: This is iterating through both sets, it could probably be faster but they're both really small sets anyways + foreach (Gas gas in previous.FilterGases) + if (!setData.FilterGases.Contains(gas)) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} {gas} filtering disabled"); + + foreach (Gas gas in setData.FilterGases) + if (!previous.FilterGases.Contains(gas)) + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} {gas} filtering enabled"); + + if (previous.VolumeRate != setData.VolumeRate) + { + _adminLogger.Add( + LogType.AtmosDeviceSetting, + LogImpact.Medium, + $"{ToPrettyString(uid)} volume rate changed from {previous.VolumeRate} L to {setData.VolumeRate} L" + ); + } + + if (previous.WideNet != setData.WideNet) + { + string enabled = setData.WideNet ? "enabled" : "disabled" ; + _adminLogger.Add(LogType.AtmosDeviceSetting, LogImpact.Medium, $"{ToPrettyString(uid)} WideNet {enabled}"); + } + component.FromAirAlarmData(setData); UpdateState(uid, component); diff --git a/Content.Shared.Database/LogType.cs b/Content.Shared.Database/LogType.cs index 562d02a102b..204b43f153b 100644 --- a/Content.Shared.Database/LogType.cs +++ b/Content.Shared.Database/LogType.cs @@ -446,4 +446,9 @@ public enum LogType /// A player interacted with a PDA or its cartridge component /// PdaInteract = 96, + + /// + /// An atmos networked device (such as a vent or pump) has had its settings changed, usually through an air alarm + /// + AtmosDeviceSetting = 97, } diff --git a/Content.Shared/Atmos/Monitor/AtmosAlarmThreshold.cs b/Content.Shared/Atmos/Monitor/AtmosAlarmThreshold.cs index c37c70a3abe..f80a887b4ff 100644 --- a/Content.Shared/Atmos/Monitor/AtmosAlarmThreshold.cs +++ b/Content.Shared/Atmos/Monitor/AtmosAlarmThreshold.cs @@ -253,10 +253,57 @@ public void SetLimit(AtmosMonitorLimitType whichLimit, float limit) break; } } + + /// + /// Iterates through the changes that these threshold settings would make from a + /// previous instance. Basically, diffs the two settings. + /// + public IEnumerable GetChanges(AtmosAlarmThreshold previous) + { + if (LowerBound != previous.LowerBound) + yield return new AtmosAlarmThresholdChange(AtmosMonitorLimitType.LowerDanger, previous.LowerBound, LowerBound); + + if (LowerWarningBound != previous.LowerWarningBound) + yield return new AtmosAlarmThresholdChange(AtmosMonitorLimitType.LowerWarning, previous.LowerWarningBound, LowerWarningBound); + + if (UpperBound != previous.UpperBound) + yield return new AtmosAlarmThresholdChange(AtmosMonitorLimitType.UpperDanger, previous.UpperBound, UpperBound); + + if (UpperWarningBound != previous.UpperWarningBound) + yield return new AtmosAlarmThresholdChange(AtmosMonitorLimitType.UpperWarning, previous.UpperWarningBound, UpperWarningBound); + } +} + +/// +/// A change of a single value between two AtmosAlarmThreshold, for a given AtmosMonitorLimitType +/// +public readonly struct AtmosAlarmThresholdChange +{ + /// + /// The type of change between the two threshold sets + /// + public readonly AtmosMonitorLimitType Type; + + /// + /// The value in the old threshold set + /// + public readonly AlarmThresholdSetting? Previous; + + /// + /// The value in the new threshold set + /// + public readonly AlarmThresholdSetting Current; + + public AtmosAlarmThresholdChange(AtmosMonitorLimitType type, AlarmThresholdSetting? previous, AlarmThresholdSetting current) + { + Type = type; + Previous = previous; + Current = current; + } } [DataDefinition, Serializable] -public readonly partial struct AlarmThresholdSetting +public readonly partial struct AlarmThresholdSetting: IEquatable { [DataField("enabled")] public bool Enabled { get; init; } = true; @@ -289,6 +336,32 @@ public AlarmThresholdSetting WithEnabled(bool enabled) { return this with {Enabled = enabled}; } + + public bool Equals(AlarmThresholdSetting other) + { + if (Enabled != other.Enabled) + return false; + + if (Value != other.Value) + return false; + + return true; + } + + public static bool operator ==(AlarmThresholdSetting lhs, AlarmThresholdSetting rhs) + { + return lhs.Equals(rhs); + } + + public static bool operator !=(AlarmThresholdSetting lhs, AlarmThresholdSetting rhs) + { + return !lhs.Equals(rhs); + } + + public override int GetHashCode() + { + return HashCode.Combine(Enabled, Value); + } } public enum AtmosMonitorThresholdBound From 900f8a561617d44d806559a2711146103704ee46 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 6 Feb 2025 05:11:29 +0000 Subject: [PATCH 126/197] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 138f1a0e898..b2a10e19cee 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -744,5 +744,13 @@ Entries: id: 92 time: '2025-02-02T20:00:27.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34824 +- author: Palladinium + changes: + - message: Added atmospherics device information (air alarms, vents, scrubbers) + to admin logs + type: Add + id: 93 + time: '2025-02-06T05:10:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33426 Name: Admin Order: 3 From 65a0b89d2e71eaa7184a1b19ee763fcc69d3c636 Mon Sep 17 00:00:00 2001 From: centcomofficer24 Date: Thu, 6 Feb 2025 05:49:41 +0000 Subject: [PATCH 127/197] Added Genderqueer pin! (Properly this time.) (#34561) * Added Genderqueer pin! (Properly this time.) * Update meta.json --- .../Catalog/VendingMachines/Inventories/pride.yml | 1 + .../Prototypes/Entities/Clothing/Neck/pins.yml | 11 +++++++++++ .../Markers/Spawners/Random/maintenance.yml | 1 + .../Loadouts/Miscellaneous/trinkets.yml | 6 ++++++ Resources/Prototypes/Loadouts/loadout_groups.yml | 1 + .../Neck/Misc/pins.rsi/gender-equipped-NECK.png | Bin 0 -> 327 bytes .../Clothing/Neck/Misc/pins.rsi/gender.png | Bin 0 -> 273 bytes .../Clothing/Neck/Misc/pins.rsi/meta.json | 9 ++++++++- 8 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender-equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender.png diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml index c1482ea3f21..f0d7c48c8a5 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml @@ -11,6 +11,7 @@ ClothingNeckNonBinaryPin: 3 ClothingNeckPansexualPin: 3 ClothingNeckOmnisexualPin: 3 + ClothingNeckGenderqueerPin: 3 ClothingNeckTransPin: 3 ClothingNeckAutismPin: 3 ClothingNeckGoldAutismPin: 3 diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index 155bb9a82f3..a402791f5a7 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -122,6 +122,17 @@ - type: Clothing equippedPrefix: omni +- type: entity + parent: ClothingNeckPinBase + id: ClothingNeckGenderqueerPin + name: genderqueer pin + description: be crime, do gender + components: + - type: Sprite + state: gender + - type: Clothing + equippedPrefix: gender + - type: entity parent: ClothingNeckPinBase id: ClothingNeckTransPin diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 1c30f70553c..fba9d40b1eb 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -151,6 +151,7 @@ - id: ClothingNeckNonBinaryPin - id: ClothingNeckPansexualPin - id: ClothingNeckOmnisexualPin + - id: ClothingNeckGenderqueerPin - id: ClothingNeckTransPin - id: ClothingNeckAutismPin - id: ClothingNeckGoldAutismPin diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 85b9c33ef7b..514679465a9 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -160,6 +160,12 @@ back: - ClothingNeckOmnisexualPin +- type: loadout + id: ClothingNeckGenderqueerPin + storage: + back: + - ClothingNeckGenderqueerPin + - type: loadout id: ClothingNeckTransPin storage: diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 8bd690756f9..395fe073637 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -28,6 +28,7 @@ - ClothingNeckNonBinaryPin - ClothingNeckPansexualPin - ClothingNeckOmnisexualPin + - ClothingNeckGenderqueerPin - ClothingNeckTransPin - ClothingNeckAutismPin - ClothingNeckGoldAutismPin diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender-equipped-NECK.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender-equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..b61709256750cfd963c750d40fb608ab7603af06 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVC405aSW-5dpp%p@Q{N5i#bz8 zq1c2%O_>kRoB3HDH2eRvSWslNK_HI9!sSlLs%6`h6O6umY15o!AN=XQJi~#8CoC3? zPnbRkf@v_j=RfzJ`1${CEAgp5s|U-p*JyxsyA&L1IO$4BHJ~ uHN76jqy=S#5((xrcNkDt@tk`N_WX4sjz>=l90i6CgQu&X%Q~loCI$dP1b^iK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gender.png new file mode 100644 index 0000000000000000000000000000000000000000..10680e55ff2afbce6e717b757cba1a1ae1fcf996 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ>z*!-ArbD$DG~_>EDn4#?y*WR zVR3T?5^Z@LGB+xI+ZSoRda&MWTDr%zmYk2X-38P;PAJZCTIGDAh~Z39nO?_H`~8YC zPQmOAHT;`o(hRFy*@`$cOgsu%JQWLGTv+&j+qP{L+7}MD^Bdo|c~dY~?;@AuHohIq zNnASrx=(*H*y~yC{ M>gTe~DWQo00O{pn!2kdN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json index bb1013b21a0..78cf15fc4e8 100644 --- a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json +++ b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "PixelTK leaves his mark on upstream, BackeTako made the gay, autism pins by Terraspark, omnisexual pin by juliangiebel", + "copyright": "PixelTK leaves his mark on upstream, BackeTako made the gay, autism pins by Terraspark, omnisexual pin by juliangiebel, genderqueer by centcomofficer24", "size": { "x": 32, "y": 32 @@ -97,6 +97,13 @@ { "name": "omni-equipped-NECK", "directions": 4 + }, + { + "name": "gender" + }, + { + "name": "gender-equipped-NECK", + "directions": 4 } ] } From 9d3b67ffd364741c7e1b70c223f56f30eee20203 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 6 Feb 2025 05:50:48 +0000 Subject: [PATCH 128/197] 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 24968497701..e30745b0ad6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: JIPDawg - changes: - - message: Small Hydraulic clamp now correctly consumes 2% battery instead of recharging - the battery by 2% - type: Fix - id: 7408 - time: '2024-09-20T04:09:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32320 - author: clinux changes: - message: Added the psychologist's stamp. Prescribe treatments for your less mentally @@ -3905,3 +3897,10 @@ id: 7907 time: '2025-02-05T23:12:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34890 +- author: centcomofficer24 + changes: + - message: Added a genderqueer pin! + type: Add + id: 7908 + time: '2025-02-06T05:49:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34561 From 44274db2817105253be69882ed0793225242faa2 Mon Sep 17 00:00:00 2001 From: SG6732 <151011904+SG6732@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:45:33 +0900 Subject: [PATCH 129/197] Swapped butter w/ olive oil for making spaghetti (#34904) * > Swapped the butter in boiled spaghetti with olive oil * Update meal_recipes.yml --------- Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com> --- Resources/Prototypes/Recipes/Cooking/meal_recipes.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index abfd0fd321a..a33f78cac26 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -660,8 +660,7 @@ reagents: Flour: 15 Egg: 6 - solids: - FoodButter: 1 + OilOlive: 5 - type: microwaveMealRecipe id: RecipePastaTomato From 614f7b31db2bb66c75fe67e7a34cef3963d17371 Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Thu, 6 Feb 2025 07:14:55 -0800 Subject: [PATCH 130/197] HOTFIX: Fix lineedit focus (#34621) * Test entered tree fix * Use Opened override * Fix keyboard focus on window open for DialogWindow This affects Phone, Pray, Rename, and multiple other admin verbs. * Clean up --- Content.Client/Labels/UI/HandLabelerWindow.xaml.cs | 7 ++++++- .../UserInterface/Controls/DialogWindow.xaml.cs | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs b/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs index 7a0627b3e23..528e227f552 100644 --- a/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs +++ b/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs @@ -33,8 +33,13 @@ public HandLabelerWindow() _focused = false; LabelLineEdit.Text = _label; }; + } - // Give the editor keybard focus, since that's the only + protected override void Opened() + { + base.Opened(); + + // Give the editor keyboard focus, since that's the only // thing the user will want to be doing with this UI LabelLineEdit.GrabKeyboardFocus(); } diff --git a/Content.Client/UserInterface/Controls/DialogWindow.xaml.cs b/Content.Client/UserInterface/Controls/DialogWindow.xaml.cs index 733dbe32658..d831f602477 100644 --- a/Content.Client/UserInterface/Controls/DialogWindow.xaml.cs +++ b/Content.Client/UserInterface/Controls/DialogWindow.xaml.cs @@ -87,9 +87,6 @@ public DialogWindow(string title, List entries, bool ok = true Prompts.AddChild(box); } - // Grab keyboard focus for the first dialog entry - _promptLines[0].Item2.GrabKeyboardFocus(); - OkButton.OnPressed += _ => Confirm(); CancelButton.OnPressed += _ => @@ -110,6 +107,14 @@ public DialogWindow(string title, List entries, bool ok = true OpenCentered(); } + protected override void Opened() + { + base.Opened(); + + // Grab keyboard focus for the first dialog entry + _promptLines[0].Item2.GrabKeyboardFocus(); + } + private void Confirm() { var results = new Dictionary(); From 3763bd355ff02268f7096585ef50b79f621bca6a Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Thu, 6 Feb 2025 19:42:57 +0100 Subject: [PATCH 131/197] cleanup not needed locale string (#34922) * cleanup not needed locale string * Update Resources/Prototypes/Actions/types.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Locale/en-US/implant/implant.ftl | 3 --- Resources/Prototypes/Actions/types.yml | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Resources/Locale/en-US/implant/implant.ftl b/Resources/Locale/en-US/implant/implant.ftl index 813ed3e7a98..073757f53c7 100644 --- a/Resources/Locale/en-US/implant/implant.ftl +++ b/Resources/Locale/en-US/implant/implant.ftl @@ -17,9 +17,6 @@ implanter-label = [color=green]{$implantName}[/color] implanter-contained-implant-text = [color=green]{$desc}[/color] -action-name-toggle-fake-mindshield = [color=green]Toggle Fake Mindshield[/color] -action-description-toggle-fake-mindshield = Turn the Fake Mindshield implants transmission on/off - ## Implant Popups scramble-implant-activated-popup = Your appearance shifts and changes! diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index c0ee7e41ee2..47800a5154b 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -331,8 +331,8 @@ - type: entity id: FakeMindShieldToggleAction - name: action-name-toggle-fake-mindshield - description: action-description-toggle-fake-mindshield + name: '[color=green]Toggle Fake Mindshield[/color]' + description: Turn the Fake Mindshield implant's transmission on/off components: - type: InstantAction icon: { sprite: Interface/Actions/actions_fakemindshield.rsi, state: icon } From 30adb6fca6593f7dd1e73620bfd5231f27aaf083 Mon Sep 17 00:00:00 2001 From: 12rabbits <53499656+12rabbits@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:09:59 -0800 Subject: [PATCH 132/197] DNA scrambler examine fixes (#34920) * Remove custom character description after using DNA scrambler * Mark grammar as dirty when updating identity * Update Content.Server/Implants/SubdermalImplantSystem.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/IdentityManagement/IdentitySystem.cs | 2 ++ Content.Server/Implants/SubdermalImplantSystem.cs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Content.Server/IdentityManagement/IdentitySystem.cs b/Content.Server/IdentityManagement/IdentitySystem.cs index ff6901f5a92..d90bf6021df 100644 --- a/Content.Server/IdentityManagement/IdentitySystem.cs +++ b/Content.Server/IdentityManagement/IdentitySystem.cs @@ -103,6 +103,8 @@ private void UpdateIdentityInfo(EntityUid uid, IdentityComponent identity) // If presumed name is null and we're using that, we set proper noun to be false ("the old woman") if (name != representation.TrueName && representation.PresumedName == null) identityGrammar.ProperNoun = false; + + Dirty(ident, identityGrammar); } if (name == Name(ident)) diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index 9d074cec745..cb41e55ba55 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -22,6 +22,7 @@ using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Systems; using Content.Server.IdentityManagement; +using Content.Server.DetailExaminable; using Content.Shared.Store.Components; using Robust.Shared.Collections; using Robust.Shared.Map.Components; @@ -225,6 +226,7 @@ private void OnDnaScramblerImplant(EntityUid uid, SubdermalImplantComponent comp { fingerprint.Fingerprint = _forensicsSystem.GenerateFingerprint(); } + RemComp(ent); // remove MRP+ custom description if one exists _identity.QueueIdentityUpdate(ent); // manually queue identity update since we don't raise the event _popup.PopupEntity(Loc.GetString("scramble-implant-activated-popup"), ent, ent); } From 004ffdd5efe44d8d2c1669e1e0ee86d33e4c3bf3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 6 Feb 2025 19:11:06 +0000 Subject: [PATCH 133/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 46 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e30745b0ad6..27f13823d14 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,27 +1,4 @@ Entries: -- author: clinux - changes: - - message: Added the psychologist's stamp. Prescribe treatments for your less mentally - sane crew! - type: Add - id: 7409 - time: '2024-09-20T14:42:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31881 -- author: saga3152 - changes: - - message: You can now make vodka and soda water. - type: Add - id: 7410 - time: '2024-09-20T22:27:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32252 -- author: goet - changes: - - message: Hides character sprite in health analyzer window if the scan becomes - inactive. - type: Fix - id: 7411 - time: '2024-09-21T05:54:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31879 - author: TGRCDev changes: - message: Station maps now have a directory for finding specific departments and @@ -3904,3 +3881,26 @@ id: 7908 time: '2025-02-06T05:49:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34561 +- author: SG6732 + changes: + - message: Swapped the stick of butter with 5 u of olive oil in the boiled spaghetti + recipe. + type: Tweak + id: 7909 + time: '2025-02-06T11:45:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34904 +- author: deltanedas + changes: + - message: Fixed huds showing for chameleon projector users. + type: Fix + id: 7910 + time: '2025-02-06T13:45:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34825 +- author: 12rabbits + changes: + - message: Activating a DNA scrambler implant no longer retains the previous identity's + description. + type: Fix + id: 7911 + time: '2025-02-06T19:09:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34920 From 731814408d7ee030a0865f63036cbee7a295aad8 Mon Sep 17 00:00:00 2001 From: GrownSamoyedDog <61863648+GrownSamoyedDog@users.noreply.github.com> Date: Thu, 6 Feb 2025 12:16:57 -0700 Subject: [PATCH 134/197] Guide Control Button Now Redirects Properly (#34914) fixed control button - a single line of code --- Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml b/Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml index 72a3d63c6f6..74545236383 100644 --- a/Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml +++ b/Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml @@ -2,7 +2,7 @@ # Controls You can change your keybinds at any time here: - + ## Movement You can move around the game world by using [color=yellow][bold][keybind="MoveUp"][keybind="MoveLeft"][keybind="MoveDown"][keybind="MoveRight"][/bold][/color]. From ee4f6a4c801f575fdabe07a43bb6e47acc8369f3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 6 Feb 2025 19:18:04 +0000 Subject: [PATCH 135/197] 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 27f13823d14..8fdd080bc8c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: TGRCDev - changes: - - message: Station maps now have a directory for finding specific departments and - areas. - type: Add - id: 7412 - time: '2024-09-21T07:33:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31156 - author: TheShuEd changes: - message: Cores from floral anomalies are now seeds for hydroponics! @@ -3904,3 +3896,10 @@ id: 7911 time: '2025-02-06T19:09:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34920 +- author: GrownSamoyedDog + changes: + - message: Control Button in Guidebook has been redirected to Controls properly + type: Fix + id: 7912 + time: '2025-02-06T19:16:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34914 From 99968b13e40ecd258f5b37c3a5d900b3ccfa3a1c Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:07:26 -0500 Subject: [PATCH 136/197] Buff the Combat Bakery Kit uplink item (#34927) * Buff the Combat Bakery Kit uplink item * whitespace --- Resources/Prototypes/Catalog/uplink_catalog.yml | 5 ++++- .../Prototypes/Entities/Objects/Weapons/Melee/baguette.yml | 1 + .../Entities/Objects/Weapons/Throwable/croissant.yml | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index a5bf764e093..31c155ad8ed 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -2122,8 +2122,11 @@ description: uplink-combat-bakery-desc icon: { sprite: Objects/Consumable/Food/Baked/bread.rsi, state: baguette} productEntity: CombatBakeryKit + discountCategory: usualDiscounts + discountDownTo: + Telecrystal: 2 cost: - Telecrystal: 6 + Telecrystal: 4 categories: - UplinkJob conditions: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml index 25830216fff..125184d1dc5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml @@ -4,6 +4,7 @@ suffix: Weapon components: - type: MeleeWeapon + attackRate: 1.4 wideAnimationRotation: -120 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/croissant.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/croissant.yml index f5cfd35b1d4..fa0d4b76728 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/croissant.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/croissant.yml @@ -17,7 +17,10 @@ sound: /Audio/Weapons/star_hit.ogg - type: LandAtCursor - type: DamageOtherOnHit + ignoreResistances: true damage: types: Slash: 5 Piercing: 10 + - type: ThrowingAngle + angularVelocity: true # spins From fc05a0ccae8a907f9c8f1334f585c7d65bb19bd8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 6 Feb 2025 23:08:33 +0000 Subject: [PATCH 137/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8fdd080bc8c..ca81778dc40 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: Cores from floral anomalies are now seeds for hydroponics! - type: Add - id: 7413 - time: '2024-09-21T19:54:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31987 - author: Plykiya changes: - message: The rat king is now capable of butchering things, like animals. @@ -3903,3 +3896,11 @@ id: 7912 time: '2025-02-06T19:16:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34914 +- author: themias + changes: + - message: Combat bakery kit price is reduced from 6TC to 4TC, increased baguette + sword attack speed, throwing croissants ignore armor + type: Tweak + id: 7913 + time: '2025-02-06T23:07:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34927 From 8ae4c36e34463be5300c2fd6dd7a7e703b0d1fd0 Mon Sep 17 00:00:00 2001 From: TemporalOroboros Date: Fri, 7 Feb 2025 03:49:22 -0800 Subject: [PATCH 138/197] Purge uses of TransformComponent.AttachToGridOrMap (#34940) Switches over all extant uses of TransformComponent.AttachToGridOrMap to use SharedTransformSystem.AttachToGridOrMap --- Content.Server/Administration/Commands/WarpCommand.cs | 3 ++- Content.Server/Construction/ConstructionSystem.Graph.cs | 6 +++--- Content.Shared/Construction/SharedConstructionSystem.cs | 1 + Content.Shared/Containers/ContainerFillSystem.cs | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Content.Server/Administration/Commands/WarpCommand.cs b/Content.Server/Administration/Commands/WarpCommand.cs index 0d6da0d9937..c4aa41db20a 100644 --- a/Content.Server/Administration/Commands/WarpCommand.cs +++ b/Content.Server/Administration/Commands/WarpCommand.cs @@ -118,8 +118,9 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) } var xform = _entManager.GetComponent(playerEntity); + var xformSystem = _entManager.System(); xform.Coordinates = coords; - xform.AttachToGridOrMap(); + xformSystem.AttachToGridOrMap(playerEntity, xform); if (_entManager.TryGetComponent(playerEntity, out PhysicsComponent? physics)) { _entManager.System().SetLinearVelocity(playerEntity, Vector2.Zero, body: physics); diff --git a/Content.Server/Construction/ConstructionSystem.Graph.cs b/Content.Server/Construction/ConstructionSystem.Graph.cs index 1b74fd9d4e5..4c73cef703d 100644 --- a/Content.Server/Construction/ConstructionSystem.Graph.cs +++ b/Content.Server/Construction/ConstructionSystem.Graph.cs @@ -304,8 +304,8 @@ public bool ChangeNode(EntityUid uid, EntityUid? userUid, string id, bool perfor return null; // [Optional] Exit if the new entity's prototype is a parent of the original - // E.g., if an entity with the 'AirlockCommand' prototype was to be replaced with a new entity that - // had the 'Airlock' prototype, and DoNotReplaceInheritingEntities was true, the code block would + // E.g., if an entity with the 'AirlockCommand' prototype was to be replaced with a new entity that + // had the 'Airlock' prototype, and DoNotReplaceInheritingEntities was true, the code block would // exit here because 'AirlockCommand' is derived from 'Airlock' if (GetCurrentNode(uid, construction)?.DoNotReplaceInheritingEntities == true && metaData.EntityPrototype?.ID != null) @@ -362,7 +362,7 @@ public bool ChangeNode(EntityUid uid, EntityUid? userUid, string id, bool perfor // Transform transferring. var newTransform = Transform(newUid); - newTransform.AttachToGridOrMap(); // in case in hands or a container + TransformSystem.AttachToGridOrMap(newUid, newTransform); // in case in hands or a container newTransform.LocalRotation = transform.LocalRotation; newTransform.Anchored = transform.Anchored; diff --git a/Content.Shared/Construction/SharedConstructionSystem.cs b/Content.Shared/Construction/SharedConstructionSystem.cs index 901b2f834d1..a2b647ae927 100644 --- a/Content.Shared/Construction/SharedConstructionSystem.cs +++ b/Content.Shared/Construction/SharedConstructionSystem.cs @@ -10,6 +10,7 @@ public abstract class SharedConstructionSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] protected readonly IPrototypeManager PrototypeManager = default!; + [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; /// /// Get predicate for construction obstruction checks. diff --git a/Content.Shared/Containers/ContainerFillSystem.cs b/Content.Shared/Containers/ContainerFillSystem.cs index 51c7c48e40f..90eccb0341a 100644 --- a/Content.Shared/Containers/ContainerFillSystem.cs +++ b/Content.Shared/Containers/ContainerFillSystem.cs @@ -40,7 +40,7 @@ private void OnMapInit(EntityUid uid, ContainerFillComponent component, MapInitE if (!_containerSystem.Insert(ent, container, containerXform: xform)) { Log.Error($"Entity {ToPrettyString(uid)} with a {nameof(ContainerFillComponent)} failed to insert an entity: {ToPrettyString(ent)}."); - Transform(ent).AttachToGridOrMap(); + _transform.AttachToGridOrMap(ent); break; } } From b38b5a32a26a1ede3329ec6d3586f341a2079508 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Fri, 7 Feb 2025 18:22:49 +0000 Subject: [PATCH 139/197] move lathe recipes into packs (easier for forks and maintaining) (#33095) * add LatheRecipePackPrototype * change Lathe and EmagLathe to use packs * add AddRecipesFromPacks helper to SharedLatheSystem * update lathe logic to work with packs and clean up some stuff * migrate individual recipes to recipe packs * update client * remove node/artifact scanner from techs * :trollface: * fix test and make it include emag recipes * add test that every dynamic recipe must be researched * pro * fix * fix * fix all tests, genuinely good test i wonder who made it * add unused uranium and incendiary drozd mags to tech and lathe * add recipes * add incendiary prototype * undo some changes * troll * :trollface: * true Co-authored-by: pathetic meowmeow * shitmed real Co-authored-by: pathetic meowmeow * update funny test * :trollface: * :trollface: --------- Co-authored-by: deltanedas <@deltanedas:kde.org> Co-authored-by: pathetic meowmeow --- Content.Client/Lathe/UI/LatheMenu.xaml.cs | 2 +- .../Tests/Lathe/LatheTest.cs | 13 +- .../Tests/ResearchTest.cs | 30 +- Content.Server/Lathe/LatheSystem.cs | 52 +- Content.Shared/Lathe/EmagLatheComponent.cs | 10 +- Content.Shared/Lathe/LatheComponent.cs | 9 +- .../Prototypes/LatheRecipePackPrototype.cs | 31 + Content.Shared/Lathe/SharedLatheSystem.cs | 13 + .../Guns/Ammunition/Magazines/pistol.yml | 8 + .../Entities/Structures/Machines/lathe.yml | 1277 ++--------------- .../Recipes/Lathes/Packs/animal_cubes.yml | 19 + .../Recipes/Lathes/Packs/bedsheets.yml | 23 + .../Recipes/Lathes/Packs/biogen.yml | 30 + .../Prototypes/Recipes/Lathes/Packs/cargo.yml | 33 + .../Recipes/Lathes/Packs/clothing.yml | 239 +++ .../Recipes/Lathes/Packs/engineering.yml | 91 ++ .../Recipes/Lathes/Packs/medical.yml | 110 ++ .../Prototypes/Recipes/Lathes/Packs/ore.yml | 27 + .../Recipes/Lathes/Packs/robotics.yml | 79 + .../Recipes/Lathes/Packs/science.yml | 129 ++ .../Recipes/Lathes/Packs/security.yml | 146 ++ .../Recipes/Lathes/Packs/service.yml | 64 + .../Recipes/Lathes/Packs/shared.yml | 53 + .../Recipes/Lathes/Packs/sheetifier.yml | 7 + .../Prototypes/Recipes/Lathes/Packs/tiles.yml | 51 + .../Prototypes/Recipes/Lathes/security.yml | 17 + Resources/Prototypes/Research/arsenal.yml | 24 +- .../Prototypes/Research/experimental.yml | 3 +- .../_DV/Recipes/Lathes/Packs/clothing.yml | 86 ++ .../_DV/Recipes/Lathes/Packs/engineering.yml | 21 + .../_DV/Recipes/Lathes/Packs/epistemics.yml | 12 + .../_DV/Recipes/Lathes/Packs/logistics.yml | 19 + .../_DV/Recipes/Lathes/Packs/medical.yml | 26 + .../_DV/Recipes/Lathes/Packs/rings.yml | 9 + .../_DV/Recipes/Lathes/Packs/robotics.yml | 7 + .../_DV/Recipes/Lathes/Packs/security.yml | 84 ++ .../_DV/Recipes/Lathes/Packs/service.yml | 24 + .../_DV/Recipes/Lathes/Packs/shared.yml | 6 + .../_DV/Recipes/Lathes/Packs/tiles.yml | 21 + .../_DV/Recipes/Lathes/electronics.yml | 5 - Resources/Prototypes/_DV/Research/arsenal.yml | 36 +- .../Entities/Structures/Machines/lathe.yml | 35 + .../_Shitmed/Recipes/Lathes/Packs/medical.yml | 52 + .../Recipes/Lathes/Packs/robotics.yml | 33 + .../Recipes/Lathes/Packs/security.yml | 6 + 45 files changed, 1859 insertions(+), 1213 deletions(-) create mode 100644 Content.Shared/Lathe/Prototypes/LatheRecipePackPrototype.cs create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/animal_cubes.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/bedsheets.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/biogen.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/medical.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/ore.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/science.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/security.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/service.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/shared.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/sheetifier.yml create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/tiles.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/clothing.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/rings.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml create mode 100644 Resources/Prototypes/_DV/Recipes/Lathes/Packs/tiles.yml create mode 100644 Resources/Prototypes/_Shitmed/Entities/Structures/Machines/lathe.yml create mode 100644 Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml create mode 100644 Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/robotics.yml create mode 100644 Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/security.yml diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs index 151eef49437..b61c4893f47 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs +++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs @@ -74,7 +74,7 @@ public void SetEntity(EntityUid uid) if (_entityManager.TryGetComponent(Entity, out var latheComponent)) { - if (!latheComponent.DynamicRecipes.Any()) + if (!latheComponent.DynamicPacks.Any()) { ServerListButton.Visible = false; } diff --git a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs index 88aece967b7..2fe347f6362 100644 --- a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs +++ b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs @@ -26,6 +26,7 @@ public async Task TestLatheRecipeIngredientsFitLathe() var compFactory = server.ResolveDependency(); var materialStorageSystem = server.System(); var whitelistSystem = server.System(); + var latheSystem = server.System(); await server.WaitAssertion(() => { @@ -74,14 +75,14 @@ await server.WaitAssertion(() => } } - // Collect all the recipes assigned to this lathe - var recipes = new List>(); - recipes.AddRange(latheComp.StaticRecipes); - recipes.AddRange(latheComp.DynamicRecipes); + // Collect all possible recipes assigned to this lathe + var recipes = new HashSet>(); + latheSystem.AddRecipesFromPacks(recipes, latheComp.StaticPacks); + latheSystem.AddRecipesFromPacks(recipes, latheComp.DynamicPacks); if (latheProto.TryGetComponent(out var emagRecipesComp, compFactory)) { - recipes.AddRange(emagRecipesComp.EmagStaticRecipes); - recipes.AddRange(emagRecipesComp.EmagDynamicRecipes); + latheSystem.AddRecipesFromPacks(recipes, emagRecipesComp.EmagStaticPacks); + latheSystem.AddRecipesFromPacks(recipes, emagRecipesComp.EmagDynamicPacks); } // Check each recipe assigned to this lathe diff --git a/Content.IntegrationTests/Tests/ResearchTest.cs b/Content.IntegrationTests/Tests/ResearchTest.cs index 7ae29a79ffd..4661a1ea9e1 100644 --- a/Content.IntegrationTests/Tests/ResearchTest.cs +++ b/Content.IntegrationTests/Tests/ResearchTest.cs @@ -52,13 +52,16 @@ public async Task AllTechPrintableTest() await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; + var entMan = server.ResolveDependency(); var protoManager = server.ResolveDependency(); var compFact = server.ResolveDependency(); + var latheSys = entMan.System(); + await server.WaitAssertion(() => { var allEnts = protoManager.EnumeratePrototypes(); - var allLathes = new HashSet(); + var latheTechs = new HashSet>(); foreach (var proto in allEnts) { if (proto.Abstract) @@ -69,30 +72,31 @@ await server.WaitAssertion(() => if (!proto.TryGetComponent(out var lathe, compFact)) continue; - allLathes.Add(lathe); - } - var latheTechs = new HashSet(); - foreach (var lathe in allLathes) - { - if (lathe.DynamicRecipes == null) - continue; + latheSys.AddRecipesFromPacks(latheTechs, lathe.DynamicPacks); - foreach (var recipe in lathe.DynamicRecipes) - { - latheTechs.Add(recipe); - } + if (proto.TryGetComponent(out var emag, compFact)) + latheSys.AddRecipesFromPacks(latheTechs, emag.EmagDynamicPacks); } Assert.Multiple(() => { + // check that every recipe a tech adds can be made on some lathe + var unlockedTechs = new HashSet>(); foreach (var tech in protoManager.EnumeratePrototypes()) { + unlockedTechs.UnionWith(tech.RecipeUnlocks); foreach (var recipe in tech.RecipeUnlocks) { - Assert.That(latheTechs, Does.Contain(recipe), $"Recipe \"{recipe}\" cannot be unlocked on any lathes."); + Assert.That(latheTechs, Does.Contain(recipe), $"Recipe '{recipe}' from tech '{tech.ID}' cannot be unlocked on any lathes."); } } + + // now check that every dynamic recipe a lathe lists can be unlocked + foreach (var recipe in latheTechs) + { + Assert.That(unlockedTechs, Does.Contain(recipe), $"Recipe '{recipe}' is dynamic on a lathe but cannot be unlocked by research."); + } }); }); diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 7107e483bc8..1ee1684c47c 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -20,6 +20,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Examine; using Content.Shared.Lathe; +using Content.Shared.Lathe.Prototypes; using Content.Shared.Materials; using Content.Shared.Power; using Content.Shared.ReagentSpeed; @@ -58,6 +59,7 @@ public sealed class LatheSystem : SharedLatheSystem /// Per-tick cache /// private readonly List _environments = new(); + private readonly HashSet> _availableRecipes = new(); public override void Initialize() { @@ -157,19 +159,16 @@ public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List

> GetAvailableRecipes(EntityUid uid, LatheComponent component, bool getUnavailable = false) { + _availableRecipes.Clear(); + AddRecipesFromPacks(_availableRecipes, component.StaticPacks); var ev = new LatheGetRecipesEvent(uid, getUnavailable) { - Recipes = new HashSet>(component.StaticRecipes) + Recipes = _availableRecipes }; RaiseLocalEvent(uid, ev); return ev.Recipes.ToList(); } - public static List> GetAllBaseRecipes(LatheComponent component) - { - return component.StaticRecipes.Union(component.DynamicRecipes).ToList(); - } - public bool TryAddToQueue(EntityUid uid, LatheRecipePrototype recipe, LatheComponent? component = null) { if (!Resolve(uid, ref component)) @@ -279,35 +278,42 @@ public void UpdateUserInterfaceState(EntityUid uid, LatheComponent? component = _uiSys.SetUiState(uid, LatheUiKey.Key, state); } + ///

+ /// Adds every unlocked recipe from each pack to the recipes list. + /// + public void AddRecipesFromDynamicPacks(ref LatheGetRecipesEvent args, TechnologyDatabaseComponent database, IEnumerable> packs) + { + foreach (var id in packs) + { + var pack = _proto.Index(id); + foreach (var recipe in pack.Recipes) + { + if (args.getUnavailable || database.UnlockedRecipes.Contains(recipe)) + args.Recipes.Add(recipe); + } + } + } + private void OnGetRecipes(EntityUid uid, TechnologyDatabaseComponent component, LatheGetRecipesEvent args) { if (uid != args.Lathe || !TryComp(uid, out var latheComponent)) return; - foreach (var recipe in latheComponent.DynamicRecipes) - { - if (!(args.getUnavailable || component.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) - continue; - args.Recipes.Add(recipe); - } + AddRecipesFromDynamicPacks(ref args, component, latheComponent.DynamicPacks); } private void GetEmagLatheRecipes(EntityUid uid, EmagLatheRecipesComponent component, LatheGetRecipesEvent args) { - if (uid != args.Lathe || !TryComp(uid, out var technologyDatabase)) + if (uid != args.Lathe) return; + if (!args.getUnavailable && !_emag.CheckFlag(uid, EmagType.Interaction)) return; - foreach (var recipe in component.EmagDynamicRecipes) - { - if (!(args.getUnavailable || technologyDatabase.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe)) - continue; - args.Recipes.Add(recipe); - } - foreach (var recipe in component.EmagStaticRecipes) - { - args.Recipes.Add(recipe); - } + + AddRecipesFromPacks(args.Recipes, component.EmagStaticPacks); + + if (TryComp(uid, out var database)) + AddRecipesFromDynamicPacks(ref args, database, component.EmagDynamicPacks); } private void OnHeatStartPrinting(EntityUid uid, LatheHeatProducingComponent component, LatheStartPrintingEvent args) diff --git a/Content.Shared/Lathe/EmagLatheComponent.cs b/Content.Shared/Lathe/EmagLatheComponent.cs index 9fe53c8d493..672748308c2 100644 --- a/Content.Shared/Lathe/EmagLatheComponent.cs +++ b/Content.Shared/Lathe/EmagLatheComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Research.Prototypes; +using Content.Shared.Lathe.Prototypes; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; @@ -9,15 +9,15 @@ namespace Content.Shared.Lathe public sealed partial class EmagLatheRecipesComponent : Component { /// - /// All of the dynamic recipes that the lathe is capable to get using EMAG + /// All of the dynamic recipe packs that the lathe is capable to get using EMAG /// [DataField, AutoNetworkedField] - public List> EmagDynamicRecipes = new(); + public List> EmagDynamicPacks = new(); /// - /// All of the static recipes that the lathe is capable to get using EMAG + /// All of the static recipe packs that the lathe is capable to get using EMAG /// [DataField, AutoNetworkedField] - public List> EmagStaticRecipes = new(); + public List> EmagStaticPacks = new(); } } diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 6f174040f68..9f56dcd70fd 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Construction.Prototypes; +using Content.Shared.Lathe.Prototypes; using Content.Shared.Research.Prototypes; using Robust.Shared.Audio; using Robust.Shared.GameStates; @@ -10,16 +11,16 @@ namespace Content.Shared.Lathe public sealed partial class LatheComponent : Component { /// - /// All of the recipes that the lathe has by default + /// All of the recipe packs that the lathe has by default /// [DataField] - public List> StaticRecipes = new(); + public List> StaticPacks = new(); /// - /// All of the recipes that the lathe is capable of researching + /// All of the recipe packs that the lathe is capable of researching /// [DataField] - public List> DynamicRecipes = new(); + public List> DynamicPacks = new(); ///
/// The lathe's construction queue diff --git a/Content.Shared/Lathe/Prototypes/LatheRecipePackPrototype.cs b/Content.Shared/Lathe/Prototypes/LatheRecipePackPrototype.cs new file mode 100644 index 00000000000..ada880f459b --- /dev/null +++ b/Content.Shared/Lathe/Prototypes/LatheRecipePackPrototype.cs @@ -0,0 +1,31 @@ +using Content.Shared.Research.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; + +namespace Content.Shared.Lathe.Prototypes; + +/// +/// A pack of lathe recipes that one or more lathes can use. +/// Packs will inherit the parents recipes when using inheritance, so you don't need to copy paste them. +/// +[Prototype] +public sealed partial class LatheRecipePackPrototype : IPrototype, IInheritingPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; private set; } = default!; + + [ParentDataField(typeof(AbstractPrototypeIdArraySerializer))] + public string[]? Parents { get; } + + [NeverPushInheritance] + [AbstractDataField] + public bool Abstract { get; } + + /// + /// The lathe recipes contained by this pack. + /// + [DataField(required: true)] + [AlwaysPushInheritance] + public HashSet> Recipes = new(); +} diff --git a/Content.Shared/Lathe/SharedLatheSystem.cs b/Content.Shared/Lathe/SharedLatheSystem.cs index 7328787f25e..ae5519d16c4 100644 --- a/Content.Shared/Lathe/SharedLatheSystem.cs +++ b/Content.Shared/Lathe/SharedLatheSystem.cs @@ -2,6 +2,7 @@ using System.Linq; using Content.Shared.Emag.Systems; using Content.Shared.Examine; +using Content.Shared.Lathe.Prototypes; using Content.Shared.Localizations; using Content.Shared.Materials; using Content.Shared.Research.Prototypes; @@ -33,6 +34,18 @@ public override void Initialize() BuildInverseRecipeDictionary(); } + /// + /// Add every recipe in the list of recipe packs to a single hashset. + /// + public void AddRecipesFromPacks(HashSet> recipes, IEnumerable> packs) + { + foreach (var id in packs) + { + var pack = _proto.Index(id); + recipes.UnionWith(pack.Recipes); + } + } + private void OnExamined(Entity ent, ref ExaminedEvent args) { if (!args.IsInDetailsRange) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index a1b3c737c0f..3630cdb70cf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -315,3 +315,11 @@ map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] + +- type: entity + parent: BaseMagazinePistolSubMachineGun + id: MagazinePistolSubMachineGunIncendiary + name: SMG magazine (.35 auto incendiary) + components: + - type: BallisticAmmoProvider + proto: CartridgePistolIncendiary diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c9463a25398..5439786dc7e 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -117,130 +117,27 @@ runningState: building unlitIdleState: unlit unlitRunningState: unlit-building - staticRecipes: - - Wirecutter - - Igniter - - Signaller - - Screwdriver - - Welder - - Wrench - - CrowbarGreen - - Multitool - - NetworkConfigurator - - SprayPainter - - FlashlightLantern - - CableStack - - CableMVStack - - CableHVStack - - HandheldGPSBasic - - TRayScanner - - AirTank - - GasAnalyzer - - UtilityBelt - - Pickaxe - - ModularReceiver - - AppraisalTool - - SheetRGlass - - Beaker - - Syringe - - HandLabeler - - LightTube - - LedLightTube - - SodiumLightTube - - ExteriorLightTube - - LightBulb - - LedLightBulb - - DimLightBulb - - Bucket - - DrinkMug - - DrinkMugMetal - - DrinkGlass - - DrinkShotGlass - - DrinkGlassCoupeShaped - - CustomDrinkJug - - FoodPlate - - FoodPlateSmall - - FoodPlatePlastic - - FoodPlateSmallPlastic - - FoodBowlBig - - FoodPlateTin - - FoodPlateMuffinTin - - FoodKebabSkewer - - SprayBottle - - MopItem - - Holoprojector - - Mousetrap - - LightReplacer - - TrashBag - - PowerCellSmall - - PowerCellMedium - - RollerBedSpawnFolded - - CheapRollerBedSpawnFolded - - EmergencyRollerBedSpawnFolded - - MicroManipulatorStockPart - - MatterBinStockPart - - CapacitorStockPart - - ConveyorBeltAssembly - - IntercomElectronics - - FirelockElectronics - - DoorElectronics - - AirAlarmElectronics - - StationMapElectronics - - FireAlarmElectronics - - MailingUnitElectronics - - SignalTimerElectronics - - APCElectronics - - SMESMachineCircuitboard - - SubstationMachineCircuitboard - - WallmountSubstationElectronics - - CellRechargerCircuitboard - - WeaponCapacitorRechargerCircuitboard - - HandheldStationMap - - ClothingHeadHatWelding - - WetFloorSign - - ClothingHeadHatCone - - FreezerElectronics - # Begin Delta-V additions - - GoldRing - - SilverRing - - GoldRingDiamond - - SilverRingDiamond - - CassetteTape - - TapeRecorder - # End Delta-V additions + staticPacks: + # Begin DeltaV Additions + - RingsStatic + - ReportingStatic + # End DeltaV Additions + - ToolsStatic + - PartsStatic + - AtmosStatic + - CablesStatic + - CargoStatic + - MaterialsStatic + - BasicChemistryStatic + - RollerBedsStatic + - LightsStatic + - ServiceStatic + - PowerCellsStatic + - ElectronicsStatic - type: EmagLatheRecipes - emagStaticRecipes: - - BoxLethalshot - - BoxShotgunSlug - - CombatKnife - - MagazineBoxLightRifle - - MagazineBoxMagnum - - MagazineBoxPistol - - MagazineBoxRifle - - MagazineLightRifle - - MagazineLightRifleEmpty - - MagazinePistol - - MagazinePistolEmpty - - MagazinePistolSubMachineGun - - MagazinePistolSubMachineGunEmpty - - MagazinePistolSubMachineGunTopMounted - - MagazinePistolSubMachineGunTopMountedEmpty - - MagazineRifle - - MagazineRifleEmpty - - MagazineShotgun - - MagazineShotgunEmpty - - MagazineShotgunSlug - - RiotShield - - SpeedLoaderMagnum - - SpeedLoaderMagnumEmpty - - WeaponProtoKineticAccelerator - # DeltaV - .38 special ammo - Add .38 special lethals to emagged autolathe - - SpeedLoaderSpecial - - SpeedLoaderSpecialEmpty - - SpeedLoaderSpecialPractice - - MagazineBoxSpecial - - MagazinePistolSpecial - # End of modified code + emagStaticPacks: + - SecurityAmmoStatic + - SecurityWeaponsStatic - type: BlueprintReceiver whitelist: tags: @@ -297,162 +194,36 @@ runningState: building unlitIdleState: unlit unlitRunningState: unlit-building - staticRecipes: - - LargeBeaker - - Dropper - - ClothingEyesGlassesChemical - dynamicRecipes: - - PowerDrill - - MiningDrill - - MiningDrillDiamond - - AnomalyScanner - - AnomalyLocator - - AnomalyLocatorWide - - Scalpel - - Retractor - - Cautery - - Drill - - WeaponParticleDecelerator - - HoloprojectorField - - Saw - - Hemostat - - CryostasisBeaker - - SyringeCryostasis - - Syringe - - Implanter - - PillCanister - - ChemistryEmptyBottle01 - - AdvMopItem - - WeaponSprayNozzle - - ClothingBackpackWaterTank - - MegaSprayBottle - - TimerTrigger - - ChemicalPayload - - FlashPayload - - Signaller - - SignallerAdvanced - - SignalTrigger - - VoiceTrigger - - Igniter - - HandHeldMassScanner - - PowerCellMicroreactor - - PowerCellHigh - - WeaponPistolCHIMP - - ClothingMaskWeldingGas - - MineralScannerEmpty - - AdvancedMineralScannerEmpty - - WeaponGauntletGorilla - - SynthesizerInstrument - - ClothingShoesBootsMagSci - - ClothingShoesBootsMoon - - ClothingShoesBootsSpeed - - NodeScanner - - HolofanProjector - - BluespaceBeaker - - SyringeBluespace - #- WeaponForceGun # DeltaV - #- WeaponLaserSvalinn #DeltaV - - WeaponGrapplingGun - #- WeaponTetherGun # DeltaV - - ClothingBackpackHolding - - ClothingBackpackSatchelHolding - - ClothingBackpackDuffelHolding - - WelderExperimental - - JawsOfLife - - FauxTileAstroGrass - - FauxTileMowedAstroGrass - - FauxTileJungleAstroGrass - - FauxTileAstroIce - - FauxTileAstroSnow - - FauxTileAstroAsteroidSand - - OreBagOfHolding - - DeviceQuantumSpinInverter - # Begin DeltaV additions - - CoreSilver # Nyanotrasen - Silver Golem core - - HandheldCrewMonitor - - PlantBagOfHolding - - RCDAmmo - - Fulton - - FultonBeacon - - PowerCellHyper - - FireExtinguisherBluespace - - SignallerDeadMans - # End DeltaV additions - - EnergyScalpel # Shitmed Change - - EnergyCautery # Shitmed Change - - AdvancedRetractor # Shitmed Change + staticPacks: + - ChemistryStatic + - SurgeryStatic + dynamicPacks: + - AdvancedTools + - ScienceEquipment + - ScienceClothing + - PowerCells + - ScienceWeapons + - Mining + - AtmosTools + - EngineeringWeapons + - Chemistry + - Janitor + - Instruments + - Equipment + - FauxTiles + # Begin DeltaV Additions + - Botany + - Golemancy + - ReverseEngineered + # End DeltaV Additions + - Surgery # Shitmed change - type: EmagLatheRecipes - emagDynamicRecipes: - - BorgModuleFauna - - BoxBeanbag - - BoxShotgunIncendiary - - BoxShotgunUranium - - BoxShellTranquilizer - - ExplosivePayload - - GrenadeBlast - - GrenadeEMP - - GrenadeFlash - - HoloprojectorSecurity - - MagazineBoxLightRifleIncendiary - - MagazineBoxLightRifleUranium - - MagazineBoxMagnumIncendiary - - MagazineBoxMagnumUranium - - MagazineBoxPistolIncendiary - - MagazineBoxPistolUranium - - MagazineBoxRifleIncendiary - - MagazineBoxRifleUranium - - MagazineGrenadeEmpty - - MagazineLightRifleIncendiary - - MagazineLightRifleUranium - - MagazinePistolIncendiary - - MagazinePistolUranium - - MagazineRifleIncendiary - - MagazineRifleUranium - - MagazineShotgunBeanbag - - MagazineShotgunIncendiary - - MagazineShotgunIncendiary - #- PortableRecharger # DeltaV - removed for some reason - - PowerCageHigh - - PowerCageMedium - - PowerCageSmall - - SpeedLoaderMagnumIncendiary - - SpeedLoaderMagnumUranium - - TelescopicShield - - Truncheon - - WeaponAdvancedLaser - - WeaponLaserCannon - - WeaponLaserCarbine - - WeaponXrayCannon - - WeaponCrusher - - WeaponCrusherDagger - - WeaponCrusherGlaive - # Begin DeltaV additions - - BoxShellSoulbreaker # Nyanotrasen - Shotgun shell to get rid of psionics - - WeaponEnergyGun # Energy Gun - - WeaponEnergyGunMini # Miniature Energy Gun - - WeaponEnergyGunPistol # PDW-9 Energy Pistol - - WeaponGunLaserCarbineAutomatic # IK-60 Laser Carbine - - MagazinePistolRubber - - SpeedLoaderMagnumRubber - - SpeedLoaderSpecialRubber - - SpeedLoaderSpecialUranium - - MagazineRifleRubber - - MagazineLightRifleRubber - - MagazineBoxPistolRubber - - MagazineBoxMagnumRubber - - MagazineBoxLightRifleRubber - - MagazineBoxRifleRubber - - MagazineBoxSpecialRubber - - MagazineBoxSpecialIncendiary - - MagazineBoxSpecialUranium - - MagazineBoxSpecialHoly - - MagazineBoxSpecialMindbreaker - - AdvancedTruncheon - - LauncherSyringe - - MiniSyringe - - WeaponColdCannon - - WeaponBeamCannon - # End DeltaV additions + emagDynamicPacks: + - SecurityAmmo + - SecurityExplosives + - SecurityEquipment + - SecurityWeapons + - SyringeGuns # DeltaV - type: entity id: ProtolatheHyperConvection @@ -488,120 +259,25 @@ producingSound: /Audio/Machines/circuitprinter.ogg idleState: icon runningState: building - staticRecipes: - - ProtolatheMachineCircuitboard - - AutolatheMachineCircuitboard - - CircuitImprinterMachineCircuitboard - - BiogeneratorMachineCircuitboard - - OreProcessorMachineCircuitboard - - ElectrolysisUnitMachineCircuitboard - - CentrifugeMachineCircuitboard - - ChemDispenserMachineCircuitboard - - ChemMasterMachineCircuitboard - - CondenserMachineCircuitBoard - - HotplateMachineCircuitboard - - UniformPrinterMachineCircuitboard - - FloorGreenCircuit - - FloorBlueCircuit - - FloorRedCircuit - - MicrowaveMachineCircuitboard - - ReagentGrinderMachineCircuitboard - - ElectricGrillMachineCircuitboard - - BoozeDispenserMachineCircuitboard - - SodaDispenserMachineCircuitboard - - DeepFryerMachineCircuitboard #Nyano - Summary: adds deep fryer circuit board - - SpaceHeaterMachineCircuitBoard - - CutterMachineCircuitboard - - SalvageMagnetMachineCircuitboard - - BorgChargerCircuitboard - - OperatingTableCircuitboard # Shitmed Change - dynamicRecipes: - - ThermomachineFreezerMachineCircuitBoard - - HellfireFreezerMachineCircuitBoard - - PortableScrubberMachineCircuitBoard - - CloningPodMachineCircuitboard - - MedicalScannerMachineCircuitboard - - CryoPodMachineCircuitboard - - VaccinatorMachineCircuitboard - - DiagnoserMachineCircuitboard - - BiomassReclaimerMachineCircuitboard - - BiofabricatorMachineCircuitboard - - SurveillanceCameraRouterCircuitboard - - SurveillanceCameraMonitorCircuitboard - - SurveillanceWirelessCameraMonitorCircuitboard - - SurveillanceCameraWirelessRouterCircuitboard - - ComputerTelevisionCircuitboard - - SurveillanceWirelessCameraMovableCircuitboard - - SurveillanceWirelessCameraAnchoredCircuitboard - - HydroponicsTrayMachineCircuitboard - - SolarControlComputerCircuitboard - - SolarTrackerElectronics - - TurboItemRechargerCircuitboard - - AutolatheHyperConvectionMachineCircuitboard - - ProtolatheHyperConvectionMachineCircuitboard - - CircuitImprinterHyperConvectionMachineCircuitboard - - FatExtractorMachineCircuitboard - - FlatpackerMachineCircuitboard - - SheetifierMachineCircuitboard - - ShuttleConsoleCircuitboard - - RadarConsoleCircuitboard - - TechDiskComputerCircuitboard - - DawInstrumentMachineCircuitboard - - CloningConsoleComputerCircuitboard - - StasisBedMachineCircuitboard - - AutodocCircuitboard # Shitmed - - OreProcessorIndustrialMachineCircuitboard - - CargoTelepadMachineCircuitboard - - RipleyCentralElectronics - - RipleyPeripheralsElectronics - - HonkerCentralElectronics - - HonkerPeripheralsElectronics - - HonkerTargetingElectronics - - HamtrCentralElectronics - - HamtrPeripheralsElectronics - - PortableGeneratorPacmanMachineCircuitboard - - PortableGeneratorSuperPacmanMachineCircuitboard - - PortableGeneratorJrPacmanMachineCircuitboard - - WallmountSubstationElectronics - - PowerCageRechargerCircuitboard - - EmitterCircuitboard - - ThrusterMachineCircuitboard - - GyroscopeMachineCircuitboard - - MiniGravityGeneratorCircuitboard - - ShuttleGunKineticCircuitboard - - GasRecyclerMachineCircuitboard - - SeedExtractorMachineCircuitboard - - AnalysisComputerCircuitboard - - ExosuitFabricatorMachineCircuitboard - - AnomalyVesselCircuitboard - - AnomalyVesselExperimentalCircuitboard - - AnomalySynchronizerCircuitboard - - APECircuitboard - - ArtifactAnalyzerMachineCircuitboard - - ArtifactCrusherMachineCircuitboard - - TelecomServerCircuitboard - - MassMediaCircuitboard - - ReagentGrinderIndustrialMachineCircuitboard - - JukeboxCircuitBoard - - SMESAdvancedMachineCircuitboard - - HolopadMachineCircuitboard - # Begin Nyano additions - - ReverseEngineeringMachineCircuitboard - - CrewMonitoringComputerCircuitboard - - MetempsychoticMachineCircuitboard - # End Nyano additions - # Begin DeltaV additions - - SalvageExpeditionsComputerCircuitboard - - ComputerMassMediaCircuitboard - - AlertsComputerCircuitboard - - AdvancedMicrowaveMachineCircuitBoard - # End DeltaV additions + staticPacks: + - ScienceBoardsStatic + - ServiceBoardsStatic + - CargoBoardsStatic + - MedicalBoardsStatic + - EngineeringBoardsStatic + - CircuitFloorsStatic + dynamicPacks: + - EngineeringBoards + - CargoBoards + - MedicalBoards + - ServiceBoards + - ScienceBoards + - CameraBoards + - MechBoards + - ShuttleBoards - type: EmagLatheRecipes - emagDynamicRecipes: - - ShuttleGunDusterCircuitboard - - ShuttleGunFriendshipCircuitboard - - ShuttleGunPerforatorCircuitboard - - ShuttleGunSvalinnMachineGunCircuitboard + emagDynamicPacks: + - SecurityBoards - type: MaterialStorage whitelist: tags: @@ -641,88 +317,19 @@ - type: Lathe idleState: fab-idle runningState: fab-active - staticRecipes: - - MMI - - PositronicBrain - - SciFlash - - BorgModuleCable - - BorgModuleFireExtinguisher - - BorgModuleRadiationDetection - - BorgModuleTool - - CyborgEndoskeleton - - LeftArmBorg - - RightArmBorg - - LeftLegBorg - - RightLegBorg - - LightHeadBorg - - TorsoBorg - - BorgModuleSurgery # Shitmed Change - # Shitmed Change - - BorgModuleSurgery - - TorsoIPC - - LeftArmIPC - - RightArmIPC - - LeftLegIPC - - RightLegIPC - - HeadIPC - - LeftHandIPC - - RightHandIPC - - LeftFootIPC - - RightFootIPC - - OrganIPCEyes - - OrganIPCPump - dynamicRecipes: - - ProximitySensor - - ClothingEyesHudDiagnostic - - BorgModuleAdvancedCleaning - - BorgModuleAdvancedTool - - BorgModuleGPS - - BorgModuleArtifact - - BorgModuleAnomaly - - BorgModuleGardening - - BorgModuleHarvesting - - BorgModuleDefibrillator - - BorgModuleAdvancedTreatment - - RipleyHarness - - RipleyLArm - - RipleyRArm - - RipleyLLeg - - RipleyRLeg - - MechEquipmentGrabber - - HonkerHarness - - HonkerLArm - - HonkerRArm - - HonkerLLeg - - HonkerRLeg - - MechEquipmentHorn - - MechEquipmentGrabberSmall - - HamtrHarness - - HamtrLArm - - HamtrRArm - - HamtrLLeg - - HamtrRLeg - - VimHarness - # Begin Nyano additions - - JetpackBlue - - JetpackMini - # End Nyano additions - # DeltaV Start - - BorgModuleSecurityChase - - BorgModuleSecurityEscalate - - JetpackVoid - # Shitmed Change - - BorgModuleAdvancedSurgery - - JawsOfLifeLeftArm - - JawsOfLifeRightArm - - SpeedLeftLeg - - SpeedRightLeg - - BasicCyberneticEyes - # Shitmed End - - type: EmagLatheRecipes - emagDynamicRecipes: - - ClothingOuterHardsuitJuggernautReverseEngineered - - ClothingOuterHardsuitSyndieReverseEngineered - # DeltaV End + staticPacks: + - RoboticsStatic + - BorgModulesStatic + - BorgLimbsStatic + dynamicPacks: + - Robotics + - BorgModules + - MechParts + - MechEquipment + - type: EmagLatheRecipes # DeltaV + emagDynamicPacks: + - SecurityCybernetics # having sechud eyes is good for evil people + - SecurityHardsuits - type: MaterialStorage whitelist: tags: @@ -766,19 +373,11 @@ - type: Lathe idleState: icon runningState: building - staticRecipes: - - MonkeyCube - - KoboldCube - - CowCube - - GoatCube - - MothroachCube - - MouseCube - - CockroachCube + staticPacks: + - FriendlyCubesStatic - type: EmagLatheRecipes - emagStaticRecipes: - - AbominationCube - - SpaceCarpCube - - SpaceTickCube + emagStaticPacks: + - HostileCubesStatic - type: entity id: SecurityTechFab @@ -804,160 +403,17 @@ - type: Lathe idleState: icon runningState: icon - staticRecipes: - - BoxLethalshot - - BoxShotgunPractice - - BoxShotgunSlug - - ClothingEyesHudSecurity - - CombatKnife - - Flash - - ForensicPad - - Handcuffs - - MagazineBoxLightRifle - - MagazineBoxLightRiflePractice - - MagazineBoxMagnum - - MagazineBoxMagnumPractice - - MagazineBoxPistol - - MagazineBoxPistolPractice - - MagazineBoxRifle - - MagazineBoxRiflePractice - - MagazineLightRifle - - MagazineLightRifleEmpty - - MagazinePistol - - MagazinePistolEmpty - - MagazinePistolSubMachineGun - - MagazinePistolSubMachineGunEmpty - - MagazinePistolSubMachineGunTopMounted - - MagazinePistolSubMachineGunTopMountedEmpty - - MagazineRifle - - MagazineRifleEmpty - - MagazineShotgun - - MagazineShotgunEmpty - - MagazineShotgunSlug - - RiotShield - - SpeedLoaderMagnum - - SpeedLoaderMagnumEmpty - - Stunbaton - - TargetClown - - TargetHuman - - TargetSyndicate - - WeaponDisablerPractice - - WeaponFlareGunSecurity - - WeaponLaserCarbinePractice - - WeaponProtoKineticAccelerator - - Zipties - # Begin DeltaV additions - - ClothingNeckShockCollar # Nyanotrasen - Shock Collar recipe - - ClothingOuterArmorPlateCarrier # plate carrier body armour - - ClothingOuterArmorDuraVest # stabproof vest body armour - - MagazineBoxSpecial - - MagazineBoxSpecialPractice - - SpeedLoaderSpecial - - SpeedLoaderSpecialEmpty - - SpeedLoaderSpecialPractice - - MagazinePistolSpecial - - MagazineRifleRubber - - MagazinePistolRubber - - MagazineLightRifleRubber - - SpeedLoaderMagnumRubber - - SpeedLoaderSpecialRubber - - MagazineBoxPistolRubber - - MagazineBoxMagnumRubber - - MagazineBoxLightRifleRubber - - MagazineBoxRifleRubber - - MagazineBoxSpecialRubber - - MagazineShotgunBeanbag - - BoxShellTranquilizer - - BoxBeanbag - - WeaponDisabler - # End DeltaV additions - dynamicRecipes: - - EncryptionKeySyndie # Nyano - - BorgModuleFauna - - BoxBeanbag - - BoxShotgunIncendiary - - BoxShotgunUranium - - BoxShellTranquilizer - - ExplosivePayload - - FlashPayload - - GrenadeBlast - - GrenadeEMP - - GrenadeFlash - - HoloprojectorSecurity - - MagazineBoxLightRifleIncendiary - - MagazineBoxLightRifleUranium - - MagazineBoxMagnumIncendiary - - MagazineBoxMagnumUranium - - MagazineBoxPistolIncendiary - - MagazineBoxPistolUranium - - MagazineBoxRifleIncendiary - - MagazineBoxRifleUranium - - MagazineGrenadeEmpty - - MagazineLightRifleIncendiary - - MagazineLightRifleUranium - - MagazinePistolIncendiary - - MagazinePistolUranium - - MagazineRifleIncendiary - - MagazineRifleUranium - - MagazineShotgunBeanbag - - MagazineShotgunIncendiary - - PortableRecharger - - PowerCageHigh - - PowerCageMedium - - PowerCageSmall - - ShuttleGunDusterCircuitboard - - ShuttleGunFriendshipCircuitboard - - ShuttleGunPerforatorCircuitboard - - ShuttleGunSvalinnMachineGunCircuitboard - - Signaller - - SignalTrigger - - SpeedLoaderMagnumIncendiary - - SpeedLoaderMagnumUranium - - TelescopicShield - - TimerTrigger - - Truncheon - - VoiceTrigger - - WeaponAdvancedLaser - - WeaponDisabler - - WeaponDisablerSMG - - WeaponLaserCannon - - WeaponLaserCarbine - - WeaponXrayCannon - - ClothingBackpackElectropack - - WeaponCrusher - - WeaponCrusherDagger - - WeaponCrusherGlaive - # Begin DeltaV additions - - BoxShellSoulbreaker # Nyanotrasen - Shotgun shell to get rid of psionics - - ClothingHeadHelmetInsulated # Nyanotrasen - Insulative headgear - - ClothingHeadCage # Nyanotrasen - Insulative headgear - - WeaponEnergyGun # DeltaV - Energy Gun - - WeaponEnergyGunMini # Energy Gun but miniature - - WeaponEnergyGunPistol # Energy Gun Mini but with the power of a normal energy gun - - WeaponGunLaserCarbineAutomatic # New Laser Projectiles with a 20 round carbine - - MagazinePistolRubber - - SpeedLoaderMagnumRubber - - SpeedLoaderSpecialRubber - - SpeedLoaderSpecialUranium - - MagazineRifleRubber - - MagazineLightRifleRubber - - MagazineBoxPistolRubber - - MagazineBoxMagnumRubber - - MagazineBoxLightRifleRubber - - MagazineBoxRifleRubber - - MagazineBoxSpecialRubber - - MagazineBoxSpecialIncendiary - - MagazineBoxSpecialUranium - - MagazineBoxSpecialHoly - - MagazineBoxSpecialMindbreaker - - ClothingOuterHardsuitJuggernautReverseEngineered - - ClothingOuterHardsuitSyndieReverseEngineered - - ClothingShoesBootsSecurityMagboots - - AdvancedTruncheon - - WeaponColdCannon - - WeaponBeamCannon - # End DeltaV additions - - SecurityCyberneticEyes # Shitmed Change + staticPacks: + - SecurityEquipmentStatic + - SecurityPracticeStatic + - SecurityAmmoStatic + - SecurityWeaponsStatic + dynamicPacks: + - SecurityEquipment + - SecurityBoards + - SecurityExplosives + - SecurityAmmo + - SecurityWeapons - type: MaterialStorage whitelist: tags: @@ -989,29 +445,8 @@ - type: Lathe idleState: icon runningState: icon - staticRecipes: - # DeltaV - .38 special ammo - Add lethal .38 special ammo to ammo techfab - - SpeedLoaderSpecial - - MagazineBoxSpecial - # End of modified code - - BoxLethalshot - - BoxShotgunSlug - - BoxShellTranquilizer - - MagazineBoxLightRifle - - MagazineBoxMagnum - - MagazineBoxPistol - - MagazineBoxRifle - - MagazineLightRifle - - MagazineLightRifleEmpty - - MagazinePistol - - MagazinePistolEmpty - - MagazineRifle - - MagazineRifleEmpty - - MagazineShotgun - - MagazineShotgunEmpty - - MagazineShotgunSlug - - SpeedLoaderMagnum - - SpeedLoaderMagnumEmpty + staticPacks: + - SecurityAmmoStatic - type: MaterialStorage whitelist: tags: @@ -1041,66 +476,19 @@ - type: Lathe idleState: icon runningState: icon - staticRecipes: - - Brutepack - - Ointment - - Gauze - - HandLabeler - - Defibrillator - - HandheldHealthAnalyzer - - ClothingHandsGlovesLatex - - ClothingHandsGlovesNitrile - - ClothingMaskSterile - - DiseaseSwab - - Beaker - - LargeBeaker - - Dropper - - Jug - - Syringe - - Implanter - - PillCanister - - BodyBag - - ChemistryEmptyBottle01 - - RollerBedSpawnFolded - - CheapRollerBedSpawnFolded - - EmergencyRollerBedSpawnFolded - - Medkit - - MedkitBurn - - MedkitToxin - - MedkitO2 - - MedkitBrute - - MedkitAdvanced - - MedkitRadiation - - MedkitCombat - - Scalpel - - Retractor - - Cautery - - Drill - - Saw - - Hemostat - - ClothingEyesGlassesChemical - - WhiteCane - - AACTablet # DeltaV - - BoneGel # Shitmed Change - - TankHarness # DeltaV - dynamicRecipes: - # Begin DeltaV additions - - LauncherSyringe - - MiniSyringe - # End DeltaV additions - - ChemicalPayload - - CryostasisBeaker - - BluespaceBeaker - - SyringeBluespace - - ClothingEyesHudMedical # Nyano - - ChemicalPayload # Nyano - - SyringeCryostasis - # Shitmed Change - - EnergyScalpel - - EnergyCautery - - AdvancedRetractor - #- OmnimedTool # DeltaV - Removed medical multi tool as a tech. - - MedicalCyberneticEyes + staticPacks: + - TopicalsStatic + - ChemistryStatic + - MedicalStatic + - RollerBedsStatic + - MedicalClothingStatic + - EmptyMedkitsStatic + - SurgeryStatic + dynamicPacks: + - Chemistry + - CyberneticsMedical # Shitmed change + - Surgery # Shitmed change + - SyringeGuns # DeltaV - type: Machine board: MedicalTechFabCircuitboard - type: StealTarget @@ -1126,248 +514,25 @@ producingSound: /Audio/Machines/uniformprinter.ogg idleState: icon runningState: building - staticRecipes: - - ClothingUniformJumpsuitColorGrey - - ClothingUniformJumpskirtColorGrey - - ClothingUniformJumpsuitBartender - - ClothingUniformJumpskirtBartender - - ClothingHeadHatCapcap - - ClothingHeadHatCaptain - - ClothingUniformJumpsuitCaptain - - ClothingUniformJumpskirtCaptain - - ClothingUniformJumpsuitCapFormal - - ClothingUniformJumpskirtCapFormalDress - - ClothingUniformJumpsuitCargo - - ClothingUniformJumpskirtCargo - - ClothingUniformJumpsuitSalvageSpecialist - - ClothingHeadHatBeretEngineering - - ClothingUniformJumpsuitChiefEngineer - - ClothingUniformJumpskirtChiefEngineer - - ClothingUniformJumpsuitChiefEngineerTurtle - - ClothingUniformJumpskirtChiefEngineerTurtle - - ClothingUniformJumpsuitChaplain - - ClothingUniformJumpskirtChaplain - - ClothingUniformJumpsuitChef - - ClothingUniformJumpskirtChef - - ClothingUniformJumpsuitChemistry - - ClothingUniformJumpskirtChemistry - - ClothingUniformJumpsuitClown - - ClothingHeadHatBeretCmo - - ClothingUniformJumpsuitCMO - - ClothingUniformJumpskirtCMO - - ClothingUniformJumpsuitCMOTurtle - - ClothingUniformJumpskirtCMOTurtle - - ClothingUniformJumpsuitDetective - - ClothingUniformJumpskirtDetective - - ClothingUniformJumpsuitEngineering - - ClothingUniformJumpskirtEngineering - - ClothingUniformJumpsuitSeniorEngineer - - ClothingUniformJumpskirtSeniorEngineer - - ClothingHeadHatHopcap - - ClothingUniformJumpsuitHoP - - ClothingUniformJumpskirtHoP - - ClothingUniformJumpsuitHoPFormal # DeltaV - Was never added, appearently? - - ClothingUniformJumpskirtHoPFormal # DeltaV - Formal dresses - - ClothingHeadHatBeretHoS - - ClothingHeadHatHoshat - - ClothingUniformJumpsuitHoS - - ClothingUniformJumpskirtHoS - - ClothingUniformJumpsuitHoSBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtHoSBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpsuitHoSGrey # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtHoSGrey # DeltaV - alternate sec uniforms - - ClothingUniformJumpsuitHosFormal - - ClothingUniformJumpskirtHosFormal - - ClothingUniformJumpsuitHoSAlt - - ClothingUniformJumpskirtHoSAlt - - ClothingUniformJumpsuitHoSBlue - - ClothingUniformJumpsuitHoSGrey - - ClothingUniformJumpsuitHoSParadeMale - - ClothingUniformJumpskirtHoSParadeMale - - ClothingUniformJumpsuitHydroponics - - ClothingUniformJumpskirtHydroponics - - ClothingUniformJumpsuitJanitor - - ClothingUniformJumpskirtJanitor - - ClothingUniformJumpsuitLawyerBlack - - ClothingUniformJumpsuitLibrarian - - ClothingUniformJumpskirtColorLightBrown - - ClothingUniformCourier # DeltaV - Courier Uniform - - ClothingUniformSkirtCourier # DeltaV - Courier Uniform - - ClothingUniformJumpsuitMantis # Nyanotrasen - Forensic Mantis - - ClothingUniformSkirtMantis # Nyanotrasen - Forensic Mantis - - ClothingHeadHatBeretSeniorPhysician - - ClothingUniformJumpsuitMedicalDoctor - - ClothingUniformJumpskirtMedicalDoctor - - ClothingUniformJumpsuitSeniorPhysician - - ClothingUniformJumpskirtSeniorPhysician - - ClothingUniformJumpsuitMime - - ClothingUniformJumpskirtMime - - ClothingUniformJumpsuitMusician - - ClothingUniformJumpsuitParamedic - - ClothingUniformJumpskirtParamedic - - ClothingUniformJumpsuitSeniorOfficer - - ClothingUniformJumpskirtSeniorOfficer - - ClothingUniformJumpsuitPrisoner - - ClothingUniformJumpskirtPrisoner - - ClothingHeadHatQMsoft - - ClothingHeadHatBeretQM - - ClothingUniformJumpsuitQM - - ClothingUniformJumpskirtQM - - ClothingUniformJumpsuitQMTurtleneck - - ClothingUniformJumpskirtQMTurtleneck - - ClothingUniformJumpsuitQMFormal - - ClothingUniformJumpskirtQMFormal # DeltaV - Formal dresses - - ClothingHeadHatBeretRND - - ClothingHeadHatCJToque # DeltaV - Chief Justice - - ClothingUniformJumpsuitChiefJustice # DeltaV - Chief Justice - - ClothingUniformJumpskirtChiefJustice # DeltaV - Chief Justice - - ClothingUniformJumpsuitChiefJusticeFormal # DeltaV - Chief Justice - - ClothingUniformJumpskirtCJFormal # DeltaV - Formal dresses - - ClothingUniformJumpsuitChiefJusticeWhite # DeltaV - Chief Justice - - ClothingUniformJumpsuitResearchDirector - - ClothingUniformJumpskirtResearchDirector - - ClothingUniformJumpsuitScientist - - ClothingUniformJumpskirtScientist - - ClothingUniformJumpsuitSeniorResearcher - - ClothingUniformJumpskirtSeniorResearcher - - ClothingHeadHatBeretSecurity - - ClothingUniformJumpsuitSec - - ClothingUniformJumpskirtSec - - ClothingUniformJumpsuitSecBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtSecBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpsuitSecGrey # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtSecGrey # DeltaV - alternate sec uniforms - - ClothingHeadHatBeretBrigmedic - - ClothingUniformJumpsuitBrigmedic - - ClothingUniformJumpskirtBrigmedic - - ClothingHeadHatBeretWarden - - ClothingHeadHatWarden - - ClothingUniformJumpsuitWarden - - ClothingUniformJumpskirtWarden - - ClothingUniformJumpsuitWardenBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtWardenBlue # DeltaV - alternate sec uniforms - - ClothingUniformJumpsuitWardenGrey # DeltaV - alternate sec uniforms - - ClothingUniformJumpskirtWardenGrey # DeltaV - alternate sec uniforms - - ClothingBeltPaperwork # DeltaV - Added the paperwork belt - - ClothingHeadHatParamedicsoft - # Winter outfits - - ClothingOuterWinterCap - - ClothingOuterWinterCE - - ClothingOuterWinterCMO - - ClothingOuterWinterHoP - - ClothingOuterWinterHoSUnarmored - - ClothingOuterWinterWardenUnarmored - - ClothingOuterWinterQM - - ClothingOuterWinterRD - - ClothingOuterChiefJustice # DeltaV - Chief Justice - - ClothingOuterStasecSweater # DeltaV - added stasec sweater to uniform printer. - - ClothingOuterWinterMusician - - ClothingOuterWinterClown - - ClothingOuterWinterMime - - ClothingOuterWinterCoat - - ClothingOuterWinterJani - - ClothingOuterWinterBar - - ClothingOuterWinterChef - - ClothingOuterWinterHydro - - ClothingOuterWinterAtmos - - ClothingOuterWinterEngi - - ClothingOuterWinterCargo - - ClothingOuterWinterMiner - - ClothingOuterWinterMed - - ClothingOuterWinterPara - - ClothingOuterWinterChem - - ClothingOuterWinterGen - - ClothingOuterWinterViro - - ClothingOuterWinterSci - - ClothingOuterWinterRobo - - ClothingOuterWinterSec - # Ties - - ClothingNeckTieRed - - ClothingNeckTieDet - - ClothingNeckTieSci - # Scarfs - All scarfs avaible in winterdrobe - - ClothingNeckScarfStripedGreen - - ClothingNeckScarfStripedBlue - - ClothingNeckScarfStripedRed - - ClothingNeckScarfStripedBrown - - ClothingNeckScarfStripedLightBlue - - ClothingNeckScarfStripedOrange - - ClothingNeckScarfStripedBlack - - ClothingNeckScarfStripedPurple - # DeltaV Ponchos - - ClothingNeckCWPSec - - ClothingNeckCWPArctic - # Carpets - - Carpet - - CarpetBlack - - CarpetPink - - CarpetBlue - - CarpetGreen - - CarpetOrange - - CarpetPurple - - CarpetCyan - - CarpetWhite - # Bedsheets - - BedsheetBlack - - BedsheetBlue - - BedsheetBrown - - BedsheetGreen - - BedsheetGrey - - BedsheetOrange - - BedsheetPurple - - BedsheetRed - - BedsheetWhite - - BedsheetYellow - - BedsheetClown - - BedsheetCosmos - - BedsheetIan - - BedsheetMedical - - BedsheetMime - - BedsheetNT - - BedsheetRainbow - - BedsheetBrigmedic + staticPacks: + - ClothingCivilian + - ClothingCargo + - ClothingCommand + - ClothingEngineering + - ClothingMedical + - ClothingScience + - ClothingSecurity + - ClothingService + - WinterCoats + - Ties + - Scarves + - Carpets + - Bedsheets + - BeltsDeltaV # DeltaV - type: EmagLatheRecipes - emagStaticRecipes: - # Clothing - - ClothingHeadHatCentcomcap - - ClothingHeadHatCentcom - - ClothingUniformJumpsuitCentcomAgent - - ClothingUniformJumpsuitCentcomFormal - - ClothingUniformJumpskirtCentcomFormalDress - - ClothingUniformJumpsuitCentcomOfficer - - ClothingUniformJumpsuitCentcomOfficial - - ClothingHeadHatSyndieMAA - - ClothingHeadHatSyndie - - ClothingUniformJumpsuitOperative - - ClothingUniformJumpskirtOperative - - ClothingUniformJumpsuitSyndieFormal - - ClothingUniformJumpskirtSyndieFormalDress - - ClothingHeadPyjamaSyndicateBlack - - ClothingUniformJumpsuitPyjamaSyndicateBlack - - ClothingHeadPyjamaSyndicatePink - - ClothingUniformJumpsuitPyjamaSyndicatePink - - ClothingHeadPyjamaSyndicateRed - - ClothingUniformJumpsuitPyjamaSyndicateRed - - ClothingOuterWinterCentcom - - ClothingOuterWinterSyndie - - ClothingOuterWinterSyndieCap - # Bedsheets - - BedsheetSyndie - # Begin DeltaV Additions - - ClothingUniformInterdyneChemist - - UniformScrubsColorCybersun - - ClothingUniformCybersunAttorney - - ClothingHeadHatSurgcapCybersun - - ClothingOuterInterdyneChemistrySuit - - ClothingOuterCoatCybersunWindbreaker - - ClothingMaskInterdyneChemistry - - ClothingHeadHatSurgcapCybersun - - ClothingUniformCybersunHazard - - ClothingUniformCybersunCasual - - ClothingUniformCybersunRND - - ClothingOuterCybersunOvercoat - - ClothingBeltSyndicateUtility - # End DeltaV Additions + emagStaticPacks: + - ClothingCentComm + - ClothingSyndie - type: MaterialStorage whitelist: tags: @@ -1414,28 +579,9 @@ reagentOutputSlotId: beaker_slot idleState: icon runningState: building - staticRecipes: - - BioGenMilk - - BioGenMilkSoy - - BioGenEthanol - - BioGenCream - - BioGenBlackpepper - - BioGenEnzyme - - BioGenFlour - - BioGenSugar - - BioGenMonkeyCube - - BioGenKoboldCube - - BioGenMaterialCloth1 - - BioGenMaterialCardboard1 - - BioGenPaper - - BioGenPaperRolling1 - - BioGenCandle - - BioGenPlantBGone - - BioGenWeedKiller - - BioGenPestKiller - - BioGenLeft4Zed - - BioGenEZNutrient - - BioGenRobustHarvest + staticPacks: + - BioGenIngredientsStatic + - BioGenMaterialsStatic - type: entity parent: BaseLathe @@ -1467,27 +613,17 @@ runningState: building defaultProductionAmount: 10 priceModifier: 1 # DeltaV - staticRecipes: - - BluespaceCrystal #Nyano - Summary: Bluespace Crystals can be created here. - - SheetSteel - - SheetGlass1 - - SheetRGlassRaw - - SheetPlasma1 - - SheetPGlass1 - - SheetRPGlass1 - - SheetUranium1 - - IngotGold1 - - IngotSilver1 - - MaterialBananium1 - - MaterialDiamond - - type: MaterialStorageMagnetPickup # Delta V - Summary: Adds magnet pull from Frontier + staticPacks: + - OreSmelting + - RGlassSmelting + - type: MaterialStorageMagnetPickup # DeltaV - Adds magnet pull from Frontier magnetEnabled: True - range: 0.30 # Delta V - End Magnet Pull + range: 0.30 # DeltaV - End Magnet Pull - type: MiningPoints # DeltaV - Source of mining points for miners transferSound: path: /Audio/Effects/Cargo/ping.ogg - type: MiningPointsLathe # DeltaV - - type: PlaceableSurface # DeltaV: Allow ore bags to dump into it directly + - type: PlaceableSurface # DeltaV - Allow ore bags to dump into it directly isPlaceable: false # but not place on it if you just click it with a random item - type: entity @@ -1503,22 +639,10 @@ - type: Lathe materialUseMultiplier: 0.75 timeMultiplier: 0.5 - staticRecipes: - - BluespaceCrystal # DeltaV - Bluespace Crystals can be created here. - - SheetSteel - - SheetGlass1 - - SheetRGlassRaw - - SheetPlasma1 - - SheetPGlass1 - - SheetRPGlass1 - - SheetPlasteel1 - - SheetUranium1 - - SheetUGlass1 - - SheetRUGlass1 - - IngotGold1 - - IngotSilver1 - - MaterialBananium1 - - MaterialDiamond + staticPacks: + - OreSmelting + - RGlassSmelting + - AdvancedSmelting - type: entity parent: BaseLathe @@ -1547,9 +671,8 @@ - type: Lathe idleState: base_machine runningState: base_machine_processing - staticRecipes: - - MaterialSheetMeat - - SheetPaper + staticPacks: + - SheetifierStatic - type: entity parent: BaseLathe @@ -1576,69 +699,8 @@ producingSound: /Audio/Machines/cutter.ogg idleState: icon runningState: building - staticRecipes: - - FloorTileItemDark - - FloorTileItemDarkDiagonalMini - - FloorTileItemDarkDiagonal - - FloorTileItemDarkHerringbone - - FloorTileItemDarkMini - - FloorTileItemDarkMono - - FloorTileItemDarkPavement - - FloorTileItemDarkPavementVertical - - FloorTileItemDarkOffset - - FloorTileItemSteelCheckerDark - - FloorTileItemSteel - - FloorTileItemSteelOffset - - FloorTileItemSteelDiagonalMini - - FloorTileItemSteelDiagonal - - FloorTileItemSteelHerringbone - - FloorTileItemSteelMini - - FloorTileItemSteelMono - - FloorTileItemSteelPavement - - FloorTileItemSteelPavementVertical - - FloorTileItemWhite - - FloorTileItemWhiteOffset - - FloorTileItemWhiteDiagonalMini - - FloorTileItemWhiteDiagonal - - FloorTileItemWhiteHerringbone - - FloorTileItemWhiteMini - - FloorTileItemWhiteMono - - FloorTileItemWhitePavement - - FloorTileItemWhitePavementVertical - - FloorTileItemSteelCheckerLight - - FloorTileItemGratingMaint - - FloorTileItemTechmaint - - FloorTileItemSteelMaint - - FloorTileItemWood - - FloorTileItemWoodLarge - - FloorTileItemWoodPattern - - FloorTileItemConcrete - - FloorTileItemConcreteMono - - FloorTileItemConcreteSmooth - - FloorTileItemGrayConcrete - - FloorTileItemGrayConcreteMono - - FloorTileItemGrayConcreteSmooth - - FloorTileItemOldConcrete - - FloorTileItemOldConcreteMono - - FloorTileItemOldConcreteSmooth - # DeltaV: Add "recreational" / service dept. tiles - - FloorTileItemBar - - FloorTileItemFreezer - - FloorTileItemHydro - - FloorTileItemKitchen - - FloorTileItemLaundry - - FloorTileItemShowroom - - FloorTileItemClown - - FloorTileItemMime - - FloorTileItemArcadeBlue - - FloorTileItemArcadeBlue2 - - FloorTileItemArcadeRed - - FloorTileItemEighties - - FloorTileItemBoxing - - FloorTileItemGym - - FloorTileItemCarpetClown - - FloorTileItemCarpetOffice - # End DeltaV + staticPacks: + - FloorTilesStatic - type: MaterialStorage whitelist: tags: @@ -1647,52 +709,3 @@ - Wooden - RawMaterial - Plastic - -# Shitmed Change Start -- type: entity - id: MedicalBiofabricator - parent: BaseLathe - name: medical biofabricator - description: Produces organs and other organic matter that can be surgically grafted onto patients with biomass. - components: - - type: Sprite - sprite: _Shitmed/Structures/Machines/limbgrower.rsi - snapCardinals: true - layers: - - state: limbgrower_idleoff - map: ["enum.LatheVisualLayers.IsRunning"] -# - state: limbgrower_idleoff -# shader: unshaded -# map: ["enum.PowerDeviceVisualLayers.Powered"] -# - state: inserting -# map: ["enum.MaterialStorageVisualLayers.Inserting"] -# - state: panel -# map: ["enum.WiresVisualLayers.MaintenancePanel"] - - type: Machine - board: MedicalBiofabMachineBoard - - type: MaterialStorage - whitelist: - tags: - - Sheet - - RawMaterial - - type: Lathe - idleState: limbgrower_idleoff - runningState: limbgrower_idleon - staticRecipes: - - SynthLiver - - SynthHeart - - SynthLungs - - SynthEyes - - SynthLeftLeg - - SynthRightLeg - - SynthLeftFoot - - SynthRightFoot - - SynthLeftArm - - SynthRightArm - - SynthLeftHand - - SynthRightHand - - type: EmagLatheRecipes - emagStaticRecipes: - - PizzaLeftArm - - PizzaRightArm -# Shitmed Change End diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/animal_cubes.yml b/Resources/Prototypes/Recipes/Lathes/Packs/animal_cubes.yml new file mode 100644 index 00000000000..1a1cd50ae77 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/animal_cubes.yml @@ -0,0 +1,19 @@ +## Static + +- type: latheRecipePack + id: FriendlyCubesStatic + recipes: + - MonkeyCube + - KoboldCube + - CowCube + - GoatCube + - MothroachCube + - MouseCube + - CockroachCube + +- type: latheRecipePack + id: HostileCubesStatic + recipes: + - AbominationCube + - SpaceCarpCube + - SpaceTickCube diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/bedsheets.yml b/Resources/Prototypes/Recipes/Lathes/Packs/bedsheets.yml new file mode 100644 index 00000000000..7d55c710c6f --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/bedsheets.yml @@ -0,0 +1,23 @@ +## Static + +- type: latheRecipePack + id: Bedsheets + recipes: + - BedsheetBlack + - BedsheetBlue + - BedsheetBrown + - BedsheetGreen + - BedsheetGrey + - BedsheetOrange + - BedsheetPurple + - BedsheetRed + - BedsheetWhite + - BedsheetYellow + - BedsheetClown + - BedsheetCosmos + - BedsheetIan + - BedsheetMedical + - BedsheetMime + - BedsheetNT + - BedsheetRainbow + - BedsheetBrigmedic diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/biogen.yml b/Resources/Prototypes/Recipes/Lathes/Packs/biogen.yml new file mode 100644 index 00000000000..49ac26c52ba --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/biogen.yml @@ -0,0 +1,30 @@ +## Static + +- type: latheRecipePack + id: BioGenIngredientsStatic + recipes: + - BioGenMilk + - BioGenMilkSoy + - BioGenEthanol + - BioGenCream + - BioGenBlackpepper + - BioGenEnzyme + - BioGenFlour + - BioGenSugar + - BioGenMonkeyCube + - BioGenKoboldCube + - BioGenCandle + - BioGenPlantBGone + - BioGenWeedKiller + - BioGenPestKiller + - BioGenLeft4Zed + - BioGenEZNutrient + - BioGenRobustHarvest + +- type: latheRecipePack + id: BioGenMaterialsStatic + recipes: + - BioGenMaterialCloth1 + - BioGenMaterialCardboard1 + - BioGenPaper + - BioGenPaperRolling1 diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml b/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml new file mode 100644 index 00000000000..fc6ff6f290b --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml @@ -0,0 +1,33 @@ +## Static + +- type: latheRecipePack + id: CargoStatic + recipes: + - AppraisalTool + - Pickaxe + +- type: latheRecipePack + id: CargoBoardsStatic + recipes: + - OreProcessorMachineCircuitboard + - SalvageMagnetMachineCircuitboard + +## Dynamic + +- type: latheRecipePack + parent: + - MiningDeltaV # DeltaV + id: Mining + recipes: + - MiningDrill + - MiningDrillDiamond + - MineralScannerEmpty + - AdvancedMineralScannerEmpty + - OreBagOfHolding + +- type: latheRecipePack + id: CargoBoards + recipes: + - OreProcessorIndustrialMachineCircuitboard + - CargoTelepadMachineCircuitboard + - ShuttleGunKineticCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml new file mode 100644 index 00000000000..c8c00baaecf --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml @@ -0,0 +1,239 @@ +## Static + +- type: latheRecipePack + id: ClothingCivilian + recipes: + - ClothingUniformJumpsuitColorGrey + - ClothingUniformJumpskirtColorGrey + +- type: latheRecipePack + parent: + - ClothingCargoDeltaV # DeltaV + id: ClothingCargo + recipes: + - ClothingUniformJumpsuitCargo + - ClothingUniformJumpskirtCargo + - ClothingUniformJumpsuitSalvageSpecialist + - ClothingHeadHatQMsoft + - ClothingHeadHatBeretQM + - ClothingUniformJumpsuitQM + - ClothingUniformJumpskirtQM + - ClothingUniformJumpsuitQMTurtleneck + - ClothingUniformJumpskirtQMTurtleneck + - ClothingUniformJumpsuitQMFormal + +- type: latheRecipePack + parent: + - ClothingCommandDeltaV # DeltaV + id: ClothingCommand + recipes: + # Captain + - ClothingHeadHatCapcap + - ClothingHeadHatCaptain + - ClothingUniformJumpsuitCaptain + - ClothingUniformJumpskirtCaptain + - ClothingUniformJumpsuitCapFormal + - ClothingUniformJumpskirtCapFormalDress + # HoP + - ClothingHeadHatHopcap + - ClothingUniformJumpsuitHoP + - ClothingUniformJumpskirtHoP + +- type: latheRecipePack + id: ClothingEngineering + recipes: + - ClothingHeadHatBeretEngineering + - ClothingUniformJumpsuitChiefEngineer + - ClothingUniformJumpskirtChiefEngineer + - ClothingUniformJumpsuitChiefEngineerTurtle + - ClothingUniformJumpskirtChiefEngineerTurtle + - ClothingUniformJumpsuitEngineering + - ClothingUniformJumpskirtEngineering + - ClothingUniformJumpsuitSeniorEngineer + - ClothingUniformJumpskirtSeniorEngineer + +- type: latheRecipePack + id: ClothingMedical + recipes: + - ClothingUniformJumpsuitChemistry + - ClothingUniformJumpskirtChemistry + - ClothingHeadHatBeretCmo + - ClothingUniformJumpsuitCMO + - ClothingUniformJumpskirtCMO + - ClothingUniformJumpsuitCMOTurtle + - ClothingUniformJumpskirtCMOTurtle + - ClothingHeadHatBeretSeniorPhysician + - ClothingUniformJumpsuitMedicalDoctor + - ClothingUniformJumpskirtMedicalDoctor + - ClothingUniformJumpsuitSeniorPhysician + - ClothingUniformJumpskirtSeniorPhysician + - ClothingUniformJumpsuitParamedic + - ClothingUniformJumpskirtParamedic + - ClothingHeadHatParamedicsoft + +- type: latheRecipePack + parent: + - ClothingEpistemics # DeltaV + id: ClothingScience + recipes: + - ClothingHeadHatBeretRND + - ClothingUniformJumpsuitResearchDirector + - ClothingUniformJumpskirtResearchDirector + - ClothingUniformJumpsuitScientist + - ClothingUniformJumpskirtScientist + - ClothingUniformJumpsuitSeniorResearcher + - ClothingUniformJumpskirtSeniorResearcher + +- type: latheRecipePack + parent: + - ClothingSecurityDeltaV # DeltaV + id: ClothingSecurity + recipes: + - ClothingUniformJumpsuitDetective + - ClothingUniformJumpskirtDetective + - ClothingHeadHatBeretHoS + - ClothingHeadHatHoshat + - ClothingUniformJumpsuitHoS + - ClothingUniformJumpskirtHoS + - ClothingUniformJumpsuitHosFormal + - ClothingUniformJumpskirtHosFormal + - ClothingUniformJumpsuitHoSAlt + - ClothingUniformJumpskirtHoSAlt + - ClothingUniformJumpsuitHoSBlue + - ClothingUniformJumpsuitHoSGrey + - ClothingUniformJumpsuitHoSParadeMale + - ClothingUniformJumpskirtHoSParadeMale + - ClothingUniformJumpsuitSeniorOfficer + - ClothingUniformJumpskirtSeniorOfficer + - ClothingUniformJumpsuitPrisoner + - ClothingUniformJumpskirtPrisoner + - ClothingHeadHatBeretSecurity + - ClothingUniformJumpsuitSec + - ClothingUniformJumpskirtSec + - ClothingHeadHatBeretBrigmedic + - ClothingUniformJumpsuitBrigmedic + - ClothingUniformJumpskirtBrigmedic + - ClothingHeadHatBeretWarden + - ClothingHeadHatWarden + - ClothingUniformJumpsuitWarden + - ClothingUniformJumpskirtWarden + +- type: latheRecipePack + id: ClothingService + recipes: + - ClothingUniformJumpsuitBartender + - ClothingUniformJumpskirtBartender + - ClothingUniformJumpsuitChaplain + - ClothingUniformJumpskirtChaplain + - ClothingUniformJumpsuitChef + - ClothingUniformJumpskirtChef + - ClothingUniformJumpsuitClown + - ClothingUniformJumpsuitHydroponics + - ClothingUniformJumpskirtHydroponics + - ClothingUniformJumpsuitJanitor + - ClothingUniformJumpskirtJanitor + - ClothingUniformJumpsuitLawyerBlack + - ClothingUniformJumpsuitLibrarian + - ClothingUniformJumpskirtColorLightBrown + - ClothingUniformJumpsuitMime + - ClothingUniformJumpskirtMime + - ClothingUniformJumpsuitMusician + +- type: latheRecipePack + parent: + - WinterCoatsDeltaV # DeltaV + id: WinterCoats + recipes: + - ClothingOuterWinterCap + - ClothingOuterWinterCE + - ClothingOuterWinterCMO + - ClothingOuterWinterHoP + - ClothingOuterWinterHoSUnarmored + - ClothingOuterWinterWardenUnarmored + - ClothingOuterWinterQM + - ClothingOuterWinterRD + - ClothingOuterWinterMusician + - ClothingOuterWinterClown + - ClothingOuterWinterMime + - ClothingOuterWinterCoat + - ClothingOuterWinterJani + - ClothingOuterWinterBar + - ClothingOuterWinterChef + - ClothingOuterWinterHydro + - ClothingOuterWinterAtmos + - ClothingOuterWinterEngi + - ClothingOuterWinterCargo + - ClothingOuterWinterMiner + - ClothingOuterWinterMed + - ClothingOuterWinterPara + - ClothingOuterWinterChem + - ClothingOuterWinterGen + - ClothingOuterWinterViro + - ClothingOuterWinterSci + - ClothingOuterWinterRobo + - ClothingOuterWinterSec + +- type: latheRecipePack + id: Ties + recipes: + - ClothingNeckTieRed + - ClothingNeckTieDet + - ClothingNeckTieSci + +- type: latheRecipePack + id: Scarves + recipes: + - ClothingNeckScarfStripedGreen + - ClothingNeckScarfStripedBlue + - ClothingNeckScarfStripedRed + - ClothingNeckScarfStripedBrown + - ClothingNeckScarfStripedLightBlue + - ClothingNeckScarfStripedOrange + - ClothingNeckScarfStripedBlack + - ClothingNeckScarfStripedPurple + +- type: latheRecipePack + id: Carpets + recipes: + - Carpet + - CarpetBlack + - CarpetPink + - CarpetBlue + - CarpetGreen + - CarpetOrange + - CarpetPurple + - CarpetCyan + - CarpetWhite + +- type: latheRecipePack + id: ClothingCentComm + recipes: + - ClothingHeadHatCentcomcap + - ClothingHeadHatCentcom + - ClothingUniformJumpsuitCentcomAgent + - ClothingUniformJumpsuitCentcomFormal + - ClothingUniformJumpskirtCentcomFormalDress + - ClothingUniformJumpsuitCentcomOfficer + - ClothingUniformJumpsuitCentcomOfficial + +- type: latheRecipePack + parent: + - ClothingSyndieDeltaV # DeltaV + id: ClothingSyndie + recipes: + - ClothingHeadHatSyndieMAA + - ClothingHeadHatSyndie + - ClothingUniformJumpsuitOperative + - ClothingUniformJumpskirtOperative + - ClothingUniformJumpsuitSyndieFormal + - ClothingUniformJumpskirtSyndieFormalDress + - ClothingHeadPyjamaSyndicateBlack + - ClothingUniformJumpsuitPyjamaSyndicateBlack + - ClothingHeadPyjamaSyndicatePink + - ClothingUniformJumpsuitPyjamaSyndicatePink + - ClothingHeadPyjamaSyndicateRed + - ClothingUniformJumpsuitPyjamaSyndicateRed + - ClothingOuterWinterCentcom + - ClothingOuterWinterSyndie + - ClothingOuterWinterSyndieCap + - BedsheetSyndie diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml b/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml new file mode 100644 index 00000000000..ead9d8b3e3b --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/engineering.yml @@ -0,0 +1,91 @@ +## Static + +- type: latheRecipePack + id: ToolsStatic + recipes: + - Wirecutter + - Screwdriver + - Welder + - Wrench + - CrowbarGreen + - Multitool + - NetworkConfigurator + - Signaller + - SprayPainter + - FlashlightLantern + - HandheldGPSBasic + - TRayScanner + - UtilityBelt + - HandheldStationMap + - ClothingHeadHatWelding + - ClothingHeadHatCone + +- type: latheRecipePack + id: AtmosStatic + recipes: + - AirTank + - GasAnalyzer + +- type: latheRecipePack + id: ElectronicsStatic + recipes: + - IntercomElectronics + - FirelockElectronics + - DoorElectronics + - AirAlarmElectronics + - StationMapElectronics + - FireAlarmElectronics + - MailingUnitElectronics + - SignalTimerElectronics + - APCElectronics + - SMESMachineCircuitboard + - SubstationMachineCircuitboard + - WallmountSubstationElectronics + - CellRechargerCircuitboard + - WeaponCapacitorRechargerCircuitboard + - FreezerElectronics + +- type: latheRecipePack + id: EngineeringBoardsStatic + recipes: + - SpaceHeaterMachineCircuitBoard + +## Dynamic + +- type: latheRecipePack + id: AdvancedTools + recipes: + - PowerDrill + - WelderExperimental + - JawsOfLife + +- type: latheRecipePack + parent: + - AtmosToolsDeltaV # DeltaV + id: AtmosTools + recipes: + - HolofanProjector + +- type: latheRecipePack + id: EngineeringWeapons + recipes: + - WeaponParticleDecelerator + +- type: latheRecipePack + parent: + - EngineeringBoardsDeltaV # DeltaV + id: EngineeringBoards + recipes: + - ThermomachineFreezerMachineCircuitBoard + - HellfireFreezerMachineCircuitBoard + - PortableScrubberMachineCircuitBoard + - SolarControlComputerCircuitboard + - SolarTrackerElectronics + - GasRecyclerMachineCircuitboard + - PortableGeneratorPacmanMachineCircuitboard + - PortableGeneratorSuperPacmanMachineCircuitboard + - PortableGeneratorJrPacmanMachineCircuitboard + - EmitterCircuitboard + - TelecomServerCircuitboard + - SMESAdvancedMachineCircuitboard + - HolopadMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml new file mode 100644 index 00000000000..b50331cf64f --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml @@ -0,0 +1,110 @@ +## Static + +- type: latheRecipePack + id: TopicalsStatic + recipes: + - Brutepack + - Ointment + - Gauze + +- type: latheRecipePack + id: BasicChemistryStatic + recipes: + - Beaker + - LargeBeaker + - Syringe + - PillCanister + - HandLabeler + +- type: latheRecipePack + parent: + - BasicChemistryStatic + id: ChemistryStatic + recipes: + - Jug + - ChemistryEmptyBottle01 + - ClothingEyesGlassesChemical + +- type: latheRecipePack + parent: + - SurgeryStaticShitmed # Shitmed change + id: SurgeryStatic + recipes: + - Scalpel + - Retractor + - Cautery + - Drill + - Saw + - Hemostat + +- type: latheRecipePack + parent: + - MedicalStaticDeltaV # DeltaV + id: MedicalStatic + recipes: + - Implanter + - Defibrillator + - HandheldHealthAnalyzer + - DiseaseSwab + - BodyBag + - WhiteCane + +- type: latheRecipePack + id: RollerBedsStatic + recipes: + - RollerBedSpawnFolded + - CheapRollerBedSpawnFolded + - EmergencyRollerBedSpawnFolded + +- type: latheRecipePack + id: MedicalClothingStatic + recipes: + - ClothingHandsGlovesLatex + - ClothingHandsGlovesNitrile + - ClothingMaskSterile + +# These are all empty +- type: latheRecipePack + id: EmptyMedkitsStatic + recipes: + - Medkit + - MedkitBurn + - MedkitToxin + - MedkitO2 + - MedkitBrute + - MedkitAdvanced + - MedkitRadiation + - MedkitCombat + +- type: latheRecipePack + parent: + - MedicalBoardsStaticShitmed # Shitmed change + id: MedicalBoardsStatic + recipes: + - ElectrolysisUnitMachineCircuitboard + - CentrifugeMachineCircuitboard + - ChemDispenserMachineCircuitboard + - ChemMasterMachineCircuitboard + - CondenserMachineCircuitBoard + - HotplateMachineCircuitboard + +## Dynamic + +# Shared with protolathe +- type: latheRecipePack + id: Chemistry + recipes: + - ChemicalPayload + - CryostasisBeaker + - SyringeCryostasis + - BluespaceBeaker + - SyringeBluespace + +- type: latheRecipePack + parent: + - MedicalBoardsDeltaV # DeltaV + id: MedicalBoards + recipes: + - StasisBedMachineCircuitboard + - CryoPodMachineCircuitboard + - BiomassReclaimerMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/ore.yml b/Resources/Prototypes/Recipes/Lathes/Packs/ore.yml new file mode 100644 index 00000000000..c84436c0bd4 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/ore.yml @@ -0,0 +1,27 @@ +## Static + +- type: latheRecipePack + id: OreSmelting + recipes: + - SheetSteel + - SheetGlass1 + - SheetPlasma1 + - SheetUranium1 + - IngotGold1 + - IngotSilver1 + - MaterialBananium1 + - MaterialDiamond + +- type: latheRecipePack + id: RGlassSmelting + recipes: + - SheetRGlassRaw + - SheetPGlass1 + - SheetRPGlass1 + +- type: latheRecipePack + id: AdvancedSmelting + recipes: + - SheetPlasteel1 + - SheetUGlass1 + - SheetRUGlass1 diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml new file mode 100644 index 00000000000..98242c318b9 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml @@ -0,0 +1,79 @@ +## Static + +- type: latheRecipePack + parent: + - IPCPartsStatic # Shitmed Change + id: RoboticsStatic + recipes: + - MMI + - PositronicBrain + - SciFlash + - CyborgEndoskeleton + +- type: latheRecipePack + id: BorgModulesStatic + recipes: + - BorgModuleCable + - BorgModuleFireExtinguisher + - BorgModuleRadiationDetection + - BorgModuleTool + +- type: latheRecipePack + id: BorgLimbsStatic + recipes: + - LeftArmBorg + - RightArmBorg + - LeftLegBorg + - RightLegBorg + - LightHeadBorg + - TorsoBorg + +## Dynamic + +- type: latheRecipePack + id: Robotics + recipes: + - ProximitySensor + +- type: latheRecipePack + parent: + - BorgModulesDeltaV # DeltaV + - BorgModulesShitmed # Shitmed change + id: BorgModules + recipes: + - BorgModuleAdvancedCleaning + - BorgModuleAdvancedTool + - BorgModuleGPS + - BorgModuleArtifact + - BorgModuleAnomaly + - BorgModuleGardening + - BorgModuleHarvesting + - BorgModuleDefibrillator + - BorgModuleAdvancedTreatment + +- type: latheRecipePack + id: MechParts + recipes: + - RipleyHarness + - RipleyLArm + - RipleyRArm + - RipleyLLeg + - RipleyRLeg + - HonkerHarness + - HonkerLArm + - HonkerRArm + - HonkerLLeg + - HonkerRLeg + - HamtrHarness + - HamtrLArm + - HamtrRArm + - HamtrLLeg + - HamtrRLeg + - VimHarness + +- type: latheRecipePack + id: MechEquipment + recipes: + - MechEquipmentGrabber + - MechEquipmentHorn + - MechEquipmentGrabberSmall diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/science.yml b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml new file mode 100644 index 00000000000..f823569a221 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml @@ -0,0 +1,129 @@ +## Static + +- type: latheRecipePack + id: ScienceBoardsStatic + recipes: + - ProtolatheMachineCircuitboard + - AutolatheMachineCircuitboard + - CircuitImprinterMachineCircuitboard + - ExosuitFabricatorMachineCircuitboard + - CutterMachineCircuitboard + - BorgChargerCircuitboard + +- type: latheRecipePack + id: CircuitFloorsStatic + recipes: + - FloorGreenCircuit + - FloorBlueCircuit + - FloorRedCircuit + +## Dynamic + +- type: latheRecipePack + id: ScienceEquipment + recipes: + - AnomalyScanner + - NodeScanner + - AnomalyLocator + - AnomalyLocatorWide + - HoloprojectorField + - SignallerAdvanced + - DeviceQuantumSpinInverter + +- type: latheRecipePack + id: ScienceClothing + recipes: + - ClothingShoesBootsMagSci + - ClothingShoesBootsMoon + - ClothingShoesBootsSpeed + - ClothingBackpackHolding + - ClothingBackpackSatchelHolding + - ClothingBackpackDuffelHolding + +- type: latheRecipePack + id: PowerCells + recipes: + - PowerCellMicroreactor + - PowerCellHigh + +- type: latheRecipePack + id: ScienceWeapons + recipes: + - WeaponPistolCHIMP + #- WeaponForceGun # DeltaV + #- WeaponLaserSvalinn # DeltaV + - WeaponProtoKineticAccelerator + #- WeaponTetherGun # DeltaV + - WeaponGauntletGorilla + +- type: latheRecipePack + id: FauxTiles + recipes: + - FauxTileAstroGrass + - FauxTileMowedAstroGrass + - FauxTileJungleAstroGrass + - FauxTileAstroIce + - FauxTileAstroSnow + - FauxTileAstroAsteroidSand + +# Only contains parts for making basic modular grenades, no actual explosives +- type: latheRecipePack + id: ScienceExplosives + recipes: + - ChemicalPayload + - FlashPayload + - TimerTrigger + - SignalTrigger + - VoiceTrigger + +- type: latheRecipePack + parent: + - EpistemicsBoards # DeltaV + id: ScienceBoards + recipes: + - TurboItemRechargerCircuitboard + - AutolatheHyperConvectionMachineCircuitboard + - ProtolatheHyperConvectionMachineCircuitboard + - CircuitImprinterHyperConvectionMachineCircuitboard + - TechDiskComputerCircuitboard + - FlatpackerMachineCircuitboard + - SheetifierMachineCircuitboard + - PowerCageRechargerCircuitboard + - AnalysisComputerCircuitboard + - AnomalyVesselCircuitboard + - AnomalyVesselExperimentalCircuitboard + - AnomalySynchronizerCircuitboard + - APECircuitboard + - ArtifactAnalyzerMachineCircuitboard + - ArtifactCrusherMachineCircuitboard + +- type: latheRecipePack + id: CameraBoards + recipes: + - SurveillanceCameraRouterCircuitboard + - SurveillanceCameraMonitorCircuitboard + - SurveillanceWirelessCameraMonitorCircuitboard + - SurveillanceCameraWirelessRouterCircuitboard + - ComputerTelevisionCircuitboard + - SurveillanceWirelessCameraMovableCircuitboard + - SurveillanceWirelessCameraAnchoredCircuitboard + +- type: latheRecipePack + id: MechBoards + recipes: + - RipleyCentralElectronics + - RipleyPeripheralsElectronics + - HonkerCentralElectronics + - HonkerPeripheralsElectronics + - HonkerTargetingElectronics + - HamtrCentralElectronics + - HamtrPeripheralsElectronics + +- type: latheRecipePack + id: ShuttleBoards + recipes: + - ShuttleConsoleCircuitboard + - RadarConsoleCircuitboard + - ThrusterMachineCircuitboard + - GyroscopeMachineCircuitboard + - MiniGravityGeneratorCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml new file mode 100644 index 00000000000..195ba5ff2cd --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml @@ -0,0 +1,146 @@ +## Static recipes + +- type: latheRecipePack + parent: + - SecurityEquipmentStaticDeltaV # DeltaV + id: SecurityEquipmentStatic + recipes: + - ClothingEyesHudSecurity + - ForensicPad + - Handcuffs + - TargetClown + - TargetHuman + - TargetSyndicate + - Zipties + +# Practice ammo/mags and practice weapons +- type: latheRecipePack + parent: + - SecurityPracticeStaticDeltaV # DeltaV + id: SecurityPracticeStatic + recipes: + - BoxShotgunPractice + - MagazineBoxLightRiflePractice + - MagazineBoxMagnumPractice + - MagazineBoxPistolPractice + - MagazineBoxRiflePractice + - WeaponDisablerPractice + - WeaponLaserCarbinePractice + - WeaponFlareGunSecurity + +# Shared between secfab and emagged autolathe +- type: latheRecipePack + parent: + - SecurityAmmoStaticDeltaV # DeltaV + id: SecurityAmmoStatic + recipes: + - BoxLethalshot + - BoxShotgunSlug + - MagazineBoxLightRifle + - MagazineBoxMagnum + - MagazineBoxPistol + - MagazineBoxRifle + - MagazineLightRifle + - MagazineLightRifleEmpty + - MagazinePistol + - MagazinePistolEmpty + - MagazinePistolSubMachineGun + - MagazinePistolSubMachineGunEmpty + - MagazinePistolSubMachineGunTopMounted + - MagazinePistolSubMachineGunTopMountedEmpty + - MagazineRifle + - MagazineRifleEmpty + - MagazineShotgun + - MagazineShotgunEmpty + - MagazineShotgunSlug + - SpeedLoaderMagnum + - SpeedLoaderMagnumEmpty + +- type: latheRecipePack + parent: + - SecurityWeaponsStaticDeltaV # DeltaV + id: SecurityWeaponsStatic + recipes: + - Flash + - Stunbaton + - CombatKnife + - RiotShield + +## Dynamic recipes + +- type: latheRecipePack + parent: + - SecurityEquipmentDeltaV # DeltaV + - SecurityCybernetics # Shitmed change + id: SecurityEquipment + recipes: + - ClothingBackpackElectropack + - HoloprojectorSecurity + - PortableRecharger + - PowerCageHigh + - PowerCageMedium + - PowerCageSmall + - TelescopicShield + +- type: latheRecipePack + id: SecurityBoards + recipes: + - ShuttleGunDusterCircuitboard + - ShuttleGunFriendshipCircuitboard + - ShuttleGunPerforatorCircuitboard + - ShuttleGunSvalinnMachineGunCircuitboard + +- type: latheRecipePack + parent: + - ScienceExplosives # sec gets everything for modular grenade making that sci does + id: SecurityExplosives + recipes: + - ExplosivePayload + - GrenadeBlast + - GrenadeEMP + - GrenadeFlash + - MagazineGrenadeEmpty + +# Shared between secfab and emagged protolathe +- type: latheRecipePack + parent: + - SecurityAmmoDeltaV # DeltaV + id: SecurityAmmo + recipes: + #- BoxBeanbag # DeltaV - made roundstart + - BoxShotgunIncendiary + - BoxShotgunUranium + #- BoxShellTranquilizer # DeltaV - made roundstart + - MagazineBoxLightRifleIncendiary + - MagazineBoxLightRifleUranium + - MagazineBoxMagnumIncendiary + - MagazineBoxMagnumUranium + - MagazineBoxPistolIncendiary + - MagazineBoxPistolUranium + - MagazineBoxRifleIncendiary + - MagazineBoxRifleUranium + - MagazineLightRifleIncendiary + - MagazineLightRifleUranium + - MagazinePistolIncendiary + - MagazinePistolUranium + - MagazinePistolSubMachineGunIncendiary + - MagazinePistolSubMachineGunUranium + - MagazineRifleIncendiary + - MagazineRifleUranium + - MagazineShotgunBeanbag + - MagazineShotgunIncendiary + - SpeedLoaderMagnumIncendiary + - SpeedLoaderMagnumUranium + +- type: latheRecipePack + parent: + - SecurityWeaponsDeltaV # DeltaV + id: SecurityWeapons + recipes: + - Truncheon + - WeaponAdvancedLaser + #- WeaponDisabler # DeltaV - made roundstart + - WeaponDisablerSMG + - WeaponLaserCannon + - WeaponLaserCarbine + - WeaponXrayCannon diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml new file mode 100644 index 00000000000..3705c46e357 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml @@ -0,0 +1,64 @@ +## Static + +- type: latheRecipePack + id: ServiceStatic + recipes: + - Bucket + - DrinkMug + - DrinkMugMetal + - DrinkGlass + - DrinkShotGlass + - DrinkGlassCoupeShaped + - CustomDrinkJug + - FoodPlate + - FoodPlateSmall + - FoodPlatePlastic + - FoodPlateSmallPlastic + - FoodBowlBig + - FoodPlateTin + - FoodPlateMuffinTin + - FoodKebabSkewer + - SprayBottle + - MopItem + - Holoprojector + - WetFloorSign + +- type: latheRecipePack + parent: + - ServiceBoardsStaticDeltaV # DeltaV + id: ServiceBoardsStatic + recipes: + - BiogeneratorMachineCircuitboard + - UniformPrinterMachineCircuitboard + - MicrowaveMachineCircuitboard + - ReagentGrinderMachineCircuitboard + - ElectricGrillMachineCircuitboard + - BoozeDispenserMachineCircuitboard + - SodaDispenserMachineCircuitboard + +## Dynamic + +- type: latheRecipePack + id: Janitor + recipes: + - AdvMopItem + - WeaponSprayNozzle + - ClothingBackpackWaterTank + - MegaSprayBottle + +- type: latheRecipePack + id: Instruments + recipes: + - SynthesizerInstrument + +- type: latheRecipePack + id: ServiceBoards + recipes: + - BiofabricatorMachineCircuitboard + - FatExtractorMachineCircuitboard + - HydroponicsTrayMachineCircuitboard # roundstart gear being unlocked roundstart when + - SeedExtractorMachineCircuitboard # ^ + - MassMediaCircuitboard + - ReagentGrinderIndustrialMachineCircuitboard + - JukeboxCircuitBoard + - DawInstrumentMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml new file mode 100644 index 00000000000..727377bb4a8 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml @@ -0,0 +1,53 @@ +## Static + +- type: latheRecipePack + id: MaterialsStatic + recipes: + - SheetRGlass + +- type: latheRecipePack + id: PartsStatic + recipes: + - Igniter + - ModularReceiver + - MicroManipulatorStockPart + - MatterBinStockPart + - CapacitorStockPart + - ConveyorBeltAssembly + +- type: latheRecipePack + id: LightsStatic + recipes: + - LightTube + - LedLightTube + - SodiumLightTube + - ExteriorLightTube + - LightBulb + - LedLightBulb + - DimLightBulb + - WarmLightBulb + +- type: latheRecipePack + id: PowerCellsStatic + recipes: + - PowerCellSmall + - PowerCellMedium + +- type: latheRecipePack + id: CablesStatic + recipes: + - CableStack + - CableMVStack + - CableHVStack + +## Dynamic + +# Things you'd expect sci salv and engi to make use of +- type: latheRecipePack + parent: + - EquipmentDeltaV # DeltaV + id: Equipment + recipes: + - HandHeldMassScanner + - ClothingMaskWeldingGas + - SignallerAdvanced diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/sheetifier.yml b/Resources/Prototypes/Recipes/Lathes/Packs/sheetifier.yml new file mode 100644 index 00000000000..18aaef55c6e --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/sheetifier.yml @@ -0,0 +1,7 @@ +## Static + +- type: latheRecipePack + id: SheetifierStatic + recipes: + - MaterialSheetMeat + - SheetPaper diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/tiles.yml b/Resources/Prototypes/Recipes/Lathes/Packs/tiles.yml new file mode 100644 index 00000000000..e5c3a44dcb8 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/tiles.yml @@ -0,0 +1,51 @@ +## Static + +- type: latheRecipePack + parent: + - FloorTilesStaticDeltaV # DeltaV + id: FloorTilesStatic + recipes: + - FloorTileItemDark + - FloorTileItemDarkDiagonalMini + - FloorTileItemDarkDiagonal + - FloorTileItemDarkHerringbone + - FloorTileItemDarkMini + - FloorTileItemDarkMono + - FloorTileItemDarkPavement + - FloorTileItemDarkPavementVertical + - FloorTileItemDarkOffset + - FloorTileItemSteelCheckerDark + - FloorTileItemSteel + - FloorTileItemSteelOffset + - FloorTileItemSteelDiagonalMini + - FloorTileItemSteelDiagonal + - FloorTileItemSteelHerringbone + - FloorTileItemSteelMini + - FloorTileItemSteelMono + - FloorTileItemSteelPavement + - FloorTileItemSteelPavementVertical + - FloorTileItemWhite + - FloorTileItemWhiteOffset + - FloorTileItemWhiteDiagonalMini + - FloorTileItemWhiteDiagonal + - FloorTileItemWhiteHerringbone + - FloorTileItemWhiteMini + - FloorTileItemWhiteMono + - FloorTileItemWhitePavement + - FloorTileItemWhitePavementVertical + - FloorTileItemSteelCheckerLight + - FloorTileItemGratingMaint + - FloorTileItemTechmaint + - FloorTileItemSteelMaint + - FloorTileItemWood + - FloorTileItemWoodLarge + - FloorTileItemWoodPattern + - FloorTileItemConcrete + - FloorTileItemConcreteMono + - FloorTileItemConcreteSmooth + - FloorTileItemGrayConcrete + - FloorTileItemGrayConcreteMono + - FloorTileItemGrayConcreteSmooth + - FloorTileItemOldConcrete + - FloorTileItemOldConcreteMono + - FloorTileItemOldConcreteSmooth diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 9328d237428..38bbb139d77 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -283,6 +283,23 @@ materials: Steel: 300 +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazinePistolSubMachineGunUranium + result: MagazinePistolSubMachineGunUranium + materials: + Steel: 25 + Plastic: 250 + Uranium: 250 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazinePistolSubMachineGunIncendiary + result: MagazinePistolSubMachineGunIncendiary + materials: + Steel: 25 + Plastic: 275 + - type: latheRecipe parent: BaseEmptyAmmoRecipe id: MagazinePistolSubMachineGunTopMountedEmpty diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index aea30982d60..12873deaff4 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -2,7 +2,7 @@ #- type: technology # DeltaV merged draconic and uranium munitions and moved to our namespace # id: DraconicMunitions -# name: research-technology-draconic-muntions +# name: research-technology-draconic-munitions # icon: # sprite: Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi # state: incendiarydisplay @@ -13,6 +13,7 @@ # - BoxShotgunIncendiary # - MagazineRifleIncendiary # - MagazinePistolIncendiary +# - MagazinePistolSubMachineGunIncendiary # - MagazineLightRifleIncendiary # - SpeedLoaderMagnumIncendiary # - MagazineShotgunIncendiary @@ -61,6 +62,7 @@ # recipeUnlocks: # - MagazineRifleUranium # - MagazinePistolUranium +# - MagazinePistolSubMachineGunUranium # - MagazineLightRifleUranium # - SpeedLoaderMagnumUranium # - MagazineBoxPistolUranium @@ -68,10 +70,6 @@ # - MagazineBoxLightRifleUranium # - MagazineBoxRifleUranium # - BoxShotgunUranium - # DeltaV - .38 special uranium ammo - Adds .38 special uranium ammo to the research tree -# - SpeedLoaderSpecialUranium -# - MagazineBoxSpecialUranium - # End of modified code - type: technology id: AdvancedRiotControl @@ -149,22 +147,6 @@ # recipeUnlocks: # - WeaponXrayCannon -- type: technology - id: ExperimentalSalvageWeaponry - name: research-technology-experimental-salvage-weaponry - icon: - sprite: Objects/Weapons/Melee/crusher_glaive.rsi - state: icon - discipline: Arsenal - tier: 2 - cost: 10000 - recipeUnlocks: - - WeaponCrusher - - WeaponCrusherDagger - - WeaponCrusherGlaive - - BorgModuleFauna - - ShuttleGunKineticCircuitboard - - type: technology id: BasicShuttleArmament name: research-technology-basic-shuttle-armament diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 1f8e9d84b14..d1cb24c4c68 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -11,8 +11,7 @@ cost: 5000 recipeUnlocks: - ProximitySensor - - ExosuitFabricatorMachineCircuitboard - - ClothingEyesHudDiagnostic + - ClothingEyesHudDiagnostic # DeltaV - type: technology id: BasicAnomalousResearch diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/clothing.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/clothing.yml new file mode 100644 index 00000000000..42f739000e3 --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/clothing.yml @@ -0,0 +1,86 @@ +## Static + +- type: latheRecipePack + id: ClothingCargoDeltaV + recipes: + # Courier + - ClothingUniformCourier + - ClothingUniformSkirtCourier + # QM + - ClothingUniformJumpskirtQMFormal + +- type: latheRecipePack + id: ClothingCommandDeltaV + recipes: + # HoP + - ClothingUniformJumpsuitHoPFormal + - ClothingUniformJumpskirtHoPFormal + +- type: latheRecipePack + id: ClothingEpistemics + recipes: + # Psionic Mantis + - ClothingUniformJumpsuitMantis + - ClothingUniformSkirtMantis + +- type: latheRecipePack + id: ClothingJustice + recipes: + # CJ + - ClothingHeadHatCJToque + - ClothingUniformJumpsuitChiefJustice + - ClothingUniformJumpskirtChiefJustice + - ClothingUniformJumpsuitChiefJusticeFormal + - ClothingUniformJumpskirtCJFormal + - ClothingUniformJumpsuitChiefJusticeWhite + +- type: latheRecipePack + id: ClothingSecurityDeltaV + recipes: + # HoS + - ClothingUniformJumpsuitHoSBlue + - ClothingUniformJumpskirtHoSBlue + - ClothingUniformJumpsuitHoSGrey + - ClothingUniformJumpskirtHoSGrey + # Security Officer + - ClothingUniformJumpsuitSecBlue + - ClothingUniformJumpskirtSecBlue + - ClothingUniformJumpsuitSecGrey + - ClothingUniformJumpskirtSecGrey + # Warden + - ClothingUniformJumpsuitWardenBlue + - ClothingUniformJumpskirtWardenBlue + - ClothingUniformJumpsuitWardenGrey + - ClothingUniformJumpskirtWardenGrey + +- type: latheRecipePack + id: WinterCoatsDeltaV + recipes: + # Coats + - ClothingOuterChiefJustice + - ClothingOuterStasecSweater + # Ponchos + - ClothingNeckCWPSec + - ClothingNeckCWPArctic + +- type: latheRecipePack + id: BeltsDeltaV + recipes: + - ClothingBeltPaperwork + +- type: latheRecipePack + id: ClothingSyndieDeltaV + recipes: + - ClothingUniformInterdyneChemist + - UniformScrubsColorCybersun + - ClothingUniformCybersunAttorney + - ClothingHeadHatSurgcapCybersun + - ClothingOuterInterdyneChemistrySuit + - ClothingOuterCoatCybersunWindbreaker + - ClothingMaskInterdyneChemistry + - ClothingHeadHatSurgcapCybersun + - ClothingUniformCybersunHazard + - ClothingUniformCybersunCasual + - ClothingUniformCybersunRND + - ClothingOuterCybersunOvercoat + - ClothingBeltSyndicateUtility diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml new file mode 100644 index 00000000000..2027f8bce58 --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml @@ -0,0 +1,21 @@ +## Dynamic + +- type: latheRecipePack + id: Jetpacks + recipes: + - JetpackBlue + - JetpackMini + - JetpackVoid + +- type: latheRecipePack + parent: Jetpacks + id: AtmosToolsDeltaV + recipes: + - FireExtinguisherBluespace + - PowerCellHyper + - RCDAmmo + +- type: latheRecipePack + id: EngineeringBoardsDeltaV + recipes: + - AlertsComputerCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml new file mode 100644 index 00000000000..35a974b326b --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml @@ -0,0 +1,12 @@ +## Dynamic + +- type: latheRecipePack + id: Golemancy + recipes: + - CoreSilver + +- type: latheRecipePack + id: EpistemicsBoards + recipes: + - ReverseEngineeringMachineCircuitboard + - MetempsyhoticMachineCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml new file mode 100644 index 00000000000..4c2fbaff37f --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml @@ -0,0 +1,19 @@ +## Dynamic + +- type: latheRecipePack + id: MiningDeltaV + recipes: + - Fulton + - FultonBeacon + +- type: latheRecipePack + id: SalvageWeapons + recipes: + - WeaponCrusher + - WeaponCrusherDagger + - WeaponCrusherGlaive + +- type: latheRecipePack + id: SalvageBoardsDeltaV + recipes: + - SalvageExpeditionsComputerCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml new file mode 100644 index 00000000000..b81e784931a --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml @@ -0,0 +1,26 @@ +## Static + +- type: latheRecipePack + id: MedicalStaticDeltaV + recipes: + - AACTablet + - TankHarness + - ClothingEyesHudMedical + +## Dynamic + +- type: latheRecipePacks + id: SyringeGuns + recipes: + - LauncherSyringe + - MiniSyringe + +- type: latheRecipePack + id: MedicalRE + recipes: + - HandheldCrewMonitor + +- type: latheRecipePack + id: MedicalBoardsDeltaV + recipes: + - CrewMonitoringComputerCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/rings.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/rings.yml new file mode 100644 index 00000000000..248de0fe36b --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/rings.yml @@ -0,0 +1,9 @@ +## Static + +- type: latheRecipePack + id: RingsStatic + recipes: + - GoldRing + - SilverRing + - GoldRingDiamond + - SilverRingDiamond diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml new file mode 100644 index 00000000000..b3d980b2b0e --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml @@ -0,0 +1,7 @@ +## Dynamic + +- type: latheRecipePack + id: BorgModulesDeltaV + recipes: + - BorgModuleSecurityChase + - BorgModuleSecurityEscalate diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml new file mode 100644 index 00000000000..ed9faca449c --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml @@ -0,0 +1,84 @@ +## Static + +- type: latheRecipePack + id: SecurityEquipmentStaticDeltaV + recipes: + - ClothingNeckShockCollar + - ClothingOuterArmorPlateCarrier # plate carrier body armour + - ClothingOuterArmorDuraVest # stabproof vest body armour + +- type: latheRecipePack + id: SecurityPracticeStaticDeltaV + recipes: + - MagazineBoxSpecialPractice + - SpeedLoaderSpecialPractice + +- type: latheRecipePack + id: SecurityAmmoStaticDeltaV + recipes: + - MagazineBoxSpecial + - SpeedLoaderSpecial + - SpeedLoaderSpecialEmpty + - MagazinePistolSpecial + - BoxBeanbag + - BoxShellTranquilizer + - WeaponDisabler + +- type: latheRecipePack + id: SecurityRubberAmmoStatic + recipes: + - MagazinePistolRubber + - SpeedLoaderMagnumRubber + - SpeedLoaderSpecialRubber + - MagazineRifleRubber + - MagazineLightRifleRubber + - MagazineBoxPistolRubber + - MagazineBoxMagnumRubber + - MagazineBoxLightRifleRubber + - MagazineBoxRifleRubber + - MagazineBoxSpecialRubber + +- type: latheRecipePack + id: SecurityWeaponsStatic + recipes: + - WeaponDisabler + +## Dynamic + +- type: latheRecipePack + id: SecurityAmmoDeltaV + recipes: + - BoxShellSoulbreaker + - SpeedLoaderSpecialUranium + - MagazineBoxSpecialIncendiary + - MagazineBoxSpecialUranium + - MagazineBoxSpecialHoly + - MagazineBoxSpecialMindbreaker + +- type: latheRecipePack + parent: SecurityHardsuits + id: SecurityEquipmentDeltaV + recipes: + - EncryptionKeySyndie # reverse engineered + - BorgModuleFauna + - ClothingHeadHelmetInsulated + - ClothingHeadCage + - ClothingShoesBootsSecurityMagboots + +- type: latheRecipePack + parent: SalvageWeapons # crushers must be made in secfab + id: SecurityWeaponsDeltaV + recipes: + - WeaponEnergyGun + - WeaponEnergyGunMini + - WeaponEnergyGunPistol + - WeaponGunLaserCarbineAutomatic + - AdvancedTruncheon + - WeaponColdCannon + - WeaponBeanCannon + +- type: latheRecipePack + id: SecurityHardsuits + recipes: + - ClothingOuterHardsuitJuggernautReverseEngineered + - ClothingOuterHardsuitSyndieReverseEngineered diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml new file mode 100644 index 00000000000..0e93e6f88f1 --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml @@ -0,0 +1,24 @@ +## Static + +- type: latheRecipePack + id: ReportingStatic + recipes: + - CassetteTape + - TapeRecorder + +- type: latheRecipePacks + id: ServiceBoardsStaticDeltaV + recipes: + - DeepFryerMachineCircuitboard + +## Dynamic + +- type: latheRecipePack + id: ServiceDeltaV + recipes: + - PlantBagOfHolding + +- type: latheRecipePack + id: ServiceBoardsDeltaV + recipes: + - AdvancedMicrowaveMachineCircuitBoard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml new file mode 100644 index 00000000000..50da7a71c5b --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml @@ -0,0 +1,6 @@ +## Dynamic + +- type: latheRecipePack + id: EquipmentDeltaV + recipes: + - SignallerDeadMans diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/tiles.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/tiles.yml new file mode 100644 index 00000000000..79db2336c23 --- /dev/null +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/tiles.yml @@ -0,0 +1,21 @@ +## Static + +- type: latheRecipePack + id: FloorTilesStaticDeltaV + recipes: + - FloorTileItemBar + - FloorTileItemFreezer + - FloorTileItemHydro + - FloorTileItemKitchen + - FloorTileItemLaundry + - FloorTileItemShowroom + - FloorTileItemClown + - FloorTileItemMime + - FloorTileItemArcadeBlue + - FloorTileItemArcadeBlue2 + - FloorTileItemArcadeRed + - FloorTileItemEighties + - FloorTileItemBoxing + - FloorTileItemGym + - FloorTileItemCarpetClown + - FloorTileItemCarpetOffice diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/electronics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/electronics.yml index 23cdd7e4f81..8cdfcf65e83 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/electronics.yml @@ -3,11 +3,6 @@ id: SalvageExpeditionsComputerCircuitboard result: SalvageExpeditionsComputerCircuitboard -- type: latheRecipe - parent: BaseCircuitboardRecipe - id: ComputerMassMediaCircuitboard - result: ComputerMassMediaCircuitboard - - type: latheRecipe parent: BaseCircuitboardRecipe id: AlertsComputerCircuitboard diff --git a/Resources/Prototypes/_DV/Research/arsenal.yml b/Resources/Prototypes/_DV/Research/arsenal.yml index 87e0fb0c7c2..4ed6202c92f 100644 --- a/Resources/Prototypes/_DV/Research/arsenal.yml +++ b/Resources/Prototypes/_DV/Research/arsenal.yml @@ -1,3 +1,19 @@ +# Tier 1 + +- type: technology + id: SalvageWeapons + name: research-technology-salvage-weapons + icon: + sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi + state: icon + discipline: Arsenal + tier: 1 + cost: 5000 + recipeUnlocks: + - WeaponProtoKineticAccelerator + - ShuttleGunKineticCircuitboard + # These are roundstart but not replenishable for salvage + # Tier 2 - type: technology @@ -45,7 +61,23 @@ recipeUnlocks: - WeaponEnergyGun - WeaponEnergyGunMini - - BorgModuleSecurityChase # DeltaV SecBorg research + - BorgModuleSecurityChase + +- type: technology + id: ExperimentalSalvageWeaponry + name: research-technology-experimental-salvage-weaponry + icon: + sprite: Objects/Weapons/Melee/crusher_glaive.rsi + state: icon + discipline: Arsenal + tier: 2 + cost: 10000 + recipeUnlocks: + - WeaponCrusher + - WeaponCrusherDagger + - WeaponCrusherGlaive + - BorgModuleFauna + - ShuttleGunKineticCircuitboard - type: technology id: EnergyGunsAdvanced @@ -60,6 +92,8 @@ - WeaponEnergyGunPistol - WeaponGunLaserCarbineAutomatic +# Tier 3 + - type: technology id: RobustMelee name: research-technology-robust-melee diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Machines/lathe.yml new file mode 100644 index 00000000000..8372340e4e0 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Machines/lathe.yml @@ -0,0 +1,35 @@ +- type: entity + id: MedicalBiofabricator + parent: BaseLathe + name: medical biofabricator + description: Produces organs and other organic matter that can be surgically grafted onto patients with biomass. + components: + - type: Sprite + sprite: _Shitmed/Structures/Machines/limbgrower.rsi + snapCardinals: true + layers: + - state: limbgrower_idleoff + map: ["enum.LatheVisualLayers.IsRunning"] +# - state: limbgrower_idleoff +# shader: unshaded +# map: ["enum.PowerDeviceVisualLayers.Powered"] +# - state: inserting +# map: ["enum.MaterialStorageVisualLayers.Inserting"] +# - state: panel +# map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Machine + board: MedicalBiofabMachineBoard + - type: MaterialStorage + whitelist: + tags: + - Sheet + - RawMaterial + - type: Lathe + idleState: limbgrower_idleoff + runningState: limbgrower_idleon + staticPacks: + - SynthOrgansStatic + - SynthPartsStatic + - type: EmagLatheRecipes + emagStaticPacks: + - PizzaPartsStatic diff --git a/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml new file mode 100644 index 00000000000..2520d09a647 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml @@ -0,0 +1,52 @@ +## Static + +- type: latheRecipePack + id: SurgeryStaticShitmed + recipes: + - BoneGel + +- type: latheRecipePack + id: MedicalBoardsStaticShitmed + recipes: + - OperatingTableCircuitboard + +- type: latheRecipePack + id: SynthOrgansStatic + recipes: + - SynthLiver + - SynthHeart + - SynthLungs + - SynthEyes + +- type: latheRecipePack + id: SynthPartsStatic + recipes: + - SynthLeftLeg + - SynthRightLeg + - SynthLeftFoot + - SynthRightFoot + - SynthLeftArm + - SynthRightArm + - SynthLeftHand + - SynthRightHand + +- type: latheRecipePack + id: PizzaPartsStatic + recipes: + - PizzaLeftArm + - PizzaRightArm + +## Dynamic + +- type: latheRecipePack + id: Surgery + recipes: + - EnergyScalpel + - EnergyCautery + - AdvancedRetractor + #- OmnimedTool # DeltaV - Removed medical multi tool as a tech. + +- type: latheRecipePack + id: CyberneticsMedical + recipes: + - MedicalCyberneticEyes diff --git a/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/robotics.yml new file mode 100644 index 00000000000..4d0b5ae998c --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/robotics.yml @@ -0,0 +1,33 @@ +## Static + +- type: latheRecipePack + id: IPCPartsStatic + recipes: + - TorsoIPC + - LeftArmIPC + - RightArmIPC + - LeftLegIPC + - RightLegIPC + - HeadIPC + - LeftHandIPC + - RightHandIPC + - LeftFootIPC + - RightFootIPC + - OrganIPCEyes + - OrganIPCPump + +## Dynamic + +- type: latheRecipePack + id: BorgModulesShitmed + recipes: + - BorgModuleAdvancedSurgery + +- type: latheRecipePack + id: Cybernetics + recipes: + - JawsOfLifeLeftArm + - JawsOfLifeRightArm + - SpeedLeftLeg + - SpeedRightLeg + - BasicCyberneticEyes diff --git a/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/security.yml new file mode 100644 index 00000000000..d8d2d0b62f5 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/security.yml @@ -0,0 +1,6 @@ +## Dynamic recipes + +- type: latheRecipePack + id: SecurityCybernetics + recipes: + - SecurityCyberneticEyes From ff6312aa2053bb3c291810208cf7fd31f45243f3 Mon Sep 17 00:00:00 2001 From: pathetic meowmeow Date: Sat, 8 Feb 2025 01:12:58 -0500 Subject: [PATCH 140/197] Round up playtime minutes (#34961) --- Content.Shared/Localizations/ContentLocalizationManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index e60ca74a37f..d20d8a3134a 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -148,7 +148,7 @@ public static string FormatDirection(Direction dir) public static string FormatPlaytime(TimeSpan time) { var hours = (int)time.TotalHours; - var minutes = time.Minutes; + var minutes = (int)Math.Ceiling(time.TotalMinutes); return Loc.GetString($"zzzz-fmt-playtime", ("hours", hours), ("minutes", minutes)); } From 3f41e68989db8d3dda41515ea21f43beae79bbaa Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 8 Feb 2025 06:14:08 +0000 Subject: [PATCH 141/197] 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 ca81778dc40..f37d75456a5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: The rat king is now capable of butchering things, like animals. - type: Add - id: 7414 - time: '2024-09-21T23:21:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32232 - author: AsnDen changes: - message: Now AI is able to use news manager console that is far away from its @@ -3904,3 +3897,10 @@ id: 7913 time: '2025-02-06T23:07:27.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34927 +- author: sowelipililimute + changes: + - message: You will no longer be told you need 0H 0M more minutes to play a role + type: Fix + id: 7914 + time: '2025-02-08T06:12:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34961 From b8eb6c51a76eea60d92473f239c55fb03e521bc2 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 8 Feb 2025 17:17:55 +1100 Subject: [PATCH 142/197] Revert engine reverties (#34968) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index bd69d51d360..da2bfdaa106 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit bd69d51d360ec77e79ca173e01caabb0a31a0a23 +Subproject commit da2bfdaa1068eb7c7383ee2e064102ffc0f4303a From f76e1db7daebd33f0eaebbf496c7997b3e27511b Mon Sep 17 00:00:00 2001 From: Chaboricks <95505064+Chaboricks@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:24:01 +0300 Subject: [PATCH 143/197] Paper door (#34857) * Add paper door sound * Update attributions yml * Update material_doors.yml * Update attributions.yml --- Resources/Audio/Effects/attributions.yml | 5 +++++ Resources/Audio/Effects/paperdoor_openclose.ogg | Bin 0 -> 39674 bytes .../Doors/MaterialDoors/material_doors.yml | 5 +++++ 3 files changed, 10 insertions(+) create mode 100644 Resources/Audio/Effects/paperdoor_openclose.ogg diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index 75cf22aa4fe..add8884a7d5 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -236,3 +236,8 @@ copyright: 'created by waveplaySFX on Freesound' license: "CC0-1.0" source: https://freesound.org/people/waveplaySFX/sounds/553744/ + +- files: [paperdoor_openclose.ogg] + copyright: 'created by Vrymaa on Freesound and modified by Chaboricks' + license: "CC0-1.0" + source: https://freesound.org/people/Vrymaa/sounds/785128/ diff --git a/Resources/Audio/Effects/paperdoor_openclose.ogg b/Resources/Audio/Effects/paperdoor_openclose.ogg new file mode 100644 index 0000000000000000000000000000000000000000..39e154f69d39cc1b852c80e15a2c0fbc9226b815 GIT binary patch literal 39674 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 jVDSh|RrHc8)HB| Date: Sat, 8 Feb 2025 07:25:08 +0000 Subject: [PATCH 144/197] 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 f37d75456a5..6f3e73eb0a9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: AsnDen - changes: - - message: Now AI is able to use news manager console that is far away from its - core. - type: Fix - id: 7415 - time: '2024-09-22T08:20:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32334 - author: metalgearsloth changes: - message: Fix unbuckling mispredicting. @@ -3904,3 +3896,10 @@ id: 7914 time: '2025-02-08T06:12:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34961 +- author: Chaboricks + changes: + - message: Changed the sound of paper doors. + type: Tweak + id: 7915 + time: '2025-02-08T07:24:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34857 From a7589fb2f2b49a8bf176d6e59ded302b0f47f201 Mon Sep 17 00:00:00 2001 From: GaussiArson <193122004+GaussiArson@users.noreply.github.com> Date: Sat, 8 Feb 2025 03:15:00 -0500 Subject: [PATCH 145/197] Drozd Colors for Kammerer (#34930) * wooden grip on antique laser, changes description to match. * darker grip * update meta.json * redesigned shape similar to ps3moira, edited mag to match, changed lights colors to match each other * fixing an only SLIGHTLY catastrophic fuckup with an experimental inhand sprite that I didn't mean to save and sleepily added to the previous commit * I DID IT AGAIN * red kammerer bottom text * killed the cap laser things (hopefully) --------- Co-authored-by: gaussiarson-admin --- .../Guns/Shotguns/pump.rsi/bolt-open.png | Bin 301 -> 323 bytes .../Shotguns/pump.rsi/equipped-BACKPACK.png | Bin 492 -> 454 bytes .../Shotguns/pump.rsi/equipped-SUITSTORAGE.png | Bin 492 -> 454 bytes .../Weapons/Guns/Shotguns/pump.rsi/icon.png | Bin 317 -> 301 bytes .../Weapons/Guns/Shotguns/pump.rsi/meta.json | 2 +- .../pump_inhands_64x.rsi/inhand-left.png | Bin 584 -> 538 bytes .../pump_inhands_64x.rsi/inhand-right.png | Bin 595 -> 551 bytes .../Shotguns/pump_inhands_64x.rsi/meta.json | 2 +- .../wielded-inhand-left.png | Bin 902 -> 849 bytes .../wielded-inhand-right.png | Bin 929 -> 875 bytes 10 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/bolt-open.png index 233850622eb3237b506eb3a8a2bff0b64910ba92..b1f87641c12ccb84b148ed7bac2c9db1cbd64ece 100644 GIT binary patch delta 246 zcmZ3>beL&^A!Fb~Cyn|B28KBd3^5EKV5BVWYp#;!ZCD-a02Tldi3|+Z3=B15VoT-a z1!u7y0t!i&1o;L3M*s!{6U<_Fznc$KR_W>D7-G@;cEU!!!wNjC=LJg^T5tRR-#L5o z1sAVXe6dzfdRnp`%xy7z%YEliJl6@$ry3hrl$v}VZMk5Qxp8XLYmV2+%NNXBvCET_ z;h=7}=++~5pRvyP8n}3=z`V-D*!zDM+}=DpVQ;q1x_Y0qTg&QA+t1(34A}mm`va4K WzOKxryAF*Y4|uxzxvXmdKI;Vst0P9{~Hvj+t diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/equipped-BACKPACK.png index 302e6d14b5d37c97e510a1fe1d56e249ab33df90..7ae924a3bab3a858e22727b327b546f5615c3e35 100644 GIT binary patch delta 366 zcmaFEe2jU5A*1C)CzJZ6^77UU3^ih6A&hrB85kIZOM?7@|Dys1AlI?Vw1k0yQO487 zF(jh(?bWw@hZJ~N1B6?;oHy3~Zx@ZZ(iCE4E}Z;e`s}^xvJaER!~5;v0BKk78Os_&rjXQpu>1GB_| z&+4nzhsPzIWDMeReYl>{aWcPA0oOwBC6gwz+|fJRSMdAx7RJTwH~z*jKl~$S!7j=0 z!rVZdVYiAIdx$eb#}Eaj?;r{mO#XKfO0oH&Prl7!o|MO)N%vh}+Z+K^x z$@AT{0Rt0$$ht7yppNw&L|hKZZBeAL0aSnG(_xeu)I!JN&jyn#b0@g=vzn zR*%Di-zE%_zZ4!km*AUmj!CRy!sdqJ#w?4H(&Y`$>f{=KtdQ30*D+`~U;p)L6J{&l^(7=4h%~MPgg&ebxsLQ05njtq5uE@ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/equipped-SUITSTORAGE.png index 302e6d14b5d37c97e510a1fe1d56e249ab33df90..4a54d0cd899cdeecacf1a8a6684d2ffacf69001c 100644 GIT binary patch delta 366 zcmaFEe2jU5A*1C)CzE<>28J3jv8D3z2PR!hVqjnpE(!7r{*MY6fLzBa(-H;-Mj1~R z$B>BDw^!ft9a7+74G?bWa?Y&%-!2++r76V9TsZl`^x1pWWgjMshxgrOFk>#L6tZlX ze)N!S5&JZ*iiJ!HQEE$Scwev@Kj&6ZTK0Tzyj&#sE&a2P{Y3Nk|6DHBQ(7(Kp2eF_zT?~# zESvwEaj?;r{mO#XKfO0oH&Prl7!o|MO)N%vh}+Z+K^x z$@AT{0Rt0$$ht7yppNw&L|hKZZBeAL0aSnG(_xeu)I!JN&jyn#b0@g=vzn zR*%Di-zE%_zZ4!km*AUmj!CRy!sdqJ#w?4H(&Y`$>f{=KtdQ30*D+`~U;p)L6J{&l^(7=4h%~MPgg&ebxsLQ05njtq5uE@ diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/icon.png index 161c387047d794373475771c83cd25dd5be81459..018e3523163d14f310e4e42d42783e85e82850ba 100644 GIT binary patch delta 215 zcmdnXw3catA*207C&T(g1_o;eh8i)krSkG;)YTczFnHaYG>L(ML9`^uFZe$SV1V$Z zyuA?)R8Z~d;uvDl`*wmO-(dp|mgy(*E_28I_@B(ZB{XPhApg!M6Bti#li-woAz#3` zTts2E)-|SO4lWAvkIWorX5_5>-gmop+CT4zj0NgTW^Z9=IMNjDHZP-d_tmu>*U}a{ zeNpZ4sN38A{+w#hL61NG3^%#yR;Kg)-gw3lgup&(1Tqpu?a!^VE@KZ&di3=FyxjSTCX1OLbZ+59Cze!>4y0K=6#GZq4+ zI14-?iy0WWg+Z8+Vb&Z8pkSS+i(`m||Jw`Re1{cySS}Ru{AKv|xBvFWVAGW?QmNNn z=Q&77urSp<;9B!fm!VQz{(xOWs|(8;?Q>!~*q#Sut=(}~K4|`IChy!Up}!|MF|^2T zycHE<<@7rFh|b5Xv#Ftl5n(yszRGz=x?Z?ZQN*?}ecnUOKR3LW*A>0uV)-tfsAKd) UqG{zbpi>w;UHx3vIVCg!01^UV6951J diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json index 3e793381d0f..87bbbc52f05 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-NC-4.0", - "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, bolt-open modified from icon.png by Flareguy", + "copyright": "Taken from https://github.com/tgstation/tgstation/ at commit fb2d71495bfe81446159ef528534193d09dd8d34, bolt-open modified from icon.png by Flareguy, colors edited by GaussiArson", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-left.png index 9276fc552153534f83c438037eb125de3c367571..156ed5ceddeda28e8eb05ab0a662760871a469f8 100644 GIT binary patch delta 449 zcmX@XGK*z`A*1d@C)Iju28Kiih8i)krSkHovv|}Q7#R3Vg8YL2!vO<`WxQ*{0tN=g z22U5qkcv5PZyn4#tRTP=@Zgb2+Ry*zdsj~J4!se1$fV1vn)jT|aTcA8FaJIBV&YI} zV1N=I3LB=V%Rl?^*JZs%CD(~oo*B>Ab0jg;>(@I9Fip9$%6Q4P1qw_rel9nD*2Bfr zpnZSOAMXT1Mm~*p#-FhX?hXvhm(I>@IDhKrf%n|9Gxt6ClYcPJ!HVf;>;~xv`V96g zvl-9c<1zUDe}BvaJUII2=AT67JMY!s zx1D^O_K>OJp19TmhP~!K43o~YOvyR$<|*T^Z;U*P885u;W^LG>FZ7_QmMLCd+oGZ6 my`0Q}e|c7MobYh7VbEJs^J%3=i2^WU7(8A5T-G@yGywqB5XTt+ delta 512 zcmbQma)M=op&(1Tqpu?a!^VE@KZ&di3=E1Bja2K?663{yZ0?dEzu^CHz~JT2_z5V? zS>O>_%)r2R5QG_bOw4}Ez`!`u)5S5QBJS<2+j%VpJS-RP80h~0e^7Pm?|@DfkOo_v}5)kn#DD#^k+<3>Wu&kdfwA zV7R>JgM{?{zikZm`xtKjkX2&)@HQ{)vwDiuhCj6&8|H6$lh(<~uvdR!1Jjp#E=&`C zO>CINJ7aHQ!@imy1=9=|cGb8tK6q-)QDAS^*w1g+(6V06kRj{83(2@WE diff --git a/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Shotguns/pump_inhands_64x.rsi/inhand-right.png index 56c4aff8745ce62428b7f1663804ede483f14d8f..a12b37663215a07c5570939cbe9afe13cdd49f56 100644 GIT binary patch delta 461 zcmcc2vYcgtA*1d@C)Iju28Kiih8i)krSkIn5qx(T7#R3Vg8YL2!vO<`WxQ*{0tN=g zUQZXtkcv5PZygkBGT>pkaDY{{<^TVf#636FmRw$Eaqio?%4t$olc#=trphAVz`zJ4 zK14Ije89TAfBqlF36e4O(*zjAMZR_$H;7KD|H^$}8#C+XH@8I{8k;uni(?Eko$_Es zzUyBv`GC!=iZjGlUs-RaG%>Zteumsr#xD#42RFyv&pgV|7<|84yeFUip7(Lq8+F5v%A)X~;2V*?L znpNh^k66AYZ%>+B%P3yoz`*p6`NFg&2ZmX0bsg>(R2t?qiZQZWnB>^N5EUfAxFEUg z_JpPaMk!xu;iep}Lvv-@AD=rTt}e`Q@WZa+l4_1!47Y4|eO2PNJdpWfZrpdKd#jaC z8L}~OTrpvEnHO>JDPM=p0><61pO^fZJE7@_qoA|fA0u^9vHa6a1&q5@EEuGW&fH}$ zX?C@}EH1?8TKCy}(Vg9_91OZl911|U0f`3joWC{Og12(I10#vS)78&qol`;+0C73I A_W%F@ delta 523 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 QYXATM07*qoM6N<$g6p`Y$N&HU delta 827 zcmV-B1H}C62B8O#Fw#`0lMw8-w zt=($e>v*cD^KnK|`_+uK{XX06R1ul4Z5F!ZC*e<(g^LbhXn$PDN=H_$oc3e;Bu@WJx>b(&&$u*@_fEt0aTL_0v(ee0u6t7e~dBysqNQOVHo-_ z3|F?lH_zoOZ7=6n--^^2ZHbk%BAx3{NW;#1NQ=`#PrBZn`)?_j%Iojgo^Y6wAPTM;=>8+pd)zww0 z@s<8I9X90;K7N15&X2mog?sMr@B6#EJ6W6T3~r3cwwOO{??{qPdf&6}m-#l7A)o(I zcNlzX$zQ0ocD_=%IhVcy44l*)3|F@2AHJk)GTJq#;UGPhzT8Lea`|7*Kb}f<{E%-x zr{TbPX}kHBUI3|hntZlu^656{#u#s{eX_!PGCumh7$hsnj^E$I&x@zYYA|rC-{^~P z569cecPlq()gFEaFUJbf^Ry6tb<6p`W-OCI0}~fT{0EE}Ul11;rNaOK002ovPDHLk FV1fcAwATOt From 5478251d1a6b144f626142e9963f839bbd67a7c5 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:56:44 +1100 Subject: [PATCH 146/197] Make Ignite tryget flammablecomp (#34970) The flammable effect does it but we don't do it here for reasons. Sometimes this heisentests. --- .../EntityEffects/Effects/FlammableReaction.cs | 3 ++- Content.Server/EntityEffects/Effects/Ignite.cs | 11 ++++++++--- Content.Server/Tiles/TileEntityEffectSystem.cs | 3 ++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Content.Server/EntityEffects/Effects/FlammableReaction.cs b/Content.Server/EntityEffects/Effects/FlammableReaction.cs index c1d024a4efd..8e1f6d81e15 100644 --- a/Content.Server/EntityEffects/Effects/FlammableReaction.cs +++ b/Content.Server/EntityEffects/Effects/FlammableReaction.cs @@ -38,7 +38,8 @@ public override void Effect(EntityEffectBaseArgs args) reagentArgs.EntityManager.System().AdjustFireStacks(args.TargetEntity, quantity * multiplier, flammable); if (reagentArgs.Reagent != null) reagentArgs.Source?.RemoveReagent(reagentArgs.Reagent.ID, reagentArgs.Quantity); - } else + } + else { args.EntityManager.System().AdjustFireStacks(args.TargetEntity, multiplier, flammable); } diff --git a/Content.Server/EntityEffects/Effects/Ignite.cs b/Content.Server/EntityEffects/Effects/Ignite.cs index cca2a301fdf..85d7f091455 100644 --- a/Content.Server/EntityEffects/Effects/Ignite.cs +++ b/Content.Server/EntityEffects/Effects/Ignite.cs @@ -1,3 +1,4 @@ +using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; using Content.Shared.Database; using Content.Shared.EntityEffects; @@ -19,13 +20,17 @@ public sealed partial class Ignite : EntityEffect public override void Effect(EntityEffectBaseArgs args) { + if (!args.EntityManager.TryGetComponent(args.TargetEntity, out FlammableComponent? flammable)) + return; + var flamSys = args.EntityManager.System(); if (args is EntityEffectReagentArgs reagentArgs) { - flamSys.Ignite(reagentArgs.TargetEntity, reagentArgs.OrganEntity ?? reagentArgs.TargetEntity); - } else + flamSys.Ignite(reagentArgs.TargetEntity, reagentArgs.OrganEntity ?? reagentArgs.TargetEntity, flammable: flammable); + } + else { - flamSys.Ignite(args.TargetEntity, args.TargetEntity); + flamSys.Ignite(args.TargetEntity, args.TargetEntity, flammable: flammable); } } } diff --git a/Content.Server/Tiles/TileEntityEffectSystem.cs b/Content.Server/Tiles/TileEntityEffectSystem.cs index 7149f16e1ad..4d866cb2548 100644 --- a/Content.Server/Tiles/TileEntityEffectSystem.cs +++ b/Content.Server/Tiles/TileEntityEffectSystem.cs @@ -23,10 +23,11 @@ private void OnTileStepTriggerAttempt(Entity ent, ref private void OnTileStepTriggered(Entity ent, ref StepTriggeredOffEvent args) { var otherUid = args.Tripper; + var effectArgs = new EntityEffectBaseArgs(otherUid, EntityManager); foreach (var effect in ent.Comp.Effects) { - effect.Effect(new EntityEffectBaseArgs(otherUid, EntityManager)); + effect.Effect(effectArgs); } } } From f6166b86a411bc54a8fd99b7c988cc30d5f218ca Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sat, 8 Feb 2025 16:37:46 +0100 Subject: [PATCH 147/197] Wizard shuttle preperation (#34932) FIREBALL MOTHERF- --- .../communications-console-component.ftl | 1 + Resources/Maps/Shuttles/wizard.yml | 221 ++++++++++++------ .../Devices/Circuitboards/computer.yml | 11 + .../Prototypes/Entities/Objects/Fun/toys.yml | 22 ++ .../Machines/Computers/computers.yml | 33 +++ .../Objects/Misc/module.rsi/cpu_wizard.png | Bin 0 -> 6918 bytes .../Objects/Misc/module.rsi/meta.json | 11 +- .../Machines/computers.rsi/comm_wizard.png | Bin 0 -> 1016 bytes .../Machines/computers.rsi/meta.json | 28 ++- .../Machines/computers.rsi/wizard_key.png | Bin 0 -> 6958 bytes 10 files changed, 250 insertions(+), 77 deletions(-) create mode 100644 Resources/Textures/Objects/Misc/module.rsi/cpu_wizard.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/comm_wizard.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/wizard_key.png diff --git a/Resources/Locale/en-US/communications/communications-console-component.ftl b/Resources/Locale/en-US/communications/communications-console-component.ftl index a757f9e0d10..209be1adeb0 100644 --- a/Resources/Locale/en-US/communications/communications-console-component.ftl +++ b/Resources/Locale/en-US/communications/communications-console-component.ftl @@ -25,3 +25,4 @@ comms-console-announcement-title-station = Communications Console comms-console-announcement-title-centcom = Central Command comms-console-announcement-title-nukie = Syndicate Nuclear Operative comms-console-announcement-title-station-ai = Station AI +comms-console-announcement-title-wizard = Wizard diff --git a/Resources/Maps/Shuttles/wizard.yml b/Resources/Maps/Shuttles/wizard.yml index 7bdb8ca83d8..fee421124e2 100644 --- a/Resources/Maps/Shuttles/wizard.yml +++ b/Resources/Maps/Shuttles/wizard.yml @@ -33,11 +33,11 @@ entities: chunks: -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAZAAAAAADZAAAAAADWQAAAAABeQAAAAAAdgAAAAACdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAZAAAAAAAZAAAAAACWQAAAAACeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAIAAAAAABJQAAAAABIAAAAAAAJQAAAAACIAAAAAABJQAAAAADIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAIAAAAAADJAAAAAADeQAAAAAAJAAAAAADeQAAAAAAJAAAAAACeQAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJQAAAAACIAAAAAAAJQAAAAACIAAAAAABJQAAAAABIAAAAAABJQAAAAABIAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAMAAAAAABMAAAAAAAMAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAADIgAAAAACIgAAAAADHQAAAAACHQAAAAADeQAAAAAAMAAAAAABHgAAAAACHgAAAAACHgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAABWQAAAAADeQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAMAAAAAAAHgAAAAACHgAAAAACHgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAABIgAAAAAAIgAAAAACHQAAAAAAHQAAAAADeQAAAAAAMAAAAAABHgAAAAADHgAAAAABHgAAAAAC + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAZAAAAAADZAAAAAADWQAAAAABeQAAAAAAdgAAAAACdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAZAAAAAAAZAAAAAACWQAAAAACeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAIAAAAAABJQAAAAABIAAAAAAAJQAAAAACIAAAAAABJQAAAAADIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAIAAAAAADJAAAAAADIAAAAAAAJAAAAAADIAAAAAAAJAAAAAACIAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJQAAAAACIAAAAAAAJQAAAAACIAAAAAABJQAAAAABIAAAAAABJQAAAAABIAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAMAAAAAABMAAAAAAAMAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAADIgAAAAACIgAAAAADHQAAAAACHQAAAAADeQAAAAAAMAAAAAABHgAAAAACHgAAAAACHgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAABWQAAAAADeQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAMAAAAAAAHgAAAAACHgAAAAACHgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAABIgAAAAAAIgAAAAACHQAAAAAAHQAAAAADeQAAAAAAMAAAAAABHgAAAAADHgAAAAABHgAAAAAC version: 6 0,-1: ind: 0,-1 - tiles: aAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAeQAAAAAAbAAAAAACbAAAAAACbAAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAbAAAAAADcAAAAAACbAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAbAAAAAACbAAAAAAAbAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAACIAAAAAADJQAAAAACIAAAAAABJQAAAAADIAAAAAADeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJAAAAAAAeQAAAAAAJAAAAAABeQAAAAAAJAAAAAABIAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAABIAAAAAABJQAAAAACIAAAAAACJQAAAAACIAAAAAACJQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAACMAAAAAADMAAAAAAAeQAAAAAAFwAAAAAEFwAAAAAGFwAAAAAHFwAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAABHgAAAAADMAAAAAACeQAAAAAAFwAAAAADFwAAAAADFwAAAAAGFwAAAAAEFwAAAAACIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAADHgAAAAACMAAAAAADeQAAAAAAFwAAAAAHFwAAAAAEFwAAAAADFwAAAAADFwAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAACHgAAAAACMAAAAAADeQAAAAAAFwAAAAAHFwAAAAACFwAAAAABFwAAAAAEFwAAAAABIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: aAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAeQAAAAAAbAAAAAACbAAAAAACbAAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAbAAAAAADcAAAAAACbAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAbAAAAAACbAAAAAAAbAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAACIAAAAAADJQAAAAACIAAAAAABJQAAAAADIAAAAAADeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAJAAAAAAAIAAAAAAAJAAAAAABIAAAAAAAJAAAAAABIAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAABIAAAAAABJQAAAAACIAAAAAACJQAAAAACIAAAAAACJQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAACMAAAAAADMAAAAAAAeQAAAAAAFwAAAAAEFwAAAAAGFwAAAAAHFwAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAABHgAAAAADMAAAAAACeQAAAAAAFwAAAAADFwAAAAADFwAAAAAGFwAAAAAEFwAAAAACIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAADHgAAAAACMAAAAAADeQAAAAAAFwAAAAAHFwAAAAAEFwAAAAADFwAAAAADFwAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAACHgAAAAACMAAAAAADeQAAAAAAFwAAAAAHFwAAAAACFwAAAAABFwAAAAAEFwAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,0: ind: -1,0 @@ -342,7 +342,6 @@ entities: 50: 1,-14 74: -9,-3 75: -9,-1 - 76: 8,-1 - node: color: '#FFFFFFFF' id: WarnLineN @@ -578,18 +577,6 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-2.5 parent: 768 - - uid: 671 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-0.5 - parent: 768 - - uid: 672 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-2.5 - parent: 768 - proto: APCBasic entities: - uid: 436 @@ -605,24 +592,12 @@ entities: parent: 768 - proto: AtmosDeviceFanDirectional entities: - - uid: 338 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-0.5 - parent: 768 - uid: 339 components: - type: Transform rot: -1.5707963267948966 rad pos: -10.5,-2.5 parent: 768 - - uid: 340 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-2.5 - parent: 768 - uid: 341 components: - type: Transform @@ -1907,6 +1882,18 @@ entities: parent: 768 - proto: ChairWood entities: + - uid: 143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-5.5 + parent: 768 + - uid: 145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-5.5 + parent: 768 - uid: 222 components: - type: Transform @@ -2079,6 +2066,28 @@ entities: - type: Transform pos: 0.5,-11.5 parent: 768 +- proto: DrinkAleBottleFull + entities: + - uid: 773 + components: + - type: MetaData + desc: Made fresh on the mountain by me... And my army of little owls. + name: wizard ale + - type: Transform + pos: 1.9282424,-5.2112255 + parent: 768 +- proto: DrinkGlass + entities: + - uid: 771 + components: + - type: Transform + pos: 2.6212802,-5.185618 + parent: 768 + - uid: 772 + components: + - type: Transform + pos: 2.3556552,-5.388743 + parent: 768 - proto: FaxMachineSyndie entities: - uid: 619 @@ -2141,15 +2150,13 @@ entities: parent: 768 - type: Fixtures fixtures: {} -- proto: FloraRockSolid01 +- proto: FloraRockSolid entities: - uid: 594 components: - type: Transform pos: 6.5734406,0.1678339 parent: 768 -- proto: FloraRockSolid02 - entities: - uid: 595 components: - type: Transform @@ -2968,6 +2975,18 @@ entities: - type: Transform pos: -10.5,0.5 parent: 768 + - uid: 775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-2.5 + parent: 768 + - uid: 776 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-0.5 + parent: 768 - proto: Gyroscope entities: - uid: 636 @@ -3179,6 +3198,18 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-14.5 parent: 768 + - uid: 671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-0.5 + parent: 768 + - uid: 672 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,-2.5 + parent: 768 - uid: 689 components: - type: Transform @@ -3395,12 +3426,24 @@ entities: - type: Transform pos: 6.5,-3.5 parent: 768 -- proto: PonderingOrb +- proto: PonderingOrbWizard entities: - - uid: 675 + - uid: 141 components: - type: Transform - pos: 1.5413198,-1.6515679 + pos: 1.5532424,-1.6617236 + parent: 768 +- proto: PottedPlantRandom + entities: + - uid: 769 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 768 + - uid: 770 + components: + - type: Transform + pos: 5.5,-7.5 parent: 768 - proto: PowerCellRecharger entities: @@ -3632,6 +3675,21 @@ entities: parent: 768 - type: ApcPowerReceiver powerLoad: 0 + - uid: 774 + components: + - type: Transform + pos: -2.5,-13.5 + parent: 768 + - uid: 777 + components: + - type: Transform + pos: -7.5,3.5 + parent: 768 + - uid: 778 + components: + - type: Transform + pos: 6.5,3.5 + parent: 768 - proto: Rack entities: - uid: 351 @@ -3644,6 +3702,23 @@ entities: - type: Transform pos: -4.5,-13.5 parent: 768 +- proto: RandomSpawner + entities: + - uid: 779 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 768 + - uid: 780 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 768 + - uid: 781 + components: + - type: Transform + pos: 6.5,2.5 + parent: 768 - proto: ReinforcedPlasmaWindow entities: - uid: 5 @@ -3872,6 +3947,18 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-0.5 parent: 768 + - uid: 338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-2.5 + parent: 768 + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-0.5 + parent: 768 - uid: 346 components: - type: Transform @@ -3982,13 +4069,6 @@ entities: - type: Transform pos: -0.5,-11.5 parent: 768 -- proto: SyndicateComputerComms - entities: - - uid: 207 - components: - - type: Transform - pos: 0.5,10.5 - parent: 768 - proto: TableCarpet entities: - uid: 624 @@ -4006,6 +4086,28 @@ entities: - type: Transform pos: 4.5,4.5 parent: 768 +- proto: TableFancyBlack + entities: + - uid: 144 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 768 + - uid: 146 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 768 + - uid: 207 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 768 + - uid: 675 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 768 - proto: TableStone entities: - uid: 171 @@ -4200,38 +4302,6 @@ entities: - type: Transform pos: -8.5,-3.5 parent: 768 -- proto: WallDiamond - entities: - - uid: 141 - components: - - type: Transform - pos: -5.5,-6.5 - parent: 768 - - uid: 142 - components: - - type: Transform - pos: -3.5,-6.5 - parent: 768 - - uid: 143 - components: - - type: Transform - pos: -1.5,-6.5 - parent: 768 - - uid: 144 - components: - - type: Transform - pos: 0.5,-6.5 - parent: 768 - - uid: 145 - components: - - type: Transform - pos: 2.5,-6.5 - parent: 768 - - uid: 146 - components: - - type: Transform - pos: 4.5,-6.5 - parent: 768 - proto: WallUranium entities: - uid: 3 @@ -4831,6 +4901,13 @@ entities: - type: Transform pos: -2.5,9.5 parent: 768 +- proto: WizardComputerComms + entities: + - uid: 142 + components: + - type: Transform + pos: 0.5,10.5 + parent: 768 - proto: WoodblockInstrument entities: - uid: 676 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 1bf3bca6bc5..0eed1eb6c3b 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -291,6 +291,17 @@ - type: ComputerBoard prototype: SyndicateComputerComms +- type: entity + parent: [ BaseComputerCircuitboard, BaseSyndicateContraband ] + id: WizardCommsComputerCircuitboard + name: wizard communications computer board + description: A computer printed circuit board for a wizard communications console. + components: + - type: Sprite + state: cpu_wizard + - type: ComputerBoard + prototype: WizardComputerComms + - type: entity parent: BaseComputerCircuitboard id: RadarConsoleCircuitboard diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index e59174c39d1..48d691e016c 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1365,6 +1365,28 @@ - type: TileFrictionModifier modifier: 0.001 +- type: entity + parent: PonderingOrb + id: PonderingOrbWizard + name: pondering orb + description: Ponderous, man... Really ponderous. Magically shows the station's camera network. + suffix: Wizard + components: + - type: ActivatableUI + requireActiveHand: false + inHandsOnly: true + key: enum.SurveillanceCameraMonitorUiKey.Key + - type: UserInterface + interfaces: + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface + - type: DeviceNetwork + deviceNetId: Wired + receiveFrequencyId: SurveillanceCamera + transmitFrequencyId: SurveillanceCamera + - type: WiredNetworkConnection + - type: SurveillanceCameraMonitor + - type: entity parent: BaseItem id: ToySword diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index d251ea104f6..49321bce829 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -722,6 +722,39 @@ energy: 1.6 color: "#f71713" +- type: entity + parent: ComputerComms + id: WizardComputerComms + name: wizard communications computer + description: A computer capable of magically projecting your speech to the station. Using this to make an announcement will alert the station to your presence. + components: + - type: Sprite + layers: + - map: ["computerLayerBody"] + state: computer + - map: ["computerLayerKeyboard"] + state: generic_keyboard + - map: ["computerLayerScreen"] + state: comm_wizard + - map: ["computerLayerKeys"] + state: wizard_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open + - type: AccessReader + access: [[ "Wizard" ]] + - type: CommunicationsConsole + title: comms-console-announcement-title-wizard + color: "#ff00ff" + canShuttle: false + global: true #announce to everyone they're about to fuck shit up + sound: /Audio/Announcements/war.ogg + - type: Computer + board: WizardCommsComputerCircuitboard + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#F317F3" + - type: entity parent: BaseComputerAiAccess id: ComputerSolarControl diff --git a/Resources/Textures/Objects/Misc/module.rsi/cpu_wizard.png b/Resources/Textures/Objects/Misc/module.rsi/cpu_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..8feeb986a5507bb19dafaeb7dafed60c929310da GIT binary patch literal 6918 zcmdT}Yitx%6rL(AWo%1B305Fw6)|Xt&fYt7X9fjJTT&XK0n(WAh<5fdv5Ik}MIM5| zDr<;}QA|+85X4_35(1dW4`G$4RTM=eVq!!zAtZXQ1opWzCvukHJ)|aZIRYg%s8)nqa#WO@#aS`rqD^{GtV_0Iwyf#I-u7a)tW#gtw zMJYJkKE1hpuCp|hSp10Fx+orMU!I7E;>%iHMWwqMqJxE*svD*yY#}rpx~<#HLBpaq z9Msmdu%^qqd|~n~-vj+>w}D{-#{jx;Skg7T`2At8AEV?EcF;1=OuwsEG;N3k4K|^` z!7TKXbKg-qG7qDN+UfbKoo;Z73`01L$Vt-^wq<5hi=@X>5P8rzTq@o4^dvuOuXhvb z#SFyZjKw)(;m+iV9&T`lYbqLea6yAG#F1vYQ#hgnF#^1p(b|qCQF#g=L_MkPKH9QIjfF=0Z+D`rz6{=5kKeZ4_%53&=2N5utd5 zMe|gSlF1p%_G9%g6w(jBlmXPP2Qqu2VTd^DN0vzLfIdQ179o3Z>|sL-boLfAK-N9d|vdO0Cv-#=_uA5s5sWJYBn8Yr2J6KZ8S3K|Cb zc10W!mn-6EFi`8Am^`M|n@q4k@`_qtWb%sIz{m`4YMPT*brck{=UdOjhm;;UAR88tSGsHLr=b zR2FV+8Tnkti)EFMHZ<*+_4n{MW*r@y`iJi;OMTO&?3`RaX2|3x;>UMCQ@Gjb9Cg#K zJtOvMiH05Fm5-l!_Qpt+xo~CG`0>fASH^cPPA&T7HtpY^kBmv4J-jRR)9_n{S5946 z#8$s^a`#=$GaH>d>h{-OU$W|8{npN@ZFdP5B}Pf zT97PCPAMs^t`D7R`|zPD1w%jmv#oeSl~s@=A;W%QC7<+W()+{&TJ+8N3HAFSQ|^36Lw yYdL-4!r{vQ*4I`z9Hh$HxuLur`aShu~VrQ?5G{@$7Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/module.rsi/meta.json b/Resources/Textures/Objects/Misc/module.rsi/meta.json index b3667417380..b6f6c6d819d 100644 --- a/Resources/Textures/Objects/Misc/module.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/module.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0, generic, service, command, science, security, medical, supply, and engineering taken from shiptest at https://github.com/shiptest-ss13/Shiptest/pull/1473, additional sprites created by EmoGarbage404, cpu_syndicate sprite derived from previous examples and created by Alpaccalypse at https://github.com/space-wizards/space-station-14/pull/34104", + "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0, generic, service, command, science, security, medical, supply, and engineering taken from shiptest at https://github.com/shiptest-ss13/Shiptest/pull/1473, additional sprites created by EmoGarbage404, cpu_syndicate sprite derived from previous examples and created by Alpaccalypse at https://github.com/space-wizards/space-station-14/pull/34104, cpu_wizard by ScarKy0", "size": { "x": 32, "y": 32 @@ -136,6 +136,9 @@ { "name": "cpu_syndicate" }, + { + "name": "cpu_wizard" + }, { "name": "cpuboard" }, @@ -317,9 +320,9 @@ "name": "selfrepair_on", "delays": [ [ - 0.1, - 0.1, - 0.1, + 0.1, + 0.1, + 0.1, 0.1 ] ] diff --git a/Resources/Textures/Structures/Machines/computers.rsi/comm_wizard.png b/Resources/Textures/Structures/Machines/computers.rsi/comm_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..0d078397d83541745254c19915006db742dec1f0 GIT binary patch literal 1016 zcmVL_|dYo0@Im<=vyvP|wkzK@00|)swH2*1WRi7pcd#5R*T$&AtNa z(WYwDx|)w4uH94DdT#|ElyrWPtObDKbBERH+&A^+=WDgUyT7>%liyU!YBW-6vUYIm z-`@W+*7CbI_l&hH!}F}9^NW&LfOgEugKdI&PFgxYq|^n#)|ceL+MTV(*L!boJ=c%% z(^rxCI0w0nvOU{5D6s(Zv+tWfvHP2o?^6B04*?%rw!-)X&F8KwUpoK%&Py$YHDAjt zus#oAOcdN*Z%Q(-Lt-m>9ch(3}1>!j9h3p8Idt&sV8iLx|0KEM1LbM1W@+(~cK=*>=;m9|?@&y3&-$)i={PbPt{EjGqv@6dqI{z*U zAgs~_kiG{XM835(QMxxXD>TU_wSO1ECqJ=09sTh`Cl9q8-}2~>4*@-yCvtoBeDf1; z(gU=1+gh+g_Q(5Zch^i2LgcqS2k0#wKjV+%H({8v^vAnu^b8l0lXrgGJ7n~hp5~Sx z-5+0+`ue;Y*l|iVHWo$pgi!gZ?vR19^~d98hmi{-k(wK9u7sJOuU`KA()d(gjTZK; zL{eA6zWGk~375%%Mqf?xV+iT|(vV&W()mP0L_|bHL_|bHM0u0`EL=L@hxa#PlI`JT z$oJ*dSAof+M_!6_ehAJ5z;2)Rzjn-nbbcsK1;FId^(F=R=*jN{mFB%pX$`+tg zco(1(dh{hZ7a+vn1n?o9ABuAUI-xbZ47@JH^h&4)8A|o?L-0Napc@*!@=~PpeR&lC zlOO0FZ1&1akj@Xmxd3|dxc$iXhY9i~oga#G0rce2o*i;PRml&3v3ic7`|G9GK8Q8n<{D=5U3h-Z)SIPR|27WNRODNf+1~*+I#F_#cF{XC?!a$ z)|L*Oy|!F!3v=1odHvu2 z{g3&RZkOceO&&t-ARdorh(Fgi74M1SxoIH!jU}^B;Wel%w{WhoyHwV2K%; z7;BnW(`7FwVknzeT_t4UWMCMb6Dt(m2&x-)R0FlJ zF2G|zQAJEJqF9g06FWL!LNhkJ(Sw1gdEBc~xOdSuCBSDaX8W5SKQ$ZR&XbYZDM4G-WY4Lb6E+^G8zqHIl z&`BNCvJApPEMmfy+{+mca>LZA#wj7Efzq|LXd}rGLFm=a~|T3$;2KJ8o< z3mz=sZnPbjOyV$r2uePTHCjUXRv@xw@@Pz1R_Y1mbOH#6Z&QzzVOS~M&S z68kQX_DnznzJ=!~w@nSE*>HjbW>Kba3x!GpjD*by2@G+6?a2c~mIdiat37+E+KGFY zzyvsqhiN1xB#eY2)GFa5k${GekB3W zZKSLh*T^u$RYD38Zb@;Dq)Z}U*fEXWDJ01?CKERd?jV6++N5pQY%%ga* z&_!)BW1DV{#djfSGly9$gh~;+v~o=gL=#eoT%CXm-tj!?OhZhdz4k=DaxZE=?i#kc zv0nj8TA!Fh+=3dn*)6HUOH#Z;(O3N!_D;yax%x*B8R zAY#-Bkb3B9X1x!Tx-lxx-e;uZr!sSGxt3e6kiFuJDzMP->d^*n`i_WLslH4gQ_-hToU-#QfFgPHdl&o|9Sq{k&1@R%Qps z463>DhNZp{gclvJNUvIUW=KI{AqH7hX7S7qmSttvX?NdJmBC9M+r0MmaT`WFpZCs_ zruQ`4vOM_b%sl^Pe}>OjS7|>!FDrX!Yx5|3Yxu+IwaYIVrwWFxDgE-2zp?qjH=lhV z-x)q`-{3Jrt2chSvSH2Q^*>LYR{9$`nR8^*_)pFa*i?V?rON3I7q+MS&^})=v*E?v z^&cHSwCSz7qMdv9?y_<#)-@hzJ^Whbss$ypMwY(!gPn%yhH&G~BNIN;501WX?C*;g zOg{4H$(m@(UH|c}^b^A~i$dkNu72wD>?u3ud@=Irg)2hU7yLJW zHK2KwJ~zC-c1-5qcQsA8cwp>L1?SIPeEHYnSMx{juHW%v#*C(-V`)cQuGHLCoj=9@S)A#(dVeOLo!>94j5RZRSp0EDl;;R1u D7K{bh literal 0 HcmV?d00001 From 286dec7d5a722aaa8d9120264f8acb30ebf76320 Mon Sep 17 00:00:00 2001 From: YoungThug Date: Sat, 8 Feb 2025 14:16:48 -0700 Subject: [PATCH 148/197] Fix: The SyndicateVisitor now has Free Agent mind role. (#34827) (#34836) SyndieRefugeeRoleTypeFix --- .../Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml index e443a47560c..9086c249423 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml @@ -429,7 +429,7 @@ - type: RandomMetadata nameSegments: - names_clown - + - type: randomHumanoidSettings id: VisitorJanitor parent: VisitorCivilian @@ -778,6 +778,8 @@ name: ghost-role-information-syndie-disaster-victim-name description: ghost-role-information-syndie-disaster-victim-description rules: ghost-role-information-syndicate-refugee-rules # DeltaV - Removed free agent mention on the rules for a custom one. Was ghost-role-information-freeagent-rules + mindRoles: + - MindRoleGhostRoleNeutral # DeltaV - replace free agent with neutral to be in line with its rules raffle: settings: short - type: Loadout From 960375a2b785454730f0b740d966c245673cc85c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 8 Feb 2025 21:17:55 +0000 Subject: [PATCH 149/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6f3e73eb0a9..8c6c9ebf161 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fix unbuckling mispredicting. - type: Fix - - message: Aligned buckle range with interaction range. - type: Tweak - id: 7416 - time: '2024-09-22T08:21:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32370 - author: ravage123321 changes: - message: You can make a holy helmet from holymelons! @@ -3903,3 +3894,10 @@ id: 7915 time: '2025-02-08T07:24:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34857 +- author: YoungThugSS14 + changes: + - message: Gave the SyndieVisitor the free agent mindrole. + type: Fix + id: 7916 + time: '2025-02-08T21:16:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34836 From e0619d96b1e875242d8872d24e6dc428d2b69896 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:55:09 +0100 Subject: [PATCH 150/197] Hristov & .60 changes - Hristov Rework, Part 2 (#31662) * Initial commit * Updated values to reflect new resistances * Review fixes * Review fixes * LINQ BEGONETH --- .../Projectiles/ProjectileSystem.cs | 57 +++++++++++++++++-- .../SpeedModifiedOnWieldComponent.cs | 23 ++++++++ .../Projectiles/ProjectileComponent.cs | 23 +++++++- .../Projectiles/SharedProjectileSystem.cs | 2 +- .../Wieldable/SharedWieldableSystem.cs | 27 ++++++++- .../Ammunition/Projectiles/antimateriel.yml | 9 ++- .../Objects/Weapons/Guns/Snipers/snipers.yml | 11 ++++ 7 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 Content.Shared/Movement/Components/SpeedModifiedOnWieldComponent.cs diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs index 5cbc56b8fbc..57601c3e9f2 100644 --- a/Content.Server/Projectiles/ProjectileSystem.cs +++ b/Content.Server/Projectiles/ProjectileSystem.cs @@ -1,9 +1,11 @@ using Content.Server.Administration.Logs; +using Content.Server.Destructible; using Content.Server.Effects; using Content.Server.Weapons.Ranged.Systems; using Content.Shared.Camera; using Content.Shared.Damage; using Content.Shared.Database; +using Content.Shared.FixedPoint; using Content.Shared.Projectiles; using Robust.Shared.Physics.Events; using Robust.Shared.Player; @@ -15,6 +17,7 @@ public sealed class ProjectileSystem : SharedProjectileSystem [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly ColorFlashEffectSystem _color = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly DestructibleSystem _destructibleSystem = default!; [Dependency] private readonly GunSystem _guns = default!; [Dependency] private readonly SharedCameraRecoilSystem _sharedCameraRecoil = default!; @@ -28,7 +31,7 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St { // This is so entities that shouldn't get a collision are ignored. if (args.OurFixtureId != ProjectileFixture || !args.OtherFixture.Hard - || component.DamagedEntity || component is { Weapon: null, OnlyCollideWhenShot: true }) + || component.ProjectileSpent || component is { Weapon: null, OnlyCollideWhenShot: true }) return; var target = args.OtherEntity; @@ -45,7 +48,13 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St RaiseLocalEvent(uid, ref ev); var otherName = ToPrettyString(target); - var modifiedDamage = _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances, origin: component.Shooter); + var damageRequired = _destructibleSystem.DestroyedAt(target); + if (TryComp(target, out var damageableComponent)) + { + damageRequired -= damageableComponent.TotalDamage; + damageRequired = FixedPoint2.Max(damageRequired, FixedPoint2.Zero); + } + var modifiedDamage = _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances, damageable: damageableComponent, origin: component.Shooter); var deleted = Deleted(target); if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter)) @@ -60,6 +69,46 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St $"Projectile {ToPrettyString(uid):projectile} shot by {ToPrettyString(component.Shooter!.Value):user} hit {otherName:target} and dealt {modifiedDamage.GetTotal():damage} damage"); } + // If penetration is to be considered, we need to do some checks to see if the projectile should stop. + if (modifiedDamage is not null && component.PenetrationThreshold != 0) + { + // If a damage type is required, stop the bullet if the hit entity doesn't have that type. + if (component.PenetrationDamageTypeRequirement != null) + { + var stopPenetration = false; + foreach (var requiredDamageType in component.PenetrationDamageTypeRequirement) + { + if (!modifiedDamage.DamageDict.Keys.Contains(requiredDamageType)) + { + stopPenetration = true; + break; + } + } + if (stopPenetration) + component.ProjectileSpent = true; + } + + // If the object won't be destroyed, it "tanks" the penetration hit. + if (modifiedDamage.GetTotal() < damageRequired) + { + component.ProjectileSpent = true; + } + + if (!component.ProjectileSpent) + { + component.PenetrationAmount += damageRequired; + // The projectile has dealt enough damage to be spent. + if (component.PenetrationAmount >= component.PenetrationThreshold) + { + component.ProjectileSpent = true; + } + } + } + else + { + component.ProjectileSpent = true; + } + if (!deleted) { _guns.PlayImpactSound(target, modifiedDamage, component.SoundHit, component.ForceSound); @@ -68,9 +117,7 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St _sharedCameraRecoil.KickCamera(target, args.OurBody.LinearVelocity.Normalized()); } - component.DamagedEntity = true; - - if (component.DeleteOnCollide) + if (component.DeleteOnCollide && component.ProjectileSpent) QueueDel(uid); if (component.ImpactEffect != null && TryComp(uid, out TransformComponent? xform)) diff --git a/Content.Shared/Movement/Components/SpeedModifiedOnWieldComponent.cs b/Content.Shared/Movement/Components/SpeedModifiedOnWieldComponent.cs new file mode 100644 index 00000000000..01b02e60e67 --- /dev/null +++ b/Content.Shared/Movement/Components/SpeedModifiedOnWieldComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Wieldable; +using Robust.Shared.GameStates; + +namespace Content.Shared.Movement.Components; + +/// +/// Modifies the speed when an entity with this component is wielded. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedWieldableSystem)), AutoGenerateComponentState] +public sealed partial class SpeedModifiedOnWieldComponent : Component +{ + /// + /// How much the wielder's sprint speed is modified when the component owner is wielded. + /// + [DataField, AutoNetworkedField] + public float SprintModifier = 1f; + + /// + /// How much the wielder's walk speed is modified when the component owner is wielded. + /// + [DataField, AutoNetworkedField] + public float WalkModifier = 1f; +} diff --git a/Content.Shared/Projectiles/ProjectileComponent.cs b/Content.Shared/Projectiles/ProjectileComponent.cs index 8349252df2b..9eee3767a6d 100644 --- a/Content.Shared/Projectiles/ProjectileComponent.cs +++ b/Content.Shared/Projectiles/ProjectileComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Damage; +using Content.Shared.FixedPoint; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -75,8 +76,26 @@ public sealed partial class ProjectileComponent : Component public bool OnlyCollideWhenShot = false; /// - /// Whether this projectile has already damaged an entity. + /// If true, the projectile has hit enough targets and should no longer interact with further collisions pending deletion. /// [DataField] - public bool DamagedEntity; + public bool ProjectileSpent; + + /// + /// When a projectile has this threshold set, it will continue to penetrate entities until the damage dealt reaches this threshold. + /// + [DataField] + public FixedPoint2 PenetrationThreshold = FixedPoint2.Zero; + + /// + /// If set, the projectile will not penetrate objects that lack the ability to take these damage types. + /// + [DataField] + public List? PenetrationDamageTypeRequirement; + + /// + /// Tracks the amount of damage dealt for penetration purposes. + /// + [DataField] + public FixedPoint2 PenetrationAmount = FixedPoint2.Zero; } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 85e75d6d291..bca9b36f898 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -79,7 +79,7 @@ private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent componen { projectile.Shooter = null; projectile.Weapon = null; - projectile.DamagedEntity = false; + projectile.ProjectileSpent = false; } // Land it just coz uhhh yeah diff --git a/Content.Shared/Wieldable/SharedWieldableSystem.cs b/Content.Shared/Wieldable/SharedWieldableSystem.cs index 24c63c5f2f1..110c941dac7 100644 --- a/Content.Shared/Wieldable/SharedWieldableSystem.cs +++ b/Content.Shared/Wieldable/SharedWieldableSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Inventory.VirtualItem; using Content.Shared.Item; using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; using Content.Shared.Popups; using Content.Shared.Timing; using Content.Shared.Verbs; @@ -27,6 +28,7 @@ namespace Content.Shared.Wieldable; public abstract class SharedWieldableSystem : EntitySystem { + [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -56,6 +58,9 @@ public override void Initialize() SubscribeLocalEvent(OnGunUnwielded); SubscribeLocalEvent(OnGunRefreshModifiers); SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnSpeedModifierWielded); + SubscribeLocalEvent(OnSpeedModifierUnwielded); + SubscribeLocalEvent>(OnRefreshSpeedWielded); SubscribeLocalEvent(OnGetMeleeDamage); } @@ -119,9 +124,29 @@ private void OnGunRefreshModifiers(Entity bonus, ref Gun } } + private void OnSpeedModifierWielded(EntityUid uid, SpeedModifiedOnWieldComponent component, ItemWieldedEvent args) + { + if (args.User != null) + _movementSpeedModifier.RefreshMovementSpeedModifiers(args.User); + } + + private void OnSpeedModifierUnwielded(EntityUid uid, SpeedModifiedOnWieldComponent component, ItemUnwieldedEvent args) + { + if (args.User != null) + _movementSpeedModifier.RefreshMovementSpeedModifiers(args.User); + } + + private void OnRefreshSpeedWielded(EntityUid uid, SpeedModifiedOnWieldComponent component, ref HeldRelayedEvent args) + { + if (TryComp(uid, out var wield) && wield.Wielded) + { + args.Args.ModifySpeed(component.WalkModifier, component.SprintModifier); + } + } + private void OnExamineRequires(Entity entity, ref ExaminedEvent args) { - if(entity.Comp.WieldRequiresExamineMessage != null) + if (entity.Comp.WieldRequiresExamineMessage != null) args.PushText(Loc.GetString(entity.Comp.WieldRequiresExamineMessage)); } diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml index 70f0a053959..e73f035a049 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml @@ -7,8 +7,11 @@ - type: Projectile damage: types: - Piercing: 50 # DeltaV - Damage Bumped, was 40 - Structural: 200 # DeltaV - was 30 + Piercing: 75 + Structural: 226 ignoreResistances: true # DeltaV - Hristov be spooky now + penetrationThreshold: 360 + penetrationDamageTypeRequirement: + - Structural - type: StaminaDamageOnCollide - damage: 50 # DeltaV - was 35 + damage: 60 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 101f2141f8d..b60069f557c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -58,12 +58,23 @@ sprite: Objects/Weapons/Guns/Snipers/heavy_sniper.rsi - type: Clothing sprite: Objects/Weapons/Guns/Snipers/heavy_sniper.rsi + - type: GunRequiresWield + - type: Gun + fireRate: 0.4 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/sniper.ogg - type: BallisticAmmoProvider whitelist: tags: - CartridgeAntiMateriel capacity: 5 proto: CartridgeAntiMateriel + - type: SpeedModifiedOnWield + walkModifier: 0.25 + sprintModifier: 0.25 - type: CursorOffsetRequiresWield - type: EyeCursorOffset maxOffset: 3 From 51c1e5dcbfd8fdaf228a69e5ed076c0052a5b211 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sat, 8 Feb 2025 22:56:08 +0100 Subject: [PATCH 151/197] Wizard Item Recall Spell (#34411) --- Content.Client/Actions/ActionsSystem.cs | 1 + Content.Client/ItemRecall/ItemRecallSystem.cs | 11 ++ Content.Server/ItemRecall/ItemRecallSystem.cs | 11 ++ Content.Shared/Actions/BaseActionComponent.cs | 10 + Content.Shared/Actions/SharedActionsSystem.cs | 3 + .../ItemRecall/ItemRecallComponent.cs | 43 ++++ Content.Shared/ItemRecall/ItemRecallEvents.cs | 9 + .../ItemRecall/RecallMarkerComponent.cs | 18 ++ .../ItemRecall/SharedItemRecallSystem.cs | 187 ++++++++++++++++++ .../Projectiles/SharedProjectileSystem.cs | 52 +++-- .../Locale/en-US/item-recall/item-recall.ftl | 9 + .../Locale/en-US/store/spellbook-catalog.ftl | 3 + .../Prototypes/Catalog/spellbook_catalog.yml | 13 ++ Resources/Prototypes/Magic/recall_spell.yml | 21 ++ .../Magic/magicactions.rsi/item_recall.png | Bin 0 -> 7081 bytes .../Objects/Magic/magicactions.rsi/meta.json | 5 +- 16 files changed, 376 insertions(+), 20 deletions(-) create mode 100644 Content.Client/ItemRecall/ItemRecallSystem.cs create mode 100644 Content.Server/ItemRecall/ItemRecallSystem.cs create mode 100644 Content.Shared/ItemRecall/ItemRecallComponent.cs create mode 100644 Content.Shared/ItemRecall/ItemRecallEvents.cs create mode 100644 Content.Shared/ItemRecall/RecallMarkerComponent.cs create mode 100644 Content.Shared/ItemRecall/SharedItemRecallSystem.cs create mode 100644 Resources/Locale/en-US/item-recall/item-recall.ftl create mode 100644 Resources/Prototypes/Magic/recall_spell.yml create mode 100644 Resources/Textures/Objects/Magic/magicactions.rsi/item_recall.png diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index a00b58f54f9..2d3ded72af1 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -138,6 +138,7 @@ private void BaseHandleState(EntityUid uid, BaseActionComponent component, Ba component.Priority = state.Priority; component.AttachedEntity = EnsureEntity(state.AttachedEntity, uid); component.RaiseOnUser = state.RaiseOnUser; + component.RaiseOnAction = state.RaiseOnAction; component.AutoPopulate = state.AutoPopulate; component.Temporary = state.Temporary; component.ItemIconStyle = state.ItemIconStyle; diff --git a/Content.Client/ItemRecall/ItemRecallSystem.cs b/Content.Client/ItemRecall/ItemRecallSystem.cs new file mode 100644 index 00000000000..11d3015c21f --- /dev/null +++ b/Content.Client/ItemRecall/ItemRecallSystem.cs @@ -0,0 +1,11 @@ +using Content.Shared.ItemRecall; + +namespace Content.Client.ItemRecall; + +/// +/// System for handling the ItemRecall ability for wizards. +/// +public sealed partial class ItemRecallSystem : SharedItemRecallSystem +{ + +} diff --git a/Content.Server/ItemRecall/ItemRecallSystem.cs b/Content.Server/ItemRecall/ItemRecallSystem.cs new file mode 100644 index 00000000000..88972e9e359 --- /dev/null +++ b/Content.Server/ItemRecall/ItemRecallSystem.cs @@ -0,0 +1,11 @@ +using Content.Shared.ItemRecall; + +namespace Content.Server.ItemRecall; + +/// +/// System for handling the ItemRecall ability for wizards. +/// +public sealed partial class ItemRecallSystem : SharedItemRecallSystem +{ + +} diff --git a/Content.Shared/Actions/BaseActionComponent.cs b/Content.Shared/Actions/BaseActionComponent.cs index c3aa6cc97ee..25b36df2afe 100644 --- a/Content.Shared/Actions/BaseActionComponent.cs +++ b/Content.Shared/Actions/BaseActionComponent.cs @@ -167,6 +167,14 @@ public EntityUid? EntityIcon [DataField] public bool RaiseOnUser; + /// + /// If true, this will cause the the action event to always be raised directed at the action itself instead of the action's container/provider. + /// Takes priority over RaiseOnUser. + /// + [DataField] + [Obsolete("This datafield will be reworked in an upcoming action refactor")] + public bool RaiseOnAction; + /// /// Whether or not to automatically add this action to the action bar when it becomes available. /// @@ -212,6 +220,7 @@ public abstract class BaseActionComponentState : ComponentState public int Priority; public NetEntity? AttachedEntity; public bool RaiseOnUser; + public bool RaiseOnAction; public bool AutoPopulate; public bool Temporary; public ItemActionIconStyle ItemIconStyle; @@ -223,6 +232,7 @@ protected BaseActionComponentState(BaseActionComponent component, IEntityManager EntityIcon = entManager.GetNetEntity(component.EntIcon); AttachedEntity = entManager.GetNetEntity(component.AttachedEntity); RaiseOnUser = component.RaiseOnUser; + RaiseOnAction = component.RaiseOnAction; Icon = component.Icon; IconOn = component.IconOn; IconColor = component.IconColor; diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index fc6f0baf772..8079885a5ac 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -679,6 +679,9 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti if (!action.RaiseOnUser && action.Container != null && !HasComp(action.Container)) target = action.Container.Value; + if (action.RaiseOnAction) + target = actionId; + RaiseLocalEvent(target, (object) actionEvent, broadcast: true); handled = actionEvent.Handled; } diff --git a/Content.Shared/ItemRecall/ItemRecallComponent.cs b/Content.Shared/ItemRecall/ItemRecallComponent.cs new file mode 100644 index 00000000000..e057a9945c2 --- /dev/null +++ b/Content.Shared/ItemRecall/ItemRecallComponent.cs @@ -0,0 +1,43 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ItemRecall; + +/// +/// Component for the ItemRecall action. +/// Used for marking a held item and recalling it back into your hand with second action use. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedItemRecallSystem))] +public sealed partial class ItemRecallComponent : Component +{ + /// + /// The name the action should have while an entity is marked. + /// + [DataField] + public LocId? WhileMarkedName = "item-recall-marked-name"; + + /// + /// The description the action should have while an entity is marked. + /// + [DataField] + public LocId? WhileMarkedDescription = "item-recall-marked-description"; + + /// + /// The name the action starts with. + /// This shouldn't be set in yaml. + /// + [DataField] + public string? InitialName; + + /// + /// The description the action starts with. + /// This shouldn't be set in yaml. + /// + [DataField] + public string? InitialDescription; + + /// + /// The entity currently marked to be recalled by this action. + /// + [DataField, AutoNetworkedField] + public EntityUid? MarkedEntity; +} diff --git a/Content.Shared/ItemRecall/ItemRecallEvents.cs b/Content.Shared/ItemRecall/ItemRecallEvents.cs new file mode 100644 index 00000000000..8bee46a0983 --- /dev/null +++ b/Content.Shared/ItemRecall/ItemRecallEvents.cs @@ -0,0 +1,9 @@ +using Content.Shared.Actions; + +namespace Content.Shared.ItemRecall; + +/// +/// Raised when using the ItemRecall action. +/// +[ByRefEvent] +public sealed partial class OnItemRecallActionEvent : InstantActionEvent; diff --git a/Content.Shared/ItemRecall/RecallMarkerComponent.cs b/Content.Shared/ItemRecall/RecallMarkerComponent.cs new file mode 100644 index 00000000000..a85b22e9e34 --- /dev/null +++ b/Content.Shared/ItemRecall/RecallMarkerComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.ItemRecall; + + +/// +/// Component used as a marker for an item marked by the ItemRecall ability. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedItemRecallSystem))] +public sealed partial class RecallMarkerComponent : Component +{ + /// + /// The action that marked this item. + /// + [DataField, AutoNetworkedField] + public EntityUid? MarkedByAction; +} diff --git a/Content.Shared/ItemRecall/SharedItemRecallSystem.cs b/Content.Shared/ItemRecall/SharedItemRecallSystem.cs new file mode 100644 index 00000000000..63d38203c65 --- /dev/null +++ b/Content.Shared/ItemRecall/SharedItemRecallSystem.cs @@ -0,0 +1,187 @@ +using Content.Shared.Actions; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Popups; +using Content.Shared.Projectiles; +using Robust.Shared.GameStates; +using Robust.Shared.Player; + +namespace Content.Shared.ItemRecall; + +/// +/// System for handling the ItemRecall ability for wizards. +/// +public abstract partial class SharedItemRecallSystem : EntitySystem +{ + [Dependency] private readonly ISharedPlayerManager _player = default!; + [Dependency] private readonly SharedPvsOverrideSystem _pvs = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly SharedPopupSystem _popups = default!; + [Dependency] private readonly SharedProjectileSystem _proj = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnItemRecallActionUse); + + SubscribeLocalEvent(OnRecallMarkerShutdown); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.InitialName = Name(ent); + ent.Comp.InitialDescription = Description(ent); + } + + private void OnItemRecallActionUse(Entity ent, ref OnItemRecallActionEvent args) + { + if (ent.Comp.MarkedEntity == null) + { + if (!TryComp(args.Performer, out var hands)) + return; + + var markItem = _hands.GetActiveItem((args.Performer, hands)); + + if (markItem == null) + { + _popups.PopupClient(Loc.GetString("item-recall-item-mark-empty"), args.Performer, args.Performer); + return; + } + + if (HasComp(markItem)) + { + _popups.PopupClient(Loc.GetString("item-recall-item-already-marked", ("item", markItem)), args.Performer, args.Performer); + return; + } + + _popups.PopupClient(Loc.GetString("item-recall-item-marked", ("item", markItem.Value)), args.Performer, args.Performer); + TryMarkItem(ent, markItem.Value); + return; + } + + RecallItem(ent.Comp.MarkedEntity.Value); + args.Handled = true; + } + + private void RecallItem(Entity ent) + { + if (!Resolve(ent.Owner, ref ent.Comp, false)) + return; + + if (!TryComp(ent.Comp.MarkedByAction, out var instantAction)) + return; + + var actionOwner = instantAction.AttachedEntity; + + if (actionOwner == null) + return; + + if (TryComp(ent, out var projectile)) + _proj.UnEmbed(ent, projectile, actionOwner.Value); + + _popups.PopupPredicted(Loc.GetString("item-recall-item-summon", ("item", ent)), actionOwner.Value, actionOwner.Value); + + _hands.TryForcePickupAnyHand(actionOwner.Value, ent); + } + + private void OnRecallMarkerShutdown(Entity ent, ref ComponentShutdown args) + { + TryUnmarkItem(ent); + } + + private void TryMarkItem(Entity ent, EntityUid item) + { + if (!TryComp(ent, out var instantAction)) + return; + + var actionOwner = instantAction.AttachedEntity; + + if (actionOwner == null) + return; + + AddToPvsOverride(item, actionOwner.Value); + + var marker = AddComp(item); + ent.Comp.MarkedEntity = item; + Dirty(ent); + + marker.MarkedByAction = ent.Owner; + + UpdateActionAppearance(ent); + Dirty(item, marker); + } + + private void TryUnmarkItem(EntityUid item) + { + if (!TryComp(item, out var marker)) + return; + + if (!TryComp(marker.MarkedByAction, out var instantAction)) + return; + + if (TryComp(marker.MarkedByAction, out var action)) + { + // For some reason client thinks the station grid owns the action on client and this doesn't work. It doesn't work in PopupEntity(mispredicts) and PopupPredicted either(doesnt show). + // I don't have the heart to move this code to server because of this small thing. + // This line will only do something once that is fixed. + if (instantAction.AttachedEntity != null) + { + _popups.PopupClient(Loc.GetString("item-recall-item-unmark", ("item", item)), instantAction.AttachedEntity.Value, instantAction.AttachedEntity.Value, PopupType.MediumCaution); + RemoveFromPvsOverride(item, instantAction.AttachedEntity.Value); + } + + action.MarkedEntity = null; + UpdateActionAppearance((marker.MarkedByAction.Value, action)); + Dirty(marker.MarkedByAction.Value, action); + } + + RemCompDeferred(item); + } + + private void UpdateActionAppearance(Entity action) + { + if (!TryComp(action, out var instantAction)) + return; + + if (action.Comp.MarkedEntity == null) + { + if (action.Comp.InitialName != null) + _metaData.SetEntityName(action, action.Comp.InitialName); + if (action.Comp.InitialDescription != null) + _metaData.SetEntityDescription(action, action.Comp.InitialDescription); + _actions.SetEntityIcon(action, null, instantAction); + } + else + { + if (action.Comp.WhileMarkedName != null) + _metaData.SetEntityName(action, Loc.GetString(action.Comp.WhileMarkedName, + ("item", action.Comp.MarkedEntity.Value))); + + if (action.Comp.WhileMarkedDescription != null) + _metaData.SetEntityDescription(action, Loc.GetString(action.Comp.WhileMarkedDescription, + ("item", action.Comp.MarkedEntity.Value))); + + _actions.SetEntityIcon(action, action.Comp.MarkedEntity, instantAction); + } + } + + private void AddToPvsOverride(EntityUid uid, EntityUid user) + { + if (!_player.TryGetSessionByEntity(user, out var mindSession)) + return; + + _pvs.AddSessionOverride(uid, mindSession); + } + + private void RemoveFromPvsOverride(EntityUid uid, EntityUid user) + { + if (!_player.TryGetSessionByEntity(user, out var mindSession)) + return; + + _pvs.RemoveSessionOverride(uid, mindSession); + } +} diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index bca9b36f898..1d0fc16cbd7 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -67,25 +67,7 @@ private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent componen return; } - var xform = Transform(uid); - TryComp(uid, out var physics); - _physics.SetBodyType(uid, BodyType.Dynamic, body: physics, xform: xform); - _transform.AttachToGridOrMap(uid, xform); - component.EmbeddedIntoUid = null; - Dirty(uid, component); - - // Reset whether the projectile has damaged anything if it successfully was removed - if (TryComp(uid, out var projectile)) - { - projectile.Shooter = null; - projectile.Weapon = null; - projectile.ProjectileSpent = false; - } - - // Land it just coz uhhh yeah - var landEv = new LandEvent(args.User, true); - RaiseLocalEvent(uid, ref landEv); - _physics.WakeBody(uid, body: physics); + UnEmbed(uid, component, args.User); // try place it in the user's hand _hands.TryPickupAnyHand(args.User, uid); @@ -135,6 +117,38 @@ private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableP Dirty(uid, component); } + public void UnEmbed(EntityUid uid, EmbeddableProjectileComponent? component, EntityUid? user = null) + { + if (!Resolve(uid, ref component)) + return; + + var xform = Transform(uid); + TryComp(uid, out var physics); + _physics.SetBodyType(uid, BodyType.Dynamic, body: physics, xform: xform); + _transform.AttachToGridOrMap(uid, xform); + component.EmbeddedIntoUid = null; + Dirty(uid, component); + + // Reset whether the projectile has damaged anything if it successfully was removed + if (TryComp(uid, out var projectile)) + { + projectile.Shooter = null; + projectile.Weapon = null; + projectile.ProjectileSpent = false; + + Dirty(uid, projectile); + } + + if (user != null) + { + // Land it just coz uhhh yeah + var landEv = new LandEvent(user, true); + RaiseLocalEvent(uid, ref landEv); + } + + _physics.WakeBody(uid, body: physics); + } + private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args) { if (component.IgnoreShooter && (args.OtherEntity == component.Shooter || args.OtherEntity == component.Weapon)) diff --git a/Resources/Locale/en-US/item-recall/item-recall.ftl b/Resources/Locale/en-US/item-recall/item-recall.ftl new file mode 100644 index 00000000000..680c7b7b3fb --- /dev/null +++ b/Resources/Locale/en-US/item-recall/item-recall.ftl @@ -0,0 +1,9 @@ +item-recall-marked-name = Recall {CAPITALIZE($item)} +item-recall-marked-description = Recall {THE($item)} back into your hand. + +item-recall-item-marked = You draw a magical sigil on {THE($item)}. +item-recall-item-already-marked = {CAPITALIZE(THE($item))} is already marked! +item-recall-item-mark-empty = You must be holding an item! +item-recall-item-summon = {CAPITALIZE(THE($item))} appears in your hand! +item-recall-item-unmark = You feel your connection with {THE($item)} sever. + diff --git a/Resources/Locale/en-US/store/spellbook-catalog.ftl b/Resources/Locale/en-US/store/spellbook-catalog.ftl index b18cac4f9a7..95a8b25e686 100644 --- a/Resources/Locale/en-US/store/spellbook-catalog.ftl +++ b/Resources/Locale/en-US/store/spellbook-catalog.ftl @@ -35,6 +35,9 @@ spellbook-cluwne-desc = For when you really hate someone and Smite isn't enough. spellbook-slip-name = Slippery Slope spellbook-slip-desc = Learn the ancient ways of the Janitor and curse your target to be slippery. Requires Wizard Robe & Hat. +spellbook-item-recall-name = Item Recall +spellbook-item-recall-description = Mark a held item and summon it back at any time with just a snap of your fingers! + # Equipment spellbook-wand-polymorph-door-name = Wand of Entrance diff --git a/Resources/Prototypes/Catalog/spellbook_catalog.yml b/Resources/Prototypes/Catalog/spellbook_catalog.yml index dfd171d9b27..3ba3189771b 100644 --- a/Resources/Prototypes/Catalog/spellbook_catalog.yml +++ b/Resources/Prototypes/Catalog/spellbook_catalog.yml @@ -278,3 +278,16 @@ - SpellbookJaunt - !type:ListingLimitedStockCondition stock: 2 + +- type: listing + id: SpellbookItemRecallSwap + name: spellbook-item-recall-name + description: spellbook-item-recall-description + productAction: ActionItemRecall + cost: + WizCoin: 1 + categories: + - SpellbookUtility + conditions: + - !type:ListingLimitedStockCondition + stock: 1 diff --git a/Resources/Prototypes/Magic/recall_spell.yml b/Resources/Prototypes/Magic/recall_spell.yml new file mode 100644 index 00000000000..c5bb96870db --- /dev/null +++ b/Resources/Prototypes/Magic/recall_spell.yml @@ -0,0 +1,21 @@ +- type: entity + id: ActionItemRecall + name: Mark Item + description: Mark a held item to later summon into your hand. + components: + - type: InstantAction + useDelay: 10 + raiseOnAction: true + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/forcewall.ogg + params: + volume: -5 + pitch: 1.2 + maxDistance: 5 + variation: 0.2 + icon: + sprite: Objects/Magic/magicactions.rsi + state: item_recall + event: !type:OnItemRecallActionEvent + - type: ItemRecall diff --git a/Resources/Textures/Objects/Magic/magicactions.rsi/item_recall.png b/Resources/Textures/Objects/Magic/magicactions.rsi/item_recall.png new file mode 100644 index 0000000000000000000000000000000000000000..00bbe363793c6f14ac45c6e52aba3b6852ab5ae9 GIT binary patch literal 7081 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 m!^VOu=Qc_=p|)?T6A)Q Date: Sun, 9 Feb 2025 00:02:00 +0100 Subject: [PATCH 152/197] add straight ally pin (#34977) --- .../Catalog/VendingMachines/Inventories/pride.yml | 1 + .../Prototypes/Entities/Clothing/Neck/pins.yml | 11 +++++++++++ .../Markers/Spawners/Random/maintenance.yml | 1 + .../Loadouts/Miscellaneous/trinkets.yml | 6 ++++++ Resources/Prototypes/Loadouts/loadout_groups.yml | 1 + .../Neck/Misc/pins.rsi/ally-equipped-NECK.png | Bin 0 -> 198 bytes .../Textures/Clothing/Neck/Misc/pins.rsi/ally.png | Bin 0 -> 425 bytes .../Clothing/Neck/Misc/pins.rsi/meta.json | 9 ++++++++- 8 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally-equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally.png diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml index f0d7c48c8a5..26c8db2f224 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml @@ -2,6 +2,7 @@ id: PrideDrobeInventory startingInventory: ClothingNeckLGBTPin: 3 + ClothingNeckAllyPin: 3 ClothingNeckAromanticPin: 3 ClothingNeckAsexualPin: 3 ClothingNeckBisexualPin: 3 diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index a402791f5a7..ea781fb3f30 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -23,6 +23,17 @@ - type: Clothing equippedPrefix: lgbt +- type: entity + parent: ClothingNeckPinBase + id: ClothingNeckAllyPin + name: straight ally pin + description: Be ally do crime. + components: + - type: Sprite + state: ally + - type: Clothing + equippedPrefix: ally + - type: entity parent: ClothingNeckPinBase id: ClothingNeckAromanticPin diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index fba9d40b1eb..5ada80142ac 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -142,6 +142,7 @@ - !type:GroupSelector children: - id: ClothingNeckLGBTPin + - id: ClothingNeckAllyPin - id: ClothingNeckAromanticPin - id: ClothingNeckAsexualPin - id: ClothingNeckBisexualPin diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 514679465a9..150e5655c17 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -106,6 +106,12 @@ back: - ClothingNeckLGBTPin +- type: loadout + id: ClothingNeckAllyPin + storage: + back: + - ClothingNeckAllyPin + - type: loadout id: ClothingNeckAromanticPin storage: diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 395fe073637..41c98d69bd4 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -19,6 +19,7 @@ - CigarCase - CigarGold - ClothingNeckLGBTPin + - ClothingNeckAllyPin - ClothingNeckAromanticPin - ClothingNeckAsexualPin - ClothingNeckBisexualPin diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally-equipped-NECK.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally-equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd4f7358a46cf0788678024c62c5dea70473c82 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@3A^6XFV_jg5`(?ba|cHfEU0w0XIN_;`k~@Hv*`Y!PC{xWt~$(69DV-JA?oL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/ally.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff67be50529009c04517ecd5e57cce24472a09e GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP;hd9Plzj!mY0)LmX%YIl>-7}V`FP$0|#5{d69C9qGX+Htxb)M>}_mv zBAx%u)ynbGv$L^@jg8IA&8)Ah`1~l~{~Mp0^2F@y?3|pe9qUup&vq`%&zLb|`m|-! z1Xs&5Ol7KATrqRTjEPhG^=27#Zt5xCP}w`Bn^$9|g3(z=*EhFs-???`&g%8&&z(De z^w{}VuU@}=@v88^Jw>3i3`>Iif*Jmk2wn+1x(3u-$`3O#zmd?2(^e+w!r#N%$Qpx&L8+!r>Dfr7vpVa7}4= zmz@0P0&QpTboFyt=akR{0Lk#c_y7O^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json index 78cf15fc4e8..a9e20917af2 100644 --- a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json +++ b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json @@ -1,12 +1,19 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "PixelTK leaves his mark on upstream, BackeTako made the gay, autism pins by Terraspark, omnisexual pin by juliangiebel, genderqueer by centcomofficer24", + "copyright": "PixelTK leaves his mark on upstream, BackeTako made the gay, autism pins by Terraspark, omnisexual pin by juliangiebel, genderqueer by centcomofficer24, ally by FairlySadPanda", "size": { "x": 32, "y": 32 }, "states": [ + { + "name": "ally" + }, + { + "name": "ally-equipped-NECK", + "directions": 4 + }, { "name": "aro" }, From 55d4df5cba1f35cf93230515604eece8fb1f5468 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 8 Feb 2025 23:03:08 +0000 Subject: [PATCH 153/197] 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 8c6c9ebf161..5e0d80f96c7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: ravage123321 - changes: - - message: You can make a holy helmet from holymelons! - type: Add - id: 7417 - time: '2024-09-22T10:33:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32272 - author: saga3152 changes: - message: Citrus plants can now be mutated into each other. @@ -3901,3 +3894,10 @@ id: 7916 time: '2025-02-08T21:16:48.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34836 +- author: lzk228 + changes: + - message: Straight ally pin added to loadouts and to the Pride-O-Mat. + type: Add + id: 7917 + time: '2025-02-08T23:02:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34977 From 8b82c779eecdb88c10915d2992e41805f53b9d7c Mon Sep 17 00:00:00 2001 From: "Ignaz \"Ian\" Kraft" Date: Sun, 9 Feb 2025 00:16:06 +0100 Subject: [PATCH 154/197] allow paper labels on seeds (#34450) * allow paper labels on seeds * added the components required by PaperLabel to the SeedBase * localize insert/eject for PaperLabel * visualize the paper label on seeds * new paper layer for seeds * eject the seed label on use * different looking paper label * forgot to turn on a layer --- .../Botany/Systems/BotanySystem.Seed.cs | 2 +- .../Botany/Systems/PlantHolderSystem.cs | 7 +++++ .../en-US/label/paper-label-component.ftl | 2 ++ .../Objects/Specific/Hydroponics/seeds.yml | 28 +++++++++++++++++- .../Objects/Specific/Medical/morgue.yml | 4 +-- .../Xenoarchaeology/artifact_equipment.yml | 4 +-- .../Storage/Closets/base_structureclosets.yml | 4 +-- .../Storage/Crates/base_structurecrates.yml | 4 +-- .../Specific/Hydroponics/seeds.rsi/meta.json | 5 +++- .../Specific/Hydroponics/seeds.rsi/paper.png | Bin 0 -> 750 bytes 10 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/paper.png diff --git a/Content.Server/Botany/Systems/BotanySystem.Seed.cs b/Content.Server/Botany/Systems/BotanySystem.Seed.cs index 1487ed71d47..76421daf2e9 100644 --- a/Content.Server/Botany/Systems/BotanySystem.Seed.cs +++ b/Content.Server/Botany/Systems/BotanySystem.Seed.cs @@ -84,7 +84,7 @@ private void OnExamined(EntityUid uid, SeedComponent component, ExaminedEvent ar if (!TryGetSeed(component, out var seed)) return; - using (args.PushGroup(nameof(SeedComponent))) + using (args.PushGroup(nameof(SeedComponent), 1)) { var name = Loc.GetString(seed.DisplayName); args.PushMarkup(Loc.GetString($"seed-component-description", ("seedName", name))); diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 271acb606a4..7eda4949a95 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -22,6 +22,8 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; +using Content.Server.Labels.Components; +using Content.Shared.Containers.ItemSlots; namespace Content.Server.Botany.Systems; @@ -39,6 +41,7 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly RandomHelperSystem _randomHelper = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; public const float HydroponicsSpeedMultiplier = 1f; @@ -176,6 +179,10 @@ private void OnInteractUsing(Entity entity, ref InteractUs } component.LastCycle = _gameTiming.CurTime; + if (TryComp(args.Used, out var paperLabel)) + { + _itemSlots.TryEjectToHands(args.Used, paperLabel.LabelSlot, args.User); + } QueueDel(args.Used); CheckLevelSanity(uid, component); diff --git a/Resources/Locale/en-US/label/paper-label-component.ftl b/Resources/Locale/en-US/label/paper-label-component.ftl index a62fc0244d7..8b268596b0e 100644 --- a/Resources/Locale/en-US/label/paper-label-component.ftl +++ b/Resources/Locale/en-US/label/paper-label-component.ftl @@ -1,3 +1,5 @@ comp-paper-label-has-label = There is a label attached, it reads: comp-paper-label-has-label-blank = There is a label attached, but it's blank. comp-paper-label-has-label-cant-read = There is a label attached, but you can't read it from this distance. +comp-paper-label-insert = Attach label +comp-paper-label-eject = Detach label diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 1ad3dd5bdf2..bc78ab5911f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -6,11 +6,37 @@ - type: SolutionContainerManager - type: Sprite sprite: Objects/Specific/Hydroponics/seeds.rsi - state: seed + layers: + - state: seed + - state: paper + visible: false + map: ["enum.PaperLabelVisuals.Layer"] + sprite: Objects/Specific/Hydroponics/seeds.rsi + - type: Appearance + - type: GenericVisualizer + visuals: + enum.PaperLabelVisuals.HasLabel: + enum.PaperLabelVisuals.Layer: + True: { visible: true } + False: { visible: false } - type: Item size: Tiny - type: StaticPrice price: 20 + - type: ItemSlots + - type: ContainerContainer + containers: + paper_label: !type:ContainerSlot + - type: PaperLabel + labelSlot: + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject + whitelist: + components: + - Paper + blacklist: + tags: + - Book - type: entity parent: SeedBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index 52a9a918768..6cec5eecbe2 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -51,8 +51,8 @@ - type: EntityStorageLayingDownOverride - type: PaperLabel labelSlot: - insertVerbText: Attach Label - ejectVerbText: Remove Label + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject whitelist: components: - Paper diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml index a003ba90791..7053eda2266 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/artifact_equipment.yml @@ -66,8 +66,8 @@ acts: ["Destruction"] - type: PaperLabel labelSlot: - insertVerbText: Attach Label - ejectVerbText: Remove Label + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject whitelist: components: - Paper diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml index 2568c45a6ac..6777b0f6380 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml @@ -26,8 +26,8 @@ - type: MovedByPressure - type: PaperLabel labelSlot: - insertVerbText: Attach Label - ejectVerbText: Remove Label + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject whitelist: components: - Paper diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml index 48804893ca7..3e9a09be5a6 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml @@ -72,8 +72,8 @@ Invoice: { state: invoice } - type: PaperLabel labelSlot: - insertVerbText: Attach Label - ejectVerbText: Remove Label + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject whitelist: components: - Paper diff --git a/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/meta.json index fc716313c84..bd5d13d6df9 100644 --- a/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068, paper layer by Ian321", "size": { "x": 32, "y": 32 @@ -30,6 +30,9 @@ }, { "name": "seed-synthbrain" + }, + { + "name": "paper" } ] } diff --git a/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/paper.png b/Resources/Textures/Objects/Specific/Hydroponics/seeds.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..31a4559c1f864850c325088db2a7f85d034ccb75 GIT binary patch literal 750 zcmVEX>4Tx04R}tkv&MmKpe$iQ>8^J9qb_DkfAzR2QA`Qt5Adrp;l;yWphgA|?JWDYS_3;J6>}?mh0_0Ya# zo%23%gq3BL_?&pcpbHW|a$RxxjdRIifoDdHY-XM~LM)bgSm|L_HZ^gBRM1zJxlVHwDJ)_M5=1Cypn@ta#Aww?F_EGDq=$dR@k``V$W;L& z#{z25AUl5WKlt6PS)877lR`)s#Kpat9cGs>_D#NPe0^u?W1M(KqFRp<7^J&F!tTkJASrOI@XJfP+I| zyhPdS9`6qJ_V(|YPJchs8FJ0K*P0&y000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rk0tgT;2g|Ocng9R*>`6pHR9M69)xnB`Fc1ddU!xlm zg@}0qufG3-_yArOYGqF%7$#}7*~6Z`-!F>zv z`g8UazR#P$pX}TK;eLCjEZL)X-}hlz7AU3AG);17fUfJpFbt^c8X*K!RfV=~lehNt z3TrL2)+oyo&N+XE4UV zIfs<;;jMi-z?TpLS(d>$hjm@CZQH{>pAO)O2-7sddk-Rlwf4{z1jZPYQjk)DF$N+6 gfGvK}Q55~>7qWg^9YoBw?EnA(07*qoM6N<$f-?|Kp#T5? literal 0 HcmV?d00001 From 8220ec8bd36a523138b78470bc8141f03197c665 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 8 Feb 2025 23:17:13 +0000 Subject: [PATCH 155/197] 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 5e0d80f96c7..07a2b7fac59 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: saga3152 - changes: - - message: Citrus plants can now be mutated into each other. - type: Add - id: 7418 - time: '2024-09-22T15:15:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32306 - author: PotentiallyTom changes: - message: Vent pressure lockout can be temporarily disabled with a screwdriver @@ -3901,3 +3894,10 @@ id: 7917 time: '2025-02-08T23:02:00.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34977 +- author: Ian321 + changes: + - message: Seeds can now have paper labels attached to them. + type: Add + id: 7918 + time: '2025-02-08T23:16:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34450 From b6c46db9f1c551ccb808d70d14e3be46f5381d1e Mon Sep 17 00:00:00 2001 From: August Sun <45527070+august-sun@users.noreply.github.com> Date: Sat, 8 Feb 2025 17:12:47 -0700 Subject: [PATCH 156/197] Lecter + Magazine Resprite (#34974) * Full resprite of lecter and associated magazine * Minor fixes * More fixes * fixed meta.json indentation * More meta.json fixes * Attribution fixes * Update Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/meta.json --------- Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Magazine/Rifle/rifle_mag.rsi/base.png | Bin 214 -> 186 bytes .../Magazine/Rifle/rifle_mag.rsi/mag-1.png | Bin 154 -> 141 bytes .../Magazine/Rifle/rifle_mag.rsi/meta.json | 4 ++-- .../Magazine/Rifle/rifle_mag.rsi/practice.png | Bin 244 -> 270 bytes .../Magazine/Rifle/rifle_mag.rsi/red.png | Bin 244 -> 262 bytes .../Magazine/Rifle/rifle_mag.rsi/rubber.png | Bin 244 -> 298 bytes .../Magazine/Rifle/rifle_mag.rsi/uranium.png | Bin 298 -> 262 bytes .../Weapons/Guns/Rifles/lecter.rsi/base.png | Bin 465 -> 526 bytes .../Guns/Rifles/lecter.rsi/bolt-open.png | Bin 459 -> 525 bytes .../Rifles/lecter.rsi/equipped-BACKPACK.png | Bin 1045 -> 690 bytes .../Rifles/lecter.rsi/equipped-SUITSTORAGE.png | Bin 1045 -> 690 bytes .../Weapons/Guns/Rifles/lecter.rsi/icon.png | Bin 488 -> 563 bytes .../Guns/Rifles/lecter.rsi/inhand-left.png | Bin 391 -> 640 bytes .../Guns/Rifles/lecter.rsi/inhand-right.png | Bin 398 -> 624 bytes .../Weapons/Guns/Rifles/lecter.rsi/mag-0.png | Bin 196 -> 161 bytes .../Weapons/Guns/Rifles/lecter.rsi/meta.json | 2 +- .../Rifles/lecter.rsi/wielded-inhand-left.png | Bin 832 -> 672 bytes .../Rifles/lecter.rsi/wielded-inhand-right.png | Bin 822 -> 683 bytes 18 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/base.png index ae29507b2ef2f1f78a4319c2f758b0eb56b20125..3c0c3e3217cd4afac25097de1c4c60eadbbded8b 100644 GIT binary patch delta 170 zcmcb{xQlUuL_G&H0|SH0lCEPwim^Dz-HBn{IhmJ0j&y)eh%1nm5SP+WQ<0UGb+EC> zwo&iPayY&^0w{h;rg9#T;w%aB3ugEa1?Eh%uK)!tJY5_^EP9g@Bv@ZG2(o<8N?>BD zS#^NxKv#iQLRuoz!$4LA)(U1Wp$W=Anx*_(42^_(&IdLKGce?oF)F_`lUfEegu&C* K&t;ucLK6Te;5AeL delta 198 zcmdnRc#Uy_L_G^L0|P^2NcwRg#aJBV?!0bYS=W{evxtU}oXpFK&e|sOo-U3d7QM*{5|s@TCr<3_ o?3|#K=H|9*N18}a(?Mzopr05v!m1^@s6 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json index 17803dfbc77..b31e570fabe 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json @@ -1,11 +1,11 @@ { "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "All sprites by https://github.com/august-sun.", "size": { "x": 32, "y": 32 }, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/shiptest-ss13/Shiptest/pull/1602/commits/3e6cfea9d468508a7f64ad5543c3b22479cb465f, https://github.com/shiptest-ss13/Shiptest/blob/master/icons/obj/ammo.dmi", "states": [ { "name": "base" diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/practice.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/practice.png index 6ff6195ef97e940196cd7f898666239988e53735..ddfa208e6bfc0f1d007a05e4cf5c9c8ab3363e8a 100644 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|`~rMJT!FNN zxRi#Pima@xgN;SDje1{}!|~M-KtZ4gP#h?z6>SqSJ%Qn@6GV+ZBcm4s!&C+axUL=* z#z~F>uOb*Ua(5a5O_VAL@(X78j|;E|{Z#;}^6+$V46*1nlE%aC?1vCUR%3L@z@rc#|>3|6hN933sf YOpbZ!I=wG$Krgy$Vk{1FcVfJGQl}os;VkfoEM{Qf76xHPhFNnYfPxYM zJ|V6kT3kv)O+{8#*1^W2M}={cqrj^O2A}9dHb6O!k|4iehW`+7^;C!vP%P2Y#WAE} zPI7{TgMvnbnu3Z(hnCusB}-ajwGtMoG$}6V&=Hsh1YJ4;aX{u KKbLh*2~7Y#Uqib9 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/red.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/red.png index b35d28afc92f97018e4b7c303b08ebe5ccbbf427..7bca53b45027351f13a724e584f347d157a5929a 100644 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|JOX?|T!FNN zxRi#Pima@xgN;SDje1{}!|~M-KtZ4gP#h?z6>SqSJ%Qn@6GV+ZBcm4s!&IP7ByjuD z#c4pUL`jfeFvEZB;N=|`GoTs|PZ!4!i{9h}3Dy@4f-E1j5}253Rvq9v&{d$7ke0}l zxJi_Q%dt^GkM&SMLolPvg)X&%}udHGNET7#Qk5F@5~SXmS?h N3{O`-mvv4FO#sPgR~7&O delta 228 zcmZo;`ocItqMn7Bfq|hhB>gy$Vk{1FcVfJGQl}os;VkfoEM{Qf76xHPhFNnYfPxYM zJ|V6kT3kv)O+{8#*1^U?pOMjvfnh2G!?7~~MnE}^k|4iehW`+7^;8H*EYZ`&F{ENn za)N||f<}Xyf{I3mmfDgfOIl*J5*Dd6DK6;H5ts%9T{;4BKmeq;m^9KftTnBaxDApx zG^{kO6mOqiq0;n9fQNBG`V^MH7`9J5vlSqSJ%Qn@6GV+ZBcm4s!&C+axUL=* z#z~F>uOd*4V&u?g;P+y%o_biCaS_lO#gZVuV21w$fZG?pB|yagOBZoc%zZZk`)XD5int^g0B|(0{4F4hE>ZuSTpje`(i(^Q| zoa6)v2L+7=H3b!o4lT7MOO~|6Y9%aEX;NI!p(8L22)c9x;(!21aWQG6X;^DoDRCPl zacEd+S}EQ>y+Wnwl>iUpg7hgYfiY~KcxE*$TA;A0K|!lrfPvwf3a@nfq||nxZ492S KelF{r5}E*q*Ft^( diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/uranium.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/uranium.png index 782b70ab55cfd4ff11cf381810fd37d6be7d7972..0003cc807e9635adae7cff475004ec9d4fe7a28d 100644 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|JOX?|T!FNN zxRi#Pima@xgN;SDje1{}!|~M-KtZ4gP#h?z6>SqSJ%Qn@6HqZOAiC}CA)uT@NswPK z!+-4HXC@xeIv^b|q2Y-9l?tVvi4zlQ`k3Z0Fz7ZhMQ8a{J_5PP)78&qol`;+ E07uAF2mk;8 delta 282 zcmV+#0puzu{Cvj>A|;)gZvng;gA%!|(wnQZ;=2{*ysMOa#SZWIoLufG=c_ z(+Sn1K*&XjLC;17ktWd72m=Gdr6YG3UMzh^yEL%E>=9mht$!n=ha5=`(CYg|^>Tn{ z2fW*J51s?Qe*ej!EHBOQ;?)~?Lex-|W4Lkq5$zJ;iJ%>AxG^EHO{#4|%#GUq`M0AQMCmETet zjRpXV#iB57b!v)OFucDsy5BQ0Fe*A>a% zfQ@ZePFTkKIOfN0$4kRFc-||;ZhsWQ1^q@!KJJ_8la%^k0s^}{J8^KYlIN2*Xy${HUYms!{@}qFeHkii^Yx_s3I?( zBnfdGAH94o;l(LQ|4RI1q?Gz^enK@hH8nL=`~o)m&p)8*cjf>9002ovPDHLkV1oQX B?`Qx3 literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP%uBhC&U#SOD1`PPVG5sxB@r`I!ky zN=iUwK%l9nA}uYQmXBLcmo4y` zXr$7!aaNQV*Vicimu}fSe8LPjgqE8uz5dx@A*ZG5ISD~?SGn_f`~eclbBjZSw8N&Z zdbP_=L{09z4%_R#GrsYRs(!iEa;7hN*JUnob8$;ft8BS*;UCk3HO!fcmm`u_>?x~N zl)rXi;){a<8+T4zxpz&%mwy%3ucqzd`RhCBcg@*L2hL6Z&2sbnE{nK7=jQ8wV#xTw VW91)NvjFHT22WQ%mvv4FO#s44t#$wa diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/bolt-open.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/bolt-open.png index 0781d7099bbddbfd1c0cf7c36cfa51b95a872006..55fc78d5ddee7f3018500550a5a4d9a035f80c89 100644 GIT binary patch delta 510 zcmViZnM;Pu9TZ$#q!jMb>6Q*c|4JvJ^TpX8;FKYB5S*lR2_7yXw@~92 z@N&ACG^sIHEuETY3E#>0o%cQGd^v%dnwtL|acO~+QeP{klz%$XyU2i)QV)ki0DRvE zAc~@A>pGndj^i+&&yS3pZ6Fm7f`HX(m5rCJ3Sc}Q>)C83(prGj{9>_Sy(`;WXd(eH_ODz;PVy`@S$-&>t+TRQTu96ZcAG&VwKTz% zo6SNT$1#>tyfMv8FprmOek1>4(r)W~vIl}gY}>ZBEO#sGgMPoybUGEiUN39H)R$craQ zLLA2@FQ038aZb{|5(^b07*qoM6N<$f})-7 AbpQYW literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP%tOJC&U#SOD1`PPVG5sxB@r`I!ky zN=iUwK%l9nA}uYQmXfo4B}mczC#>p`o_6wgd=>1JzhsS^`N~Sy>5j(T7Lx zMF8znDGBlmW?=g9`#%u;{`dd?9}wgJKV~omAy_zm|L1sjbYUe>{RvMO$B>FSZzrA> zYBJz)ZB}E|HeH|_B`Es$f4xa=x&&kCQ$PRBFYnBD4{o@xTCJ`#ZHC}Mf#86r9;`yk zB7AkZTdUT#XRkDMYwu*p=_sBh^hGNu+v(gyZnq!jv*^~O>v)8($TE-PWKj? zy{t$xj3`gZb7q}lQF^!Xii$+cZLi*zo?~Y|ah$yHkLkf0=1j%Q5y>ldep@)9Kl_E} zmkf^^r%qgn3p1#yKjpV;={|@0$){`grDY~OKV94OCOuY0zwY^Y@k)kHL++bDTH-*_ O#o+1c=d#Wzp$P!x4y_OX diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-BACKPACK.png index 7e73d94ffa2ce457cba48ff86dd213181f594da7..d0f82cc57ec88014f142a18b614108799f43c455 100644 GIT binary patch delta 654 zcmV;90&)G72(kr`FnJaZ(d{y&j{{sE`q72`=->XAOwsn0mdQo^u=r zAT=V(F%xo&4uU{Wr_=QRWhTE1rIdDE7l6TP#lMFKel(lu`Rt={C{FHGz_#u5ch$+? zzJIH4-*t%NnAvP*eGfwbKHT49+xCXmW8_{1CXQT(Xnn7)i|{(LqivMhzH(RfP%JYSp-4!Pj_) z$PlceB7e@Eb62VEdhdt}3Msp4WTI4OR$ delta 1011 zcmVpI zs!2paRCr$Pn!jt?KorL>9h0GU$?Oyz9+Vshq!0Z>zpzA?Ci{- z7eq5ZySTV`R)15fSn2U3Cb+!iogvzJBx8aL72HPN$~R>DX(D)_%Wl&uO|LcW<@Z?d5zvH;cu>+~409*846J z_KbT0M@ZO%kMZC=3&er((Pe4IyVLRU@v%JsgF}sn%zqAWjqmk(r5G=e@MO&2-rm~b zKvZCOi1Cog0gQRVp5yxZ`i}=ncou=QO_BqQ2ONTyECf4%Y|nV-D7)u{qoX5hJmcQQ zoh1r^2gniqs5E$~Vf^!M;=YVYRM0V5bY&U>Mb7ncU^H)dFdPo;86+Wc&YFaS9Dw0v z8;@}k@_!^dnflx)kfD%8Tjp8dIou?O_&gs_^1t-H`+-9eB-;-LgRPsJo8Zjvvi9Dj zXZH8^?KQoHNPCkJoG8YV?P*)0AaC1Hhy$WaOTAvtEEMBcGd=CWI*cz2oUrPMJgmDt zMNt$*Q4~c{6h#T(U-%>q)#$Y(Mx%#^hjyhW&wmnE(Vz{DX!UhO(3&9Cn9Iw{=&pL8 zO)5sdcsYQg+?x$ zqGCjya(jC_x_c~}`5F&FE32|f8@JMnkT0J{rB;okLQP?GGMU%{N$4uHcLY%IpcWtZ z0DnS|^T$t*^?)*v3N=uqMHAZ47*e73asX3`BpA0s1F}7)%xbYzsKG7Iy9JcBO@lNf zl^$?s0SQ6IU|BmvB-&ur;jT6``#8ZX0w_gMeJaZ(d{y&j{{sE`q72`=->XAOwsn0mdQo^u=r zAT=V(F%xo&4uU{Wr_=QRWhTE1rIdDE7l6TP#lMFKel(lu`Rt={C{FHGz_#u5ch$+? zzJIH4-*t%NnAvP*eGfwbKHT49+xCXmW8_{1CXQT(Xnn7)i|{(LqivMhzH(RfP%JYSp-4!Pj_) z$PlceB7e@Eb62VEdhdt}3Msp4WTI4OR$ delta 1011 zcmVpI zs!2paRCr$Pn!jt?KorL>9h0GU$?Oyz9+Vshq!0Z>zpzA?Ci{- z7eq5ZySTV`R)15fSn2U3Cb+!iogvzJBx8aL72HPN$~R>DX(D)_%Wl&uO|LcW<@Z?d5zvH;cu>+~409*846J z_KbT0M@ZO%kMZC=3&er((Pe4IyVLRU@v%JsgF}sn%zqAWjqmk(r5G=e@MO&2-rm~b zKvZCOi1Cog0gQRVp5yxZ`i}=ncou=QO_BqQ2ONTyECf4%Y|nV-D7)u{qoX5hJmcQQ zoh1r^2gniqs5E$~Vf^!M;=YVYRM0V5bY&U>Mb7ncU^H)dFdPo;86+Wc&YFaS9Dw0v z8;@}k@_!^dnflx)kfD%8Tjp8dIou?O_&gs_^1t-H`+-9eB-;-LgRPsJo8Zjvvi9Dj zXZH8^?KQoHNPCkJoG8YV?P*)0AaC1Hhy$WaOTAvtEEMBcGd=CWI*cz2oUrPMJgmDt zMNt$*Q4~c{6h#T(U-%>q)#$Y(Mx%#^hjyhW&wmnE(Vz{DX!UhO(3&9Cn9Iw{=&pL8 zO)5sdcsYQg+?x$ zqGCjya(jC_x_c~}`5F&FE32|f8@JMnkT0J{rB;okLQP?GGMU%{N$4uHcLY%IpcWtZ z0DnS|^T$t*^?)*v3N=uqMHAZ47*e73asX3`BpA0s1F}7)%xbYzsKG7Iy9JcBO@lNf zl^$?s0SQ6IU|BmvB-&ur;jT6``#8ZX0w_gMe8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00HeuL_t(oh3%9vtJ+W$ z$A7m3M_sDO^M-UNb;wvsC=Q)EIJmgTqwtnaEgkw@Ug;ooemMI9q(dm76v0VKm*C|g zTBz4e@Nv7CkUV45((UE9gqxgm|NnFD$%TS~f`^VcH$h5i{(n_WDYd6}mH{cH>2x{( z1VI46VzD@ySF6?VJdfdUxM$>K1Ce+bhD;`t_OEYbfPjMF}!8&3Ju%{W;gnYPF)#XwdC;jc9>+ zmJ|FFSh;TQhFQGRn%~vc-3TrQ{9T5BAocwMi@f=T?u@LS0bAFEZ94E8~=TYtN*YaGXk=b+tg)9?3%ZQJn> zM#hv{a`kmo&0-SJ_wdeljkxL zpU>xLtr0@RBDQUtr%xm+z0OKKZXi$izW8Q08|PGbj7O&gMdDiPgEt>=cKhMPt2nyR nvc!`^_#QtyQ&3P)@NoDG0b=2fx3F7i00000NkvXXu0mjfW5@-C literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP_Q(>C&U#SOD1`PPVG5sxB@r`I!ky zN=iUwK%l9nA}uYQmXFwur}$axW;$;MGH$MjviJep;vO%UXCfVCImm}5iE=o`=}Gnu+;FH zrF(YL(X7R0p`p3n!u{!D&861QcD-*1`hED}50fS4J9bTz6O8Pg`BeCm({JI1&3q{> zImx{XzwUe~{Zqi%c@eww5iz%I--H;q^6&3ozc_E@$qVtH7VX`4OoutgXWi+eAF~vy tuP@BDw`hBD^rKt-lGpoQ*WW8(p7EV8@wwK@GeA!=c)I$ztaD0e0suW)z2E=< diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-left.png index 27972c97f500054d5e88d1af644ff92921307c44..b64ce9a927f4f76b78b5f25fd4110d18110d5646 100644 GIT binary patch delta 627 zcmV-(0*w8K1AqmP7=H)`00020X>r~F0004VQb$4nuFf3k0006yNklfgmmhmkeD?hL9;svNT(^K0+U%gCQ?azk;VOo@^-gVDKJc zV~m`|-VBD@p%u6$u0JH@gPz}L>mHqZu7ttofDl3mA%qY@2!A2csvBcpQ{2pb2Ag%V zbz^KEaRHpH1Ag&5`*SiOyuAe=iXwWw9>d{q>w9UfZ5W0$8Vv{F6l}%w0H_=sa1}+F z=bb67wGD#6o}Hc9a=C1i&$e9)kgUtwn>>OhryWHR@Ox9k;n3Msgl(_OQZ5Amn9XJY z%;$5IQX4n7{C~Ytiurt=S89LBtpG>nkdxpTfSWi*DaE?iVfnFFN^uj%09;>Q=d5m@9i{g^S4>POl+Fg_^#^4*dKqIu=~h7F|D;N7K<2T7>~zvyIm(~d}b9t3`2}D0QBzesCXXV zCX>D5=W;SZ5Lkdhp+FqRBwgRMMMz?l%Vk?Cm58E<>2#Xv3CpE9x@&8E8>=yr*@Lu2 z&7}alv~0$=v2J!CDRdf{7hs>(_`j^19XJV&IWmW-^L?^mqng(CyVkVZ?VawKoVx3} ze7e5};Olto_`YvHet1u_)nPCgyzHT=W&5lEtV}GB3C3*0Cf%d!DZJ zgi+>KHD^}P&C(fLCmDR{?eg34B;?2nUx|o}?k0mBosVZ5?_#~+-zvC_Da-c2S>KEe zn-yO#DD8}W6{NlDT#W7?$4Ffn$%E`CYFo~!zCWQWb>hgTEn)}CXEA8Bt9rZ(-OFQF z*v|L2Bj?lHrEO|E3)E*y+^hJIbS+0%Nv`Rq-<|s%?E2@@zIwdYd35k}Nb>YD1{)yb z+~2b9;seeZ54{Xj9x;|jOHBGVRg_<1gF(uTc}yQ0Zl!z7_U22WQ%mvv4FO#m$;p5_1m diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/inhand-right.png index d50518634cd8513233d28d2a70a3a2a477c5b980..8bac7ba395e8c44a63aa393af202c2bb6e463d69 100644 GIT binary patch delta 611 zcmV-p0-XJh1Mmcp7=H)`00020X>r~F0004VQb$4nuFf3k0006iNklbHLkh{R@OtMl&My$&{_ikx;HoYSSsPiaF{uM+ZtM%yN3q=z};|&+rNGJzHhqS zE}|$}zHX(I0RY!^jqm%WQmL5q*{*S2*8q<_WhwmoLn&pVD6-NCVHg6yYAg80Jn!kb zLe@YLL6Rf@fPc|ww4qY-mm~>9WbPsqfT!DDL~t3$0DzOqF^=@XMvKl%?flFDz-1gm zL}q>t(;Xlpux%Ts{XXs|69hqEHCt_{_hmSavomLa<2a^verB4jHi96q?k5wR_WQ7H z8zM4$qUU+$dPfhtWn3#|JkQJSZ{{C+=zr>!h=_=Yh<}KPh=_=Cv#t9ApL34sUmSW~ z0OqUK_!fq*7MyM(rhoU+iN#V0Kf@69dVQKCubjotkp`L~GJXGVrEr^bQoYv8lv1Wx zEJACI!C-(+r(>msulwGtq&f(K+;>}H@sQclM$>x)i?aA-Y&xc2YXN}A!j{S67uiNk zzxDzg>0ASxRE_~G&f=G`>6m`4Z_05T^X1bAG+S--dOhoVxoiO7*Wn??<1ykmUinb; xJkQjk2v<9NEoXifKgZrh*L&9x5fRaT`2#(M7F0AtKg<9C002ovPDHLkV1hvmA~OI0 delta 383 zcmeys(#JeOqMn7Bfq@~yJ?AZuVk{1FcVfJGQl}os;VkfoEM{Qf76xHPhFNnYfPxYM zJ|V6^T3b`y(au&wL&MzMJjl<>+uM8c0Jnuw9CqI}e|J`+w!o`i{rG#$R&w9s0Y4XF;9_o5mg4FRU-hYvdoK z)pzz4^2m7He;hNpG@317umx!lEQCU_EDFUGZ-EC36pO%=qR9X0Uha}g0001gvdoj4nMX2Rw$#jg9D3E` ze3fsr1F}9Hux`6bDNQ63I(~Bhd9)k=AW0X_R1oIlDd*$>015yANkvXXu0mjfSC%+S delta 180 zcmZ3;c!Y6+L_G^L0|P^2NcwRg#aJBV?!#sMSf<2gt(}LxK#9wtOY@y}Px%T1iAfRCt{2+Odn%P#g#FZ={P5?gYJ% z;e|+Xcu?q&B|~P%ih~H^O^#0fDNgneDP++>!2`Qw5DvP=K8}*!U`v+^2hTy1Ytz=G zsm&eu{Xn33eJ{V{_j^r;_W&XyA|fK9|Bz9olMq5z>8F&cbbr0O)~*?F)2G&<*9As<79%Lolf39pU-i0bOZpH&1L|A7gtvRfcMj>QMG!-ShxApDdjkh zK7ILI3n8@QIJ(p6ti5moK)*XV(E+gY%dyUwI!fOGWq+PL7Wn-2+r~l!s+ifk0XK@>kUz`C= j*fax(h=_=Ys`~{YOwm_im~t=x0000~?IK-kYl?x(T48aBs*CCZE$@+7$>@*?oZxQJ3z324a zAA{cqAP9mW2!bF8f_R3k6*V%(Bmn5Tj@#SY(x>Nnh2uRmjDIm%HmBT1#+cmM*}-@` z#?{qTZohuNFWc=l0Kjn^IF9pZl3<#qv@EM|VR9Qd=Q6J?2!dSE_4V~c5{~xwBmjK= z@>Mx8VN6Js*fgAT>AG%i{LAzU(=;UjxIe$+@L(4wXBTr%{z||wj3{O_8o_m43i>-D03Qh((`j`sItECwfM7fLG`BDx)EU*AOiv}Ob1?>C*Ep3cS3CBU*Q06=R) z!*DnPfVrpd`|y1~5yv^l`T6VMOyY68;lv}Oa_Tbs4+f~6z69eK3BCyOr2r=T-;2dE&r9l5==nb}sh<*H&|->gmU zrYlWyWkk0l-@kji^3{LTJnN4q2!bF8f*=TjAP9mW2!eR3RQms(F(!*V0!3x?I`sQ} zxhhTN!hc9u3Jbjep|Gy&QrC5~+ilEdGr4Sk0Anoj9{~5|H_!7TUqW3?-xKx;!o zST$NkEiX$q?N3P8B*PN>hmW61^-Fhv5JGa!0c3jy2CokQ{PPI-zK_F$-7s9q6Oe~# znlfASO+wT2yhL2DXGEp^GD;ILnM@)tK$d6V@_+I&>dQF?=e)8fAP>v3lr(MIPQ(p| zBW3N{M?ljw07;KPRZl=w-7L*`|0>$bmtfvtK@da}jJvWXcT?4&E9=HJv#6rIPFigZX>+01?0C0cf##i5U-L+M&ep+*xW{k>+ oZX@Tvm?X%XKoA5$5X3V01IEwN%>^*oWB>pF07*qoM6N<$f)A*Id;kCd diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/wielded-inhand-right.png index fd58fca837bd971fa8d12541b549e2925ad50069..6b3f4327019966a7bbdcee173ebb421e9e2b6a64 100644 GIT binary patch delta 660 zcmV;F0&D%Y2CD^-BYyw^b5ch_0Itp)=>Px%Wl2OqRCt{2+P`ZWVHm*iuO%2NK|9pL z;e8RD4g?1m3)i7bmjg?uPFV|WrxdaU`e&4a(6vj)LWXt{99(V_vNT{g!eP2Z90PBM z18x(vhv#`S2`~Gg7R6h)k45Irk_QvP`%2MlHtF~KL{Y?GFqmoMI8OX|Fc@%f zaKPEw*-9(HbzQS++cXkafCuJ7xr{x4IC+3lsf6P=93OwA)%t?tIC1jXY?f>`i&E-d z2U@S!ms$MNG%H$pdlBTrLMpR;Q$qsz%8Ad{;bS2Lo_&@`=MR zq#TA1Qrq)52>AW>9YGLe#%6wVaXm2hnEuXnUE{j$Mw6b7tF=xXOIk~>0J~kjt!?w9 uxEES)V<@vWJ^M*yYhDN;gb+fk=P!la-Y4GdMGZgz0000jFTkyIFrZ)_=S2!HdlE!voQ|xm{>4GpGM@JrRT|2(bY42g6rm6zRP0`|y1~w(h!J z<=ASq7F~CUJXZTsOl>oZWm)j@86OCF`@WX>xK;DzA*YzpOiBDmwcG72sR^jdcS)p*)al8waNTaK#y%^g>JeB)Jx8UKgD6h1#+H02N8KbycrGp5B0Y+Wo;0wtsB{Kx)l-86ruQCi8j*qP+q^5X5Zr zJ_0K3MVeW3Q)K`EWxZV@@5Wp82}HH!zOyRLRC|Eud0X-`yH+R^@a=0kS4&G8?c&Zh zfMJ;EO}4N8&y^wo0000 Date: Sun, 9 Feb 2025 00:13:53 +0000 Subject: [PATCH 157/197] 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 07a2b7fac59..b0b6920ba76 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: PotentiallyTom - changes: - - message: Vent pressure lockout can be temporarily disabled with a screwdriver - type: Tweak - id: 7419 - time: '2024-09-22T19:59:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31050 - author: metalgearsloth changes: - message: You can examine entities inside of your own container again. @@ -3901,3 +3894,10 @@ id: 7918 time: '2025-02-08T23:16:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34450 +- author: august-sun + changes: + - message: Reworked Lecter and magazine sprites. + type: Tweak + id: 7919 + time: '2025-02-09T00:12:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34974 From 47509b7bf4549dbd962006956ffaf80ff84db854 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 9 Feb 2025 13:13:47 +1100 Subject: [PATCH 158/197] Make ReactionResults an array (#34967) * Make ReactionResults an array We're making the dictionaries fixed-size anyway. Alternatively could use a frozendictionary but not sure on the perf difference. Worst case whoever adds another reactionresult makes a minor adjustment * apply conventions --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs | 4 ++-- Content.Server/Atmos/Reactions/PlasmaFireReaction.cs | 6 +++--- Content.Server/Atmos/Reactions/TritiumFireReaction.cs | 6 +++--- Content.Shared/Atmos/GasMixture.cs | 5 ++--- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs index a03f27b561a..70f91a5dc1a 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs @@ -178,7 +178,7 @@ private void PerformHotspotExposure(TileAtmosphere tile) if (tile.Hotspot.Bypassing) { - tile.Hotspot.Volume = tile.Air.ReactionResults[GasReaction.Fire] * Atmospherics.FireGrowthRate; + tile.Hotspot.Volume = tile.Air.ReactionResults[(byte)GasReaction.Fire] * Atmospherics.FireGrowthRate; tile.Hotspot.Temperature = tile.Air.Temperature; } else @@ -187,7 +187,7 @@ private void PerformHotspotExposure(TileAtmosphere tile) affected.Temperature = tile.Hotspot.Temperature; React(affected, tile); tile.Hotspot.Temperature = affected.Temperature; - tile.Hotspot.Volume = affected.ReactionResults[GasReaction.Fire] * Atmospherics.FireGrowthRate; + tile.Hotspot.Volume = affected.ReactionResults[(byte)GasReaction.Fire] * Atmospherics.FireGrowthRate; Merge(tile.Air, affected); } diff --git a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs index 98d567d4ed5..b214310da12 100644 --- a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs @@ -15,7 +15,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; var location = holder as TileAtmosphere; - mixture.ReactionResults[GasReaction.Fire] = 0; + mixture.ReactionResults[(byte)GasReaction.Fire] = 0; // More plasma released at higher temperatures. var temperatureScale = 0f; @@ -60,7 +60,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos energyReleased += Atmospherics.FirePlasmaEnergyReleased * plasmaBurnRate; energyReleased /= heatScale; // adjust energy to make sure speedup doesn't cause mega temperature rise - mixture.ReactionResults[GasReaction.Fire] += plasmaBurnRate * (1 + oxygenBurnRate); + mixture.ReactionResults[(byte)GasReaction.Fire] += plasmaBurnRate * (1 + oxygenBurnRate); } } @@ -80,7 +80,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos } } - return mixture.ReactionResults[GasReaction.Fire] != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; + return mixture.ReactionResults[(byte)GasReaction.Fire] != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; } } } diff --git a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs index 3ad0a4b04de..8b7d4e4872e 100644 --- a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs +++ b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs @@ -15,7 +15,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; var location = holder as TileAtmosphere; - mixture.ReactionResults[GasReaction.Fire] = 0f; + mixture.ReactionResults[(byte)GasReaction.Fire] = 0f; var burnedFuel = 0f; var initialTrit = mixture.GetMoles(Gas.Tritium); @@ -45,7 +45,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos // Conservation of mass is important. mixture.AdjustMoles(Gas.WaterVapor, burnedFuel); - mixture.ReactionResults[GasReaction.Fire] += burnedFuel; + mixture.ReactionResults[(byte)GasReaction.Fire] += burnedFuel; } energyReleased /= heatScale; // adjust energy to make sure speedup doesn't cause mega temperature rise @@ -65,7 +65,7 @@ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, Atmos } } - return mixture.ReactionResults[GasReaction.Fire] != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; + return mixture.ReactionResults[(byte)GasReaction.Fire] != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; } } } diff --git a/Content.Shared/Atmos/GasMixture.cs b/Content.Shared/Atmos/GasMixture.cs index deca8faaed3..612626d614b 100644 --- a/Content.Shared/Atmos/GasMixture.cs +++ b/Content.Shared/Atmos/GasMixture.cs @@ -33,10 +33,9 @@ public sealed partial class GasMixture : IEquatable, ISerializationH public bool Immutable { get; private set; } [ViewVariables] - public readonly Dictionary ReactionResults = new() + public readonly float[] ReactionResults = { - // We initialize the dictionary here. - { GasReaction.Fire, 0f } + 0f, }; [ViewVariables] From c7cee618807bd16a377afa1458eeeb57f50545c6 Mon Sep 17 00:00:00 2001 From: Milon Date: Sun, 9 Feb 2025 10:45:11 +0100 Subject: [PATCH 159/197] improve GetInStation filter (#33405) Co-authored-by: metalgearsloth --- .../Station/Systems/StationSystem.cs | 68 ++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index 22c0cba3f78..a61adb78abe 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -37,11 +37,20 @@ public sealed class StationSystem : EntitySystem private ISawmill _sawmill = default!; + private EntityQuery _gridQuery; + private EntityQuery _xformQuery; + + private ValueList _mapIds = new(); + private ValueList<(Box2Rotated Bounds, MapId MapId)> _gridBounds = new(); + /// public override void Initialize() { _sawmill = _logManager.GetSawmill("station"); + _gridQuery = GetEntityQuery(); + _xformQuery = GetEntityQuery(); + SubscribeLocalEvent(OnRoundEnd); SubscribeLocalEvent(OnPostGameMapLoad); SubscribeLocalEvent(OnStationAdd); @@ -211,45 +220,72 @@ public Filter GetInOwningStation(EntityUid source, float range = 32f) /// public Filter GetInStation(StationDataComponent dataComponent, float range = 32f) { - // Could also use circles if you wanted. - var bounds = new ValueList(dataComponent.Grids.Count); var filter = Filter.Empty(); - var mapIds = new ValueList(); - var xformQuery = GetEntityQuery(); + _mapIds.Clear(); + // First collect all valid map IDs where station grids exist foreach (var gridUid in dataComponent.Grids) { - if (!TryComp(gridUid, out MapGridComponent? grid) || - !xformQuery.TryGetComponent(gridUid, out var xform)) + if (!_xformQuery.TryGetComponent(gridUid, out var xform)) continue; var mapId = xform.MapID; - var position = _transform.GetWorldPosition(xform, xformQuery); - var bound = grid.LocalAABB.Enlarged(range).Translated(position); + if (!_mapIds.Contains(mapId)) + _mapIds.Add(mapId); + } + + // Cache the rotated bounds for each grid + _gridBounds.Clear(); - bounds.Add(bound); - if (!mapIds.Contains(mapId)) + foreach (var gridUid in dataComponent.Grids) + { + if (!_gridQuery.TryComp(gridUid, out var grid) || + !_xformQuery.TryGetComponent(gridUid, out var gridXform)) { - mapIds.Add(xform.MapID); + continue; } + + var (worldPos, worldRot) = _transform.GetWorldPositionRotation(gridXform); + var localBounds = grid.LocalAABB.Enlarged(range); + + // Create a rotated box using the grid's transform + var rotatedBounds = new Box2Rotated( + localBounds, + worldRot, + worldPos); + + _gridBounds.Add((rotatedBounds, gridXform.MapID)); } foreach (var session in Filter.GetAllPlayers(_player)) { var entity = session.AttachedEntity; - if (entity == null || !xformQuery.TryGetComponent(entity, out var xform)) + if (entity == null || !_xformQuery.TryGetComponent(entity, out var xform)) continue; var mapId = xform.MapID; - if (!mapIds.Contains(mapId)) + if (!_mapIds.Contains(mapId)) continue; - var position = _transform.GetWorldPosition(xform, xformQuery); + // Check if the player is directly on any station grid + var gridUid = xform.GridUid; + if (gridUid != null && dataComponent.Grids.Contains(gridUid.Value)) + { + filter.AddPlayer(session); + continue; + } + + // If not directly on a grid, check against cached rotated bounds + var position = _transform.GetWorldPosition(xform); - foreach (var bound in bounds) + foreach (var (bounds, boundsMapId) in _gridBounds) { - if (!bound.Contains(position)) + // Skip bounds on different maps + if (boundsMapId != mapId) + continue; + + if (!bounds.Contains(position)) continue; filter.AddPlayer(session); From d3b15ab66430c7eaf8d86a72d7d8069a3cfe670c Mon Sep 17 00:00:00 2001 From: rokudara-sen <160833839+rokudara-sen@users.noreply.github.com> Date: Sun, 9 Feb 2025 13:15:44 +0100 Subject: [PATCH 160/197] Fixed rotating anchored shuttle consoles (#35000) Fixed rotation shuttle consoles when anchored --- .../Entities/Structures/Machines/Computers/computers.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 49321bce829..c71a64cd015 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -112,8 +112,6 @@ radius: 1.5 energy: 1.6 color: "#43ccb5" - - type: Rotatable - rotateWhileAnchored: true - type: entity parent: BaseComputer @@ -138,8 +136,6 @@ radius: 1.5 energy: 1.6 color: "#43ccb5" - - type: Rotatable - rotateWhileAnchored: true - type: ItemSlots slots: disk_slot: From 68885ad9f50204db591e3a29e65b93abda051bd1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 9 Feb 2025 12:16:54 +0000 Subject: [PATCH 161/197] 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 b0b6920ba76..3076f889503 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: You can examine entities inside of your own container again. - type: Fix - id: 7420 - time: '2024-09-23T04:55:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32267 - author: Cojoke-dot changes: - message: L6 Saw now fits in the suit slot @@ -3901,3 +3894,10 @@ id: 7919 time: '2025-02-09T00:12:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34974 +- author: rokudara-sen + changes: + - message: Anchored shuttle console will no longer rotate. + type: Fix + id: 7920 + time: '2025-02-09T12:15:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35000 From fcdb0e831ce26ec74460789629e00b7cee43d438 Mon Sep 17 00:00:00 2001 From: Boaz1111 <149967078+Boaz1111@users.noreply.github.com> Date: Sun, 9 Feb 2025 16:10:10 +0100 Subject: [PATCH 162/197] long bacon scarf (#34950) * went to the long bacon store. * obtainable :3 --- .../VendingMachines/Inventories/pride.yml | 2 ++ .../Entities/Clothing/Neck/scarfs.yml | 11 ++++++++ .../lesbian-long.rsi/equipped-NECK.png | Bin 0 -> 627 bytes .../PrideScarfs/lesbian-long.rsi/icon.png | Bin 0 -> 666 bytes .../lesbian-long.rsi/inhand-left.png | Bin 0 -> 340 bytes .../lesbian-long.rsi/inhand-right.png | Bin 0 -> 330 bytes .../PrideScarfs/lesbian-long.rsi/meta.json | 26 ++++++++++++++++++ 7 files changed, 39 insertions(+) create mode 100644 Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/equipped-NECK.png create mode 100644 Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/meta.json diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml index 26c8db2f224..566b3059734 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pride.yml @@ -45,3 +45,5 @@ ClothingUniformColorRainbow: 2 ClothingUnderSocksCoder: 2 ClothingUnderSocksBee: 2 + contrabandInventory: + ClothingNeckScarfStripedLesbianLong: 2 diff --git a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml index 82ebfa2b94c..659bce99649 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml @@ -240,3 +240,14 @@ sprite: Clothing/Neck/Scarfs/PrideScarfs/trans.rsi - type: Clothing sprite: Clothing/Neck/Scarfs/PrideScarfs/trans.rsi + +- type: entity + parent: ClothingScarfBase + id: ClothingNeckScarfStripedLesbianLong + name: long bacon + description: Long bacon! Perfect for sharing with your girlfriend! + components: + - type: Sprite + sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi + - type: Clothing + sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi diff --git a/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/equipped-NECK.png b/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..7779936adaea48b47014d1b2b9c7a5f3f4d26f85 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qt-3``uJE{-7;ac^gC^kQ}tX#3t&W|ky;S&Kz* zqpG;A0=M(|9VgA-QNQ5p zd`pG}-#;bp>W}^YS~}Bx!n5ePCrrgp9eZHm_4$3Xom2>;Ly7n;>#{}vmW2DsEqc23 zYDRg1T*{|IZ~iTFWtej~@e;%2Zxg>wNMQW4;I~&|am)BA#Z@+zUD`+v-va$j(P^^%mC_LF)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0xwBKK~z{r?Up}F z13?hQR|P@SX#4|45FzPAQYi@bB3RkQ;3u%L^a}`)mT0 z)fE7WN^uBdL73v91RIbiCrQH7L;Yqv*Jlej`l^e>E7S;xi1>J3 zKebV7$5dB1QOtdq;DQPCKSWX4s0FRaaB?gkssRii%y2{+L1ad>IY3dS zJzuGH+BS}$K|~{nG=dCCC`v&@+&SuqF%H!LHj$CY%mAEBo-|3&MK!>RWps@YDahYS zkS!Tqg029#Ml?gNApaL&{C4=N^}TZc`NbIX38Gtl@Ca;Jo&W#<07*qoM6N<$f>fm- AX#fBK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/inhand-left.png b/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..df0d874d0df07b3200b4f76907a67e6a30c7644c GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!Iz#cjv*CsZ*LlM9dZz8eHf@?>rmDGU}27q zZG-#9EgwCUlrrW!c_@cHI(2B8V^Ue#qzC^^rI~IUq zkJ;6(gBg#PNHX@;?lasOs^q}Z!62x>ug8sKpmlkWTx3cek`{ql=snvej z*L2^g?fe=NefH}%o_o4)?p)h>%klTDM?7g&PYjP{PKpkHd+gV&M*@s6(_&wD)iCrN V$kdcR{*47>tf#A=%Q~loCIAh}gbvUtS?`mh34hBI5CYJ_|DY8(r84`2;pOsZJ4V{~?jrA?x6SCfvY_brU)=j)DOCqsd?96@f(m!Jzf1= J);T3K0RTZBg1-O& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/meta.json b/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/meta.json new file mode 100644 index 00000000000..c32ea35675a --- /dev/null +++ b/Resources/Textures/Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da | In hand sprites sprited by PuroSlavKing (Github) for Space Station 14, recolored by MrGreen06 (Discord), extended by Boaz1111(github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From d0614c031593405fb0d4295273e839efa34787f7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 9 Feb 2025 15:11:18 +0000 Subject: [PATCH 163/197] 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 3076f889503..fdb2e198454 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: L6 Saw now fits in the suit slot - type: Tweak - - message: L6 Saw is now a 5x4 item - type: Tweak - id: 7421 - time: '2024-09-23T06:48:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30525 - author: ElectroJr changes: - message: Entities within the same container as the player only appear in the context @@ -3901,3 +3892,11 @@ id: 7920 time: '2025-02-09T12:15:44.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/35000 +- author: Boaz1111 + changes: + - message: Long Bacon Scarf(Lesbian scarf but long) can now be found in the pride-o-mat's + hacked inventory! + type: Add + id: 7921 + time: '2025-02-09T15:10:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34950 From 041189e6908594770a8b191110dcf9af161d6092 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 9 Feb 2025 21:02:38 +0000 Subject: [PATCH 164/197] 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 fdb2e198454..e660a09b078 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ElectroJr - changes: - - message: Entities within the same container as the player only appear in the context - menu when clicking near the container. - type: Fix - id: 7422 - time: '2024-09-23T07:28:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32395 - author: Errant changes: - message: Computers now have a maintenance panel with a Power and AI wire (if AI-connected). @@ -3900,3 +3892,10 @@ id: 7921 time: '2025-02-09T15:10:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34950 +- author: Spacemann + changes: + - message: Removed Cog station + type: Remove + id: 7922 + time: '2025-02-09T21:01:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34996 From 5c1e8cf44637bf76ff98fdc1fd4d0ccb63460040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B6=D0=B5=D0=BA=D1=81=D0=BE=D0=BD=20=D0=9C=D0=B8?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D1=81=D1=81=D0=B8=D0=BF=D0=BF=D0=B8?= Date: Sun, 9 Feb 2025 16:16:17 -0600 Subject: [PATCH 165/197] Add loungewear to uniform printer (#35008) * Update clothing.yml * Update clothing.yml --- Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml | 1 + Resources/Prototypes/Recipes/Lathes/clothing.yml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml index c8c00baaecf..49e321dddd5 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/clothing.yml @@ -5,6 +5,7 @@ recipes: - ClothingUniformJumpsuitColorGrey - ClothingUniformJumpskirtColorGrey + - ClothingUniformJumpsuitLoungewear - type: latheRecipePack parent: diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml index 62e2982e5cf..6279cc21560 100644 --- a/Resources/Prototypes/Recipes/Lathes/clothing.yml +++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml @@ -65,6 +65,11 @@ parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtColorGrey result: ClothingUniformJumpskirtColorGrey + +- type: latheRecipe + parent: BaseJumpsuitRecipe + id: ClothingUniformJumpsuitLoungewear + result: ClothingUniformJumpsuitLoungewear - type: latheRecipe parent: BaseJumpsuitRecipe From 96c9bab2ed1bc15be5a042c822b8edadefdfb146 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 9 Feb 2025 22:17:23 +0000 Subject: [PATCH 166/197] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e660a09b078..a4ca6e43d7f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Errant - changes: - - message: Computers now have a maintenance panel with a Power and AI wire (if AI-connected). - type: Tweak - - message: Computer deconstruction now begins with the crowbar, not the screwdriver. - type: Tweak - id: 7423 - time: '2024-09-23T10:51:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32273 - author: lzk228 changes: - message: Guidebook books now do damage like default writeable books. @@ -3899,3 +3890,10 @@ id: 7922 time: '2025-02-09T21:01:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34996 +- author: notquitehadouken + changes: + - message: Added loungewear to uniform printer + type: Add + id: 7923 + time: '2025-02-09T22:16:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35008 From 9f28cdbd0199da8d5dfe4291ad7a4f11d0e442a2 Mon Sep 17 00:00:00 2001 From: Zachary Higgs Date: Sun, 9 Feb 2025 19:16:21 -0400 Subject: [PATCH 167/197] Make UnrevivableComponent shared, give the component reason messages and if it shows up on the analyzer (#35013) * Make UnrevivableComponent shared - Move UnrevivableComponent to shared - add reason messages and if the status shows up in a health analyzer * Update Content.Shared/Traits/Assorted/UnrevivableComponent.cs Co-authored-by: Tayrtahn * Make UnrevivableComponent networked * Update Content.Shared/Traits/Assorted/UnrevivableComponent.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --------- Co-authored-by: Tayrtahn Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/Medical/DefibrillatorSystem.cs | 6 ++--- .../Medical/HealthAnalyzerSystem.cs | 4 ++-- .../Traits/Assorted/UnrevivableComponent.cs | 10 --------- .../Traits/Assorted/UnrevivableComponent.cs | 22 +++++++++++++++++++ 4 files changed, 27 insertions(+), 15 deletions(-) delete mode 100644 Content.Server/Traits/Assorted/UnrevivableComponent.cs create mode 100644 Content.Shared/Traits/Assorted/UnrevivableComponent.cs diff --git a/Content.Server/Medical/DefibrillatorSystem.cs b/Content.Server/Medical/DefibrillatorSystem.cs index 6bd563101b3..ba272c92f51 100644 --- a/Content.Server/Medical/DefibrillatorSystem.cs +++ b/Content.Server/Medical/DefibrillatorSystem.cs @@ -6,7 +6,7 @@ using Content.Server.Ghost; using Content.Server.Popups; using Content.Server.PowerCell; -using Content.Server.Traits.Assorted; +using Content.Shared.Traits.Assorted; using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.Interaction; @@ -193,9 +193,9 @@ public void Zap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorCo _chatManager.TrySendInGameICMessage(uid, Loc.GetString("defibrillator-rotten"), InGameICChatType.Speak, true); } - else if (HasComp(target)) + else if (TryComp(target, out var unrevivable)) { - _chatManager.TrySendInGameICMessage(uid, Loc.GetString("defibrillator-unrevivable"), + _chatManager.TrySendInGameICMessage(uid, Loc.GetString(unrevivable.ReasonMessage), InGameICChatType.Speak, true); } else diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 2cad5299138..edae7c11976 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -2,7 +2,7 @@ using Content.Server.Medical.Components; using Content.Server.PowerCell; using Content.Server.Temperature.Components; -using Content.Server.Traits.Assorted; +using Content.Shared.Traits.Assorted; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; @@ -258,7 +258,7 @@ public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool s bleeding = bloodstream.BleedAmount > 0; } - if (HasComp(target)) + if (TryComp(target, out var unrevivableComp) && unrevivableComp.Analyzable) unrevivable = true; // Shitmed Change Start diff --git a/Content.Server/Traits/Assorted/UnrevivableComponent.cs b/Content.Server/Traits/Assorted/UnrevivableComponent.cs deleted file mode 100644 index b95c922d548..00000000000 --- a/Content.Server/Traits/Assorted/UnrevivableComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Content.Server.Traits.Assorted; - -/// -/// This is used for the urevivable trait. -/// -[RegisterComponent] -public sealed partial class UnrevivableComponent : Component -{ - -} diff --git a/Content.Shared/Traits/Assorted/UnrevivableComponent.cs b/Content.Shared/Traits/Assorted/UnrevivableComponent.cs new file mode 100644 index 00000000000..19b4cac5e0d --- /dev/null +++ b/Content.Shared/Traits/Assorted/UnrevivableComponent.cs @@ -0,0 +1,22 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Traits.Assorted; + +/// +/// This is used for the unrevivable trait as well as generally preventing revival. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class UnrevivableComponent : Component +{ + /// + /// A field to define if we should display the "Genetic incompatibility" warning on health analysers + /// + [DataField, AutoNetworkedField] + public bool Analyzable = true; + + /// + /// The loc string used to provide a reason for being unrevivable + /// + [DataField, AutoNetworkedField] + public LocId ReasonMessage = "defibrillator-unrevivable"; +} From e751098441c41486b8d8cf80ea429433a32f03f3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 9 Feb 2025 23:25:20 +0000 Subject: [PATCH 168/197] 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 a4ca6e43d7f..69bfa6c8719 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Guidebook books now do damage like default writeable books. - type: Fix - id: 7424 - time: '2024-09-23T11:12:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32403 - author: Jophire changes: - message: VIM mech now can open maintenance doors! @@ -3897,3 +3890,10 @@ id: 7923 time: '2025-02-09T22:16:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/35008 +- author: Vortebo + changes: + - message: Added Relic station. + type: Add + id: 7924 + time: '2025-02-09T23:24:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34988 From 5e3b415df77a50f97dc5cde1023f57074e4b9e19 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 00:38:12 +0000 Subject: [PATCH 169/197] update files that wanted list added and fix stuff --- .../Systems/AdminVerbSystem.Smites.cs | 2 +- .../Systems/CriminalRecordsConsoleSystem.cs | 28 ++++-- .../Systems/CriminalRecordsSystem.cs | 95 +++++++++++++++++-- .../Silicons/Laws/SiliconLawSystem.cs | 2 +- .../Borgs/BorgSwitchableTypeSystem.Lawset.cs | 2 +- .../CriminalRecords/CriminalRecord.cs | 8 +- .../Systems/SharedCriminalRecordsSystem.cs | 22 ++++- 7 files changed, 140 insertions(+), 19 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 7338cf5176f..8be4735e023 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -907,7 +907,7 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); EnsureComp(args.Target); EnsureComp(args.Target); - EnsureComp(args.Target); + //EnsureComp(args.Target); // DeltaV EnsureComp(args.Target); EnsureComp(args.Target); EnsureComp(args.Target); diff --git a/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs b/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs index f986bb0ad45..8341c6bb073 100644 --- a/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs +++ b/Content.Server/CriminalRecords/Systems/CriminalRecordsConsoleSystem.cs @@ -76,6 +76,13 @@ private void OnFiltersChanged(Entity ent, ref S } } + private void GetOfficer(EntityUid uid, out string officer) + { + var tryGetIdentityShortInfoEvent = new TryGetIdentityShortInfoEvent(null, uid); + RaiseLocalEvent(tryGetIdentityShortInfoEvent); + officer = tryGetIdentityShortInfoEvent.Title ?? Loc.GetString("criminal-records-console-unknown-officer"); + } + private void OnChangeStatus(Entity ent, ref CriminalRecordChangeStatus msg) { // prevent malf client violating wanted/reason nullability @@ -98,17 +105,20 @@ private void OnChangeStatus(Entity ent, ref Cri return; } + var oldStatus = record.Status; + + var name = _records.RecordName(key.Value); + GetOfficer(mob.Value, out var officer); + // when arresting someone add it to history automatically // fallback exists if the player was not set to wanted beforehand if (msg.Status == SecurityStatus.Detained) { var oldReason = record.Reason ?? Loc.GetString("criminal-records-console-unspecified-reason"); var history = Loc.GetString("criminal-records-console-auto-history", ("reason", oldReason)); - _criminalRecords.TryAddHistory(key.Value, history); + _criminalRecords.TryAddHistory(key.Value, history, officer); } - var oldStatus = record.Status; - // will probably never fail given the checks above name = _records.RecordName(key.Value); officer = Loc.GetString("criminal-records-console-unknown-officer"); @@ -142,10 +152,10 @@ private void OnChangeStatus(Entity ent, ref Cri (_, SecurityStatus.Paroled) => "paroled", // prisoner did their time (_, SecurityStatus.Discharged) => "released", - // # DeltaV - person is subpoenaed by Justice Department - (_, SecurityStatus.Subpoenaed) => "subpoenaed", // going from any other state to wanted, AOS or prisonbreak / lazy secoff never set them to released and they reoffended (_, SecurityStatus.Wanted) => "wanted", + // DeltaV - person is subpoenaed by Justice Department + (_, SecurityStatus.Subpoenaed) => "subpoenaed", // person is no longer sus (SecurityStatus.Suspected, SecurityStatus.None) => "not-suspected", // going from wanted to none, must have been a mistake @@ -154,7 +164,7 @@ private void OnChangeStatus(Entity ent, ref Cri (SecurityStatus.Detained, SecurityStatus.None) => "released", // criminal is no longer on parole (SecurityStatus.Paroled, SecurityStatus.None) => "not-parole", - // # DeltaV - Person is no longer subpoenaed + // DeltaV - Person is no longer subpoenaed (SecurityStatus.Subpoenaed, SecurityStatus.None) => "not-subpoenaed", // this is impossible _ => "not-wanted" @@ -167,14 +177,16 @@ private void OnChangeStatus(Entity ent, ref Cri private void OnAddHistory(Entity ent, ref CriminalRecordAddHistory msg) { - if (!CheckSelected(ent, msg.Actor, out _, out var key)) + if (!CheckSelected(ent, msg.Actor, out var mob, out var key)) return; var line = msg.Line.Trim(); if (line.Length < 1 || line.Length > ent.Comp.MaxStringLength) return; - if (!_criminalRecords.TryAddHistory(key.Value, line)) + GetOfficer(mob.Value, out var officer); + + if (!_criminalRecords.TryAddHistory(key.Value, line, officer)) return; // no radio message since its not crucial to officers patrolling diff --git a/Content.Server/CriminalRecords/Systems/CriminalRecordsSystem.cs b/Content.Server/CriminalRecords/Systems/CriminalRecordsSystem.cs index a65fb0be9e1..12967fb2a58 100644 --- a/Content.Server/CriminalRecords/Systems/CriminalRecordsSystem.cs +++ b/Content.Server/CriminalRecords/Systems/CriminalRecordsSystem.cs @@ -1,10 +1,15 @@ -using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Server.CartridgeLoader; +using Content.Server.CartridgeLoader.Cartridges; using Content.Server.StationRecords.Systems; using Content.Shared.CriminalRecords; using Content.Shared.CriminalRecords.Systems; using Content.Shared.Security; using Content.Shared.StationRecords; using Content.Server.GameTicking; +using Content.Server.Station.Systems; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; namespace Content.Server.CriminalRecords.Systems; @@ -20,12 +25,19 @@ public sealed class CriminalRecordsSystem : SharedCriminalRecordsSystem { [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly StationRecordsSystem _records = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly CartridgeLoaderSystem _cartridge = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnGeneralRecordCreated); + /* DeltaV - wanted list replaced by secwatch + SubscribeLocalEvent(OnRecordChanged); + SubscribeLocalEvent(OnCartridgeUiReady); + SubscribeLocalEvent(OnHistoryAdded); + SubscribeLocalEvent(OnHistoryRemoved); */ } private void OnGeneralRecordCreated(AfterGeneralRecordCreatedEvent ev) @@ -39,14 +51,14 @@ private void OnGeneralRecordCreated(AfterGeneralRecordCreatedEvent ev) /// Reason should only be passed if status is Wanted, nullability isn't checked. ///
/// True if the status is changed, false if not - public bool TryChangeStatus(StationRecordKey key, SecurityStatus status, string? reason) + public bool TryChangeStatus(StationRecordKey key, SecurityStatus status, string? reason, string? initiatorName = null) { // don't do anything if its the same status if (!_records.TryGetRecord(key, out var record) || status == record.Status) return false; - OverwriteStatus(key, record, status, reason); + OverwriteStatus(key, record, status, reason, initiatorName); return true; } @@ -54,16 +66,25 @@ public bool TryChangeStatus(StationRecordKey key, SecurityStatus status, string? /// /// Sets the status without checking previous status or reason nullability. /// - public void OverwriteStatus(StationRecordKey key, CriminalRecord record, SecurityStatus status, string? reason) + public void OverwriteStatus(StationRecordKey key, CriminalRecord record, SecurityStatus status, string? reason, string? initiatorName = null) { record.Status = status; record.Reason = reason; + record.InitiatorName = initiatorName; var name = _records.RecordName(key); if (name != string.Empty) UpdateCriminalIdentity(name, status); _records.Synchronize(key); + + /* DeltaV - wanted list replaced by secwatch + var args = new CriminalRecordChangedEvent(record); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var readerUid, out _)) + { + RaiseLocalEvent(readerUid, ref args); + } */ } /// @@ -76,15 +97,24 @@ public bool TryAddHistory(StationRecordKey key, CrimeHistory entry) return false; record.History.Add(entry); + + /* DeltaV - wanted list replaced by secwatch + var args = new CriminalHistoryAddedEvent(entry); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var readerUid, out _)) + { + RaiseLocalEvent(readerUid, ref args); + } */ + return true; } /// /// Creates and tries to add a history entry using the current time. /// - public bool TryAddHistory(StationRecordKey key, string line) + public bool TryAddHistory(StationRecordKey key, string line, string? initiatorName = null) { - var entry = new CrimeHistory(_ticker.RoundDuration(), line); + var entry = new CrimeHistory(_ticker.RoundDuration(), line, initiatorName); return TryAddHistory(key, entry); } @@ -100,7 +130,60 @@ public bool TryDeleteHistory(StationRecordKey key, uint index) if (index >= record.History.Count) return false; + var history = record.History[(int)index]; record.History.RemoveAt((int) index); + + /* DeltaV - wanted list replaced by secwatch + var args = new CriminalHistoryRemovedEvent(history); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var readerUid, out _)) + { + RaiseLocalEvent(readerUid, ref args); + } */ + return true; } + + /* DeltaV - wanted list replaced by secwatch + private void OnRecordChanged(Entity ent, ref CriminalRecordChangedEvent args) => + StateChanged(ent); + + private void OnHistoryAdded(Entity ent, ref CriminalHistoryAddedEvent args) => + StateChanged(ent); + + private void OnHistoryRemoved(Entity ent, ref CriminalHistoryRemovedEvent args) => + StateChanged(ent); + + private void StateChanged(Entity ent) + { + if (Comp(ent).LoaderUid is not { } loaderUid) + return; + + UpdateReaderUi(ent, loaderUid); + } + + private void OnCartridgeUiReady(Entity ent, ref CartridgeUiReadyEvent args) + { + UpdateReaderUi(ent, args.Loader); + } + + private void UpdateReaderUi(Entity ent, EntityUid loaderUid) + { + if (_station.GetOwningStation(ent) is not { } station) + return; + + var records = _records.GetRecordsOfType(station) + .Where(cr => cr.Item2.Status is not SecurityStatus.None || cr.Item2.History.Count > 0) + .Select(cr => + { + var (i, r) = cr; + var key = new StationRecordKey(i, station); + // Hopefully it will work smoothly..... + _records.TryGetRecord(key, out GeneralStationRecord? generalRecord); + return new WantedRecord(generalRecord!, r.Status, r.Reason, r.InitiatorName, r.History); + }); + var state = new WantedListUiState(records.ToList()); + + _cartridge.UpdateCartridgeUiState(loaderUid, state); + }*/ } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 40e672f1c1e..4cad99334da 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -159,7 +159,7 @@ private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent componen component.Subverted = true; // Add the first emag law before the others - var name = CompOrNull(uid)?.OwnerName ?? Name(args.UserUid); // DeltaV: Reuse emagger name if possible + var name = CompOrNull(uid)?.OwnerName ?? Name(args.user); // DeltaV: Reuse emagger name if possible component.Lawset?.Laws.Insert(0, new SiliconLaw { LawString = Loc.GetString("law-emag-custom", ("name", name), ("title", Loc.GetString(component.Lawset.ObeysTo))), // DeltaV: pass name from variable diff --git a/Content.Server/_DV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs b/Content.Server/_DV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs index 28923ed21ad..28676610ace 100644 --- a/Content.Server/_DV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs +++ b/Content.Server/_DV/Silicons/Borgs/BorgSwitchableTypeSystem.Lawset.cs @@ -31,7 +31,7 @@ private void ConfigureLawset(EntityUid uid, ProtoId id) if (CompOrNull(uid)?.OwnerName != null) { // raising the event manually to bypass re-emagging checks - var ev = new GotEmaggedEvent(uid); // user wont be used since OwnerName isnt null, safe to pass itself + var ev = new GotEmaggedEvent(uid, EmagType.Interaction); // user wont be used since OwnerName isnt null, safe to pass itself RaiseLocalEvent(uid, ref ev); } diff --git a/Content.Shared/CriminalRecords/CriminalRecord.cs b/Content.Shared/CriminalRecords/CriminalRecord.cs index 0fe23d43954..5a023a9188c 100644 --- a/Content.Shared/CriminalRecords/CriminalRecord.cs +++ b/Content.Shared/CriminalRecords/CriminalRecord.cs @@ -23,6 +23,12 @@ public sealed record CriminalRecord [DataField] public string? Reason; + /// + /// The name of the person who changed the status. + /// + [DataField] + public string? InitiatorName; + /// /// Criminal history of the person. /// This should have charges and time served added after someone is detained. @@ -35,4 +41,4 @@ public sealed record CriminalRecord /// A line of criminal activity and the time it was added at. /// [Serializable, NetSerializable] -public record struct CrimeHistory(TimeSpan AddTime, string Crime); +public record struct CrimeHistory(TimeSpan AddTime, string Crime, string? InitiatorName); diff --git a/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsSystem.cs b/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsSystem.cs index 195ff0f7465..d665d32f1ed 100644 --- a/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsSystem.cs +++ b/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsSystem.cs @@ -2,6 +2,8 @@ using Content.Shared.IdentityManagement.Components; using Content.Shared.Security; using Content.Shared.Security.Components; +using Content.Shared.StationRecords; +using Robust.Shared.Serialization; namespace Content.Shared.CriminalRecords.Systems; @@ -43,7 +45,6 @@ public void SetCriminalIcon(string name, SecurityStatus status, EntityUid charac SecurityStatus.Detained => "SecurityIconIncarcerated", SecurityStatus.Discharged => "SecurityIconDischarged", SecurityStatus.Suspected => "SecurityIconSuspected", - SecurityStatus.Subpoenaed => "SecurityIconSubpoenaed", /// # DeltaV Justice Department Subpoena _ => record.StatusIcon }; @@ -51,3 +52,22 @@ public void SetCriminalIcon(string name, SecurityStatus status, EntityUid charac Dirty(characterUid, record); } } + +[Serializable, NetSerializable] +public struct WantedRecord(GeneralStationRecord targetInfo, SecurityStatus status, string? reason, string? initiator, List history) +{ + public GeneralStationRecord TargetInfo = targetInfo; + public SecurityStatus Status = status; + public string? Reason = reason; + public string? Initiator = initiator; + public List History = history; +}; + +[ByRefEvent] +public record struct CriminalRecordChangedEvent(CriminalRecord Record); + +[ByRefEvent] +public record struct CriminalHistoryAddedEvent(CrimeHistory History); + +[ByRefEvent] +public record struct CriminalHistoryRemovedEvent(CrimeHistory History); From 163d7257d6b9c9c620463f8a9a6bb18f1c492a12 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 00:40:46 +0000 Subject: [PATCH 170/197] :trollface: --- .../Objects/Weapons/Guns/SMGs/smgs.yml | 26 ------------------- .../Objects/Weapons/Guns/Snipers/snipers.yml | 3 --- .../Catalog/Fills/Lockers/security.yml | 11 -------- .../_DV/Recipes/Lathes/Packs/medical.yml | 2 +- .../_DV/Recipes/Lathes/Packs/security.yml | 2 +- .../_DV/Recipes/Lathes/Packs/service.yml | 2 +- 6 files changed, 3 insertions(+), 43 deletions(-) delete mode 100644 Resources/Prototypes/Nyanotrasen/Catalog/Fills/Lockers/security.yml diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 5f94c0a8e1c..b3cbeb1a7ae 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -264,29 +264,3 @@ whitelist: tags: - CartridgePistol - -- type: entity - name: Vector - parent: WeaponSubMachineGunVector - id: WeaponSubMachineGunVectorRubber - description: An excellent fully automatic Heavy SMG. Uses .45 magnum ammo. - suffix: Non-Lethal - components: - - type: ItemSlots - slots: - gun_magazine: - name: Magazine - startingItem: MagazineMagnumSubMachineGunRubber - insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg - ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg - priority: 2 - whitelist: - tags: - - MagazineMagnumSubMachineGun - gun_chamber: - name: Chamber - startingItem: CartridgeMagnumRubber - priority: 1 - whitelist: - tags: - - CartridgeMagnum diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index b60069f557c..f028fdae927 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -79,9 +79,6 @@ - type: EyeCursorOffset maxOffset: 3 pvsIncrease: 0.3 - - type: GunRequiresWield # DeltaV - Firing an antimateriel rifle is.. incredibly unweildy with one hand. - - type: Gun # DeltaV - fireRate: 0.5 - type: entity name: musket diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Lockers/security.yml deleted file mode 100644 index 6e0fb6ab527..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Lockers/security.yml +++ /dev/null @@ -1,11 +0,0 @@ -- type: entity - parent: GunSafe - id: GunSafeSubMachineGunVector - name: vector safe - components: - - type: StorageFill - contents: - - id: WeaponSubMachineGunVector - amount: 2 - - id: MagazineMagnumSubMachineGun - amount: 4 diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml index b81e784931a..98ad519a38b 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml @@ -9,7 +9,7 @@ ## Dynamic -- type: latheRecipePacks +- type: latheRecipePack id: SyringeGuns recipes: - LauncherSyringe diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml index ed9faca449c..c7c84f3b5b3 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml @@ -39,7 +39,7 @@ - MagazineBoxSpecialRubber - type: latheRecipePack - id: SecurityWeaponsStatic + id: SecurityWeaponsStaticDeltaV recipes: - WeaponDisabler diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml index 0e93e6f88f1..677d01b779b 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml @@ -6,7 +6,7 @@ - CassetteTape - TapeRecorder -- type: latheRecipePacks +- type: latheRecipePack id: ServiceBoardsStaticDeltaV recipes: - DeepFryerMachineCircuitboard From 2013c8514e652b8e4bf13465aa5ea3520dbec6d8 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Sun, 9 Feb 2025 20:24:10 -0500 Subject: [PATCH 171/197] Allows pacifists to throw Items with DamageOnLand (#31060) --- .../Damage/Components/DamageOnLandComponent.cs | 6 ++++++ .../Damage/Systems/DamageOnLandSystem.cs | 17 +++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/Content.Server/Damage/Components/DamageOnLandComponent.cs b/Content.Server/Damage/Components/DamageOnLandComponent.cs index b7c5644f826..b2af72bd124 100644 --- a/Content.Server/Damage/Components/DamageOnLandComponent.cs +++ b/Content.Server/Damage/Components/DamageOnLandComponent.cs @@ -5,10 +5,16 @@ namespace Content.Server.Damage.Components [RegisterComponent] public sealed partial class DamageOnLandComponent : Component { + /// + /// Should this entity be damaged when it lands regardless of its resistances? + /// [DataField("ignoreResistances")] [ViewVariables(VVAccess.ReadWrite)] public bool IgnoreResistances = false; + /// + /// How much damage. + /// [DataField("damage", required: true)] [ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier Damage = default!; diff --git a/Content.Server/Damage/Systems/DamageOnLandSystem.cs b/Content.Server/Damage/Systems/DamageOnLandSystem.cs index 2e72e76e6d8..3cf103e6eee 100644 --- a/Content.Server/Damage/Systems/DamageOnLandSystem.cs +++ b/Content.Server/Damage/Systems/DamageOnLandSystem.cs @@ -1,10 +1,12 @@ using Content.Server.Damage.Components; -using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; using Content.Shared.Throwing; namespace Content.Server.Damage.Systems { + /// + /// Damages the thrown item when it lands. + /// public sealed class DamageOnLandSystem : EntitySystem { [Dependency] private readonly DamageableSystem _damageableSystem = default!; @@ -13,19 +15,6 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(DamageOnLand); - SubscribeLocalEvent(OnAttemptPacifiedThrow); - } - - /// - /// Prevent Pacified entities from throwing damaging items. - /// - private void OnAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) - { - // Allow healing projectiles, forbid any that do damage: - if (ent.Comp.Damage.AnyPositive()) - { - args.Cancel("pacified-cannot-throw"); - } } private void DamageOnLand(EntityUid uid, DamageOnLandComponent component, ref LandEvent args) From 4f3de03c0ffa4bdcdef8a824af98e9655b2211c2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 10 Feb 2025 01:25:18 +0000 Subject: [PATCH 172/197] 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 69bfa6c8719..a98359da59b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Jophire - changes: - - message: VIM mech now can open maintenance doors! - type: Add - id: 7425 - time: '2024-09-23T13:08:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32302 - author: lzk228 changes: - message: Cadet PDA now has wanted list cartridge preinstalled. @@ -3897,3 +3890,10 @@ id: 7924 time: '2025-02-09T23:24:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34988 +- author: IProduceWidgets + changes: + - message: Pacifists can throw things that break. + type: Fix + id: 7925 + time: '2025-02-10T01:24:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31060 From 59f97dfa6d9c55219af2eefff6a67eb8fcff04e1 Mon Sep 17 00:00:00 2001 From: GaussiArson <193122004+GaussiArson@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:33:55 -0500 Subject: [PATCH 173/197] Wooden Grip for Antique Laser Pistol (#34886) * wooden grip on antique laser, changes description to match. * darker grip * update meta.json * redesigned shape similar to ps3moira, edited mag to match, changed lights colors to match each other * fixing an only SLIGHTLY catastrophic fuckup with an experimental inhand sprite that I didn't mean to save and sleepily added to the previous commit * I DID IT AGAIN --------- Co-authored-by: gaussiarson-admin --- .../Weapons/Guns/Battery/battery_guns.yml | 2 +- .../Guns/Battery/antiquelasergun.rsi/base.png | Bin 1035 -> 1020 bytes .../Guns/Battery/antiquelasergun.rsi/icon.png | Bin 1040 -> 1043 bytes .../antiquelasergun.rsi/inhand-left.png | Bin 655 -> 480 bytes .../antiquelasergun.rsi/mag-unshaded-1.png | Bin 168 -> 173 bytes .../antiquelasergun.rsi/mag-unshaded-2.png | Bin 179 -> 185 bytes .../antiquelasergun.rsi/mag-unshaded-3.png | Bin 177 -> 187 bytes .../antiquelasergun.rsi/mag-unshaded-4.png | Bin 196 -> 205 bytes .../Battery/antiquelasergun.rsi/meta.json | 2 +- 9 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 405dac0897f..59643dd7e5f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -564,7 +564,7 @@ name: antique laser pistol parent: [BaseWeaponBatterySmall, BaseGrandTheftContraband] id: WeaponAntiqueLaser - description: This is an antique laser pistol. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. + description: This is an antique laser pistol. All craftsmanship is of the highest quality. It is decorated with a mahogany grip and chrome filigree. The object menaces with spikes of energy. On the item is an image of a captain and a clown. The clown is dead. The captain is striking a heroic pose. components: - type: Sprite sprite: Objects/Weapons/Guns/Battery/antiquelasergun.rsi diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png index 003858cf9d9011a7a0c5c407ff724bc8135b9424..d3b86df95e71752351c7a55e5a6ff73528f66c3f 100644 GIT binary patch delta 999 zcmVb_-BYyw^b5ch_0Itp)=>Px&wn;=mR9J=Wmd{TkWf;dlV>|p9ft4S% ztze?!tb@ckp~fY>5DspH8sotOky{TNHJYB}ApQg1+(eU2JQ)urD{dghUnk0j>?S6r z##nYzDG8(%idi}qW|-F3Lz$t4Y18$x7rvKy^SsZz-|u{%_kVfcfeT#V0uLEdvk6sI zg*!G3qiLQW#>U4)<+#!iYqmzP8F4fk^!-McQyz3$wjgrsjQB_sci;xx;7O-twEH5tu(ACxTKxFNrqoV_W zQmNG7LeREt5q}DW*t<0TzZTA{eBM@GEEe(nTHB;Azmf39PfxziouwOI z{La!1?^z!Muq=y0p}_F)Fp8o8@QAyRt{+6!e`==Nl>LohV3qZbTvQsqKx?hn71_ng1t4C6`=NWru1jlhiC=^1|G|vea zu1oXt^M6Dl5icIJZ5x`Lh~;vbAfR6!A$@P#69K1fRk8lzk6-Wd?2}=N#i9fVP1AhK zx42j&yl^e{>-$_T2OycI3DmWrABJRGT)i^ZV0}Fbg#w0QuyxeMVKu^G4CAkLn4t707pPi2-N3l@sp|xfc^b_;_*12-MUR@f0S@I%=Gkh1EGsR zARtMSgyT5Kvg|t0TmV2k9&a@bKsX$xvtYmW@9@go3sg^t1A%~4tyaCfYPE{H@#@iP z4+!AgfpQk^-M@8It9Qr0mL!=40AIqk1=NdZ2d}<4C*At_HUP)lzqR|?1upRL@gIaY Vl|A9(&N~1A002ovPDHLkV1nV$SMTn0nX+K`LTO42i5uW}DVvVrnvJ z{CP-!vy<&4TilCazcA$Yd-=WhzVm(W{RYl)j{iFp`z98P0e_%r8m4IqX}|Q^t4ew$ zeWrl9Pjh^@aaGuDnx-kHXuNQm005&!@9+-rtX^wVRr_&LEK!DnXi~lNc zVf+0vol7Q@c)eZ#+U@pT0sx6bf^R=~{>(|ANoTBeWZ?yF)s>mv!sfTQeok^uR9-crEl^M46Ibi3WVQ?R?Mq3hqDtakw@ zl}bZNeDv;Hy!`swsdLe2)FNXivA@4>Nq=;71c2M^?h_~!3IODC069vf5`{v6_4RcC z;_*1uY88M^r$fD72fzb#E<8#;p9dfi2%J(xlIWM>6BZU0I6gjBd_Eu0p8};;tBG2z zcIqu7k$;F%E|&)`AvqzMrYY0Y)57I-DZkvh!xN7^Os!TEQXM-9X_HF%{eCN^tJCSg zJ-3s@sQW;U)p7eze*WPmk3SOR;NU<3L?V%JEZ^E%zhtrmLlaAcLLmSlOCaSR8yi!6 zJ|7bk6958Gip3(ju2U|TMJN=a^-z%)zXA7~Z-3BeG}zhM0l+W}+-|orK0ZF0z~tm4 zQ&Urzrr8hJYSC;qr7B9Z*|bIpV0n3&?d@%<)v7olZgssKl}g3(2iq7rpgsy{WHK2?1uB(_EGq!rZdY;q8r~0yM1o{8$;`|QPhUh_ z{`eZI$7lU7o6O#9jYi{?&Fyv%FF_;{8E~{CnM?{m93CEuR4Rq)@!^>Y6AT7fU0t>O z?2oFdip%9vy4|iqzxR}Zo6rfFOomh{HE&XlU@(Yhs{g%z_R`z*P6(^2s`Pq2>s+tb zLpGirLwi7uR5Ti;)oQW1xjB-^Q_sBwfcAG=QJMyTW5P2NkWDD}vayEY*6&BkXVMF0Q*07*qoM6N<$f(|C=hyVZp diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png index 88be89b378008138417f791c22e480d438159c55..099c45a0af01e4b111d880caa9ce84b462981f7a 100644 GIT binary patch delta 1022 zcmVPx&%}GQ-R9J=WmCsKjWf;dlV>`4|=*o}U zj*E$kT?RMI2{kV1g>Y~cYK#XDWJx^qXf!>^LHq~2xrrv5crqSL4B5a*Jy|wnH!+$T zW7*kCNtSekBGR$YVHjTzWrpd}7Ch~R&t={`@B6&Zcb?~Y-+vb_xZr}vjMQ!-nM?|I ztm}H)b!YjWwMXy~M*sn!D2iu)4Glz#Q&CzI-YPH&A3tE;XVzC(8m#+T5AjcGzzc|;rR4PR{90s6X zub&72P*s&5zkKuDL0^44w>JEt5bfp| znx>&?T1NryhMnwwkpQ_|&dWd~5)pu~ZTsXDKaXWuEzkMt>Z)XI{UI(7_M!~-0#L4)Y*tJ* z{yviW`+xgIFx(?0)t4B3VF=r{MJyIWRaGw&E^e0Q=H^Hw5}rM1Sr)Xp5o@&?K|s4Q zME?FmPXs_$R~GQW>Up{J(@8aJGz>pGgIvA(`85`T#VPtEGQ{0Yb(en7QaWo2ar0K+hl zWm)R(?(Qt0x3`zRzCH$J%PWDKetm0SGELJvN&qu6Gb}GJQ!bZ zz;_H=F(_N&`nA!f)cY|E16|kII0&=v1el(lK6${Bv&bLknVg(te0-dGz3!a?_Z~3pg+1xk4Z}aYfR%9|60dN5H#2`7+ zupd`l0PO7SkWQ!h{PrC}eG2h-oT;g)rgwlYfj~f#BnjKLk!9J2$i&Gyw5< zoKRom{eSJoJkD`o_uY4K90#}Y{B-I80i3!}9>sn8Hx3&0?)tYbNu~kNGT^xd_(hzD s*Wa0yZvSuxfWwEsp4aVy3m!lJ0Z9p+l7Mkv%>V!Z07*qoM6N<$f{TLbF8}}l delta 1019 zcmV<7mg`!Bw zrr^pp>PEpb3l~|6l9ev(U*M)V3t_;OxDce+cBL-F)Wr-4QW;E%AsNP!H%&Xiq>0H( z<8_hV*Vi`5bZ{fs4?^xex#yhkednC}0@t|4{~f})iN#_7xPRSlEX$J0K6`vDrcLuo z0q=)G+#4H{PMh297M5k%`+PocuU&m&NXxPahr_mEI-8Y!&h^E#Y4RwUJZCGH%TE7u z58aOd;c%Enqhasgm1q8k;>>^F;p1F8eO0_uB50aMEEcm>aAh(X_V)Iu*Xx+3iInnE zfPV`W&+qqBtAEub4i#J;kB6C=8M(E!1%TJ<#aSjU0vU#dacd64Ffa^bC;=64nB7SdAb*?9+6wr5J_*Q9r*k$1ySr`- zVIYYwKlzZi-&?zME*g#6WSk@p4i0STo6RNwx~}&KzLnuxy$p<1UWoB6o5=55`D|Jw$>||D#5_S3ZYO4K&lcb z`A0@ZgwN+=Y-|ib0wSN!V;Ba-Vo`=dAsSERd4J;v&_8&eTCK*;&JF;kX`<`87#$rQ zPGEd|oQa7EEX(QzY&59X>q-?-uh;ES0$5pDVS9U;Oj|I16WtFgSiY}Ym)dk6jFU6z)XSXfw~)oR&OpzeWKEH+#LK+ez4 z+kX>qQGrY*!`*uY_7DGL|KXAR_KQyeNT<_%6)2TTs;mHXIvvsXZTL7O5($#YBvVsU zyfllv_0@N19-sZYYBFcD)oQg%HeJ^Tmmm^}oO5&{nM_JR9vvOYR4Rq$@!^>W6AT7f zU0t>PoF7fogv;d;olZy4>pgMqChUiFI&@7cl^Uu>Fc`!$(R<&&a`Pj)r-U_46Wwmt zKG*GbQH|%sz#dQ|6^%w|G#YGfZVn~#;;U}~;QqTMM7{U-tzW_`6Hra4_NuW4;lZP( p_~!ec0I>e}^|6VsagF~B{sGB?!L^Lk>A?U1002ovPDHLkV1jIE^vwVO diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/inhand-left.png index c05ed4833f97ba5703b5165f5c1ba9cacfb3069f..329ae1044e9693b4748a2bbcbe06ca31461f22b0 100644 GIT binary patch delta 454 zcmV;%0XhDU1>ggaB!2;OQb$4nuFf3k0004+NklM{CWAa+%qos?H4hTYD z=JB>T_xCTKUvoOW+xY_dGx-<*n8#Zy2z?_*;#haV({|SiLSHT}Z)JRSj?w5EcEbh$ zY~D9J$3M(wuz&rh;`t!-#d~}%YU^IF(O+k$=@ehhZrE5X7E1H=dOay`*7|LIxc?$f z(~x$&L_|bHL_|bHL`3_OW!c_x0UjV(merce$lYKkO^jb}dw_J(#N-s!)XfE` z@Bk^#Q>T{p4ycn0P*KhfxWftD{@{Pz8`jAMsQ4~BP(PK{4ycn0P+=lFpgkW@H5Z`b wr|dvgM$S*wT!4y$$qtyj-)DA!h=@pw4|;I;Z39SR>Hq)$07*qoM6N<$g3y@Jb^rhX delta 630 zcmaFB+|N2erJl3EBeIx*f$sU^!&cVY0GdNdUtl&VUah96c6NatFMUb(B&%FP-@Fx}l3t_3Tql4Y6k@ zqC(PYcPA^JtvP%0+q*mGwikc$GFKMp<7y}fVQ5**q##o-%J6Un1BW}SgM}8up+Lr% zM*a2rXF@l&s45(?ZgXW&^}pWvnp@@Qq{{O`5iCAp-WM+xUOwX&{_*>c&Xlyg1Wrx^ zk;0sQhtf2?S+Nmj-reyZHr{p&T4$l|a`Ljw6zvCUI~cU;S2f5#4J^K}!adr4|IDf9 zMc?pE5K#3mKDSG@-Z*sKo+Gd9+|0^OeBBhnFx5V^;qRX6dneafTi;GAEnS<>Wb*8* zOw*+0Gi0)P^%i{p^I!je)LUz=6?<(iF~%&wVlejn9qbv&q&-)YN-kNl5kw$zvHe!HjIzOERh;Rn07=zQ=dIC#`Hq{K6XW zsYE`$iQB^Z{ek8B2Uxx8-dO%SvfOh^oqXj{EyIz2J1(p*fAF=IU9p1o$y@G%h4Jql;+nWVyyPxuTwLDp zG~XaUzJYsTHTw;}raAAwJ0H8Y*Z>@@Kv&u@7PhNRVu@JC!TGZx^prw85kJSJzX3_B3hFZBv=^F&2cF1Ldk3hWnDs$Ewb7_fYFx^eLN$JMEeTA3w) x;970k5BVd<9rh{}i}W-F8h{ip5M^LUxPozlN`1bki(^PcYjT1F>*53v9)koGw?I4P$Mq7kXE!!(eEYw?=9DLs&JhhE z_oV*|W?dCH;IfL1Ps_Stg+PLW(JHrt8WOBe7-prc&k$v6Q;6fR{$W$MRYlz8NK@&2 s$$#u04FlGnkpr3B(-dgHmBGqT%*(CTHfQ%b1|aZs^<#Be=akR{0E+B07ytkO diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png index df4767bff9f12031025afa4e86f88b1353c07f6a..6b302b7c312a3c30aa0a9aaa68c5706e00b204d0 100644 GIT binary patch delta 157 zcmV;O0Al~M0l5K?B!2;OQb$4nuFf3k0001UNklF%Cdb5CqU!oy+KGUFAE0 z-YpzJ!g-v-8I-G_5cy$5Xw0iNKeNd+e*qEsJ7Yq%naAE+cWVD}fnir*I_x(d?M6$; zoB^;IuymV2mKTvLuY9F4146#eRd=3c@4#*S2oD9GT`3U}krpp37+DYvjcf=$00000 LNkvXXu0mjfNa8;t delta 151 zcmdnVxS4T+N_~~5i(^PcYjT1F>*53v9)koGw?I4P$Mrdn?(p#RHB4-5Z2V}=%&e?F<*Y->m)@p811=86St+X3wrp)I!5r3w zdUabxL|uLyXu8bvU-*oKhW2vzgBoCadYGyh7_3=%H3fQ%IRqGhz|+;wWt~$(69DJD BH30ws diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png index fcbbc48af1ac28a75265f6eeae6a54825f4ee72a..34470086a1f57480cde471dbbc275a18f6f4357f 100644 GIT binary patch delta 159 zcmV;Q0AT;I0lNW^B!2;OQb$4nuFf3k0001WNklu?>JA6a>&aJ6ED{1!pk! z#?~#|$6c(L!SY+!U?kydqK)^eA98`C06;|kj-Jp!S}8M|x%PTgU`YzZWIdi^oUGXM zqH^X4fE&O%GsAfi5y^Sw`Gf}O+GFm=H%@RA2o20u-2a(GL>NTAwgZ!U65Xt7QFH(R N002ovPDHLkV1fskM&tkh delta 149 zcmV;G0BZlc0kHv)B!75GL_t(oh3(X_34kyV1<-$Dp}0|+OdvRe*o#ZJrj;{jcNS@c zM3M;6=D+F}Kiok`03!OCq?Be6jdeOeR*lv?bxNtf<^3U_*`uB6rO1;Jv(E00000NkvXXu0mjf2~b7R delta 168 zcmV;Z09XIb0mK22B!7!ZL_t(oh3(X_4Z<)Gh2j4pgg|V-1lfXBk_oZ}b7T_cU;#RM zpgM|x;tHJ$E6w|=ll6Q)$+E%BR;Em7l%l5T5p;>%mTe|96wMx5X1*7hvVNtGo^2|! zY5N8P2+$j}ix8kE= Date: Sun, 9 Feb 2025 23:13:27 -0400 Subject: [PATCH 174/197] Move CloneAppearance to Shared (#35017) * Move CloneAppearance - Move CloneAppearance from HumanoidAppearanceSystem to SharedHumanoidAppearanceSystem * CR - Fix the sins of the past --- .../Systems/HumanoidAppearanceSystem.cs | 36 ------------------- .../SharedHumanoidAppearanceSystem.cs | 30 ++++++++++++++++ 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs index 9631decaaef..9e719bda660 100644 --- a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs +++ b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs @@ -20,42 +20,6 @@ public override void Initialize() SubscribeLocalEvent>(OnVerbsRequest); } - // this was done enough times that it only made sense to do it here - - /// - /// Clones a humanoid's appearance to a target mob, provided they both have humanoid components. - /// - /// Source entity to fetch the original appearance from. - /// Target entity to apply the source entity's appearance to. - /// Source entity's humanoid component. - /// Target entity's humanoid component. - public void CloneAppearance(EntityUid source, EntityUid target, HumanoidAppearanceComponent? sourceHumanoid = null, - HumanoidAppearanceComponent? targetHumanoid = null) - { - if (!Resolve(source, ref sourceHumanoid) || !Resolve(target, ref targetHumanoid)) - { - return; - } - - targetHumanoid.Species = sourceHumanoid.Species; - targetHumanoid.SkinColor = sourceHumanoid.SkinColor; - targetHumanoid.EyeColor = sourceHumanoid.EyeColor; - targetHumanoid.Age = sourceHumanoid.Age; - SetSex(target, sourceHumanoid.Sex, false, targetHumanoid); - targetHumanoid.CustomBaseLayers = new(sourceHumanoid.CustomBaseLayers); - targetHumanoid.MarkingSet = new(sourceHumanoid.MarkingSet); - - targetHumanoid.Gender = sourceHumanoid.Gender; - if (TryComp(target, out var grammar)) - { - grammar.Gender = sourceHumanoid.Gender; - } - - targetHumanoid.LastProfileLoaded = sourceHumanoid.LastProfileLoaded; // DeltaV - let paradox anomaly be cloned - - Dirty(target, targetHumanoid); - } - /// /// Removes a marking from a humanoid by ID. /// diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index f8a16739ca5..88fd118a50c 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -133,6 +133,36 @@ public void SetLayerVisibility(EntityUid uid, Dirty(uid, humanoid); } + /// + /// Clones a humanoid's appearance to a target mob, provided they both have humanoid components. + /// + /// Source entity to fetch the original appearance from. + /// Target entity to apply the source entity's appearance to. + /// Source entity's humanoid component. + /// Target entity's humanoid component. + public void CloneAppearance(EntityUid source, EntityUid target, HumanoidAppearanceComponent? sourceHumanoid = null, + HumanoidAppearanceComponent? targetHumanoid = null) + { + if (!Resolve(source, ref sourceHumanoid) || !Resolve(target, ref targetHumanoid)) + return; + + targetHumanoid.Species = sourceHumanoid.Species; + targetHumanoid.SkinColor = sourceHumanoid.SkinColor; + targetHumanoid.EyeColor = sourceHumanoid.EyeColor; + targetHumanoid.Age = sourceHumanoid.Age; + SetSex(target, sourceHumanoid.Sex, false, targetHumanoid); + targetHumanoid.CustomBaseLayers = new(sourceHumanoid.CustomBaseLayers); + targetHumanoid.MarkingSet = new(sourceHumanoid.MarkingSet); + + targetHumanoid.Gender = sourceHumanoid.Gender; + if (TryComp(target, out var grammar)) + grammar.Gender = sourceHumanoid.Gender; + + targetHumanoid.LastProfileLoaded = sourceHumanoid.LastProfileLoaded; // DeltaV - let paradox anomaly be cloned + + Dirty(target, targetHumanoid); + } + /// /// Sets the visibility for multiple layers at once on a humanoid's sprite. /// From e1291c790bb0a396350a2062ae7986bcf7efe2aa Mon Sep 17 00:00:00 2001 From: Zachary Higgs Date: Sun, 9 Feb 2025 23:36:01 -0400 Subject: [PATCH 175/197] Move DnaComponent to shared (#35012) * Move DnaComponent to shared - Add Using statements to AdminSystem and StationRecordsSystem to point to Content.Shared.Forensics * Proper namespacing * Revert an un-intended change * Add Networking to DNA Component * CR - Remove ("dna") * CR - add back ("dna") tag --- .../Administration/Systems/AdminSystem.cs | 1 + Content.Server/Body/Systems/BloodstreamSystem.cs | 1 + Content.Server/Forensics/Components/DnaComponent.cs | 11 ----------- Content.Server/Forensics/Systems/ForensicsSystem.cs | 1 + Content.Server/Implants/SubdermalImplantSystem.cs | 1 + .../StationRecords/Systems/StationRecordsSystem.cs | 1 + Content.Shared/Forensics/Components/DnaComponent.cs | 13 +++++++++++++ 7 files changed, 18 insertions(+), 11 deletions(-) delete mode 100644 Content.Server/Forensics/Components/DnaComponent.cs create mode 100644 Content.Shared/Forensics/Components/DnaComponent.cs diff --git a/Content.Server/Administration/Systems/AdminSystem.cs b/Content.Server/Administration/Systems/AdminSystem.cs index e624d70c41e..28be034380f 100644 --- a/Content.Server/Administration/Systems/AdminSystem.cs +++ b/Content.Server/Administration/Systems/AdminSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Administration; using Content.Shared.Administration.Events; using Content.Shared.CCVar; +using Content.Shared.Forensics.Components; using Content.Shared.GameTicking; using Content.Shared.Hands.Components; using Content.Shared.IdentityManagement; diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 198123cc5fd..d04a9932267 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -13,6 +13,7 @@ using Content.Shared.Drunk; using Content.Shared.FixedPoint; using Content.Shared.Forensics; +using Content.Shared.Forensics.Components; using Content.Shared.HealthExaminable; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; diff --git a/Content.Server/Forensics/Components/DnaComponent.cs b/Content.Server/Forensics/Components/DnaComponent.cs deleted file mode 100644 index 78857f9f31b..00000000000 --- a/Content.Server/Forensics/Components/DnaComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Server.Forensics; - -/// -/// This component is for mobs that have DNA. -/// -[RegisterComponent] -public sealed partial class DnaComponent : Component -{ - [DataField("dna"), ViewVariables(VVAccess.ReadWrite)] - public string DNA = String.Empty; -} diff --git a/Content.Server/Forensics/Systems/ForensicsSystem.cs b/Content.Server/Forensics/Systems/ForensicsSystem.cs index aa1e0c76bc8..5810b201252 100644 --- a/Content.Server/Forensics/Systems/ForensicsSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicsSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.DoAfter; using Content.Shared.Forensics; +using Content.Shared.Forensics.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Inventory; diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index cb41e55ba55..15b1d76b0d1 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Store.Systems; using Content.Shared.Cuffs.Components; using Content.Shared.Forensics; +using Content.Shared.Forensics.Components; using Content.Shared.Humanoid; using Content.Shared.Implants; using Content.Shared.Implants.Components; diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index fbef5852401..5e84292d171 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Forensics; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; // DeltaV +using Content.Shared.Forensics.Components; using Content.Shared.GameTicking; using Content.Shared.Inventory; using Content.Shared.PDA; diff --git a/Content.Shared/Forensics/Components/DnaComponent.cs b/Content.Shared/Forensics/Components/DnaComponent.cs new file mode 100644 index 00000000000..0dfa92146b3 --- /dev/null +++ b/Content.Shared/Forensics/Components/DnaComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Forensics.Components; + +/// +/// This component is for mobs that have DNA. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class DnaComponent : Component +{ + [DataField("dna"), AutoNetworkedField] + public string DNA = String.Empty; +} From 4936c591eebd8ef941b5de5a44a6e51baf6522d8 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 10 Feb 2025 16:18:24 +1100 Subject: [PATCH 176/197] Gravity well improvements (#35027) * Gravity well improvements - Fixed persistence - Removed dummy fields - Performance * Update Content.Server/Singularity/Components/GravityWellComponent.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Components/GravityWellComponent.cs | 20 +++------ .../EntitySystems/GravityWellSystem.cs | 44 ++++++++----------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/Content.Server/Singularity/Components/GravityWellComponent.cs b/Content.Server/Singularity/Components/GravityWellComponent.cs index 58a314fa8bb..fb419d88316 100644 --- a/Content.Server/Singularity/Components/GravityWellComponent.cs +++ b/Content.Server/Singularity/Components/GravityWellComponent.cs @@ -7,22 +7,20 @@ namespace Content.Server.Singularity.Components; /// The server-side version of . /// Primarily managed by . /// -[RegisterComponent] +[RegisterComponent, AutoGenerateComponentPause] public sealed partial class GravityWellComponent : Component { /// /// The maximum range at which the gravity well can push/pull entities. /// - [DataField("maxRange")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public float MaxRange; /// /// The minimum range at which the gravity well can push/pull entities. /// This is effectively hardfloored at . /// - [DataField("minRange")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public float MinRange = 0f; /// @@ -30,8 +28,7 @@ public sealed partial class GravityWellComponent : Component /// Negative values accelerate entities away from the gravity well. /// Actual acceleration scales with the inverse of the distance to the singularity. /// - [DataField("baseRadialAcceleration")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public float BaseRadialAcceleration = 0.0f; /// @@ -39,8 +36,7 @@ public sealed partial class GravityWellComponent : Component /// Positive tangential acceleration is counter-clockwise. /// Actual acceleration scales with the inverse of the distance to the singularity. /// - [DataField("baseTangentialAcceleration")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public float BaseTangentialAcceleration = 0.0f; #region Update Timing @@ -56,16 +52,14 @@ public sealed partial class GravityWellComponent : Component /// /// The next time at which this gravity well should pulse. /// - [ViewVariables(VVAccess.ReadOnly)] - [Access(typeof(GravityWellSystem))] + [DataField, Access(typeof(GravityWellSystem)), AutoPausedField] public TimeSpan NextPulseTime { get; internal set; } = default!; /// /// The last time this gravity well pulsed. /// [ViewVariables(VVAccess.ReadOnly)] - [Access(typeof(GravityWellSystem))] - public TimeSpan LastPulseTime { get; internal set; } = default!; + public TimeSpan LastPulseTime => NextPulseTime - TargetPulsePeriod; #endregion Update Timing } diff --git a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs index 7dcf3ef1ae5..6f2137b0d0a 100644 --- a/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs +++ b/Content.Server/Singularity/EntitySystems/GravityWellSystem.cs @@ -39,6 +39,8 @@ public sealed class GravityWellSystem : SharedGravityWellSystem private EntityQuery _gridQuery; private EntityQuery _physicsQuery; + private HashSet _entSet = new(); + public override void Initialize() { base.Initialize(); @@ -46,12 +48,17 @@ public override void Initialize() _mapQuery = GetEntityQuery(); _gridQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); - SubscribeLocalEvent(OnGravityWellStartup); + SubscribeLocalEvent(OnGravityWellMapInit); var vvHandle = _vvManager.GetTypeHandler(); vvHandle.AddPath(nameof(GravityWellComponent.TargetPulsePeriod), (_, comp) => comp.TargetPulsePeriod, SetPulsePeriod); } + private void OnGravityWellMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextPulseTime = _timing.CurTime + ent.Comp.TargetPulsePeriod; + } + public override void Shutdown() { var vvHandle = _vvManager.GetTypeHandler(); @@ -73,6 +80,7 @@ public override void Update(float frameTime) while (query.MoveNext(out var uid, out var gravWell, out var xform)) { var curTime = _timing.CurTime; + if (gravWell.NextPulseTime <= curTime) Update(uid, curTime - gravWell.LastPulseTime, gravWell, xform); } @@ -103,8 +111,7 @@ private void Update(EntityUid uid, TimeSpan frameTime, GravityWellComponent? gra if(!Resolve(uid, ref gravWell)) return; - gravWell.LastPulseTime = _timing.CurTime; - gravWell.NextPulseTime = gravWell.LastPulseTime + gravWell.TargetPulsePeriod; + gravWell.NextPulseTime += gravWell.TargetPulsePeriod; if (gravWell.MaxRange < 0.0f || !Resolve(uid, ref xform)) return; @@ -195,15 +202,18 @@ public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in if (mapPos == MapCoordinates.Nullspace) return; // No gravpulses in nullspace please. + _entSet.Clear(); var epicenter = mapPos.Position; var minRange2 = MathF.Max(minRange * minRange, MinGravPulseRange); // Cache square value for speed. Also apply a sane minimum value to the minimum value so that div/0s don't happen. - var bodyQuery = GetEntityQuery(); - var xformQuery = GetEntityQuery(); + _lookup.GetEntitiesInRange(mapPos.MapId, + epicenter, + maxRange, + _entSet, + flags: LookupFlags.Dynamic | LookupFlags.Sundries); - foreach(var entity in _lookup.GetEntitiesInRange(mapPos.MapId, epicenter, maxRange, flags: LookupFlags.Dynamic | LookupFlags.Sundries)) + foreach (var entity in _entSet) { - if (!bodyQuery.TryGetComponent(entity, out var physics) - || physics.BodyType == BodyType.Static) + if (!_physicsQuery.TryGetComponent(entity, out var physics)) { continue; } @@ -214,7 +224,7 @@ public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in if(!CanGravPulseAffect(entity)) continue; - var displacement = epicenter - _transform.GetWorldPosition(entity, xformQuery); + var displacement = epicenter - _transform.GetWorldPosition(entity); var distance2 = displacement.LengthSquared(); if (distance2 < minRange2) continue; @@ -263,20 +273,4 @@ public void SetPulsePeriod(EntityUid uid, TimeSpan value, GravityWellComponent? } #endregion Getters/Setters - - #region Event Handlers - - /// - /// Resets the pulse timings of the gravity well when the components starts up. - /// - /// The uid of the gravity well to start up. - /// The state of the gravity well to start up. - /// The startup prompt arguments. - public void OnGravityWellStartup(EntityUid uid, GravityWellComponent comp, ComponentStartup args) - { - comp.LastPulseTime = _timing.CurTime; - comp.NextPulseTime = comp.LastPulseTime + comp.TargetPulsePeriod; - } - - #endregion Event Handlers } From b8414c7b69c1acb60482ec2f80fd8f0361658fb9 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:05:19 +0100 Subject: [PATCH 177/197] Cleanup and fix disposal pipes (#34986) --- .../Structures/Piping/Disposal/pipes.yml | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml index afeba380ae0..fca28e99a6f 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml @@ -9,6 +9,8 @@ - Disposal components: - type: Sprite + drawdepth: ThickPipe + sprite: Structures/Piping/disposal.rsi visible: false - type: Appearance - type: SubFloorHide @@ -78,8 +80,6 @@ description: A BBP (big broken pipe). components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: pipe-b @@ -94,8 +94,6 @@ description: A huge pipe segment used for constructing disposal systems. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-s @@ -114,6 +112,8 @@ - type: Construction graph: DisposalPipe node: pipe + containers: + - DisposalTransit - type: entity id: DisposalTagger @@ -122,8 +122,6 @@ description: A pipe that tags entities for routing. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-tagger @@ -148,6 +146,8 @@ - type: Construction graph: DisposalPipe node: tagger + containers: + - DisposalTagger - type: entity id: DisposalTrunk @@ -156,8 +156,6 @@ description: A pipe trunk used as an entry point for disposal systems. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-t @@ -184,6 +182,8 @@ - type: Construction graph: DisposalPipe node: trunk + containers: + - DisposalEntry - type: entity id: DisposalRouter @@ -192,8 +192,6 @@ description: A three-way router. Entities with matching tags get routed to the side via configurable filters. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-j1s @@ -232,6 +230,8 @@ - type: Construction graph: DisposalPipe node: router + containers: + - DisposalRouter - type: entity id: DisposalRouterFlipped @@ -240,8 +240,6 @@ suffix: flipped components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-j2s @@ -273,6 +271,8 @@ - SubfloorMask - type: Construction node: routerflipped + containers: + - DisposalRouter - type: entity id: DisposalJunction @@ -281,8 +281,6 @@ description: A three-way junction. The arrow indicates where items exit. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-j1 @@ -316,6 +314,8 @@ - type: Construction graph: DisposalPipe node: junction + containers: + - DisposalJunction - type: entity id: DisposalJunctionFlipped @@ -324,8 +324,6 @@ suffix: flipped components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-j2 @@ -357,6 +355,8 @@ - SubfloorMask - type: Construction node: junctionflipped + containers: + - DisposalJunction - type: entity id: DisposalYJunction @@ -365,8 +365,6 @@ description: A three-way junction with another exit point. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-y @@ -397,6 +395,8 @@ - type: Construction graph: DisposalPipe node: yJunction + containers: + - DisposalJunction - type: entity id: DisposalBend @@ -405,8 +405,6 @@ description: A tube bent at a 90 degree angle. components: - type: Sprite - drawdepth: ThickPipe - sprite: Structures/Piping/disposal.rsi layers: - map: [ "pipe" ] state: conpipe-c @@ -433,6 +431,8 @@ - type: Construction graph: DisposalPipe node: bend + containers: + - DisposalBend - type: entity parent: DisposalJunction @@ -441,7 +441,6 @@ description: A signal-controlled three-way router. components: - type: Sprite - drawdepth: ThickPipe layers: - map: [ "pipe" ] state: signal-router-free @@ -472,6 +471,8 @@ - type: Construction graph: DisposalPipe node: signal_router + containers: + - DisposalSignalRouter - type: entity parent: DisposalSignalRouter From c1fb2ea017ae74e3db76a610b683e8c648a1cb19 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 10 Feb 2025 09:06:31 +0000 Subject: [PATCH 178/197] 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 a98359da59b..4ef3720384e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Cadet PDA now has wanted list cartridge preinstalled. - type: Fix - id: 7426 - time: '2024-09-23T21:49:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32399 - author: Vasilis changes: - message: Removed the age requirement for command jobs. @@ -3897,3 +3890,10 @@ id: 7925 time: '2025-02-10T01:24:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31060 +- author: lzk228 + changes: + - message: Deconstructing disposal pipes will no longer delete all the contents. + type: Fix + id: 7926 + time: '2025-02-10T09:05:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34986 From ec76de5c134615124452a6b0655f1255302ca9f0 Mon Sep 17 00:00:00 2001 From: TemporalOroboros Date: Mon, 10 Feb 2025 03:40:25 -0800 Subject: [PATCH 179/197] Purges the one remaining use of TransformComponent.WorldPosition in content. (#34943) --- .../UserInterface/Systems/Viewport/ViewportUIController.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs index 613f71e79b2..ffee14ad9a3 100644 --- a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs +++ b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs @@ -3,6 +3,7 @@ using Content.Shared.CCVar; using Robust.Client.Graphics; using Robust.Client.Player; +using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; using Robust.Shared.Configuration; using Robust.Shared.Timing; @@ -15,6 +16,7 @@ public sealed class ViewportUIController : UIController [Dependency] private readonly IPlayerManager _playerMan = default!; [Dependency] private readonly IEntityManager _entMan = default!; [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [UISystemDependency] private readonly SharedTransformSystem? _transformSystem = default!; public static readonly Vector2i ViewportSize = (EyeManager.PixelsPerMeter * 21, EyeManager.PixelsPerMeter * 15); public const int ViewportHeight = 15; private MainViewport? Viewport => UIManager.ActiveScreen?.GetWidget(); @@ -93,7 +95,7 @@ public override void FrameUpdate(FrameEventArgs e) _entMan.TryGetComponent(ent, out EyeComponent? eye); if (eye?.Eye == _eyeManager.CurrentEye - && _entMan.GetComponent(ent.Value).WorldPosition == default) + && (_transformSystem is null || _transformSystem.GetWorldPosition(ent.Value) == default)) return; // nothing to worry about, the player is just in null space... actually that is probably a problem? // Currently, this shouldn't happen. This likely happened because the main eye was set to null. When this From 253d607599e099b16e207800c7abfa9e9d3338c3 Mon Sep 17 00:00:00 2001 From: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Date: Mon, 10 Feb 2025 03:45:41 -0800 Subject: [PATCH 180/197] remove redundant `rainbowcarpplush` yaml lines (#35033) --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 48d691e016c..094dff0058a 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -713,7 +713,6 @@ - type: RgbLightController layers: [ 0 ] - type: Item - heldPrefix: rainbowcarpplush inhandVisuals: left: - state: rainbowcarpplush-inhand-left From b5c1c80674fcc63ca0fcebbeb489adf8a7610e6f Mon Sep 17 00:00:00 2001 From: TemporalOroboros Date: Mon, 10 Feb 2025 03:46:27 -0800 Subject: [PATCH 181/197] Purge the one remaining use of TransformComponent.AttachParent (#34941) --- .../EntitySystems/ContainmentFieldGeneratorSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs index bda7d20a8e0..5c6d50ffd37 100644 --- a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs @@ -320,7 +320,7 @@ private List GenerateFieldConnection(Entity Date: Mon, 10 Feb 2025 22:58:05 +1100 Subject: [PATCH 182/197] Tweak viewport nullspace check (#35037) * Tweak viewport nullspace check WorldPos being 0,0 is sussy-a. * a --- .../Systems/Viewport/ViewportUIController.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs index ffee14ad9a3..338b5fc7e5b 100644 --- a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs +++ b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs @@ -6,6 +6,7 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; using Robust.Shared.Configuration; +using Robust.Shared.Map; using Robust.Shared.Timing; namespace Content.Client.UserInterface.Systems.Viewport; @@ -95,8 +96,11 @@ public override void FrameUpdate(FrameEventArgs e) _entMan.TryGetComponent(ent, out EyeComponent? eye); if (eye?.Eye == _eyeManager.CurrentEye - && (_transformSystem is null || _transformSystem.GetWorldPosition(ent.Value) == default)) - return; // nothing to worry about, the player is just in null space... actually that is probably a problem? + && _entMan.GetComponent(ent.Value).MapID == MapId.Nullspace) + { + // nothing to worry about, the player is just in null space... actually that is probably a problem? + return; + } // Currently, this shouldn't happen. This likely happened because the main eye was set to null. When this // does happen it can create hard to troubleshoot bugs, so lets print some helpful warnings: From bd6aeaa438ceab60a86b75daa217209fc3cb844d Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 13:04:29 +0000 Subject: [PATCH 183/197] update DnaComponent usings --- Content.Server/_DV/StationEvents/Events/FugitiveRule.cs | 1 + Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/_DV/StationEvents/Events/FugitiveRule.cs b/Content.Server/_DV/StationEvents/Events/FugitiveRule.cs index f39d3eb07d0..d910881537f 100644 --- a/Content.Server/_DV/StationEvents/Events/FugitiveRule.cs +++ b/Content.Server/_DV/StationEvents/Events/FugitiveRule.cs @@ -8,6 +8,7 @@ using Content.Shared.Humanoid; using Content.Shared.Humanoid.Prototypes; using Content.Shared.Inventory; +using Content.Shared.Forensics.Components; using Content.Shared.Paper; using Content.Shared.Popups; using Content.Shared.Random.Helpers; diff --git a/Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs b/Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs index 35359dc4681..da9bd0a1ddd 100644 --- a/Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs +++ b/Content.Server/_Shitmed/Medical/Surgery/SurgerySystem.cs @@ -12,9 +12,9 @@ using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared._DV.Surgery; // DeltaV: expanded anesthesia -using Content.Server.Forensics; // DeltaV: surgery cross contamination using Content.Server._DV.Surgery; // DeltaV: surgery cross contamination using Content.Shared.FixedPoint; // DeltaV: surgery cross contamination +using Content.Shared.Forensics.Components; // DeltaV: surgery cross contamination using Content.Shared.Damage.Prototypes; // DeltaV: surgery cross contamination using Content.Shared._Shitmed.Medical.Surgery; using Content.Shared._Shitmed.Medical.Surgery.Conditions; From a31e25cb0244963ae9e3af4315ecb5ee59e6f2ef Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 13:18:55 +0000 Subject: [PATCH 184/197] remove always push on body part --- Content.Shared/Body/Organ/OrganComponent.cs | 8 ++++---- Content.Shared/Body/Part/BodyPartComponent.cs | 12 ++++++------ .../Surgery/Steps/SurgeryAddMarkingStepComponent.cs | 2 +- .../Steps/SurgeryRemoveMarkingStepComponent.cs | 3 +-- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index 2f575952e9c..a675f641112 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -30,13 +30,13 @@ public sealed partial class OrganComponent : Component, ISurgeryToolComponent // /// without referencing the prototype or hardcoding. ///
- [DataField, AlwaysPushInheritance] - public string SlotId = ""; + [DataField] + public string SlotId = string.Empty; - [DataField, AlwaysPushInheritance] + [DataField] public string ToolName { get; set; } = "An organ"; - [DataField, AlwaysPushInheritance] + [DataField] public float Speed { get; set; } = 1f; /// diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index b9862c28c9c..b5d2fcecee0 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -38,16 +38,16 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField] public float SeverBleeding = 4f; - [DataField, AlwaysPushInheritance] + [DataField] public string ToolName { get; set; } = "A body part"; - [DataField, AlwaysPushInheritance] - public string SlotId = ""; + [DataField] + public string SlotId = string.Empty; [DataField, AutoNetworkedField] public bool? Used { get; set; } = null; - [DataField, AlwaysPushInheritance] + [DataField] public float Speed { get; set; } = 1f; /// @@ -147,7 +147,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent }; - [DataField, AutoNetworkedField, AlwaysPushInheritance] + [DataField, AutoNetworkedField] public BodyPartType PartType = BodyPartType.Other; @@ -159,7 +159,7 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent [DataField("vital"), AutoNetworkedField] public bool IsVital; - [DataField, AutoNetworkedField, AlwaysPushInheritance] + [DataField, AutoNetworkedField] public BodyPartSymmetry Symmetry = BodyPartSymmetry.None; /// diff --git a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddMarkingStepComponent.cs b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddMarkingStepComponent.cs index 5e9f6c946a7..c7feee6d4c6 100644 --- a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddMarkingStepComponent.cs +++ b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryAddMarkingStepComponent.cs @@ -18,7 +18,7 @@ public sealed partial class SurgeryAddMarkingStepComponent : Component /// against the entity to validate that the marking is not already present. /// [DataField] - public String MatchString = ""; + public string MatchString = string.Empty; /// /// What type of organ is required for this surgery? diff --git a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs index d0e4c260e98..ca76fb78900 100644 --- a/Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs +++ b/Content.Shared/_Shitmed/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs @@ -18,12 +18,11 @@ public sealed partial class SurgeryRemoveMarkingStepComponent : Component /// against the entity to validate that the marking is present. /// [DataField] - public String MatchString = ""; + public string MatchString = string.Empty; /// /// Will this step spawn an item as a result of removing the markings? If so, which? /// [DataField] public EntProtoId? ItemSpawn = default!; - } From 735df5a95e52cd3a2e0266f2aac394e009ebf614 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 13:24:56 +0000 Subject: [PATCH 185/197] missing warm light bulbs --- .../Catalog/Fills/Boxes/general.yml | 10 +++++ .../Entities/Objects/Power/lights.yml | 17 ++++++++ .../Structures/Lighting/base_lighting.yml | 21 ++++++++++ .../Recipes/Lathes/Packs/shared.yml | 2 +- Resources/Prototypes/Recipes/Lathes/misc.yml | 39 +++---------------- .../Prototypes/_DV/Recipes/Lathes/misc.yml | 30 ++++++++++++++ 6 files changed, 84 insertions(+), 35 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml index c4c6463c7b3..bb38488990e 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml @@ -54,6 +54,16 @@ - id: LightBulb amount: 12 +- type: entity + name: lightbulb box warm + parent: BoxLightbulb + id: BoxWarmLightbulb + components: + - type: StorageFill + contents: + - id: WarmLightBulb + amount: 12 + - type: entity name: lighttube box parent: BoxLightbulb diff --git a/Resources/Prototypes/Entities/Objects/Power/lights.yml b/Resources/Prototypes/Entities/Objects/Power/lights.yml index cd0ce33856a..40c82a87099 100644 --- a/Resources/Prototypes/Entities/Objects/Power/lights.yml +++ b/Resources/Prototypes/Entities/Objects/Power/lights.yml @@ -167,6 +167,23 @@ - LightBulb - Trash +- type: entity + parent: BaseLightbulb + name: warm light bulb + id: WarmLightBulb + description: A warm light bulb for a more cozy atmosphere. + components: + - type: LightBulb + bulb: Bulb + color: "#ff9833" # 2200k color temp + lightEnergy: 1 + lightRadius: 6 + lightSoftness: 3 + - type: Tag + tags: + - LightBulb + - Trash + - type: entity parent: LightBulb name: old incandescent light bulb diff --git a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml index d29e74f3898..1b0c7b89976 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml @@ -394,6 +394,27 @@ Heat: 1 popupText: powered-light-component-burn-hand +- type: entity + id: PoweredWarmSmallLight + suffix: Warm + parent: PoweredSmallLightEmpty + components: + - type: Sprite + state: base + - type: PointLight + enabled: true + radius: 6 + energy: 1 + softness: 3 + color: "#FF8A0C" + - type: PoweredLight + hasLampOnSpawn: WarmLightBulb + - type: DamageOnInteract + damage: + types: + Heat: 2 + popupText: powered-light-component-burn-hand + - type: entity id: PoweredSmallLight suffix: "" diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml index 727377bb4a8..ed9ae5d1210 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/shared.yml @@ -25,7 +25,7 @@ - LightBulb - LedLightBulb - DimLightBulb - - WarmLightBulb + #- WarmLightBulb # DeltaV - this doesn't exist - type: latheRecipePack id: PowerCellsStatic diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index 3012af255d7..9363238f414 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -55,6 +55,11 @@ id: DimLightBulb result: DimLightBulb +- type: latheRecipe + parent: BaseLightRecipe + id: WarmLightBulb + result: WarmLightBulb + - type: latheRecipe parent: BaseLightRecipe id: GlowstickRed @@ -232,37 +237,3 @@ completetime: 3 materials: Plastic: 200 - -# Start Delta-V - -- type: latheRecipe - id: GoldRing - result: GoldRing - completetime: 10 - materials: - Gold: 500 - -- type: latheRecipe - id: SilverRing - result: SilverRing - completetime: 10 - materials: - Silver: 500 - -- type: latheRecipe - id: GoldRingDiamond - result: GoldRingDiamond - completetime: 15 - materials: - Gold: 500 - Diamond: 100 - -- type: latheRecipe - id: SilverRingDiamond - result: SilverRingDiamond - completetime: 15 - materials: - Silver: 500 - Diamond: 100 - -# End Delta-V diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/misc.yml b/Resources/Prototypes/_DV/Recipes/Lathes/misc.yml index 4c6af83db85..80b0f358bce 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/misc.yml @@ -15,3 +15,33 @@ materials: Steel: 250 Plastic: 250 + +- type: latheRecipe + id: GoldRing + result: GoldRing + completetime: 10 + materials: + Gold: 500 + +- type: latheRecipe + id: SilverRing + result: SilverRing + completetime: 10 + materials: + Silver: 500 + +- type: latheRecipe + id: GoldRingDiamond + result: GoldRingDiamond + completetime: 15 + materials: + Gold: 500 + Diamond: 100 + +- type: latheRecipe + id: SilverRingDiamond + result: SilverRingDiamond + completetime: 15 + materials: + Silver: 500 + Diamond: 100 From be644b6a9233f8d8038e27dafc5cb6f883bb92f6 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 13:30:04 +0000 Subject: [PATCH 186/197] beans --- Resources/Prototypes/Entities/Structures/Machines/lathe.yml | 6 +----- Resources/Prototypes/Recipes/Lathes/Packs/science.yml | 2 ++ .../Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml | 4 ++-- Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml | 2 +- Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5439786dc7e..ff8243a16e7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -211,11 +211,7 @@ - Instruments - Equipment - FauxTiles - # Begin DeltaV Additions - - Botany - - Golemancy - - ReverseEngineered - # End DeltaV Additions + - Botany # DeltaV - Surgery # Shitmed change - type: EmagLatheRecipes emagDynamicPacks: diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/science.yml b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml index f823569a221..7c6a9d2dab3 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/science.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml @@ -20,6 +20,8 @@ ## Dynamic - type: latheRecipePack + parent: + - EpistemicsEquipment # DeltaV id: ScienceEquipment recipes: - AnomalyScanner diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml index 35a974b326b..db30303eb8f 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml @@ -1,7 +1,7 @@ ## Dynamic - type: latheRecipePack - id: Golemancy + id: EpistemicsEquipment recipes: - CoreSilver @@ -9,4 +9,4 @@ id: EpistemicsBoards recipes: - ReverseEngineeringMachineCircuitboard - - MetempsyhoticMachineCircuitboard + - MetempsychoticMachineCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml index c7c84f3b5b3..016100038d8 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml @@ -75,7 +75,7 @@ - WeaponGunLaserCarbineAutomatic - AdvancedTruncheon - WeaponColdCannon - - WeaponBeanCannon + - WeaponBeamCannon - type: latheRecipePack id: SecurityHardsuits diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml index 677d01b779b..a08a4f822d6 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/service.yml @@ -14,7 +14,7 @@ ## Dynamic - type: latheRecipePack - id: ServiceDeltaV + id: Botany recipes: - PlantBagOfHolding From 327bef84ec0c0de46b9a27c7c694c75f9c47b589 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 13:35:30 +0000 Subject: [PATCH 187/197] fix autodoc ui --- Content.Client/_Shitmed/Autodoc/PickSurgeryWindow.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Client/_Shitmed/Autodoc/PickSurgeryWindow.xaml.cs b/Content.Client/_Shitmed/Autodoc/PickSurgeryWindow.xaml.cs index 16aa12f6473..64a3a11367a 100644 --- a/Content.Client/_Shitmed/Autodoc/PickSurgeryWindow.xaml.cs +++ b/Content.Client/_Shitmed/Autodoc/PickSurgeryWindow.xaml.cs @@ -114,7 +114,7 @@ private void UpdateSurgeries() var protoId = new EntProtoId(id); if (_part is not BodyPartType part) { - Surgeries.AddItem(name, metadata: id); + Surgeries.AddItem(name, metadata: protoId); continue; } @@ -124,7 +124,7 @@ private void UpdateSurgeries() if (!_entMan.TryGetComponent(ent.Value, out var comp)) { - Surgeries.AddItem(name, metadata: id); + Surgeries.AddItem(name, metadata: protoId); continue; } @@ -134,7 +134,7 @@ private void UpdateSurgeries() var passesFilter = (partOk && symmetryOk) ^ comp.Inverse; if (passesFilter) - Surgeries.AddItem(name, metadata: id); + Surgeries.AddItem(name, metadata: protoId); } Surgeries.SortItemsByText(); } From 099dd285fb426b37b39f486df614081f570bc75b Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Mon, 10 Feb 2025 16:07:05 +0000 Subject: [PATCH 188/197] bring back rubber ammo sprites --- Resources/Migrations/deltaMigrations.yml | 5 +++ .../Guns/Ammunition/SpeedLoaders/magnum.yml | 20 ----------- .../Guns/Ammunition/SpeedLoaders/pistol.yml | 19 ----------- .../Weapons/Guns/Projectiles/projectiles.yml | 20 ----------- .../Guns/Ammunition/Boxes/caseless_rifle.yml | 32 ------------------ .../Guns/Ammunition/Boxes/light_rifle.yml | 1 + .../Weapons/Guns/Ammunition/Boxes/magnum.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/pistol.yml | 1 + .../Weapons/Guns/Ammunition/Boxes/rifle.yml | 12 ++++--- .../Ammunition/Magazines/caseless_rifle.yml | 3 ++ .../Guns/Ammunition/Magazines/light_rifle.yml | 1 + .../Guns/Ammunition/Magazines/magnum.yml | 15 +------- .../Guns/Ammunition/Magazines/pistol.yml | 2 ++ .../Guns/Ammunition/SpeedLoaders/magnum.yml | 20 +++++++++++ .../Guns/Ammunition/SpeedLoaders/pistol.yml | 19 +++++++++++ .../Weapons/Guns/Projectiles/projectiles.yml | 19 +++++++++++ .../Boxes/light_rifle.rsi/meta.json | 14 ++++++++ .../Boxes/light_rifle.rsi/rubber.png | Bin 0 -> 199 bytes .../Ammunition/Boxes/magnum.rsi/meta.json | 14 ++++++++ .../Ammunition/Boxes/magnum.rsi/rubber.png | Bin 0 -> 153 bytes .../Ammunition/Boxes/pistol.rsi/meta.json | 14 ++++++++ .../Ammunition/Boxes/pistol.rsi/rubber.png | Bin 0 -> 153 bytes .../Guns/Ammunition/Boxes/rifle.rsi/meta.json | 14 ++++++++ .../Ammunition/Boxes/rifle.rsi/rubber.png | Bin 0 -> 200 bytes .../caseless_pistol_mag.rsi/meta.json | 14 ++++++++ .../caseless_pistol_mag.rsi/rubber.png | Bin 0 -> 223 bytes .../caseless_rifle_mag.rsi/meta.json | 14 ++++++++ .../caseless_rifle_mag.rsi/rubber.png | Bin 0 -> 2155 bytes .../caseless_rifle_mag_short.rsi/meta.json | 14 ++++++++ .../caseless_rifle_mag_short.rsi/rubber.png | Bin 0 -> 358 bytes .../LightRifle/light_rifle_mag.rsi/meta.json | 14 ++++++++ .../LightRifle/light_rifle_mag.rsi/rubber.png | Bin 0 -> 236 bytes .../Magnum/magnum_smg_mag.rsi/meta.json | 14 ++++++++ .../Magnum/magnum_smg_mag.rsi/rubber.png | Bin 0 -> 225 bytes .../pistol_high_capacity_mag.rsi/meta.json | 14 ++++++++ .../pistol_high_capacity_mag.rsi/rubber.png | Bin 0 -> 226 bytes .../Magazine/Pistol/pistol_mag.rsi/meta.json | 14 ++++++++ .../Magazine/Pistol/pistol_mag.rsi/rubber.png | Bin 0 -> 221 bytes .../Magazine/Pistol/smg_mag.rsi/meta.json | 14 ++++++++ .../Magazine/Pistol/smg_mag.rsi/rubber.png | Bin 0 -> 230 bytes .../Magazine/Rifle/rifle_mag.rsi/meta.json | 14 ++++++++ .../Magazine/Rifle/rifle_mag.rsi/rubber.png | Bin 0 -> 244 bytes .../Magnum/magnum_speed_loader.rsi/meta.json | 29 ++++++++++++++++ .../magnum_speed_loader.rsi/rubber-1.png | Bin 0 -> 171 bytes .../magnum_speed_loader.rsi/rubber-2.png | Bin 0 -> 173 bytes .../magnum_speed_loader.rsi/rubber-3.png | Bin 0 -> 174 bytes .../magnum_speed_loader.rsi/rubber-4.png | Bin 0 -> 177 bytes .../magnum_speed_loader.rsi/rubber-5.png | Bin 0 -> 186 bytes .../magnum_speed_loader.rsi/rubber-6.png | Bin 0 -> 188 bytes .../Pistol/pistol_speed_loader.rsi/meta.json | 29 ++++++++++++++++ .../pistol_speed_loader.rsi/rubber-1.png | Bin 0 -> 2252 bytes .../pistol_speed_loader.rsi/rubber-2.png | Bin 0 -> 2376 bytes .../pistol_speed_loader.rsi/rubber-3.png | Bin 0 -> 2569 bytes .../pistol_speed_loader.rsi/rubber-4.png | Bin 0 -> 2621 bytes .../pistol_speed_loader.rsi/rubber-5.png | Bin 0 -> 2574 bytes .../pistol_speed_loader.rsi/rubber-6.png | Bin 0 -> 2573 bytes 56 files changed, 320 insertions(+), 111 deletions(-) delete mode 100644 Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml create mode 100644 Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml create mode 100644 Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/rubber.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-1.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-2.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-3.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-4.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-5.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-6.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-1.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-2.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-3.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-4.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-5.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-6.png diff --git a/Resources/Migrations/deltaMigrations.yml b/Resources/Migrations/deltaMigrations.yml index 4862f8d9407..d2ac267d289 100644 --- a/Resources/Migrations/deltaMigrations.yml +++ b/Resources/Migrations/deltaMigrations.yml @@ -137,3 +137,8 @@ SpawnMobSmile: SentientSmileCore #2025-01-12 ForensicMantisPDA: PsionicMantisPDA + +#2025-02-10 +MagazineBoxCaselessRifleBigRubber: null +MagazineBoxCaselessRifleRubber: null +MagazineMagnumSubMachineGunRubber: null diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml index fc36adb83b7..ae6bf0cebfe 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml @@ -80,26 +80,6 @@ zeroVisible: false - type: Appearance -- type: entity - id: SpeedLoaderMagnumRubber - name: "speed loader (.45 magnum rubber)" - parent: BaseSpeedLoaderMagnum - components: - - type: BallisticAmmoProvider - proto: CartridgeMagnumRubber - - type: Sprite - sprite: Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi - layers: - - state: base - map: [ "enum.GunVisualLayers.Base" ] - - state: rubber-6 - map: [ "enum.GunVisualLayers.Mag" ] - - type: MagazineVisuals - magState: rubber - steps: 7 - zeroVisible: false - - type: Appearance - - type: entity id: SpeedLoaderMagnumAP name: "speed loader (.45 magnum armor-piercing)" diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml index 0278869ec47..8f3ec37753a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml @@ -57,22 +57,3 @@ steps: 7 zeroVisible: false - type: Appearance - -- type: entity - id: SpeedLoaderPistolRubber - name: "speed loader (.35 auto rubber)" - parent: BaseSpeedLoaderPistol - components: - - type: BallisticAmmoProvider - proto: CartridgePistolRubber - - type: Sprite - layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: rubber-6 - map: ["enum.GunVisualLayers.Mag"] - - type: MagazineVisuals - magState: rubber - steps: 7 - zeroVisible: false - - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index bc9789fa77f..00f198adb91 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -104,26 +104,6 @@ types: Blunt: 1 -# DeltaV - We're keping rubbers so make sure to keep this updated -- type: entity - id: BaseBulletRubber - name: base bullet rubber - parent: BaseBullet - categories: [ HideSpawnMenu ] - components: - - type: Sprite - sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi - layers: - - state: rubber - - type: Projectile - damage: - types: - Blunt: 3 - soundHit: - path: /Audio/Weapons/Guns/Hits/snap.ogg - - type: StaminaDamageOnCollide - damage: 22 # 5 hits to stun sounds reasonable - - type: entity id: BaseBulletIncendiary name: base bullet incendiary diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml deleted file mode 100644 index cae1675f162..00000000000 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml +++ /dev/null @@ -1,32 +0,0 @@ -- type: entity - parent: BaseMagazineBoxCaselessRifle - id: MagazineBoxCaselessRifleBigRubber - name: ammunition box (.25 caseless rubber) - components: - - type: BallisticAmmoProvider - capacity: 200 - proto: CartridgeCaselessRifleRubber - - type: Sprite - layers: - - state: base-b - map: ["enum.GunVisualLayers.Base"] - - state: magb-1 - map: ["enum.GunVisualLayers.Mag"] - - state: rubber-b - - type: MagazineVisuals - magState: magb - -- type: entity - parent: BaseMagazineBoxCaselessRifle - id: MagazineBoxCaselessRifleRubber - name: ammunition box (.25 caseless rubber) - components: - - type: BallisticAmmoProvider - proto: CartridgeCaselessRifleRubber - - type: Sprite - layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - - state: mag-1 - map: ["enum.GunVisualLayers.Mag"] - - state: rubber diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml index 2c30951bc98..7c34378008a 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml @@ -12,3 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index 381ed7931d6..71e3dd8fc29 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -12,4 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber - + sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml index 5b3aba79f09..3bb928a1f8f 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml @@ -12,3 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml index a2c53796645..859fd7eb196 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -5,16 +5,17 @@ components: - type: BallisticAmmoProvider capacity: 200 - proto: CartridgeRiflePractice + proto: CartridgeRifleRubber - type: Sprite layers: - - state: base-b + - state: base-big map: ["enum.GunVisualLayers.Base"] - - state: magb-1 + - state: mag-big-1 map: ["enum.GunVisualLayers.Mag"] - - state: practice-b + - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi - type: MagazineVisuals - magState: magb + magState: mag-big - type: entity parent: BaseMagazineBoxRifle @@ -30,3 +31,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml index a537974c0b6..495c152347a 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml @@ -11,6 +11,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] @@ -27,6 +28,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] @@ -42,6 +44,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml index 8b3fbc5ad5f..a40e970bf07 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml @@ -10,6 +10,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml index 41931d621da..e0730d61bc9 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml @@ -10,20 +10,7 @@ - type: Sprite layers: - state: rubber - map: ["enum.GunVisualLayers.Base"] - - state: mag-1 - map: ["enum.GunVisualLayers.Mag"] - -- type: entity - id: MagazineMagnumSubMachineGunRubber - name: "Vector magazine (.45 magnum rubber)" - parent: BaseMagazineMagnumSubMachineGun - components: - - type: BallisticAmmoProvider - proto: CartridgeMagnumRubber - - type: Sprite - layers: - - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index ea195143da8..3dc50f373e1 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -10,6 +10,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] @@ -24,6 +25,7 @@ - type: Sprite layers: - state: rubber + sprite: _DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml new file mode 100644 index 00000000000..3587cd730e4 --- /dev/null +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml @@ -0,0 +1,20 @@ +- type: entity + id: SpeedLoaderMagnumRubber + name: "speed loader (.45 magnum rubber)" + parent: BaseSpeedLoaderMagnum + components: + - type: BallisticAmmoProvider + proto: CartridgeMagnumRubber + - type: Sprite + sprite: Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi + layers: + - state: base + map: [ "enum.GunVisualLayers.Base" ] + - state: rubber-6 + sprite: _DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi + map: [ "enum.GunVisualLayers.Mag" ] + - type: MagazineVisuals + magState: rubber + steps: 7 + zeroVisible: false + - type: Appearance diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml new file mode 100644 index 00000000000..52047288940 --- /dev/null +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml @@ -0,0 +1,19 @@ +- type: entity + parent: BaseSpeedLoaderPistol + id: SpeedLoaderPistolRubber + name: "speed loader (.35 auto rubber)" + components: + - type: BallisticAmmoProvider + proto: CartridgePistolRubber + - type: Sprite + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: rubber-6 + sprite: _DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi + map: ["enum.GunVisualLayers.Mag"] + - type: MagazineVisuals + magState: rubber + steps: 7 + zeroVisible: false + - type: Appearance diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index cc150a10155..a830e1ca0af 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -46,6 +46,25 @@ soundHit: collection: MeatLaserImpact +- type: entity + abstract: true + parent: BaseBullet + id: BaseBulletRubber + name: base bullet rubber + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi + layers: + - state: rubber + - type: Projectile + damage: + types: + Blunt: 3 + soundHit: + path: /Audio/Weapons/Guns/Hits/snap.ogg + - type: StaminaDamageOnCollide + damage: 22 # 5 hits to stun sounds reasonable + - type: entity parent: BulletPistolIncendiary id: BulletLighterIncendiary diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json new file mode 100644 index 00000000000..fe8d2fc0dc2 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/space-wizards/space-station-14/tree/96cb951555347f47f886d1f7524a8e8a92292eff/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi and recoloured by deltanedas (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..5d366c195baa160ffd0e7296409294afd358758a GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP_WX| z#W5t}aB_kK>*55Fo~A$pF1Ldk5}pnQYhKvzlDO;;`pp*Vk@PO9wCU555Elh{I zJu7>jL}^Vl=X~>czP_A6!dpE7^sV_+;3W$vosz06<4!10IC>cQVtc5aJgKYTvN o+9lJlM*ay$&a{4r4GS0;PO7UUb1gMr4Ri#9r>mdKI;Vst0DmDt+yDRo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json new file mode 100644 index 00000000000..6ab936eaede --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/space-wizards/space-station-14/tree/96cb951555347f47f886d1f7524a8e8a92292eff/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi and recoloured by deltanedas (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..717e1470c1fec667dd6ed06df8ae7cdd3ca3a605 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP|(}c z#W5t}@Y@R;c@HS?xCDlIxVt~K+{2n2V8Erk@rLWY1FRyQ|FZX$Je|t)VDXnPD>I7h wkDm!S9%Qmv{^`4{Z0%V${})>W4Jx?IZS1Hj+}!EE63AolboFyt=akR{01dk{QUCw| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json new file mode 100644 index 00000000000..f199f453b05 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/space-wizards/space-station-14/tree/96cb951555347f47f886d1f7524a8e8a92292eff/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi and recoloured by deltanedas (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..717e1470c1fec667dd6ed06df8ae7cdd3ca3a605 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP|(}c z#W5t}@Y@R;c@HS?xCDlIxVt~K+{2n2V8Erk@rLWY1FRyQ|FZX$Je|t)VDXnPD>I7h wkDm!S9%Qmv{^`4{Z0%V${})>W4Jx?IZS1Hj+}!EE63AolboFyt=akR{01dk{QUCw| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json new file mode 100644 index 00000000000..294307f6566 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/space-wizards/space-station-14/tree/96cb951555347f47f886d1f7524a8e8a92292eff/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi and recoloured by deltanedas (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3ab735c244fe62265afb98b2d04cc1e9cd0503 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP_W9= z#W5t}aB_kK>*55Fo~A$pF1Ldk609XmO^L4mH+CBHE_qr~$Z(=aOpbBRC!HTAo4hp) z_RN@a++)>Jp~}ez?Ed|H#K?T2XMeoigm(-A3E_qcr>`5-DzG;kkYB)jZ~d!em79$A r?_(5BGoJY6(03s9C(v-9O$`hTr~j)YznUo?$p8eNu6{1-oD!MEaktF()}e;*Ns=M*vGpkBDd>iwvu)O8_g+MOKcL34$UeC5~bVVqzsF z4uS?>VJTU+O literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json new file mode 100644 index 00000000000..81349659ef1 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/discordia-space/CEV-Eris/raw/aed9cbddbf9039dae1e4f02bab592248b0539431/icons/obj/ammo_mags.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..f7aadbfcb8c7790ea5d0044a2846a934d9e488db GIT binary patch literal 2155 zcmV-x2$c7UP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-_bmg6W4{bv=k1SBCOmc#R$*}*J-F19O`q^o8s zRsGp^VnD`v-HRa1fBs(KFI>#YLsIixa*nuCNrfvq9?$D+DW>CjTztL4_(2|SFBl?0 zE9WrJYkq}X-#@T)$=jnmSiki6rHJB#Y1x){e_T#piiA%&UE@%$4{E*(=lXNM)V_uF zG){(O423@7z*9)#@#NEzod1fy;z^>INaE-#-t1@oHGkojx(^a~>pkT!zIi6^={Oa= zg_WQ3bjeAda(tF? z8~%#E9e2U)vBnP6210EiHVg_eGQKF$ph}D8(RS)^G4W(W%iLKGnTv7ZE*pZhZ(3|Y ziVPsa(t(^n%r{@?uv@l07;{)2gqciG28?5?w_L$5-u!|a8@c_& zEC535%BddtrEoU!`P#q=5Y!{hjsRjRD+5pRn2PZTC`@#DQnKz@~%_W#FD9HGjl6eT|BvZc60aQwQv!XF%2abD_%;e z6-H~S&{Z+NLeRKLOHEsD*1VNgJLuC>*Pgp|@1@tlLk3Df7)puGx_Q&dR7@>?lZcKqUZ+wfBbe-yo@sLjkE&?-3M$OH*4iBFBK ztTYGd5-gJhersP9OvP*m(NIBn+5po6UTcc|P+Rw*EU}+q86cq`G2(A9{PQ|C_4tVoqgS!t%@8-7zPM4eivfkfLv& zPFG_@zqN*Hc{HilWQElR8S-7vj^Jp;_#D5S_0U8KYwhg(v_+}i$XZsEg^`Qq?w$=b zv9Ez9DT?HFT}M1WLs`8&yus}=aJ{H%RY4+{<>2uQ8Tnb;AXnmH`Ztto% zC^4$1o(4V9;d{8n&?D&3PFCy&iJ!Ce!foWEt(jG1dOHAY#C}h{@FP0EwV+?H%|8rB zEsA<-I7swqac1ecHvA~>=O`5$>MEn#8U+=1`VL&ZX-(654JHG7&>VR|7l1ng$HoM% zV}(AxGAr6??8YZf+(3<_mKleFkZI>~V~9=}-lhY(L9?EeGb+u$fLnNld!Sr{KTW41 zB2|AHBVB%zO@DG?AkNL~^c8M{Yd1;AdzW+WN2xhBL-^7R zhrSaX|Du)f8;ZyuML$=B(`&(={x5_gKj2`9{|W#A0fcEoLr_UWLm+T+Z)Rz1WdHzp zoPCi!NW(xJ#a~lPi&Q$;LBt_Lb+RBT;wV)tf`!snXw|{w(l2PzkfgXc3a$kQKNhPF zF3!3-xC(;c2Z)oSlcI~1_`jskBF2N`e!RQ)xO)c(tr}C!z6n6pEF+Uli21^*7<@$l z5rhziPhzH?$}Z;MIlk`UFGy6jh^qA@8!nd5g1JYp~8e z`3u8EZ6(Wfnj=VJ2`Qu@LPi5s)Ls4+u0lJHAF$0003hNklI|MAH$m^+z~rVe0WU|=vXGRG?Z;K3t?g3`AC6S}JyY3hIr=T0&R2uWgyD=5e@ zJb3Vkwow4HSV2J!L(b01glq>8od`d?dk(i8W*NDb4&7`B^D!(WVDzD5XBgt5f*1-) z+y2wc0qEI`TG2pK2z+?=eBcTq1_lNOCUI+q7yQZ$&-Kh17;G6B-ZL=3>GKQ>49UF? z3`rFe{?BWRV5CV1pc^cC=_CqGmt64b+Fhzf0VAnRvV`Q^{{ljiSPLXrp|oh(ItF5k zWs*aH+PQ(Of{2>Af$WkHSD{2o@RRKTTy_702agy?t&&;D4S^5uo-Lf6LrA0t!lo~O-;SLyt1;g7^J-f8FmVLy?vk(^A9M;Q4-`A%A{;fJxU5sp0sEQOq(`MtU*U0E-tQ5 zNq~!`aYfsz6%va$RtN|s91$^aD&<%_QFvJc*R0!9djnag^ak$L*3dX%u!DgiW-Y(< Up=-83ftE0My85}Sb4q9e0IVZO?EnA( literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/meta.json new file mode 100644 index 00000000000..097934b35b6 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/shiptest-ss13/Shiptest/commit/662c08272acd7be79531550919f56f846726eabb , https://github.com/shiptest-ss13/Shiptest/blob/master/icons/obj/ammo.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_smg_mag.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..9cde22c568cccc27d156e8685fb1abfc6f0330cd GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@3A^6XFV_m6es#($c0*o$Bc5D6gQ#rr{=JTQ8M(Mu_!=7D#VNkY6yv ze<(0#ntcT*=;i6+7*a7OIbnf%f{2T-fRUJpgP=f|QJ9NxK#_~#p%X`48A2UATU{6v zMa4yo4RsERaL5UyFPT1l`a+JBl9DY8IhHUwGBLkpV7RqO!2WdNWqF{f44$rjF6*2U FngGf|J=_2Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/meta.json new file mode 100644 index 00000000000..3bac6018d7b --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/pull/1684/commits/19e51caef09e78ca1122d26455b539ff5968d334, https://github.com/tgstation/tgstation/blob/master/icons/obj/weapons/guns/ammo.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_high_capacity_mag.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..ad77f0f12665dfd9ba76d36b4167477380dc5014 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@2@;6XFV_6A}_iN=nwPTQ_CO6l-g1Dci}CF3VNo9xLR%UwBD;H&6vv zNswPK!+#j4>l6tCin@EcIEGZrNlsXxoFF3NA{=1mCYlsdXlUjl7*Ja1C@4@=SSY5T z@SsagplKCT2Is1oH&~q58jWvgSy?T6SiV9*V8IQiR0f7OaYFgNlRbX|jb!k2^>bP0 Hl+XkK7NA9) literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json new file mode 100644 index 00000000000..3bac6018d7b --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/pull/1684/commits/19e51caef09e78ca1122d26455b539ff5968d334, https://github.com/tgstation/tgstation/blob/master/icons/obj/weapons/guns/ammo.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..8be70a07eadecbebc20fda9ec3c27620f8b574f7 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@2@;6XFV_6A}_iN=nwPTQ_CO6l-g1Dci}CF3VNo9xLR%UwBD;H&6vv zNswPK!+#j4>l6tCiaL3^IEGZrNluUmX$TAu@O8K;5!w-W^ym!%SBI-dSzR4Y96cJz zu-}1W6~hIe5M=|_j0DbTSNG#4f3|TkF?KC1VP{Bf(;OXk; Jvd$@?2>>S~Mw9>m literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json new file mode 100644 index 00000000000..445245b7bca --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "All sprites by https://github.com/august-sun.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/rubber.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/rubber.png new file mode 100644 index 0000000000000000000000000000000000000000..50e11d47003d393d83e4b9d51d05459e923c13f8 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@2x&6XFV@#icaVRAgmk9c(NZIrJI$y%?;gPG(=y43y(23GxeO_zwYB zPlXr(#S%ST978JRBqvBXC}=dODX3_4XsIn(vZO^TVUbFc;(`txfoVX{r6Ujr1VD<5 zNh3|eTGL92+aQTU!%EXi@%HHzDow8hco-L?Phkm+Vf(~0t6|Xsg-s0#TIB)^4A)e6 VrPC*+wgW9=@O1TaS?83{1OTv|LUsTE literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json new file mode 100644 index 00000000000..cbc26d2a63c --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/pull/1684/commits/19e51caef09e78ca1122d26455b539ff5968d334, https://github.com/tgstation/tgstation/blob/master/icons/obj/weapons/guns/ammo.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "rubber-1" + }, + { + "name": "rubber-2" + }, + { + "name": "rubber-3" + }, + { + "name": "rubber-4" + }, + { + "name": "rubber-5" + }, + { + "name": "rubber-6" + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-1.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ee09b545203976b59dcd6dfb23d125582076aa GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@31>6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFleWISCQLn`JZCrG?;2ndjDJ^w-~DXk&=sKx?01_mQ$#%_}{zDI!S7(8A5T-G@y GGywn{JTe>r literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-2.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3b9965b1fbb9874a90ec18cc4d49ad4d1819e3 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@31>6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFle6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFleFVdQ I&MBb@0PLqV*#H0l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-4.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bef55e248b5161d79c5c10364aba25ba4ebbec6f GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@31>6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFlelssJ=Ln`JZCrG?;2ndjDJ^w-~DXk%#wX#ZM`*f*od}a&`n~m5srHZcT164D4 My85}Sb4q9e095-k$^ZZW literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-5.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-5.png new file mode 100644 index 0000000000000000000000000000000000000000..052192ed04b678bf6d5f2d4c6a5f24e2aa2f7543 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@31>6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFlev^`xMLn`JZCrG?;2ndjDJ^w-~DXk%#wX({<$03l>=pf5co)Xb38%jSgGSn_) V`#rbhS07LtgQu&X%Q~loCIE7YIi~;s literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-6.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/rubber-6.png new file mode 100644 index 0000000000000000000000000000000000000000..e33105c761022fc06308ad77601946439ce895a8 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWNC@31>6XFV_r{^0>*-n;pS-zv+_V|_vg}nC@rreAIO0bs%`2{ol2ZN>c z%YFlebUj@hLn`JZCrG?;2ndjDJ^w-~DXk%#bwa-q)1}0wMeMPxVbPvu%_YKGX6 XZ?K=e^M1J+P$Pq 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-4.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-4.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb14be66175df59b7fcf69db0285a133107bfdb GIT binary patch literal 2621 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-5.png b/Resources/Textures/_DV/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/rubber-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a52d8764c1802cfa11458770d3351500854d60be GIT binary patch literal 2574 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 Date: Mon, 10 Feb 2025 16:13:27 +0000 Subject: [PATCH 189/197] edit RE test to use packs move RE test stuff into research test --- .../Tests/ResearchTest.cs | 18 +++++ .../Tests/_DV/ReverseEngineeringTest.cs | 66 ------------------- .../en-US/_DV/research/technologies.ftl | 9 ++- .../Locale/en-US/research/technologies.ftl | 2 +- .../VendingMachines/Inventories/ammo.yml | 9 ++- .../Catalog/Fills/Boxes/ammunition.yml | 13 ---- .../Markers/Spawners/Random/boxes.yml | 4 +- .../Weapons/Guns/Ammunition/Boxes/shotgun.yml | 8 +++ 8 files changed, 40 insertions(+), 89 deletions(-) delete mode 100644 Content.IntegrationTests/Tests/_DV/ReverseEngineeringTest.cs create mode 100644 Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml diff --git a/Content.IntegrationTests/Tests/ResearchTest.cs b/Content.IntegrationTests/Tests/ResearchTest.cs index 4661a1ea9e1..80d09517fb8 100644 --- a/Content.IntegrationTests/Tests/ResearchTest.cs +++ b/Content.IntegrationTests/Tests/ResearchTest.cs @@ -2,6 +2,7 @@ using System.Linq; using Content.Shared.Lathe; using Content.Shared.Research.Prototypes; +using Content.Shared.ReverseEngineering; // DeltaV using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; @@ -92,6 +93,23 @@ await server.WaitAssertion(() => } } + // Begin DeltaV Additions: Check RE recipes too + foreach (var proto in allEnts) + { + if (proto.Abstract) + continue; + + if (!proto.TryGetComponent(out var rev)) + continue; + + foreach (var recipe in rev.Recipes) + { + unlockedTechs.Add(recipe); + Assert.That(latheTechs, Does.Contain(recipe), $"Reverse engineered recipe \"{recipe}\" cannot be unlocked on any lathe."); + } + } + // End DeltaV Additions + // now check that every dynamic recipe a lathe lists can be unlocked foreach (var recipe in latheTechs) { diff --git a/Content.IntegrationTests/Tests/_DV/ReverseEngineeringTest.cs b/Content.IntegrationTests/Tests/_DV/ReverseEngineeringTest.cs deleted file mode 100644 index dd189d16b0b..00000000000 --- a/Content.IntegrationTests/Tests/_DV/ReverseEngineeringTest.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using Content.Shared.Lathe; -using Content.Shared.ReverseEngineering; -using Robust.Shared.Prototypes; - -namespace Content.IntegrationTests.Tests._DV; - -[TestFixture] -public sealed class ReverseEngineeringTest -{ - [Test] - public async Task AllReverseEngineeredPrintableTest() - { - await using var pair = await PoolManager.GetServerClient(); - var server = pair.Server; - - var protoManager = server.ResolveDependency(); - - await server.WaitAssertion(() => - { - var lathes = new List(); - var reverseEngineered = new HashSet(); - foreach (var proto in protoManager.EnumeratePrototypes()) - { - if (proto.Abstract) - continue; - - if (pair.IsTestPrototype(proto)) - continue; - - if (proto.TryGetComponent(out var lathe)) - lathes.Add(lathe); - - if (!proto.TryGetComponent(out var rev)) - continue; - - foreach (var recipe in rev.Recipes) - { - reverseEngineered.Add(recipe); - } - } - - var latheRecipes = new HashSet(); - foreach (var lathe in lathes) - { - if (lathe.DynamicRecipes == null) - continue; - - foreach (var recipe in lathe.DynamicRecipes) - { - latheRecipes.Add(recipe); - } - } - - Assert.Multiple(() => - { - foreach (var recipe in reverseEngineered) - { - Assert.That(latheRecipes, Does.Contain(recipe), $"Reverse engineered recipe \"{recipe}\" cannot be unlocked on any lathe."); - } - }); - }); - - await pair.CleanReturnAsync(); - } -} diff --git a/Resources/Locale/en-US/_DV/research/technologies.ftl b/Resources/Locale/en-US/_DV/research/technologies.ftl index aa0e121ef57..ee2fe5d2340 100644 --- a/Resources/Locale/en-US/_DV/research/technologies.ftl +++ b/Resources/Locale/en-US/_DV/research/technologies.ftl @@ -1,9 +1,14 @@ +# Industrial research-technology-aerial-extraction = Aerial Extraction +# Civilian +research-technology-syringe-gun = Syringe Gun + +# Arsenal research-technology-exotic-ammunition = Exotic Ammunition research-technology-energy-gun = Energy Guns research-technology-energy-gun-advance = Advanced Energy Manipulation +research-technology-experimental-salvage-weaponry = Experimental Salvage Weaponry research-technology-advance-laser = Advanced Laser Manipulation -research-technology-robust-melee = Robust Melee -research-technology-syringe-gun = Syringe Gun research-technology-ionized-cryogenic-emission-equipment = Ionized Cryogenic Emission Equipment +research-technology-robust-melee = Robust Melee diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 91a803da6ea..0b0970ec08f 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -22,6 +22,7 @@ research-technology-portable-fission = Portable Fission research-technology-space-scanning = Space Scanning research-technology-excavation = Mass Excavation +research-technology-salvage-weapons = Salvage Weapons research-technology-draconic-munitions = Draconic Munitions research-technology-uranium-munitions = Uranium Munitions research-technology-explosive-technology = Explosive Technology @@ -31,7 +32,6 @@ research-technology-nonlethal-ammunition = Nonlethal Ammunition research-technology-practice-ammunition = Practice Ammunition research-technology-concentrated-laser-weaponry = Concentrated Laser Weaponry research-technology-wave-particle-harnessing = Wave Particle Harnessing -research-technology-experimental-salvage-weaponry = Experimental Salvage Weaponry research-technology-advanced-riot-control = Advanced Riot Control research-technology-portable-microfusion-weaponry = Portable Microfusion Weaponry research-technology-experimental-battery-ammo = Experimental Battery Ammo diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml index 4080dbaead1..065474e813a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml @@ -3,15 +3,14 @@ startingInventory: MagazineBoxCaselessRifle: 3 MagazineBoxCaselessRiflePractice: 3 - MagazineBoxCaselessRifleRubber: 3 MagazineBoxLightRifleBig: 3 MagazineBoxLightRiflePractice: 3 - MagazineBoxLightRifleRubber: 3 + MagazineBoxLightRifleRubber: 3 # DeltaV MagazineBoxMagnum: 3 MagazineBoxMagnumPractice: 3 - MagazineBoxMagnumRubber: 3 + MagazineBoxMagnumRubber: 3 # DeltaV # DeltaV - .38 special ammo - Add various .38 special ammo to ammovend MagazineBoxSpecial: 3 @@ -21,8 +20,8 @@ MagazineBoxPistol: 3 MagazineBoxPistolPractice: 3 - MagazineBoxPistolRubber: 3 + MagazineBoxPistolRubber: 3 # DeltaV MagazineBoxRifle: 3 MagazineBoxRiflePractice: 3 - MagazineBoxRifleRubber: 3 + MagazineBoxRifleRubber: 3 # DeltaV diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml index ceb1f1b152d..6d17dcd6838 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml @@ -1,16 +1,3 @@ -- type: entity - name: box of soulbreaker cartridges - parent: BaseAmmoProvider - id: BoxShellSoulbreaker - description: A box full of anti-psionic soulbreaker cartridges, designed for riot shotguns. - components: - - type: BallisticAmmoProvider - proto: ShellSoulbreaker - capacity: 12 - - type: Sprite - layers: - - state: boxwide - - state: shellslug - type: entity name: box of .45 magnum Universal magazines diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml index 364fae88112..ab23464faee 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml @@ -23,8 +23,8 @@ - type: Sprite layers: - state: red - - sprite: Objects/Storage/boxes.rsi - state: shellslug + - sprite: Objects/Weapons/Guns/Ammunition/Boxes/shotgun.rsi + state: mag-slug-1 - type: EntityTableSpawner table: !type:NestedSelector tableId: AmmoBoxTable diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml new file mode 100644 index 00000000000..d535ac07eb6 --- /dev/null +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml @@ -0,0 +1,8 @@ +- type: entity + parent: BoxShotgunSlug + id: BoxShellSoulbreaker + name: shell box (soulbreaker) + description: A box full of anti-psionic soulbreaker cartridges, designed for riot shotguns. + components: + - type: BallisticAmmoProvider + proto: ShellSoulbreaker From b8f96b9b55e69c63f2df1102ef222bdacc63ae5f Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Tue, 11 Feb 2025 09:31:05 +0000 Subject: [PATCH 190/197] fix all the recipes --- .../Entities/Structures/Machines/lathe.yml | 3 ++- .../Nyanotrasen/Recipes/Lathes/devices.yml | 18 ------------------ .../Prototypes/Recipes/Lathes/Packs/cargo.yml | 2 ++ .../Recipes/Lathes/Packs/medical.yml | 1 + .../Recipes/Lathes/Packs/robotics.yml | 2 ++ .../Recipes/Lathes/Packs/security.yml | 2 +- .../Recipes/Lathes/Packs/service.yml | 2 ++ .../_DV/Recipes/Lathes/Packs/engineering.yml | 12 ++---------- .../_DV/Recipes/Lathes/Packs/epistemics.yml | 5 ++--- .../_DV/Recipes/Lathes/Packs/logistics.yml | 2 +- .../_DV/Recipes/Lathes/Packs/medical.yml | 10 ++++++++-- .../_DV/Recipes/Lathes/Packs/robotics.yml | 5 +++++ .../_DV/Recipes/Lathes/Packs/security.yml | 1 + .../_DV/Recipes/Lathes/Packs/shared.yml | 1 + Resources/Prototypes/_DV/Research/arsenal.yml | 6 ++++++ .../_Shitmed/Recipes/Lathes/Packs/medical.yml | 5 +++++ 16 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index ff8243a16e7..0518148a9d8 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -322,6 +322,7 @@ - BorgModules - MechParts - MechEquipment + - Cybernetics # Shitmed change - type: EmagLatheRecipes # DeltaV emagDynamicPacks: - SecurityCybernetics # having sechud eyes is good for evil people @@ -484,7 +485,7 @@ - Chemistry - CyberneticsMedical # Shitmed change - Surgery # Shitmed change - - SyringeGuns # DeltaV + - MedicalDeltaV # DeltaV - type: Machine board: MedicalTechFabCircuitboard - type: StealTarget diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/devices.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/devices.yml index 8b95b9dfe26..2c0713a1ecd 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/devices.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/devices.yml @@ -6,21 +6,3 @@ Steel: 100 Glass: 100 Gold: 100 - -- type: latheRecipe - id: JetpackBlue - result: JetpackBlue - completetime: 10 - materials: - Steel: 8000 - Plastic: 8000 - Gold: 50 - -- type: latheRecipe - id: JetpackMini - result: JetpackMini - completetime: 10 - materials: - Steel: 4000 - Plastic: 4000 - Gold: 50 diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml b/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml index fc6ff6f290b..66eefa8d553 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/cargo.yml @@ -26,6 +26,8 @@ - OreBagOfHolding - type: latheRecipePack + parent: + - LogisticsBoards # DeltaV id: CargoBoards recipes: - OreProcessorIndustrialMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml index b50331cf64f..2e00dfafe7c 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/medical.yml @@ -103,6 +103,7 @@ - type: latheRecipePack parent: - MedicalBoardsDeltaV # DeltaV + - MedicalBoardsShitmed # Shitmed change id: MedicalBoards recipes: - StasisBedMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml index 98242c318b9..d5dfd0e50f2 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/robotics.yml @@ -31,6 +31,8 @@ ## Dynamic - type: latheRecipePack + parent: + - RoboticsDeltaV # DeltaV id: Robotics recipes: - ProximitySensor diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml index 195ba5ff2cd..d8088704694 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml @@ -127,7 +127,7 @@ - MagazinePistolSubMachineGunUranium - MagazineRifleIncendiary - MagazineRifleUranium - - MagazineShotgunBeanbag + #- MagazineShotgunBeanbag # DeltaV - made roundstart - MagazineShotgunIncendiary - SpeedLoaderMagnumIncendiary - SpeedLoaderMagnumUranium diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml index 3705c46e357..aad625cc78e 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/service.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/service.yml @@ -52,6 +52,8 @@ - SynthesizerInstrument - type: latheRecipePack + parent: + - ServiceBoardsDeltaV # DeltaV id: ServiceBoards recipes: - BiofabricatorMachineCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml index 2027f8bce58..40ddd2bacc0 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/engineering.yml @@ -1,19 +1,11 @@ ## Dynamic - type: latheRecipePack - id: Jetpacks - recipes: - - JetpackBlue - - JetpackMini - - JetpackVoid - -- type: latheRecipePack - parent: Jetpacks id: AtmosToolsDeltaV recipes: - FireExtinguisherBluespace - - PowerCellHyper - - RCDAmmo + - PowerCellHyper # RE + - RCDAmmo # RE - type: latheRecipePack id: EngineeringBoardsDeltaV diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml index db30303eb8f..3928c21bdaf 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/epistemics.yml @@ -2,11 +2,10 @@ - type: latheRecipePack id: EpistemicsEquipment - recipes: - - CoreSilver + recipes: [] + #- CoreSilver # TODO golemancy - type: latheRecipePack id: EpistemicsBoards recipes: - ReverseEngineeringMachineCircuitboard - - MetempsychoticMachineCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml index 4c2fbaff37f..ae8b749e78a 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/logistics.yml @@ -14,6 +14,6 @@ - WeaponCrusherGlaive - type: latheRecipePack - id: SalvageBoardsDeltaV + id: LogisticsBoards recipes: - SalvageExpeditionsComputerCircuitboard diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml index 98ad519a38b..6e3f27aa14b 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/medical.yml @@ -9,6 +9,7 @@ ## Dynamic +# available in medfab and emagged protolathe - type: latheRecipePack id: SyringeGuns recipes: @@ -16,11 +17,16 @@ - MiniSyringe - type: latheRecipePack - id: MedicalRE + parent: SyringeGuns + id: MedicalDeltaV recipes: - - HandheldCrewMonitor + - HandheldCrewMonitor # RE - type: latheRecipePack id: MedicalBoardsDeltaV recipes: - CrewMonitoringComputerCircuitboard + - CloningConsoleComputerCircuitboard + - MedicalScannerMachineCircuitboard + - MetempsychoticMachineCircuitboard + - CloningPodMachineCircuitboard # RE diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml index b3d980b2b0e..2ab6a835988 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml @@ -1,5 +1,10 @@ ## Dynamic +- type: latheRecipePack + id: RoboticsDeltaV + recipes: + - ClothingEyesHudDiagnostic + - type: latheRecipePack id: BorgModulesDeltaV recipes: diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml index 016100038d8..f282d1fe564 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml @@ -22,6 +22,7 @@ - MagazinePistolSpecial - BoxBeanbag - BoxShellTranquilizer + - MagazineShotgunBeanbag - WeaponDisabler - type: latheRecipePack diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml index 50da7a71c5b..cface7e2979 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/shared.yml @@ -4,3 +4,4 @@ id: EquipmentDeltaV recipes: - SignallerDeadMans + - JetpackVoid # RE diff --git a/Resources/Prototypes/_DV/Research/arsenal.yml b/Resources/Prototypes/_DV/Research/arsenal.yml index 4ed6202c92f..2163efb28f7 100644 --- a/Resources/Prototypes/_DV/Research/arsenal.yml +++ b/Resources/Prototypes/_DV/Research/arsenal.yml @@ -26,8 +26,10 @@ tier: 1 cost: 7500 recipeUnlocks: + # Uranium - MagazineRifleUranium - MagazinePistolUranium + - MagazinePistolSubMachineGunUranium - MagazineLightRifleUranium - SpeedLoaderMagnumUranium - MagazineBoxPistolUranium @@ -37,9 +39,11 @@ - BoxShotgunUranium - SpeedLoaderSpecialUranium - MagazineBoxSpecialUranium + # Incendiary - BoxShotgunIncendiary - MagazineRifleIncendiary - MagazinePistolIncendiary + - MagazinePistolSubMachineGunIncendiary - MagazineLightRifleIncendiary - SpeedLoaderMagnumIncendiary - MagazineShotgunIncendiary @@ -47,6 +51,8 @@ - MagazineBoxMagnumIncendiary - MagazineBoxLightRifleIncendiary - MagazineBoxRifleIncendiary + - SpeedLoaderSpecialUranium + - MagazineBoxSpecialIncendiary - MagazineBoxSpecialHoly - type: technology diff --git a/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml index 2520d09a647..375976f9082 100644 --- a/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml +++ b/Resources/Prototypes/_Shitmed/Recipes/Lathes/Packs/medical.yml @@ -50,3 +50,8 @@ id: CyberneticsMedical recipes: - MedicalCyberneticEyes + +- type: latheRecipePack + id: MedicalBoardsShitmed + recipes: + - AutodocCircuitboard From 3e701a3359158d4539b0389a74f25bce53c95531 Mon Sep 17 00:00:00 2001 From: BombasterDS2 Date: Sun, 2 Feb 2025 06:31:10 +1000 Subject: [PATCH 191/197] Fix Alerts Test (#1584) Alert Test Fix Co-authored-by: BombasterDS --- .../Components/Mobs/AlertsComponentTests.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs index 6c103bf6aef..8e4c22cf89e 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs @@ -87,8 +87,12 @@ static AlertsUI FindAlertsUI(Control control) Assert.That(clientAlertsUI.AlertContainer.ChildCount, Is.GreaterThanOrEqualTo(3)); var alertControls = clientAlertsUI.AlertContainer.Children.Select(c => (AlertControl) c); var alertIDs = alertControls.Select(ac => ac.Alert.ID).ToArray(); - var expectedIDs = new[] { "HumanHealth", "Debug1", "Debug2" }; - Assert.That(alertIDs, Is.SupersetOf(expectedIDs)); + // Goobstation - IPC have BorgHealth instead of HumanHealth + var expectedDebugIDs = new[] { "Debug1", "Debug2" }; + var expectedHealthIDs = new[] { "BorgHealth", "HumanHealth" }; + + Assert.That(alertIDs, Is.SupersetOf(expectedDebugIDs)); + Assert.That(alertIDs, Has.Some.Matches(item => expectedHealthIDs.Contains(item))); }); await server.WaitAssertion(() => @@ -104,8 +108,12 @@ await client.WaitAssertion(() => Assert.That(clientAlertsUI.AlertContainer.ChildCount, Is.GreaterThanOrEqualTo(2)); var alertControls = clientAlertsUI.AlertContainer.Children.Select(c => (AlertControl) c); var alertIDs = alertControls.Select(ac => ac.Alert.ID).ToArray(); - var expectedIDs = new[] { "HumanHealth", "Debug2" }; - Assert.That(alertIDs, Is.SupersetOf(expectedIDs)); + // Goobstation - IPC have BorgHealth instead of HumanHealth + var expectedDebugIDs = new[] { "Debug2" }; + var expectedHealthIDs = new[] { "BorgHealth", "HumanHealth" }; + + Assert.That(alertIDs, Is.SupersetOf(expectedDebugIDs)); + Assert.That(alertIDs, Has.Some.Matches(item => expectedHealthIDs.Contains(item))); }); await pair.CleanReturnAsync(); From 444c5a2842dd209747b99e328be339a990c65e5f Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Wed, 12 Feb 2025 15:13:25 +0000 Subject: [PATCH 192/197] use old AM damage values --- .../Weapons/Guns/Ammunition/Projectiles/antimateriel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml index e73f035a049..ca48030b27b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml @@ -7,8 +7,8 @@ - type: Projectile damage: types: - Piercing: 75 - Structural: 226 + Piercing: 50 # DeltaV - was 75, reduced due to AP + Structural: 200 # DeltaV - was 226 ignoreResistances: true # DeltaV - Hristov be spooky now penetrationThreshold: 360 penetrationDamageTypeRequirement: From dff222a677629ac82f65144e62e59d6298f5554f Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 14 Feb 2025 16:12:38 +0000 Subject: [PATCH 193/197] engine --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index da2bfdaa106..1a7e490e4b0 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit da2bfdaa1068eb7c7383ee2e064102ffc0f4303a +Subproject commit 1a7e490e4b00200bfa3ebebc6d9b12cb1ec82adf From d8289ccdf4d6fe62ddc753f7b7b31ab7a1155a6a Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 14 Feb 2025 16:24:48 +0000 Subject: [PATCH 194/197] use old ammo box sprites --- .../Weapons/Guns/Ammunition/Boxes/light_rifle.yml | 2 +- .../Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml | 2 +- .../Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml | 2 +- .../Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml | 12 ++++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml index 7c34378008a..2ab8857a76d 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml @@ -12,4 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber - sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi + sprite: Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index 71e3dd8fc29..add79d2238e 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -12,4 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber - sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi + sprite: Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml index 3bb928a1f8f..f51c298e3e8 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml @@ -12,4 +12,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber - sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi + sprite: Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi diff --git a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml index 859fd7eb196..38f4fe500d2 100644 --- a/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/_DV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -8,14 +8,14 @@ proto: CartridgeRifleRubber - type: Sprite layers: - - state: base-big + - state: base-b map: ["enum.GunVisualLayers.Base"] - - state: mag-big-1 + - state: magb-1 map: ["enum.GunVisualLayers.Mag"] - - state: rubber - sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi + - state: practice-b + sprite: Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi - type: MagazineVisuals - magState: mag-big + magState: magb - type: entity parent: BaseMagazineBoxRifle @@ -31,4 +31,4 @@ - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - state: rubber - sprite: _DV/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi + sprite: Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi From a292c7bf3e09f35b10cd896a27fae234f1fb8901 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 14 Feb 2025 16:28:24 +0000 Subject: [PATCH 195/197] bring back doorjack, use emag for lockers --- .../Access/Systems/AccessReaderSystem.cs | 2 +- Content.Shared/Lock/LockSystem.cs | 2 +- .../Locale/en-US/_DV/store/uplink-catalog.ftl | 3 +++ .../Prototypes/Catalog/uplink_catalog.yml | 25 ++++++++++--------- .../Prototypes/_DV/Catalog/uplink_catalog.yml | 13 ++++++++++ .../_DV/Entities/Objects/Tools/emag.yml | 12 +++++++++ 6 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 84de549b663..3e8beb81a8b 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -77,7 +77,7 @@ private void OnLinkAttempt(EntityUid uid, AccessReaderComponent component, LinkA private void OnEmagged(EntityUid uid, AccessReaderComponent reader, ref GotEmaggedEvent args) { - if (!_emag.CompareFlag(args.Type, EmagType.Access)) + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) // DeltaV - emag for lockers etc instead of doorjack return; if (!reader.BreakOnAccessBreaker) diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index 0b24bc67221..55ee89b695e 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -296,7 +296,7 @@ private void AddToggleLockVerb(EntityUid uid, LockComponent component, GetVerbsE private void OnEmagged(EntityUid uid, LockComponent component, ref GotEmaggedEvent args) { - if (!_emag.CompareFlag(args.Type, EmagType.Access)) + if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) // DeltaV - emag for lockers instead of doorjack return; if (!component.Locked || !component.BreakOnAccessBreaker) diff --git a/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl b/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl index 7fa683d968a..5e7df424e30 100644 --- a/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/_DV/store/uplink-catalog.ftl @@ -18,6 +18,9 @@ uplink-syndicate-radio-implanter-bundle-desc = Two implanters for the price of o uplink-syndicate-hostage-implanter-bundle-name = Hostage implant bundle uplink-syndicate-hostage-implanter-bundle-desc = These implants pacify when injected and also allow the hostages to enter your shuttle without being shot by turrets! +uplink-doorjack-name = Airlock Access Override +uplink-doorjack-desc = A specialized cryptographic sequencer, designed solely to doorjack NanoTrasen's updated airlocks. Does not tamper with anything else. + uplink-home-run-bat-name = Home Run Bat uplink-home-run-bat-desc = Rigged bat pre-coated in blood for Syndicate tee-ball practice. Launch your foes! diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 31c155ad8ed..4680aa45ee7 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -863,18 +863,19 @@ # Disruption -- type: listing - id: UplinkAccessBreaker - name: uplink-access-breaker-name - description: uplink-access-breaker-desc - productEntity: AccessBreaker - discountCategory: rareDiscounts # DeltaV - was veryRareDiscounts - discountDownTo: - Telecrystal: 2 # DeltaV - was 3 - cost: - Telecrystal: 4 # DeltaV - was 5 - categories: - - UplinkDisruption +# DeltaV - replaced by doorjack +#- type: listing +# id: UplinkAccessBreaker +# name: uplink-access-breaker-name +# description: uplink-access-breaker-desc +# productEntity: AccessBreaker +# discountCategory: rareDiscounts # DeltaV - was veryRareDiscounts +# discountDownTo: +# Telecrystal: 2 # DeltaV - was 3 +# cost: +# Telecrystal: 4 # DeltaV - was 5 +# categories: +# - UplinkDisruption - type: listing id: UplinkEmag diff --git a/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml b/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml index dce54381c1b..80f8e177ec7 100644 --- a/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/_DV/Catalog/uplink_catalog.yml @@ -119,6 +119,19 @@ categories: - UplinkImplants +- type: listing + id: UplinkDoorjack + name: uplink-doorjack-name + description: uplink-doorjack-desc + productEntity: Doorjack + discountCategory: rareDiscounts + discountDownTo: + Telecrystal: 2 + cost: + Telecrystal: 4 + categories: + - UplinkDisruption + - type: listing id: BaseBallBatHomeRun name: uplink-home-run-bat-name diff --git a/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml new file mode 100644 index 00000000000..f76dffd76f5 --- /dev/null +++ b/Resources/Prototypes/_DV/Entities/Objects/Tools/emag.yml @@ -0,0 +1,12 @@ +- type: entity + parent: Emag + id: Doorjack + name: airlock access override + description: A specialized cryptographic sequencer with a distinctive battery tray, specifically designed to override station airlock access codes. + components: + - type: Emag + emagType: Access # LockSystem has its type changed so this only affects airlocks + - type: Sprite + sprite: _DV/Objects/Tools/doorjack.rsi + - type: Item + sprite: _DV/Objects/Tools/doorjack.rsi From 02a1b74065e8caea8b4e82316614ad55134c5a67 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 14 Feb 2025 16:44:03 +0000 Subject: [PATCH 196/197] undo drozd resprite --- .../Objects/Weapons/Guns/SMGs/smgs.yml | 4 +- .../Weapons/Guns/SMGs/drozd.rsi/base.png | Bin 0 -> 377 bytes .../Weapons/Guns/SMGs/drozd.rsi/bolt-open.png | Bin 0 -> 378 bytes .../Guns/SMGs/drozd.rsi/equipped-BACKPACK.png | Bin 0 -> 803 bytes .../SMGs/drozd.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 803 bytes .../Weapons/Guns/SMGs/drozd.rsi/icon.png | Bin 0 -> 404 bytes .../Guns/SMGs/drozd.rsi/inhand-left.png | Bin 0 -> 830 bytes .../Guns/SMGs/drozd.rsi/inhand-right.png | Bin 0 -> 713 bytes .../Weapons/Guns/SMGs/drozd.rsi/mag-0.png | Bin 0 -> 167 bytes .../Weapons/Guns/SMGs/drozd.rsi/meta.json | 50 ++++++++++++++++++ .../Guns/SMGs/drozd.rsi/suppressor.png | Bin 0 -> 635 bytes .../SMGs/drozd.rsi/wielded-inhand-left.png | Bin 0 -> 719 bytes .../SMGs/drozd.rsi/wielded-inhand-right.png | Bin 0 -> 709 bytes 13 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/base.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/bolt-open.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/icon.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/inhand-left.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/inhand-right.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/mag-0.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/suppressor.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index b3cbeb1a7ae..476aafb8551 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -126,14 +126,14 @@ description: An excellent fully automatic Heavy SMG. components: - type: Sprite - sprite: Objects/Weapons/Guns/SMGs/drozd.rsi + sprite: _DV/Objects/Weapons/Guns/SMGs/drozd.rsi # DeltaV layers: - state: base map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] - type: Clothing - sprite: Objects/Weapons/Guns/SMGs/drozd.rsi + sprite: _DV/Objects/Weapons/Guns/SMGs/drozd.rsi # DeltaV - type: Wieldable unwieldOnUse: false - type: GunWieldBonus diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/base.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..133fc41a804a78f8525c043eca796308ba969f5a GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP|zm8C&U#<{*Ow7{K zQeIv@E-r4?geD~=C1qu0DJdxt5s@dATKjb?JCV;3Z)uc>OZt7F=ob4cLON%bSUe>tT0bxyjXD#Bml<+5?T z#8YFZLL0M*C9CxuIz2i&Z`d%Kv&HV8_A+fsQ1-kVpLsTMbN^vFTr~ekRFi<4H0LR; zNmWe}Dgo;|Oj{;g*sZY8X2-%k%$&(>n~Hqbvu7k^^aOqV+QrItHTQk-HU-DSeM{FY zZhQA_-|nvw?FV1~VUIU3_`mjWVm*&~d?iy559_0cEP4^>bP0l+XkK%sY;M literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/bolt-open.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/bolt-open.png new file mode 100644 index 0000000000000000000000000000000000000000..f534d46c0bf4c40c9a8d0e3e42d73c0bf345b526 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP|zm8C&U#<{*Ow7{K zQeIv@E-r4?geD~=C1qu0DJdxt5s@dATKj9~fubAgrs(A(V2iRQD6g*m% zG^MuX(aw0Kmr-{cX3Z25-dM?&$1|%=|L|dsHY=Nr&jnM&#eT51y|m=m)fvLE`YTJS zsHd(YkI)L;ByJ~~tb{~BGkA44w0x6o3wu@u^a6vYtDnm{r-UW|=*Wvh literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-BACKPACK.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..38a2686dfb50b62c10ae57800ccb6c4556cc59a3 GIT binary patch literal 803 zcmV+;1Kj+HP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0=P*;K~#8N?V7!d z6G0fpCu$*Rz~Uqx=1lMdiwLojfI%S$K?xRG9K^~(Qd;XDptZGym4Rz4jvxdia7T(@ zZ90pb7t!FAnoc6mFt4{Bck$iX>|Sy_KNvEzNp|LW=WCf~4IzXOLI^nmRIAmA%c?o% zJ|mOQtxS+yF&6f#qfjVJkRU#v&%3L7W)^^R%jaD#ek2GG-tYHQ*=*K8{9rJ!*X)m! z%p?GpUu?zN^TJ?jJ9Y8W6@w(=A3eBddmiF_h#Y`=z5Z7`8tAgI(dl$jqtVD@G8qH$ zw{Mlq&mY_NyWwzX5ENTb5-9*d@x5LzcJV-Ze)-Hv1MwT1J+t%cx0iU}9e|+t&(Cv- zh!1l5>`G+u!0S)JIiIxnMx$Zt#+=98?{>R(I*i9-uTdC!1e8jp$c*$(f8Jt#1Hxse;$uxk1wQ4@{WY71VN)y?ZC=}E^&0T%^_n#! z4w?o@y(AF?4)u*s&ukvfkgQW^s}^+tFr+ZA%H^`VvP-2>u@#?abZt2a5b%%JUfR5v zv|^ZsvC35eKxE;=?}zmKg%6JtbBo2H2F+&kpE}V_v{$=psR9814besK2e%h_N#e_$ zH}=&PdogBYr3ZThF3vGVs@5}9Pl1E>Rm{O8-xI(}52m@nVw}#LFheUYrtLKI&^|&4 hA%qY@2w4D(`2&9Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0=P*;K~#8N?V7!d z6G0fpCu$*Rz~Uqx=1lMdiwLojfI%S$K?xRG9K^~(Qd;XDptZGym4Rz4jvxdia7T(@ zZ90pb7t!FAnoc6mFt4{Bck$iX>|Sy_KNvEzNp|LW=WCf~4IzXOLI^nmRIAmA%c?o% zJ|mOQtxS+yF&6f#qfjVJkRU#v&%3L7W)^^R%jaD#ek2GG-tYHQ*=*K8{9rJ!*X)m! z%p?GpUu?zN^TJ?jJ9Y8W6@w(=A3eBddmiF_h#Y`=z5Z7`8tAgI(dl$jqtVD@G8qH$ zw{Mlq&mY_NyWwzX5ENTb5-9*d@x5LzcJV-Ze)-Hv1MwT1J+t%cx0iU}9e|+t&(Cv- zh!1l5>`G+u!0S)JIiIxnMx$Zt#+=98?{>R(I*i9-uTdC!1e8jp$c*$(f8Jt#1Hxse;$uxk1wQ4@{WY71VN)y?ZC=}E^&0T%^_n#! z4w?o@y(AF?4)u*s&ukvfkgQW^s}^+tFr+ZA%H^`VvP-2>u@#?abZt2a5b%%JUfR5v zv|^ZsvC35eKxE;=?}zmKg%6JtbBo2H2F+&kpE}V_v{$=psR9814besK2e%h_N#e_$ zH}=&PdogBYr3ZThF3vGVs@5}9Pl1E>Rm{O8-xI(}52m@nVw}#LFheUYrtLKI&^|&4 hA%qY@2w4D(`2&9eK@{oCO|{#S9GG z!XV7ZFl&wkP|zd5C&U#<{*Ow7{K zQeIv@E-r4?geD~=C1qu0DJdxt5fMW}!;FlK(9qD{-rjEu&R+$ZB~cRO7tHVDi|hgy&87+zn`q!wRv`B7f$mV9OjXkV|~+U&y4pk z&e#P^uxa_z=ht}R`oq0B$|AQvADX=FCaZ>^rlDZ8kAhV5s`%Zv?`pIJ$yqFuTcV-! zft%;>W3@1$mV&L8j*+fTz5>lGp9D8H2?%9z3++-DpCYc1xX;XGLhlFv^($Xp{FfemdP)B1@n<+jiv(m@F& z3OOTQG>YsnUanV~^&2TWjx%%T-TSWXmEUwWn@!Q?cCXFk;qC&s16raH^$kN5FBFjuQpfHB;9^Z$ zz^s~E_q<#H0;C}VS$p^9b;x9@2u7ZHr)0qHcDqF?*6IAR?{Wbyo<0s)VzCeJ-xkj= zpCyYBlV_ea#Q6FBTgW_@7$OV?1N-^Edbt1u9*gkt>eEq#lt>{92J_4Xu^6M#sIy+L zYu{6<)|TG{pIlsa4xg|d8AS}pJb3u1=>Ga$6-PKvW*NtL+V$tJp^q^+p?r}mcR+~v z?;mb}koa*R&h?9Zs~%yT=Xb_2o_X<8AjVZ5ca&;Y1%?yIE|0Hsq*BLKt#gy}jXJ;r zg7m-0Gd6Xc;VSxDaeyMwrZ8^B0Zj$3z;yu>D&~yg4#+usirC!&3Ket4a0ld^Jw@#9 z0ELPfFEUKuj= zQ(l9g2BZ9*T0)mQz&0`Pj-Nt@l2j@d)unR5Scz)j2IaZoA8h|9+u7tg6vLYE6b zAa%>)aqua}5GTWIz?e>_rIliSODUnt1;Bo^x@GYc;*2r!l+M|JVeQNH)$wvel*M9E zDvXV{UM>Kcv9k8DEPg1ADq2jQJp(w6%~OVL`w93?(Kn^=D;I#pO@x%PIOFTIcmoCV zV#mFB`6?;v@p_FGN6A=9Sv(Ht+_CK;V7m-Wv4@}$2N(&Qp!$En$g4L{H0l5oLe;As zMO=+KKt@~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/inhand-right.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e909999ff93aadf7cf00b3e92417c02ac91961ae GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV4C3R;uuoF_;!|J{%r?|HvQnl z%*bVJqAem~F48?FtiA8pTb_i!5uXyOsW~geWKu@ZgJlheCN*sI;m&@@wmjs#XMD*w zne*$;ue9B(Zdvwb_xpR_cW&1GY5hFJ#eoGKE!fJ^cKG46wQCx~U8QWyD<keVoXy$k^Z(vh3pZ{Bpatna^W_PbY1B z;j{d5-%I1Q6$jfLH@tpWcfDisH4q`g}* z;hE&eM^5rJq5#mv*`*1Y3>AZkLQ=6?%#o7xNYi>My9JFu6owUurxBOqf@7vF- zm4X6{I8b93%cc2~wcE0NKF7u>_)mPw^Xb)=ueSmPA3ovq(ApES@%^ta^UuAJ@wx0> z8@|0R@`u6fvx}bVaNT8k$kB3Sr|FI~rNh~VeVyKIT`K7_R`m{t- BDb4@@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json new file mode 100644 index 00000000000..bd66b2c9685 --- /dev/null +++ b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/meta.json @@ -0,0 +1,50 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken/modified from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a/icons/obj/guns/projectile/drozd.dmi, sprite modification by Jaсkal 298/TaralGit, backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "suppressor" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/suppressor.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/suppressor.png new file mode 100644 index 0000000000000000000000000000000000000000..9112ba6c8e3dd150590a2fa3214b4b70046e10f2 GIT binary patch literal 635 zcmV->0)+jEP)*kr)NI~aym#)o=iJ}#oO93X`Qq_7js2@Y(JfL8&p0)Dq+ zxV*OOHiU-yJ8ffJ5diqWa4%h)UE3b0Z`3!`(DKrjEeXd2RPd9d3%W_Bbu81msybw{ z=?2FH5XhMWe10yXpJiH)jx7q?Z)7C_?k${E=DgMqnVDRmipnw*C=9o$dzzRY`4b!t zf&iBnhSf~Jnp^9kO5whvpOCT0tN?GU4N4zf;e?P(;(Y%z8jVsY6q0V~bXu(a46XvB z$Eu+8stt$Urc$blK}QAJd%6wx1mNLtSo+0cF|igE0Dzjcs>=uq1wd#6-Vjya+}NSF z=SRBvjzh)(W#P3Sy>$Yp-+@4RrO5Cq@sK$)`$2{N_WVS3Z7meYSOK1GL6UJzZ(n0m zm&s^lKsJSeQo|N(R>FQ9^YNbigkLadzB4}ck7%H8T(E~TR|UQ2FIi-8ii%5$sH>wH zE_9l>qoad!L5#-|qsKbV0~rumU5|F zIDoTP5Brbqn83@^tDN`$0NKSjZUHVJrT|28DXuPIE`j+h$1UK1T)#a6UIp@AfiJXm V_+tdwvKjyY002ovPDHLkV1k2_Bz6D* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ee66cf3df9bc020ce409eb59f3264ab28ec8eec3 GIT binary patch literal 719 zcmV;=0xuzkdD%0QmCl zd#bJLy87|)G53PFuDf+56^Zkj4`n(xn@yaZonbf};_iNeyZZ@-!(pmTrBVT7EZ4SR zjOic)oN(~SS%I?kHr|%)oL|4UM`p5 zoWuA1qhA4qw!pfFhXcODQeRd9vSy5W3N5 zAc~?~mu?t_mRYnYimXnjgKoE5W~zS<=Ukgb5JG6r^Gg3O5JG74h$Vy&LI@#*5JCtc zgb+f=`?9NMpiJ$+vE#j|tRzO!>`Wovo z%~(>(q;1~1f}<}$v)N4E-`!6D0Jd#oJRSr1eK`Z$Y4lx8ThrIJ?Ih;u>1k>#!_*N> zr&Cj#0LGXO!*J(#M_+)ar>Eq7^y4RhbPd7t^Yg*6OxyMTCZ-u{b0Ih5hhd0nwVI^a zHywQevQBWlp6C!J1+SFSSv3gjHtPr&V}jUJJWt!Ut!>+W ze@}|HV$$-X(MVrhT>M`rzFC+-^#p_vLI@$R_yru9Ic&Rb&!GSS002ovPDHLkV1i`U BQ~3Y@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png b/Resources/Textures/_DV/Objects/Weapons/Guns/SMGs/drozd.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d66956051b53183797590cd4630c53c95c4357 GIT binary patch literal 709 zcmV;$0y_PPP)mF04|SY5l_#*d%BM496O$cjRtfZ1#YS(c%y zD%R^YR8?i3=OqRqv9eSuF#yRl0MO}l zV45cO`+edZP9+9lx7$gkX^NE}cv=McLg%`!Vq0DvfpVtWU8`g}MX-aMdIs|5gTG#cT!Pkt`fb#LzTlGFh3Jp!KR zAq+z_8VvxzVzCfyip8QR^SuL#qF_3m0(efRPbQNWQ&hYy|F5DbqR&R75j)o-r4FoI zE{m%lh9MM10dSrTzVvL~vVVZ@H8Kq2V!LaCd5hFLAP54K%Vl_;hr{6z%ex=rlRV}7 z{!QCvc#wSG7kiKXhSUIfo+m|7!~noFO*ETL3 Date: Fri, 14 Feb 2025 22:56:05 +0000 Subject: [PATCH 197/197] old spawner sprite --- .../Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml index ab23464faee..364fae88112 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/boxes.yml @@ -23,8 +23,8 @@ - type: Sprite layers: - state: red - - sprite: Objects/Weapons/Guns/Ammunition/Boxes/shotgun.rsi - state: mag-slug-1 + - sprite: Objects/Storage/boxes.rsi + state: shellslug - type: EntityTableSpawner table: !type:NestedSelector tableId: AmmoBoxTable