Enhance apparel definitions: Introduce 'UpperUnderwear' layer and related items (Bra, SportsBra, SoftBra) to support gender-specific clothing. Update inventory and dress generation logic to accommodate new layers and ensure proper coverage. Adjust localization for new apparel terms and refine tests for underwear functionality.

This commit is contained in:
Leonid Pershin
2026-08-20 07:20:40 +03:00
parent 2af85e1c41
commit 660340c216
24 changed files with 527 additions and 108 deletions
@@ -1,12 +1,58 @@
[
{
"defName": "Underwear",
"abstract": true,
"layers": ["Underwear"],
"portable": true,
"mass": 0.05,
"insulation": 1,
"colors": ["White", "Black", "Gray"],
},
{
"defName": "Briefs",
"parent": "Underwear",
"sex": "male",
},
{
"defName": "Boxers",
"parent": "Underwear",
"sex": "male",
"mass": 0.06,
},
{
"defName": "Panties",
"parent": "Underwear",
"sex": "female",
"colors": ["White", "Black", "Gray", "Beige"],
},
{
"defName": "Bra",
"parent": "Underwear",
"layers": ["UpperUnderwear"],
"sex": "female",
"age": { "min": 11 },
"mass": 0.04,
"colors": ["White", "Black", "Beige", "Gray"],
},
{
"defName": "SportsBra",
"parent": "Underwear",
"layers": ["UpperUnderwear"],
"sex": "female",
"age": { "min": 11 },
"mass": 0.05,
"insulation": 2,
"colors": ["White", "Black", "Gray", "Blue"],
},
{
"defName": "SoftBra",
"parent": "Underwear",
"layers": ["UpperUnderwear"],
"sex": "female",
"age": { "min": 11 },
"mass": 0.03,
"colors": ["White", "Beige", "Gray"],
},
{
"defName": "Socks",
"layers": ["Socks"],
@@ -18,6 +64,7 @@
{
"defName": "Skirt",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.25,
"insulation": 2,
@@ -29,6 +76,7 @@
{
"defName": "ShortSkirt",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.2,
"insulation": 1,
@@ -40,6 +88,7 @@
{
"defName": "Pants",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.4,
"insulation": 3,
@@ -50,6 +99,7 @@
{
"defName": "Shorts",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.25,
"insulation": 1,
@@ -60,6 +110,7 @@
{
"defName": "Jeans",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.5,
"insulation": 3,
@@ -70,6 +121,7 @@
{
"defName": "Trousers",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.4,
"insulation": 3,
@@ -80,6 +132,7 @@
{
"defName": "TShirt",
"layers": ["Top"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear"],
"portable": true,
"mass": 0.15,
"insulation": 2,
@@ -89,6 +142,7 @@
{
"defName": "Shirt",
"layers": ["Top"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear"],
"portable": true,
"mass": 0.2,
"insulation": 2,
@@ -98,6 +152,7 @@
{
"defName": "Sweater",
"layers": ["OverTop"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear", "Top"],
"portable": true,
"mass": 0.4,
"insulation": 8,
@@ -107,6 +162,7 @@
{
"defName": "Jacket",
"layers": ["Outer"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear", "Top", "OverTop"],
"portable": true,
"mass": 1,
"insulation": 12,
@@ -116,6 +172,7 @@
{
"defName": "Coat",
"layers": ["Outer"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear", "Top", "OverTop", "Bottom"],
"portable": true,
"mass": 1.5,
"insulation": 18,
@@ -125,6 +182,7 @@
{
"defName": "FurCoat",
"layers": ["Outer"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear", "Top", "OverTop", "Bottom"],
"portable": true,
"mass": 2.5,
"insulation": 28,
@@ -134,6 +192,7 @@
{
"defName": "Shoes",
"layers": ["Shoes"],
"fullyCoversLayers": ["Socks"],
"portable": true,
"mass": 0.6,
"insulation": 2,
@@ -143,6 +202,7 @@
{
"defName": "WinterBoots",
"layers": ["Shoes"],
"fullyCoversLayers": ["Socks"],
"portable": true,
"mass": 1,
"insulation": 8,
@@ -178,6 +238,7 @@
{
"defName": "Dress",
"layers": ["Bottom", "Top"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear"],
"portable": true,
"mass": 0.4,
"insulation": 3,
@@ -189,6 +250,7 @@
{
"defName": "PeShirt",
"layers": ["Top"],
"fullyCoversLayers": ["Underwear", "UpperUnderwear"],
"portable": true,
"mass": 0.15,
"insulation": 2,
@@ -199,6 +261,7 @@
{
"defName": "PeShorts",
"layers": ["Bottom"],
"fullyCoversLayers": ["Underwear"],
"portable": true,
"mass": 0.2,
"insulation": 1,