]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix sexed organs (#42554)
authorpathetic meowmeow <uhhadd@gmail.com>
Tue, 20 Jan 2026 20:58:44 +0000 (15:58 -0500)
committerGitHub <noreply@github.com>
Tue, 20 Jan 2026 20:58:44 +0000 (20:58 +0000)
37 files changed:
Content.Shared/Body/SharedVisualBodySystem.cs
Content.Shared/Body/VisualOrganComponent.cs
Resources/Prototypes/Body/Species/human.yml
Resources/Prototypes/Body/Species/moth.yml
Resources/Prototypes/Body/Species/reptilian.yml
Resources/Prototypes/Body/Species/skeleton.yml
Resources/Prototypes/Body/Species/slime.yml
Resources/Prototypes/Body/Species/vulpkanin.yml
Resources/Prototypes/Body/base_organs.yml
Resources/Prototypes/Species/diona.yml
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso.png [moved from Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso_m.png [deleted file]
Resources/Textures/Mobs/Species/Diona/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Diona/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Diona/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Diona/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Diona/parts.rsi/torso.png [moved from Resources/Textures/Mobs/Species/Diona/parts.rsi/torso_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Diona/parts.rsi/torso_m.png [deleted file]
Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso.png [moved from Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso_m.png [deleted file]
Resources/Textures/Mobs/Species/Moth/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Moth/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Moth/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Skeleton/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Slime/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Slime/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Slime/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Slime/parts.rsi/meta.json
Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head.png [moved from Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head_f.png with 100% similarity]
Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head_m.png [deleted file]
Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/meta.json

index 52f5bbfd5dbe0ce7aed78a5eff09c3243e30cc09..677d4f46dd0f1550ef519af5cbc809a851c08604 100644 (file)
@@ -138,6 +138,12 @@ public abstract partial class SharedVisualBodySystem : EntitySystem
             SetOrganColor(ent, ent.Comp.Profile.EyeColor);
         else
             SetOrganColor(ent, ent.Comp.Profile.SkinColor);
+
+        if (ent.Comp.SexStateOverrides is { } overrides && overrides.TryGetValue(data.Sex, out var state))
+        {
+            ent.Comp.Data.State = state;
+            SetOrganAppearance(ent, ent.Comp.Data);
+        }
     }
 
     private void OnMarkingsOrganApplyMarkings(Entity<VisualOrganMarkingsComponent> ent, ref BodyRelayedEvent<ApplyOrganMarkingsEvent> args)
index 10214f9f2a79dee35611b448e4437ccc2aea8da3..9ca2c363746b497dae385b907cd896c57e7f57d5 100644 (file)
@@ -20,6 +20,12 @@ public sealed partial class VisualOrganComponent : Component
     [DataField(required: true), AutoNetworkedField, AlwaysPushInheritance]
     public PrototypeLayerData Data;
 
+    /// <summary>
+    /// When applying a profile, if the sex is present in this dictionary, overrides the state of the data.
+    /// </summary>
+    [DataField]
+    public Dictionary<Sex, string>? SexStateOverrides;
+
     [DataField, AutoNetworkedField]
     public OrganProfileData Profile = new();
 }
index aa67c15ec780826f517253041c316b0052c15bc2..7c0ee31f3291d3b71d80d372d8ba829089823e3a 100644 (file)
       group: Human
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganHumanExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganHumanExternal ]
   id: OrganHumanTorso
 
 - type: entity
-  parent: [ OrganBaseHead, OrganHumanExternal ]
+  parent: [ OrganBaseHeadSexed, OrganBaseHead, OrganHumanExternal ]
   id: OrganHumanHead
 
 - type: entity
index 22c08d540fb7d555d911f1c8a7bfd227a93b1bb2..a5a1874169fa4463b00d228efe9be300202dedb4 100644 (file)
     sprite: Mobs/Species/Moth/parts.rsi
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganMothExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganMothExternal ]
   id: OrganMothTorso
 
 - type: entity
index 2c0d18056b1ddc3f3251dd4832d44f9d5949a6f9..3dd25cf46801bb111626cd29235c698347a2ac44 100644 (file)
       group: Reptilian
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganReptilianExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganReptilianExternal ]
   id: OrganReptilianTorso
 
 - type: entity
-  parent: [ OrganBaseHead, OrganReptilianExternal ]
+  parent: [ OrganBaseHeadSexed, OrganBaseHead, OrganReptilianExternal ]
   id: OrganReptilianHead
 
 - type: entity
index dd2004aebafd6971d22e4f44de16573a000ed610..ebe5bb6e28a3cbcd857001bde070d0a2fae831ff 100644 (file)
       group: Skeleton
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganSkeletonPersonExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganSkeletonPersonExternal ]
   id: OrganSkeletonPersonTorso
 
 - type: entity
index fd238c55250bdff485815e0f0cadf1f13035a0df..a72a949b772dd6c14505c7172d7664b6352ae529 100644 (file)
       group: Slime
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganSlimePersonExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganSlimePersonExternal ]
   id: OrganSlimePersonTorso
 
 - type: entity
index 2e3557c8d7e3267cde7707064d48c25f21f78d6d..9209e4c8b73a5fa6aff80084882107408b67afd8 100644 (file)
     sprite: Mobs/Species/Vulpkanin/parts.rsi
 
 - type: entity
-  parent: [ OrganBaseTorso, OrganVulpkaninExternal ]
+  parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganVulpkaninExternal ]
   id: OrganVulpkaninTorso
 
 - type: entity
index 1dca7f2a0ec94117728bbfdd72c710175580b070..0a5607acefad2bd348684bd06e8cc755c9b3cdb6 100644 (file)
   - type: Organ
     category: Torso
   - type: Sprite
-    state: torso_m
+    state: torso
   - type: VisualOrgan
     layer: enum.HumanoidVisualLayers.Chest
     data:
-      state: torso_m
+      state: torso
   - type: VisualOrganMarkings
     markingData:
       layers:
   - type: Organ
     category: Head
   - type: Sprite
-    state: head_m
+    state: head
   - type: VisualOrgan
     layer: enum.HumanoidVisualLayers.Head
     data:
-      state: head_m
+      state: head
   - type: VisualOrganMarkings
     markingData:
       layers:
   components:
   - type: Sprite
     sprite: Mobs/Species/Human/organs.rsi
+
+- type: entity
+  id: OrganBaseHeadSexed
+  abstract: true
+  components:
+  - type: Sprite
+    state: head_m
+  - type: VisualOrgan
+    data:
+      state: head_m
+    sexStateOverrides:
+      Male: head_m
+      Female: head_f
+
+- type: entity
+  id: OrganBaseTorsoSexed
+  abstract: true
+  components:
+  - type: Sprite
+    state: torso_m
+  - type: VisualOrgan
+    data:
+      state: torso_m
+    sexStateOverrides:
+      Male: torso_m
+      Female: torso_f
index 6dfd358720687d4c8cf063ef0c9d82d317104a05..880cdfdf84e7247b721dcba5a09cc22fe3a81c56 100644 (file)
@@ -10,3 +10,5 @@
   femaleFirstNames: NamesDionaFirst
   lastNames: NamesDionaLast
   naming: TheFirstofLast
+  sexes:
+  - Unsexed
diff --git a/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head_m.png
deleted file mode 100644 (file)
index 505fd68..0000000
Binary files a/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/head_m.png and /dev/null differ
index a09c655a2b08d5516e222e665305ed0123145b16..12734b6c6a6433477df8e083bc2bc877eec881a1 100644 (file)
       "name": "full"
     },
     {
-      "name": "head_f",
-      "directions": 4
-    },
-    {
-      "name": "head_m",
+      "name": "head",
       "directions": 4
     },
     {
       "directions": 4
     },
     {
-      "name": "torso_f",
-      "directions": 4
-    },
-    {
-      "name": "torso_m",
+      "name": "torso",
       "directions": 4
     },
     {
diff --git a/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso_m.png
deleted file mode 100644 (file)
index 10f3a3b..0000000
Binary files a/Resources/Textures/Mobs/Species/Arachnid/parts.rsi/torso_m.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Diona/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Diona/parts.rsi/head_m.png
deleted file mode 100644 (file)
index 21bf1c4..0000000
Binary files a/Resources/Textures/Mobs/Species/Diona/parts.rsi/head_m.png and /dev/null differ
index bc90b509a1da1ef66ac9738331ea8b785d17d6e4..1c6e521c5fddb8a3a80f40cfe61260f94d514791 100644 (file)
       "name": "full"
     },
     {
-      "name": "head_f",
-      "directions": 4
-    },
-    {
-      "name": "head_m",
+      "name": "head",
       "directions": 4
     },
     {
       "directions": 4
     },
     {
-      "name": "torso_f",
-      "directions": 4
-    },
-    {
-      "name": "torso_m",
+      "name": "torso",
       "directions": 4
     }
   ]
diff --git a/Resources/Textures/Mobs/Species/Diona/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Diona/parts.rsi/torso_m.png
deleted file mode 100644 (file)
index 6aaf688..0000000
Binary files a/Resources/Textures/Mobs/Species/Diona/parts.rsi/torso_m.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head_m.png
deleted file mode 100644 (file)
index 5d0a951..0000000
Binary files a/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/head_m.png and /dev/null differ
index fec31a494d29bdd0d5aed230316b2b22b448a04f..8ddf28a359fdb9acb94f58f3cb4c91fc5b5fb513 100644 (file)
       "name": "full"
     },
     {
-      "name": "head_f",
-      "directions": 4
-    },
-    {
-      "name": "head_m",
+      "name": "head",
       "directions": 4
     },
     {
       "directions": 4
     },
     {
-      "name": "torso_f",
-      "directions": 4
-    },
-    {
-      "name": "torso_m",
+      "name": "torso",
       "directions": 4
     }
   ]
diff --git a/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso_m.png
deleted file mode 100644 (file)
index bde0508..0000000
Binary files a/Resources/Textures/Mobs/Species/Gingerbread/parts.rsi/torso_m.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png
deleted file mode 100644 (file)
index 6788ca0..0000000
Binary files a/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png and /dev/null differ
index 016f008fc9147a7b0c2630fcbae27d61e8598dce..4e15818415b8c9519e70ecda1f2f4e346cc4f61c 100644 (file)
       "name": "full"
     },
     {
-      "name": "head_f",
-      "directions": 4
-    },
-    {
-      "name": "head_m",
+      "name": "head",
       "directions": 4
     },
     {
diff --git a/Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head_m.png
deleted file mode 100644 (file)
index af813d8..0000000
Binary files a/Resources/Textures/Mobs/Species/Skeleton/parts.rsi/head_m.png and /dev/null differ
index 78e0a89e04ddfbba7d5a83ffb15ac8e14440287e..f05aabbe0c98c9a401fd1b9a10a0521d1696b9c4 100644 (file)
             "name": "full"
         },
         {
-            "name": "head_f",
-            "directions": 4
-        },
-        {
-            "name": "head_m",
+            "name": "head",
             "directions": 4
         },
         {
diff --git a/Resources/Textures/Mobs/Species/Slime/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Slime/parts.rsi/head_m.png
deleted file mode 100644 (file)
index 317d91c..0000000
Binary files a/Resources/Textures/Mobs/Species/Slime/parts.rsi/head_m.png and /dev/null differ
index a7822a9e6ce63deaf6918a60e92358162ea16e79..4304f0afd822eb910e939122c1969e1b56c612c2 100644 (file)
       "name": "full"
     },
     {
-      "name": "head_f",
-      "directions": 4
-    },
-    {
-      "name": "head_m",
+      "name": "head",
       "directions": 4
     },
     {
diff --git a/Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head_m.png
deleted file mode 100644 (file)
index dae6460..0000000
Binary files a/Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/head_m.png and /dev/null differ
index fb445e85a197c69c0f18eef0f2a526e416ee48ca..c2eb0e3b268f75988562d024a22cbe579c14c650 100644 (file)
             "name": "icon"
         },
         {
-            "name": "head_f",
-            "directions": 4
-        },
-        {
-            "name": "head_m",
+            "name": "head",
             "directions": 4
         },
         {