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,
@@ -19,6 +19,13 @@
"MedicalCouch": "Exam couch",
"Locker": "Locker",
"Underwear": "Underwear",
"UpperUnderwear": "Upper underwear",
"Briefs": "Briefs",
"Boxers": "Boxers",
"Panties": "Panties",
"Bra": "Bra",
"SportsBra": "Sports bra",
"SoftBra": "Soft bra",
"Socks": "Socks",
"Skirt": "Skirt",
"ShortSkirt": "Short skirt",
@@ -19,6 +19,13 @@
"MedicalCouch": "Кушетка",
"Locker": "Шкафчик",
"Underwear": "Бельё",
"UpperUnderwear": "Верхнее бельё",
"Briefs": "Трусы",
"Boxers": "Боксеры",
"Panties": "Трусики",
"Bra": "Бюстгальтер",
"SportsBra": "Спортивный бюстгальтер",
"SoftBra": "Мягкий бюстгальтер",
"Socks": "Носки",
"Skirt": "Юбка",
"ShortSkirt": "Короткая юбка",