]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Genpop wall lockers (#38102)
authorK-Dynamic <20566341+K-Dynamic@users.noreply.github.com>
Sat, 7 Jun 2025 15:51:38 +0000 (03:51 +1200)
committerGitHub <noreply@github.com>
Sat, 7 Jun 2025 15:51:38 +0000 (17:51 +0200)
* sprites

* genpop wall lockers

* number 5 alive

* slight boilerplate code, thank you slarti

15 files changed:
Content.Server/Security/GenpopSystem.cs
Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml
Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml
Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png [new file with mode: 0644]
Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json

index 0a4233308e03ce27d64b117f15db3614e78b65c4..5bff46ad3823ce57d3c1928b2e00249b0023630a 100644 (file)
@@ -1,14 +1,24 @@
 using Content.Shared.Security.Components;
 using Content.Shared.Security.Systems;
+using Content.Shared.Wall;
 
 namespace Content.Server.Security;
 
 public sealed class GenpopSystem : SharedGenpopSystem
 {
+    private const float GenpopIDEjectDistanceFromWall = 1f;
     protected override void CreateId(Entity<GenpopLockerComponent> ent, string name, float sentence, string crime)
     {
+        // Default to prisoner locker coordinates for ID spawn
         var xform = Transform(ent);
-        var uid = Spawn(ent.Comp.IdCardProto, xform.Coordinates);
+        var spawnCoordinates = xform.Coordinates;
+        // Offset prisoner wall locker coordinates in wallmount direction for ID spawn; avoids spawning ID inside wall
+        if (TryComp<WallMountComponent>(ent, out var wallMountComponent))
+        {
+            var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * GenpopIDEjectDistanceFromWall;
+            spawnCoordinates = spawnCoordinates.Offset(offset);
+        }
+        var uid = Spawn(ent.Comp.IdCardProto, spawnCoordinates);
         ent.Comp.LinkedId = uid;
         IdCard.TryChangeFullName(uid, name);
 
index 47075f07e55320a2beaba6c5c8f49ca5074da095..6713a8303d0840124b18bdaee196a96696381ce9 100644 (file)
 
 # Genpop Storage
 - type: entity
-  id: LockerPrisoner
-  parent: LockerBaseSecure
-  name: prisoner closet
-  description: It's a secure locker for an inmate's personal belongings during their time in prison.
-  suffix: 1
+  id: GenpopBase
+  abstract: true
   components:
   - type: GenpopLocker
   - type: EntityStorageVisuals
   - type: Lock
     locked: false
     useAccess: false
+  - type: EntityStorage
+    open: True
+    removedMasks: 20
+  - type: PlaceableSurface
+    isPlaceable: True
+
+- type: entity
+  parent: [ GenpopBase , LockerBaseSecure ]
+  id: LockerPrisoner
+  name: prisoner closet
+  description: It's a secure locker for an inmate's personal belongings during their time in prison.
+  suffix: 1
+  components:
   - type: Fixtures
     fixtures:
       fix1:
         hard: True
         restitution: 0
         friction: 0.4
-  - type: EntityStorage
-    open: True
-    removedMasks: 20
-  - type: PlaceableSurface
-    isPlaceable: True
 
 - type: entity
-  id: LockerPrisoner2
   parent: LockerPrisoner
+  id: LockerPrisoner2
   suffix: 2
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_2
 
 - type: entity
-  id: LockerPrisoner3
   parent: LockerPrisoner
+  id: LockerPrisoner3
   suffix: 3
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_3
 
 - type: entity
-  id: LockerPrisoner4
   parent: LockerPrisoner
+  id: LockerPrisoner4
   suffix: 4
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_4
 
 - type: entity
-  id: LockerPrisoner5
   parent: LockerPrisoner
+  id: LockerPrisoner5
   suffix: 5
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_5
 
 - type: entity
-  id: LockerPrisoner6
   parent: LockerPrisoner
+  id: LockerPrisoner6
   suffix: 6
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_6
 
 - type: entity
-  id: LockerPrisoner7
   parent: LockerPrisoner
+  id: LockerPrisoner7
   suffix: 7
   components:
   - type: EntityStorageVisuals
     stateDoorClosed: genpop_door_7
 
 - type: entity
-  id: LockerPrisoner8
   parent: LockerPrisoner
+  id: LockerPrisoner8
   suffix: 8
   components:
   - type: EntityStorageVisuals
index 84b25d135140c90ae811b7243bd4f4186d182741..211eee609aeff5c8bd6cb43ee0adf4520f896557 100644 (file)
           SheetSteel1:
             min: 1
             max: 1
+  - type: Appearance
+  - type: EntityStorageVisuals
+    stateBaseClosed: generic
+    stateDoorOpen: generic_open
+    stateDoorClosed: generic_door
   - type: Construction
     graph: ClosetWall
     node: done
index 311cccd429f505679391e0879811310224b540db..7943e74e949391fb848e9e42f1856efca0235bad 100644 (file)
@@ -4,7 +4,6 @@
   name: maintenance wall closet
   description: It's a storage unit.
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
@@ -16,7 +15,6 @@
   parent: BaseWallCloset
   description: It's a storage unit for emergency breath masks and O2 tanks.
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: emergency
     stateDoorOpen: emergency_open
@@ -28,7 +26,6 @@
   name: emergency nitrogen wall closet
   description: It's full of life-saving equipment. Assuming, that is, that you breathe nitrogen.
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: n2
     stateDoorOpen: n2_open
@@ -40,7 +37,6 @@
   parent: BaseWallCloset
   description: It's a storage unit for fire-fighting supplies.
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: fire
     stateDoorOpen: fire_open
@@ -52,7 +48,6 @@
   name: blue wall closet
   description: "A wardrobe packed with stylish blue clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
@@ -64,7 +59,6 @@
   name: pink wall closet
   description: "A wardrobe packed with fabulous pink clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
@@ -76,7 +70,6 @@
   name: black wall closet
   description: "A wardrobe packed with stylish black clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
@@ -88,7 +81,6 @@
   name: green wall closet
   description: "A wardrobe packed with stylish green clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
@@ -99,7 +91,6 @@
   parent: BaseWallCloset
   name: prison wall closet
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   name: yellow wall closet
   description: "A wardrobe packed with stylish yellow clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   name: white wall closet
   description: "A wardrobe packed with stylish white clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   name: grey wall closet
   description: "A wardrobe packed with a tide of grey clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   name: mixed wall closet
   description: "A wardrobe packed with a mix of colorful clothing."
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   parent: BaseWallCloset
   name: atmospherics wall closet
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: generic
     stateDoorOpen: generic_open
   parent: BaseWallLocker
   name: medical wall locker
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: med
     stateDoorOpen: med_open
   name: emergency shuttle emergency wall locker
   description: It's emergencies all the way down.
   components:
-  - type: Appearance
   - type: EntityStorageVisuals
     stateBaseClosed: eng
     stateDoorOpen: eng_open
     stateDoorClosed: eng_evac_door
   - type: AccessReader
     access: [["Engineering"]]
+
+- type: entity
+  parent: [ GenpopBase , BaseWallLocker ]
+  id: LockerWallBasePrisoner
+  name: prisoner wall closet
+  description: It's a secure locker for an inmate's personal belongings during their time in prison.
+  suffix: 1
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner2
+  suffix: 2
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_2
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner3
+  suffix: 3
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_3
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner4
+  suffix: 4
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_4
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner5
+  suffix: 5
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_5
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner6
+  suffix: 6
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_6
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner7
+  suffix: 7
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_7
+
+- type: entity
+  parent: LockerWallBasePrisoner
+  id: LockerWallPrisoner8
+  suffix: 8
+  components:
+  - type: EntityStorageVisuals
+    stateDoorClosed: genpop_door_8
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png
new file mode 100644 (file)
index 0000000..530eb5f
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png
new file mode 100644 (file)
index 0000000..2de7647
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png
new file mode 100644 (file)
index 0000000..c2e82b1
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png
new file mode 100644 (file)
index 0000000..d3b8adf
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png
new file mode 100644 (file)
index 0000000..a553c10
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png
new file mode 100644 (file)
index 0000000..589f524
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png
new file mode 100644 (file)
index 0000000..2a0949d
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png
new file mode 100644 (file)
index 0000000..5d865d5
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png
new file mode 100644 (file)
index 0000000..da6e8b0
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png differ
diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png
new file mode 100644 (file)
index 0000000..c74a11b
Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png differ
index 18a7b2065c74629ef7ce762ce0d821d54bb2f7bc..f5b67de849b448715ce867fe1aae9c347a1211f0 100644 (file)
 {
-  "version": 1,
-  "license": "CC-BY-SA-3.0",
-  "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub)",
-  "size": {
-    "x": 32,
-    "y": 32
-  },
-  "states": [
-    { "name": "atmos_door" },
-    { "name": "black_door" },
-    { "name": "blue_door" },
-    { "name": "emergency" },
-    { "name": "emergency_door" },
-    { "name": "emergency_open" },
-    { "name": "fire" },
-    { "name": "fire_door" },
-    { "name": "fire_open" },
-    { "name": "generic" },
-    { "name": "generic_door" },
-    { "name": "generic_icon" },
-    { "name": "generic_open" },
-    { "name": "gray_door" },
-    { "name": "green_door" },
-    { "name": "locked" },
-    { "name": "med" },
-    { "name": "med_door" },
-    { "name": "med_open" },
-    { "name": "mixed_door" },
-    { "name": "n2" },
-    { "name": "n2_door" },
-    { "name": "n2_open" },
-    { "name": "orange_door" },
-    { "name": "pink_door" },
-    { "name": "red_door" },
-    { "name": "unlocked" },
-    { "name": "welded" },
-    { "name": "white_door" },
-    { "name": "yellow_door" },
-    { "name": "eng" },
-    { "name": "eng_open" },
-    { "name": "eng_evac_door" }
-  ]
+    "version": 1,
+    "license": "CC-BY-SA-3.0",
+    "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub), genpop* derived from Wizards Den SS14 by K-Dynamic (github)",
+    "size": {
+        "x": 32,
+        "y": 32
+    },
+    "states": [
+        {
+            "name": "atmos_door"
+        },
+        {
+            "name": "black_door"
+        },
+        {
+            "name": "blue_door"
+        },
+        {
+            "name": "emergency"
+        },
+        {
+            "name": "emergency_door"
+        },
+        {
+            "name": "emergency_open"
+        },
+        {
+            "name": "fire"
+        },
+        {
+            "name": "fire_door"
+        },
+        {
+            "name": "fire_open"
+        },
+        {
+            "name": "generic"
+        },
+        {
+            "name": "generic_door"
+        },
+        {
+            "name": "generic_icon"
+        },
+        {
+            "name": "generic_open"
+        },
+        {
+            "name": "gray_door"
+        },
+        {
+            "name": "green_door"
+        },
+        {
+            "name": "locked"
+        },
+        {
+            "name": "med"
+        },
+        {
+            "name": "med_door"
+        },
+        {
+            "name": "med_open"
+        },
+        {
+            "name": "mixed_door"
+        },
+        {
+            "name": "n2"
+        },
+        {
+            "name": "n2_door"
+        },
+        {
+            "name": "n2_open"
+        },
+        {
+            "name": "orange_door"
+        },
+        {
+            "name": "pink_door"
+        },
+        {
+            "name": "red_door"
+        },
+        {
+            "name": "unlocked"
+        },
+        {
+            "name": "welded"
+        },
+        {
+            "name": "white_door"
+        },
+        {
+            "name": "yellow_door"
+        },
+        {
+            "name": "eng"
+        },
+        {
+            "name": "eng_open"
+        },
+        {
+            "name": "eng_evac_door"
+        },
+        {
+            "name": "genpop"
+        },
+        {
+            "name": "genpop_open"
+        },
+        {
+            "name": "genpop_door_1"
+        },
+        {
+            "name": "genpop_door_2"
+        },
+        {
+            "name": "genpop_door_3"
+        },
+        {
+            "name": "genpop_door_4"
+        },
+        {
+            "name": "genpop_door_5"
+        },
+        {
+            "name": "genpop_door_6"
+        },
+        {
+            "name": "genpop_door_7"
+        },
+        {
+            "name": "genpop_door_8"
+        }
+    ]
 }