From e5ca650164fc64ba2e7fd1b4530c1038b490d184 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 7 Jul 2026 11:23:15 +0200 Subject: [PATCH] =?UTF-8?q?feat(assets):=20outfit=20presets=20=E2=80=94=20?= =?UTF-8?q?12=20named=20complete=20looks=20over=20the=20wardrobe=20(T-1089?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit casual street/warm/hoodie, business, black suit, training, gym, two swim looks, worker, thrds cold-weather, and sleepwear-as-tints (soft palette over daywear meshes — no dedicated sleep meshes). Per-item 4-region tints + brand logos where sensible; all references validated against the manifest. The seam for NPC dressing, shop outfits, and creation-screen randomize. Co-Authored-By: Claude Fable 5 --- client/assets/characters/outfits.json | 65 +++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 client/assets/characters/outfits.json diff --git a/client/assets/characters/outfits.json b/client/assets/characters/outfits.json new file mode 100644 index 000000000..6f1a81cea --- /dev/null +++ b/client/assets/characters/outfits.json @@ -0,0 +1,65 @@ +{ + "_comment": "T-1089 outfit presets — named complete looks composing manifest clothing entries. Consumed by NPC dressing / shop / creation-screen randomize. tints are per-item 4-region hex arrays (toon_garment order: R,G,B,A regions); logos are per-item brand ids resolving to logos/.png. Style follows the manifest style tags; sleep_soft reuses daywear meshes with a soft palette (sleepwear-as-tints, no dedicated meshes).", + "presets": { + "casual_street": { + "label": "Casual — street", + "items": {"torso": "tshirt_modern", "legs": "jeans_modern", "feet": "sneakers_modern"}, + "logos": {"tshirt_modern": "thrds"} + }, + "casual_warm": { + "label": "Casual — warm", + "items": {"torso": "sweater_modern", "legs": "jeans_modern", "feet": "boots_modern"} + }, + "hood_up_errands": { + "label": "Casual — hoodie", + "items": {"torso": "hoodie_modern", "legs": "joggers_modern", "feet": "sneakers_modern"}, + "logos": {"hoodie_modern": "thrds"} + }, + "business": { + "label": "Business — smart casual", + "items": {"torso": "buttondown_modern", "legs": "pants_formal", "feet": "shoes_formal"} + }, + "suit_formal": { + "label": "Formal — black suit", + "items": {"torso": "suit_jacket_black", "legs": "pants_formal", "feet": "shoes_formal"}, + "tints": { + "suit_jacket_black": ["#1a1a1e", "#1a1a1e", "#1a1a1e", "#f2f0e8"], + "pants_formal": ["#1a1a1e", "#1a1a1e", "#1a1a1e", "#1a1a1e"], + "shoes_formal": ["#141414", "#1a1a1e", "#26262c", "#1a1a1e"] + } + }, + "training": { + "label": "Sport — training suit", + "items": {"torso": "track_jacket", "legs": "joggers_modern", "feet": "sneakers_modern"} + }, + "gym": { + "label": "Sport — gym", + "items": {"torso": "tank_top", "legs": "shorts_modern", "feet": "sneakers_modern"} + }, + "beach_trunks": { + "label": "Swim — trunks", + "items": {"legs": "swim_trunks", "feet": "slides"} + }, + "beach_onepiece": { + "label": "Swim — one-piece", + "items": {"full_body": "swimsuit_onepiece", "feet": "slides"} + }, + "worker": { + "label": "Utility — worker", + "items": {"full_body": "uniform_utility", "feet": "boots_modern"} + }, + "cold_weather": { + "label": "Outerwear — cold weather", + "items": {"torso": "parka_thrds", "legs": "cargo_pants", "feet": "boots_modern"}, + "logos": {"parka_thrds": "thrds"} + }, + "sleep_soft": { + "label": "Sleepwear (soft palette)", + "items": {"torso": "tshirt_modern", "legs": "joggers_modern"}, + "tints": { + "tshirt_modern": ["#cfd8e3", "#b8c6d8", "#cfd8e3", "#ffffff"], + "joggers_modern": ["#b8c6d8", "#a9b8cc", "#b8c6d8", "#a9b8cc"] + } + } + } +}