Let the catalog describe clothes and carryables on ThingDef without dressing anyone.

Empty layers keep furniture on the map; a known layer set and ColorDef palette reject unknown ids at load.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 02:47:23 +03:00
co-authored by Cursor
parent 450495f666
commit abcf67eaab
16 changed files with 716 additions and 15 deletions
+31
View File
@@ -20,6 +20,7 @@ public enum DefKind
DayFrame,
Holiday,
Behavior,
Color,
}
/// <summary>Shared JSONC fields. Kind comes from the folder under <c>defs/</c>, not from the file.</summary>
@@ -72,6 +73,36 @@ public sealed class ThingDef : Def
/// must not inflate class size just because someone sits in it.
/// </summary>
public int PupilSlots { get; init; }
/// <summary>Layers this occupies when worn. Empty — not apparel, so it can sit on the map.</summary>
public IReadOnlyList<string> Layers { get; init; } = [];
/// <summary>Can live in a bag, locker or at home. Furniture stays false.</summary>
public bool Portable { get; init; }
/// <summary>Kilograms. Carried mass sums; worn mass does not in this slice.</summary>
public float Mass { get; init; }
/// <summary>How much it warms — and how much it steams in heat.</summary>
public float Insulation { get; init; }
/// <summary>0100. Dress-code formality, not a fashion score.</summary>
public int Formality { get; init; }
/// <summary>Allowed age window. Omit for any age.</summary>
public IntRange? Age { get; init; }
/// <summary><c>male</c>, <c>female</c>, or omit for any.</summary>
public string? Sex { get; init; }
/// <summary>ColorDef ids this thing may be. Empty — the instance has no colour.</summary>
public IReadOnlyList<string> Colors { get; init; } = [];
/// <summary><see cref="SkirtLengths"/> id, or omit when there is no hem to measure.</summary>
public string? SkirtLength { get; init; }
/// <summary>PE kit. Worn for that lesson; not a second wardrobe of everyday clothes.</summary>
public bool Pe { get; init; }
}
public sealed class PositionDef : Def;