π¦ feat(web,rom): Prepare_For_Transfer script with an editable morph list - #981
Open
polynaut wants to merge 2 commits into
Open
π¦ feat(web,rom): Prepare_For_Transfer script with an editable morph list#981polynaut wants to merge 2 commits into
polynaut wants to merge 2 commits into
Conversation
β¦t (runtime v105) The DazToHue G8->G9 transfer guide starts with zeroing every G8/G8.1 morph that also exists on G9 (Areolae, Nipples, Navel, the Breasts dials, Voluptuous, Pelvic/Legs/Torso Length) - a by-hand dial hunt per character. The studio now ships that step as a visible Content Library script. - New bundled visible script Prepare_For_Transfer.dsa (+ generated tile artwork): zeroes matching dials on the selected G8/G8.1 figure using the runtime's two-namespace dial walk (DzMorph modifiers + node-owned float properties - the place a modifiers-only pass provably misses dials, v101). Locked dials are unlocked/zeroed/re-locked; an ERC-driven dial that still shows a value is NAMED in the summary (zero its controlling dial) instead of silently surviving. Morph assets on disk are never touched. - The morph list is editable: Settings -> new "Daz scripts" tab (settings.prepareTransferMorphs, defaults = the guide's list). Matching is CONTAINS on the normalized name/label (case/space/dash-blind), so "Nipple" is the family and "Breasts Size" also hits PBMBreastsSize. - The list is baked at install time (__DTH_TRANSFER_MORPHS__ token, JSON array literal) and joins the .dth-runtime-installed stamp, so saving an edited list re-installs without a version bump; the api saveSettings hook re-ensures the install after every save (no-op when nothing changed). - RUNTIME_VERSION 104 -> 105 per the runtime-hash guard's contract (history entry added); golden .dsa headers re-stamped - no generated character script changed beyond the marker. - Tests: settings default/round-trip cases, copyRuntimeFiles bake + edited- list re-install, a smoke spec driving defaults -> edit -> Save -> the baked file in the fake Daz library. Guide: bundled-scripts section + tools note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSDm9hBkod1w2KN8GAGGHu
Contributor
π Site preview deployed
Redeploys on every push to this PR. Production stays on GitHub Pages. |
β¦ match preview
The Settings -> Daz scripts entries were plain text inputs. Each row is now
the same MorphNameCell autocomplete the character editor's Advanced options
use, fed the MERGED G8 + G8.1 Genesis index (both, because the script targets
"a G8/8.1 figure", not one character's generation; scene-scanned dials stay
out - no scenePath). A pick inserts the internal name; free text still
commits as typed, since entries are contains-patterns.
Under each field, the same small info line the Advanced options carry: which
indexed dials the entry would zero ("Zeroes 2 dials: Nipples, Nipples Tip
Adjust"), an explicit "matches no dial" callout, and a one-time hint to run
Build Genesis Index when no G8/8.1 index exists yet.
- lib/rom/transfer-morphs.ts: the TS mirror of the baked script's normalize +
contains rule, unit-tested with the exact examples the script's comments
promise (a JS mirror of a .dsa rule gets pinned by the same cases).
- MorphNameCell: optional ariaLabel; the bordered form-field class moves next
to the cell (morphFieldClass) and frame-zero-fields imports it.
- Smoke: a second spec seeds a G8.1 index and drives suggestion -> pick ->
preview; the save-rebake spec now goes through the commit-on-blur cell.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSDm9hBkod1w2KN8GAGGHu
Owner
Author
|
Second commit: the morph entries are now the same MorphNameCell autocomplete the character editor's Advanced options use, fed the merged G8 + G8.1 Genesis index (scene-scanned dials excluded), with a match preview under each field β "Zeroes 2 dials: Nipples, Nipples Tip Adjust", an explicit "matches no dial" callout, and a hint to run Build Genesis Index when no G8/8.1 index exists. The contains rule is mirrored in |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The DazToHue G8βG9 transfer guide's first step β zero every G8/8.1 morph that also exists on G9 β was a by-hand dial hunt per character. The studio now ships it as a bundled Content Library script, with the morph list editable in Settings.
Prepare_For_Transfer (runtime v105)
Kill_Animation/Scan_Frames: select the G8/8.1 figure, run it, and every dial matching the list is zeroed. Uses the runtime's two-namespace dial walk (DzMorph modifiers + node-owned float properties β the pass a modifiers-only walk provably misses, measured in the v101 work). Locked dials are unlocked β zeroed β re-locked; an ERC-driven dial that still shows a value is named in the summary (zero its controlling dial) instead of silently surviving. Morph assets on disk are never touched; removing cloth/brows/lashes stays manual.Nippleis the family,Breasts Sizealso hitsPBMBreastsSize. Reset-to-defaults included.__DTH_TRANSFER_MORPHS__token and joins the.dth-runtime-installedstamp, so an edit re-installs on the next save/generate without a version bump; the apisaveSettingshook re-ensures the install (no-op when nothing changed)..dsadiffs are the version stamp only. The script tile artwork is a generated placeholder, same as Kill_Animation shipped with β swap in real art whenever.Verified / not verified
Full local gate green: typecheck, lint, all JS tests (472 rom + 86 ui + web), 218 smoke (incl. a new spec driving defaults β edit β Save β the baked file in the fake Daz library), guide build. No Rust changes. Never run in a real Daz Studio β the dial walk and clamp/lock dance reuse live-verified runtime patterns, but the acceptance check is a real run on a G8.1 character: the summary's zeroed/driven lists say whether the match list is right.
π€ Generated with Claude Code
https://claude.ai/code/session_01YSDm9hBkod1w2KN8GAGGHu