From 23d946a68cfa6ac5c9c23121eb473b43e005b70e Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Mon, 23 Mar 2026 20:23:32 +0100 Subject: [PATCH] chore(meta): release v0.1.28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sprint 28: Character Visuals — character creation screen with live 3D preview, face-based body segmentation, solidified hair and clothing, skin/eye/eyebrow tinting, manifest-driven content, pre-push lint hooks. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 55 +++++++++++++++++++++++++++++++---------------- project.yaml | 4 ++-- server/Cargo.toml | 2 +- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d89557e4..8388f8769 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,26 +6,45 @@ Format based on [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] -### Fixed -- Character editor: color swatch closures now read the swatch's current color at click time, not the initial color at construction time -- Character editor: OK button on color picker modal correctly reads the active swatch color -- Character editor: D-165 color palette uses correct hardcoded hex values (HSL-derived muted tones) instead of incorrect HSV computation -- Character editor: hair/head/facial hair fallback asset IDs updated to match actual asset files (stubble removed, mutton_chops added) -- Character editor: overhead camera preset now near top-down (-80°) instead of horizontal (was 0°) -- Character editor: hair highlight swatch is now display-only (auto-derived from primary); no longer clickable -- Character editor: clothing/accessory dock containers stored as instance vars, eliminating fragile child-index traversal -- Character editor: asset scans now cached during tab build — randomise no longer re-scans on every keypress -- Character editor: accessory slot grid now filters by item name prefix per slot instead of showing all accessories everywhere +## [v0.1.28] — 2026-03-23 ### Added -- Surface Deform batch pipeline — headless Blender script that fits a reference clothing GLB to all 11 body types via Surface Deform modifier; confirmed HIGH reliability in Blender 5.0 with temp_override -- Initial clothing set — 5 placeholder items (coveralls_basic, jacket_utility, pants_cargo, shirt_henley, boots_work) with 11 body-type variants each (60 GLBs), coverage.json, and recolor masks -- Clothing authoring helper scripts — procedural reference mesh creator and metadata generator -- Character asset organization proposal — directory structure, naming conventions, and import pipeline for 11 body types (21 segments each), Quaternius Source tier mapping, CharacterVisualDescriptor contract, Surface Deform clothing pipeline, coverage.json format -- Body segment GLB library — 198 files (11 body types × 18 segments each) covering average, muscular, teen, thin, heavy, and child body types; thin/heavy/child are auto-scaled forks flagged for artist review -- Head template GLBs — 4 head meshes from Quaternius OnlyHead source, with 1024×1024 white mask PNGs (full-face tintable) -- Hair and accessory GLBs — ~20 hairstyle variants (including bald placeholder), 3 facial hair styles, 4 eyebrow sets, with mask PNGs for hair/facial hair -- Blender headless pipeline scripts — 8 scripts in tooling/ for body segmentation (BMesh API), head extraction, hair import, batch processing, and diagnostics +- Character creation screen with live 3D preview, 5-tab panel (Body, Hair, Clothing, Accessories, Debug), manifest-driven content +- Face-based body segmentation pipeline — exclusive assignment per face, no overlap, 19 segments (head, neck, torso_upper, torso, hips, arms, hands, legs, feet, eyes, eyebrows) +- 6 body types: average/muscular/teen m/f from Quaternius Source tier .blends +- Solidified hair (20mm) and clothing (25mm) for depth-correct layering over body +- Skin tinting with per-body-type embedded textures and white recolor mask +- Eye color with iris-only mask derived from T_Eye_Split.png green channel +- Eyebrow tinting from hair color via body segment shader +- Quaternius peasant outfit set (tunic, pants, shoes) across all body types +- Asset manifest (manifest.json) controlling all available content — replaces filesystem scanning +- Pre-push lint hook: GDScript parse + gdlint + gdformat (advisory) + Rust clippy/fmt +- Screenshot test automation with JSON config, 4-cardinal captures, quit-after-screenshot +- Debug tab with per-segment visibility toggles, All ON/OFF buttons +- Scroll zoom (cursor-toward on zoom in, head-bone targeting) +- Dynamic UI: tabs hidden when no content, clothing slots hidden when empty, facial hair hidden for female/teen/child +- Gender-aware randomizer +- 26 Q-records filed (Q-063 through Q-088) covering plugins, architecture patterns, and future features +- 15 tickets filed (#722-736) for tooling, UI, distribution, and QA improvements +- Araminta agent updated with Poly Haven + Quaternius asset sourcing rules + +### Fixed +- **ALPHA output in toon shaders caused all depth sorting failures** — removing ALPHA from toon.gdshader and toon_masked.gdshader fixed hair/head clipping, clothing/body clipping, and all z-fighting issues simultaneously +- Character editor: color swatch stale closure, modal OK child traversal, D-165 HSL palette, fallback asset IDs, overhead camera pitch, hair highlight display-only +- Archetype selection screen removed (v0.2 pivot — no Smuggler/Detective) +- GDScript strict typing errors (Variant inference on Dictionary.get(), JSON.parse_string()) +- TabContainer children vanishing on scene instantiation — moved to programmatic creation +- Hair meshes exported with proper skinning (was export_skins=False) +- Hair mask PNGs were solid black (Blender image API bug) — regenerated as white +- Rust formatting issues caught by new pre-push hook +- D-148 overhead camera angle convention clarified (0° → -80°) + +### Changed +- Body segmentation: torso split into torso_upper (spine_03 + clavicle) and torso (spine_01 + spine_02), hips (pelvis) as independent segment +- Clothing no longer hides body segments — solidify handles visual coverage, segment hiding reserved for amputation/prosthetics +- Randomise → Randomize (US English convention) +- pr-push skill: mandatory runtime smoke test before pushing +- pr-review skill: parse check before spawning reviewers, process gap flagging ## [v0.1.27] — 2026-03-17 diff --git a/project.yaml b/project.yaml index e8b7d7430..0cc8ca0b0 100644 --- a/project.yaml +++ b/project.yaml @@ -1,7 +1,7 @@ name: The Settled Reach -version: 0.1.27 +version: 0.1.28 repository: settled-reach -codename: commonwealth + description: > Top-down immersive sim with occlusion-based detection mechanics and diff --git a/server/Cargo.toml b/server/Cargo.toml index ca980be18..bd8fc7922 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "settled-reach-server" -version = "0.1.27" +version = "0.1.28" edition = "2021" [dependencies]