@felbrasil/dreamy 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +69 -2
- package/dist/api.d.ts +1 -0
- package/dist/api.js +2 -0
- package/dist/api.js.map +7 -0
- package/dist/chunks/chunk-72DMUKP3.js +1470 -0
- package/dist/chunks/chunk-72DMUKP3.js.map +7 -0
- package/dist/chunks/chunk-VZMBE5MV.js +5936 -0
- package/dist/chunks/chunk-VZMBE5MV.js.map +7 -0
- package/dist/chunks/chunk-ZU72KKME.js +8600 -0
- package/dist/chunks/chunk-ZU72KKME.js.map +7 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.js +34 -0
- package/dist/core.js.map +7 -0
- package/dist/dreamy_evaluator.wasm +0 -0
- package/dist/evaluator.d.ts +1 -0
- package/dist/evaluator.js +52 -0
- package/dist/evaluator.js.map +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7280 -0
- package/dist/index.js.map +7 -0
- package/dist/styles.css +1 -0
- package/dist/types/api/src/commands/command.d.ts +7 -0
- package/dist/types/api/src/commands/decal-commands.d.ts +35 -0
- package/dist/types/api/src/commands/palette-commands.d.ts +14 -0
- package/dist/types/api/src/commands/rig-commands.d.ts +229 -0
- package/dist/types/api/src/commands/scene-commands.d.ts +64 -0
- package/dist/types/api/src/commands/sculpt-commands.d.ts +111 -0
- package/dist/types/api/src/commands/stamp-spec.d.ts +3 -0
- package/dist/types/api/src/commands/target.d.ts +8 -0
- package/dist/types/api/src/creation-api.d.ts +52 -0
- package/dist/types/api/src/events/creation-event.d.ts +7 -0
- package/dist/types/api/src/events/decal-events.d.ts +20 -0
- package/dist/types/api/src/events/event-of.d.ts +6 -0
- package/dist/types/api/src/events/palette-events.d.ts +8 -0
- package/dist/types/api/src/events/rig-events.d.ts +161 -0
- package/dist/types/api/src/events/scene-events.d.ts +34 -0
- package/dist/types/api/src/events/sculpt-events.d.ts +53 -0
- package/dist/types/api/src/id.d.ts +1 -0
- package/dist/types/api/src/index.d.ts +31 -0
- package/dist/types/api/src/model/creation.d.ts +22 -0
- package/dist/types/api/src/model/decal.d.ts +48 -0
- package/dist/types/api/src/model/look.d.ts +56 -0
- package/dist/types/api/src/model/math.d.ts +18 -0
- package/dist/types/api/src/model/palette.d.ts +11 -0
- package/dist/types/api/src/model/rig.d.ts +125 -0
- package/dist/types/api/src/model/scene-object.d.ts +22 -0
- package/dist/types/api/src/model/sculpt.d.ts +13 -0
- package/dist/types/api/src/model/stamp.d.ts +53 -0
- package/dist/types/api/src/model/wing.d.ts +35 -0
- package/dist/types/api/src/ports/basic-ports.d.ts +7 -0
- package/dist/types/api/src/ports/evaluator.d.ts +62 -0
- package/dist/types/api/src/ports/persistence.d.ts +89 -0
- package/dist/types/api/src/ports/viewport.d.ts +125 -0
- package/dist/types/core/src/apply/body-part-added.d.ts +2 -0
- package/dist/types/core/src/apply/body-part-removed.d.ts +2 -0
- package/dist/types/core/src/apply/bone-removed.d.ts +3 -0
- package/dist/types/core/src/apply/bone-renamed.d.ts +2 -0
- package/dist/types/core/src/apply/bone-reparented.d.ts +2 -0
- package/dist/types/core/src/apply/bone-sizes-set.d.ts +3 -0
- package/dist/types/core/src/apply/bone-tags-set.d.ts +2 -0
- package/dist/types/core/src/apply/bone-transforms-set.d.ts +6 -0
- package/dist/types/core/src/apply/bones-added.d.ts +2 -0
- package/dist/types/core/src/apply/creature-generated.d.ts +3 -0
- package/dist/types/core/src/apply/decal-removed.d.ts +2 -0
- package/dist/types/core/src/apply/decals-added.d.ts +2 -0
- package/dist/types/core/src/apply/design-deleted.d.ts +2 -0
- package/dist/types/core/src/apply/design-saved.d.ts +2 -0
- package/dist/types/core/src/apply/flat-wings-set.d.ts +2 -0
- package/dist/types/core/src/apply/object-renamed.d.ts +2 -0
- package/dist/types/core/src/apply/object-reparented.d.ts +2 -0
- package/dist/types/core/src/apply/object-transforms-set.d.ts +2 -0
- package/dist/types/core/src/apply/objects-deleted.d.ts +2 -0
- package/dist/types/core/src/apply/objects-duplicated.d.ts +3 -0
- package/dist/types/core/src/apply/palette-color-set.d.ts +2 -0
- package/dist/types/core/src/apply/palette-reset.d.ts +2 -0
- package/dist/types/core/src/apply/part-grafted.d.ts +3 -0
- package/dist/types/core/src/apply/part-slot-swapped.d.ts +3 -0
- package/dist/types/core/src/apply/pivot-set.d.ts +2 -0
- package/dist/types/core/src/apply/pose-preset-applied.d.ts +3 -0
- package/dist/types/core/src/apply/pose-reset.d.ts +3 -0
- package/dist/types/core/src/apply/premade-applied.d.ts +3 -0
- package/dist/types/core/src/apply/region-blend-set.d.ts +3 -0
- package/dist/types/core/src/apply/rig-created.d.ts +2 -0
- package/dist/types/core/src/apply/rig-mirror-set.d.ts +2 -0
- package/dist/types/core/src/apply/rig-mode-set.d.ts +2 -0
- package/dist/types/core/src/apply/sculpt-created.d.ts +2 -0
- package/dist/types/core/src/apply/sculpt-look-set.d.ts +3 -0
- package/dist/types/core/src/apply/smear-group-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamp-placements-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamp-props-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamps-added.d.ts +2 -0
- package/dist/types/core/src/apply/stamps-removed.d.ts +2 -0
- package/dist/types/core/src/apply/symmetry-set-for-all.d.ts +2 -0
- package/dist/types/core/src/atoms/check/check.d.ts +7 -0
- package/dist/types/core/src/atoms/decal/decal-limits.d.ts +6 -0
- package/dist/types/core/src/atoms/decal/decal-problem.d.ts +4 -0
- package/dist/types/core/src/atoms/decal/design-problem.d.ts +4 -0
- package/dist/types/core/src/atoms/look/catalogs.d.ts +9 -0
- package/dist/types/core/src/atoms/look/default-look.d.ts +4 -0
- package/dist/types/core/src/atoms/look/look-problem.d.ts +7 -0
- package/dist/types/core/src/atoms/look/merge-look.d.ts +3 -0
- package/dist/types/core/src/atoms/math/mat4.d.ts +14 -0
- package/dist/types/core/src/atoms/math/quat.d.ts +18 -0
- package/dist/types/core/src/atoms/math/transform.d.ts +7 -0
- package/dist/types/core/src/atoms/math/vec3.d.ts +18 -0
- package/dist/types/core/src/atoms/palette/default-palette.d.ts +4 -0
- package/dist/types/core/src/atoms/palette/is-color-ref.d.ts +2 -0
- package/dist/types/core/src/atoms/palette/poc-color-ref.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/bone-matrices.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/bone-region.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/bone-role.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/bone-size.d.ts +7 -0
- package/dist/types/core/src/atoms/rig/compose-local.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/find-rig.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/mirror-partner.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/mirror-sculpt.d.ts +9 -0
- package/dist/types/core/src/atoms/rig/mirror-transform.d.ts +9 -0
- package/dist/types/core/src/atoms/rig/partner-target.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/pose-presets.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/pose-rule.d.ts +48 -0
- package/dist/types/core/src/atoms/rig/pose-template-rules.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/rebase-pose.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/resize-bones.d.ts +12 -0
- package/dist/types/core/src/atoms/rig/rig-extent.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/side-from-name.d.ts +7 -0
- package/dist/types/core/src/atoms/rig/size-frame.d.ts +18 -0
- package/dist/types/core/src/atoms/rig/with-slot-parts.d.ts +9 -0
- package/dist/types/core/src/atoms/scene/copy-with-new-ids.d.ts +7 -0
- package/dist/types/core/src/atoms/scene/object-tree.d.ts +8 -0
- package/dist/types/core/src/atoms/scene/place-in-order.d.ts +7 -0
- package/dist/types/core/src/atoms/scene/unique-name.d.ts +4 -0
- package/dist/types/core/src/atoms/scene/world-matrix.d.ts +4 -0
- package/dist/types/core/src/atoms/sculpt/all-sculpts.d.ts +3 -0
- package/dist/types/core/src/atoms/sculpt/is-wing-target.d.ts +3 -0
- package/dist/types/core/src/atoms/sculpt/target-sculpt.d.ts +10 -0
- package/dist/types/core/src/atoms/sculpt/update-target.d.ts +8 -0
- package/dist/types/core/src/atoms/stamp/apply-stamp-props.d.ts +11 -0
- package/dist/types/core/src/atoms/stamp/clamp-symmetry.d.ts +11 -0
- package/dist/types/core/src/atoms/stamp/clean-props.d.ts +3 -0
- package/dist/types/core/src/atoms/stamp/emptied-groups.d.ts +3 -0
- package/dist/types/core/src/atoms/stamp/move-locked-groups.d.ts +12 -0
- package/dist/types/core/src/atoms/stamp/normalize-base.d.ts +6 -0
- package/dist/types/core/src/atoms/stamp/resolve-stamp-props.d.ts +14 -0
- package/dist/types/core/src/atoms/stamp/smear.d.ts +15 -0
- package/dist/types/core/src/atoms/stamp/stamp-problem.d.ts +7 -0
- package/dist/types/core/src/atoms/wing/wing-problem.d.ts +6 -0
- package/dist/types/core/src/create-creation-api.d.ts +12 -0
- package/dist/types/core/src/decide.d.ts +4 -0
- package/dist/types/core/src/empty-creation.d.ts +2 -0
- package/dist/types/core/src/fold.d.ts +6 -0
- package/dist/types/core/src/index.d.ts +9 -0
- package/dist/types/core/src/molecules/add-body-part.d.ts +8 -0
- package/dist/types/core/src/molecules/add-bone.d.ts +8 -0
- package/dist/types/core/src/molecules/add-decals.d.ts +4 -0
- package/dist/types/core/src/molecules/add-stamps.d.ts +8 -0
- package/dist/types/core/src/molecules/apply-pose-preset.d.ts +4 -0
- package/dist/types/core/src/molecules/apply-premade.d.ts +9 -0
- package/dist/types/core/src/molecules/auto-tag-sides.d.ts +4 -0
- package/dist/types/core/src/molecules/create-rig.d.ts +4 -0
- package/dist/types/core/src/molecules/create-sculpt.d.ts +4 -0
- package/dist/types/core/src/molecules/delete-design.d.ts +4 -0
- package/dist/types/core/src/molecules/delete-objects.d.ts +4 -0
- package/dist/types/core/src/molecules/duplicate-objects.d.ts +6 -0
- package/dist/types/core/src/molecules/generate-creature.d.ts +7 -0
- package/dist/types/core/src/molecules/graft-part.d.ts +4 -0
- package/dist/types/core/src/molecules/mirror-objects.d.ts +7 -0
- package/dist/types/core/src/molecules/molecule.d.ts +17 -0
- package/dist/types/core/src/molecules/remove-body-part.d.ts +3 -0
- package/dist/types/core/src/molecules/remove-bone.d.ts +4 -0
- package/dist/types/core/src/molecules/remove-decal.d.ts +3 -0
- package/dist/types/core/src/molecules/remove-smear-group.d.ts +4 -0
- package/dist/types/core/src/molecules/remove-stamps.d.ts +4 -0
- package/dist/types/core/src/molecules/rename-bone.d.ts +3 -0
- package/dist/types/core/src/molecules/rename-object.d.ts +3 -0
- package/dist/types/core/src/molecules/reparent-bone.d.ts +4 -0
- package/dist/types/core/src/molecules/reparent-object.d.ts +4 -0
- package/dist/types/core/src/molecules/reset-palette.d.ts +3 -0
- package/dist/types/core/src/molecules/reset-pose.d.ts +3 -0
- package/dist/types/core/src/molecules/save-design.d.ts +4 -0
- package/dist/types/core/src/molecules/set-bone-sizes.d.ts +8 -0
- package/dist/types/core/src/molecules/set-bone-tags.d.ts +4 -0
- package/dist/types/core/src/molecules/set-bone-transforms.d.ts +7 -0
- package/dist/types/core/src/molecules/set-flat-wings.d.ts +4 -0
- package/dist/types/core/src/molecules/set-object-transforms.d.ts +3 -0
- package/dist/types/core/src/molecules/set-palette-color.d.ts +3 -0
- package/dist/types/core/src/molecules/set-pivot.d.ts +3 -0
- package/dist/types/core/src/molecules/set-region-blend.d.ts +4 -0
- package/dist/types/core/src/molecules/set-rig-mirror.d.ts +3 -0
- package/dist/types/core/src/molecules/set-rig-mode.d.ts +3 -0
- package/dist/types/core/src/molecules/set-sculpt-look.d.ts +7 -0
- package/dist/types/core/src/molecules/set-smear-group.d.ts +4 -0
- package/dist/types/core/src/molecules/set-stamp-placements.d.ts +4 -0
- package/dist/types/core/src/molecules/set-stamp-props.d.ts +3 -0
- package/dist/types/core/src/molecules/set-symmetry-for-all.d.ts +4 -0
- package/dist/types/core/src/molecules/swap-part-slot.d.ts +7 -0
- package/dist/types/core/src/premades/ant-bake.d.ts +2 -0
- package/dist/types/core/src/premades/bake-authoring.d.ts +35 -0
- package/dist/types/core/src/premades/bake-types.d.ts +65 -0
- package/dist/types/core/src/premades/baked-part-for.d.ts +11 -0
- package/dist/types/core/src/premades/bee-bake.d.ts +2 -0
- package/dist/types/core/src/premades/bird-bake.d.ts +2 -0
- package/dist/types/core/src/premades/body-stamps-for-bone.d.ts +14 -0
- package/dist/types/core/src/premades/bone-tree.d.ts +15 -0
- package/dist/types/core/src/premades/build-premade-rig.d.ts +23 -0
- package/dist/types/core/src/premades/build-template.d.ts +6 -0
- package/dist/types/core/src/premades/centipede-bake.d.ts +2 -0
- package/dist/types/core/src/premades/coat-stamps.d.ts +3 -0
- package/dist/types/core/src/premades/crab-bake.d.ts +2 -0
- package/dist/types/core/src/premades/dragon-bake.d.ts +2 -0
- package/dist/types/core/src/premades/face-decals.d.ts +17 -0
- package/dist/types/core/src/premades/fish-bake.d.ts +2 -0
- package/dist/types/core/src/premades/fit-part-slot.d.ts +21 -0
- package/dist/types/core/src/premades/generate-creature.d.ts +21 -0
- package/dist/types/core/src/premades/gorilla-bake.d.ts +2 -0
- package/dist/types/core/src/premades/graft-slot.d.ts +34 -0
- package/dist/types/core/src/premades/humanoid-bake.d.ts +2 -0
- package/dist/types/core/src/premades/insect6-bake.d.ts +2 -0
- package/dist/types/core/src/premades/jellyfish-bake.d.ts +2 -0
- package/dist/types/core/src/premades/lizard-bake.d.ts +2 -0
- package/dist/types/core/src/premades/make-baked-part.d.ts +9 -0
- package/dist/types/core/src/premades/make-body-part.d.ts +9 -0
- package/dist/types/core/src/premades/make-flat-part.d.ts +13 -0
- package/dist/types/core/src/premades/part-context.d.ts +20 -0
- package/dist/types/core/src/premades/part-kits.d.ts +36 -0
- package/dist/types/core/src/premades/part-slots.d.ts +17 -0
- package/dist/types/core/src/premades/part-stamp.d.ts +13 -0
- package/dist/types/core/src/premades/part-styles.d.ts +44 -0
- package/dist/types/core/src/premades/premade-fit.d.ts +18 -0
- package/dist/types/core/src/premades/premade-infos.d.ts +3 -0
- package/dist/types/core/src/premades/reseat-attachments.d.ts +31 -0
- package/dist/types/core/src/premades/rig-builder.d.ts +51 -0
- package/dist/types/core/src/premades/rodent-bake.d.ts +2 -0
- package/dist/types/core/src/premades/scorpion-bake.d.ts +2 -0
- package/dist/types/core/src/premades/shark-bake.d.ts +2 -0
- package/dist/types/core/src/premades/sitter-bake.d.ts +3 -0
- package/dist/types/core/src/premades/skeleton-bakes.d.ts +4 -0
- package/dist/types/core/src/premades/snake-bake.d.ts +2 -0
- package/dist/types/core/src/premades/spider-bake.d.ts +2 -0
- package/dist/types/core/src/premades/stamps-box.d.ts +9 -0
- package/dist/types/core/src/premades/style-for-bone.d.ts +7 -0
- package/dist/types/core/src/premades/swap-slot.d.ts +13 -0
- package/dist/types/core/src/premades/template-catalog.d.ts +20 -0
- package/dist/types/core/src/premades/template-color.d.ts +9 -0
- package/dist/types/core/src/premades/turtle-bake.d.ts +2 -0
- package/dist/types/core/src/premades/variants/aquatic-variants.d.ts +16 -0
- package/dist/types/core/src/premades/variants/coat-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/ear-variants.d.ts +8 -0
- package/dist/types/core/src/premades/variants/fantasy-more-variants.d.ts +3 -0
- package/dist/types/core/src/premades/variants/fantasy-variants.d.ts +17 -0
- package/dist/types/core/src/premades/variants/head-variants.d.ts +9 -0
- package/dist/types/core/src/premades/variants/horn-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/index.d.ts +10 -0
- package/dist/types/core/src/premades/variants/land-variants.d.ts +3 -0
- package/dist/types/core/src/premades/variants/leg-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/part-variant.d.ts +14 -0
- package/dist/types/core/src/premades/variants/tail-variants.d.ts +6 -0
- package/dist/types/core/src/premades/variants/variant-authoring.d.ts +29 -0
- package/dist/types/core/src/premades/whale-bake.d.ts +2 -0
- package/dist/types/core/src/premades/wing-defaults.d.ts +4 -0
- package/dist/types/core/src/premades/wing-frame.d.ts +10 -0
- package/dist/types/core/src/premades/wolf-bake.d.ts +2 -0
- package/dist/types/core/src/premades/worm-bake.d.ts +2 -0
- package/dist/types/evaluator/src/abi.d.ts +64 -0
- package/dist/types/evaluator/src/chunks.d.ts +53 -0
- package/dist/types/evaluator/src/index.d.ts +11 -0
- package/dist/types/evaluator/src/prep/colors.d.ts +11 -0
- package/dist/types/evaluator/src/prep/mat3.d.ts +13 -0
- package/dist/types/evaluator/src/prep/pack.d.ts +23 -0
- package/dist/types/evaluator/src/prep/props.d.ts +16 -0
- package/dist/types/evaluator/src/prep/symmetry.d.ts +23 -0
- package/dist/types/evaluator/src/reference/core.d.ts +3 -0
- package/dist/types/evaluator/src/reference/mesher.d.ts +22 -0
- package/dist/types/evaluator/src/reference/skin.d.ts +8 -0
- package/dist/types/evaluator/src/session.d.ts +21 -0
- package/dist/types/evaluator/src/wasm/core.d.ts +9 -0
- package/dist/types/evaluator/src/worker/client.d.ts +28 -0
- package/dist/types/evaluator/src/worker/host.d.ts +8 -0
- package/dist/types/evaluator/src/worker/protocol.d.ts +39 -0
- package/dist/types/evaluator/src/worker/spawn.d.ts +6 -0
- package/dist/types/evaluator/src/worker/worker-inline.d.ts +1 -0
- package/dist/types/evaluator/src/worker/worker.d.ts +1 -0
- package/dist/types/module/src/index.d.ts +2 -0
- package/dist/types/module/src/ui/atoms/action-button.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/badge.d.ts +9 -0
- package/dist/types/module/src/ui/atoms/checkbox.d.ts +6 -0
- package/dist/types/module/src/ui/atoms/color-input.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/hex-chip.d.ts +5 -0
- package/dist/types/module/src/ui/atoms/icon-button.d.ts +14 -0
- package/dist/types/module/src/ui/atoms/icon.d.ts +8 -0
- package/dist/types/module/src/ui/atoms/kbd.d.ts +4 -0
- package/dist/types/module/src/ui/atoms/match-button.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/number-input.d.ts +11 -0
- package/dist/types/module/src/ui/atoms/pill-button.d.ts +11 -0
- package/dist/types/module/src/ui/atoms/range-input.d.ts +17 -0
- package/dist/types/module/src/ui/atoms/select-input.d.ts +12 -0
- package/dist/types/module/src/ui/atoms/separator.d.ts +2 -0
- package/dist/types/module/src/ui/atoms/side-button.d.ts +13 -0
- package/dist/types/module/src/ui/atoms/swatch.d.ts +13 -0
- package/dist/types/module/src/ui/atoms/tool-button.d.ts +22 -0
- package/dist/types/module/src/ui/hooks/editor-actions.d.ts +50 -0
- package/dist/types/module/src/ui/hooks/editor-context.d.ts +37 -0
- package/dist/types/module/src/ui/hooks/use-compact.d.ts +2 -0
- package/dist/types/module/src/ui/hooks/use-editor-controller.d.ts +17 -0
- package/dist/types/module/src/ui/hooks/use-keyboard.d.ts +11 -0
- package/dist/types/module/src/ui/lib/catalog.d.ts +76 -0
- package/dist/types/module/src/ui/lib/colors.d.ts +15 -0
- package/dist/types/module/src/ui/lib/decals.d.ts +6 -0
- package/dist/types/module/src/ui/lib/design-geometry.d.ts +60 -0
- package/dist/types/module/src/ui/lib/math.d.ts +18 -0
- package/dist/types/module/src/ui/lib/placement.d.ts +8 -0
- package/dist/types/module/src/ui/lib/scene.d.ts +51 -0
- package/dist/types/module/src/ui/lib/symmetry.d.ts +5 -0
- package/dist/types/module/src/ui/lib/targets.d.ts +28 -0
- package/dist/types/module/src/ui/lib/view-state.d.ts +74 -0
- package/dist/types/module/src/ui/molecules/axis-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/color-field.d.ts +14 -0
- package/dist/types/module/src/ui/molecules/count-stepper.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/floating-panel.d.ts +26 -0
- package/dist/types/module/src/ui/molecules/help-row.d.ts +8 -0
- package/dist/types/module/src/ui/molecules/inline-edit.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/list-row.d.ts +25 -0
- package/dist/types/module/src/ui/molecules/modal.d.ts +11 -0
- package/dist/types/module/src/ui/molecules/mode-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/scroll-row.d.ts +10 -0
- package/dist/types/module/src/ui/molecules/slider-row.d.ts +16 -0
- package/dist/types/module/src/ui/molecules/swatch-row.d.ts +11 -0
- package/dist/types/module/src/ui/molecules/tab-bar.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/toolbar-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/toolbar.d.ts +10 -0
- package/dist/types/module/src/ui/molecules/vec3-field.d.ts +10 -0
- package/dist/types/module/src/ui/organisms/bone-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/bone-size-sliders.d.ts +9 -0
- package/dist/types/module/src/ui/organisms/category-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/decal-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/decal-editor.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/fleck-style-tab.d.ts +7 -0
- package/dist/types/module/src/ui/organisms/git-sync-panel.d.ts +10 -0
- package/dist/types/module/src/ui/organisms/help-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/material-tab.d.ts +3 -0
- package/dist/types/module/src/ui/organisms/object-list-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/palette-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/parts-tab.d.ts +26 -0
- package/dist/types/module/src/ui/organisms/pattern-tab.d.ts +3 -0
- package/dist/types/module/src/ui/organisms/pose-tab.d.ts +8 -0
- package/dist/types/module/src/ui/organisms/premade-picker.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/properties-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/region-blends.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/rendering-bar.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/rig-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/scenes-modal.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/select-hint.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/shape-list-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/side-dock.d.ts +4 -0
- package/dist/types/module/src/ui/organisms/stamp-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/stamp-props-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/stamp-size-panel.d.ts +4 -0
- package/dist/types/module/src/ui/organisms/stats-badge.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/style-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/symmetry-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/toast.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/token-guide.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/touch-mods.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/transform-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/transform-tab.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/utilities-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/viewport-host.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/voxel-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/wing-tab.d.ts +10 -0
- package/dist/types/module/src/ui/pages/editor-page.d.ts +9 -0
- package/dist/types/module/src/ui/templates/editor-shell.d.ts +2 -0
- package/dist/types/studio/src/browser-files.d.ts +3 -0
- package/dist/types/studio/src/clock.d.ts +2 -0
- package/dist/types/studio/src/creation-file.d.ts +21 -0
- package/dist/types/studio/src/git-remote.d.ts +36 -0
- package/dist/types/studio/src/git-sync.d.ts +33 -0
- package/dist/types/studio/src/ids.d.ts +3 -0
- package/dist/types/studio/src/index.d.ts +15 -0
- package/dist/types/studio/src/indexed-db-library.d.ts +2 -0
- package/dist/types/studio/src/library-persistence.d.ts +29 -0
- package/dist/types/studio/src/library-sync.d.ts +29 -0
- package/dist/types/studio/src/preferences.d.ts +9 -0
- package/dist/types/studio/src/seed.d.ts +3 -0
- package/dist/types/studio/src/studio.d.ts +17 -0
- package/dist/types/viewport/src/create-viewport.d.ts +10 -0
- package/dist/types/viewport/src/decals/builtin-art.d.ts +19 -0
- package/dist/types/viewport/src/decals/builtin-docs.d.ts +7 -0
- package/dist/types/viewport/src/decals/decal-atlas.d.ts +37 -0
- package/dist/types/viewport/src/decals/decal-catalog.d.ts +17 -0
- package/dist/types/viewport/src/decals/decal-glsl.d.ts +2 -0
- package/dist/types/viewport/src/decals/decal-limits.d.ts +11 -0
- package/dist/types/viewport/src/decals/decal-uniforms.d.ts +40 -0
- package/dist/types/viewport/src/decals/design-raster.d.ts +8 -0
- package/dist/types/viewport/src/decals/interior-thumbs.d.ts +6 -0
- package/dist/types/viewport/src/index.d.ts +1 -0
- package/dist/types/viewport/src/interaction/bone-tool.d.ts +13 -0
- package/dist/types/viewport/src/interaction/bones-visible.d.ts +7 -0
- package/dist/types/viewport/src/interaction/cursor.d.ts +3 -0
- package/dist/types/viewport/src/interaction/decal-tool.d.ts +18 -0
- package/dist/types/viewport/src/interaction/esc-hold.d.ts +13 -0
- package/dist/types/viewport/src/interaction/ghost-geometry.d.ts +6 -0
- package/dist/types/viewport/src/interaction/gizmo.d.ts +34 -0
- package/dist/types/viewport/src/interaction/interaction-context.d.ts +41 -0
- package/dist/types/viewport/src/interaction/marquee.d.ts +8 -0
- package/dist/types/viewport/src/interaction/pivot-helper.d.ts +13 -0
- package/dist/types/viewport/src/interaction/select-tool.d.ts +30 -0
- package/dist/types/viewport/src/interaction/selection-boxes.d.ts +11 -0
- package/dist/types/viewport/src/interaction/stamp-tool.d.ts +41 -0
- package/dist/types/viewport/src/interaction/stamp-wires.d.ts +18 -0
- package/dist/types/viewport/src/interaction/surface-hit.d.ts +14 -0
- package/dist/types/viewport/src/materials/fleck-material.d.ts +69 -0
- package/dist/types/viewport/src/materials/global-uniforms.d.ts +15 -0
- package/dist/types/viewport/src/materials/skin.d.ts +18 -0
- package/dist/types/viewport/src/materials/wing-material.d.ts +21 -0
- package/dist/types/viewport/src/math/colors.d.ts +29 -0
- package/dist/types/viewport/src/math/convert.d.ts +15 -0
- package/dist/types/viewport/src/math/decal-pose.d.ts +7 -0
- package/dist/types/viewport/src/math/lod.d.ts +16 -0
- package/dist/types/viewport/src/math/picking.d.ts +32 -0
- package/dist/types/viewport/src/math/pixel-palette.d.ts +15 -0
- package/dist/types/viewport/src/math/screen.d.ts +26 -0
- package/dist/types/viewport/src/math/skeleton-math.d.ts +32 -0
- package/dist/types/viewport/src/math/smear.d.ts +20 -0
- package/dist/types/viewport/src/math/symmetry.d.ts +21 -0
- package/dist/types/viewport/src/objects/default-look.d.ts +3 -0
- package/dist/types/viewport/src/objects/mesh-driver.d.ts +26 -0
- package/dist/types/viewport/src/objects/mesh-key.d.ts +8 -0
- package/dist/types/viewport/src/objects/rig-view.d.ts +31 -0
- package/dist/types/viewport/src/objects/scene-views.d.ts +53 -0
- package/dist/types/viewport/src/objects/sculpt-view.d.ts +66 -0
- package/dist/types/viewport/src/objects/view-context.d.ts +19 -0
- package/dist/types/viewport/src/objects/wing-view.d.ts +27 -0
- package/dist/types/viewport/src/rig/bone-viz.d.ts +13 -0
- package/dist/types/viewport/src/scene/camera-motion.d.ts +10 -0
- package/dist/types/viewport/src/scene/camera-sun.d.ts +3 -0
- package/dist/types/viewport/src/scene/environment.d.ts +3 -0
- package/dist/types/viewport/src/scene/frame-camera.d.ts +10 -0
- package/dist/types/viewport/src/scene/play-mode.d.ts +9 -0
- package/dist/types/viewport/src/scene/render-pipeline.d.ts +26 -0
- package/dist/types/viewport/src/scene/render-settings.d.ts +18 -0
- package/dist/types/viewport/src/scene/resolve-frag.d.ts +3 -0
- package/dist/types/viewport/src/scene/stage.d.ts +38 -0
- package/dist/types/viewport/src/scene/stress-test.d.ts +6 -0
- package/dist/types/viewport/src/wings/wing-mesh.d.ts +19 -0
- package/dist/types/viewport/src/wings/wing-outlines.d.ts +32 -0
- package/dist/types/viewport/src/wings/wing-pattern.d.ts +7 -0
- package/dist/viewport.d.ts +1 -0
- package/dist/viewport.js +8 -0
- package/dist/viewport.js.map +7 -0
- package/package.json +74 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../core/src/atoms/rig/bone-role.ts", "../../../core/src/atoms/rig/bone-region.ts", "../../../core/src/atoms/palette/default-palette.ts", "../../../core/src/atoms/rig/mirror-partner.ts", "../../../core/src/atoms/stamp/clamp-symmetry.ts", "../../../core/src/atoms/math/vec3.ts", "../../../core/src/atoms/stamp/smear.ts", "../../../core/src/empty-creation.ts", "../../../core/src/atoms/math/quat.ts", "../../../core/src/atoms/rig/mirror-transform.ts", "../../../core/src/atoms/rig/mirror-sculpt.ts", "../../../core/src/atoms/sculpt/update-target.ts", "../../../core/src/apply/body-part-added.ts", "../../../core/src/apply/body-part-removed.ts", "../../../core/src/atoms/math/mat4.ts", "../../../core/src/atoms/rig/compose-local.ts", "../../../core/src/apply/bone-removed.ts", "../../../core/src/apply/bone-renamed.ts", "../../../core/src/apply/bone-reparented.ts", "../../../core/src/apply/bone-tags-set.ts", "../../../core/src/atoms/rig/rebase-pose.ts", "../../../core/src/apply/bone-transforms-set.ts", "../../../core/src/apply/bones-added.ts", "../../../core/src/apply/decal-removed.ts", "../../../core/src/apply/decals-added.ts", "../../../core/src/apply/design-deleted.ts", "../../../core/src/apply/design-saved.ts", "../../../core/src/apply/flat-wings-set.ts", "../../../core/src/apply/object-renamed.ts", "../../../core/src/atoms/scene/place-in-order.ts", "../../../core/src/apply/object-reparented.ts", "../../../core/src/apply/object-transforms-set.ts", "../../../core/src/apply/objects-deleted.ts", "../../../core/src/apply/objects-duplicated.ts", "../../../core/src/apply/palette-color-set.ts", "../../../core/src/apply/palette-reset.ts", "../../../core/src/apply/pivot-set.ts", "../../../core/src/apply/pose-reset.ts", "../../../core/src/atoms/rig/bone-matrices.ts", "../../../core/src/atoms/rig/bone-size.ts", "../../../core/src/atoms/rig/resize-bones.ts", "../../../core/src/apply/bone-sizes-set.ts", "../../../core/src/atoms/look/default-look.ts", "../../../core/src/atoms/math/transform.ts", "../../../core/src/atoms/rig/with-slot-parts.ts", "../../../core/src/atoms/rig/rig-extent.ts", "../../../core/src/atoms/rig/size-frame.ts", "../../../core/src/premades/bone-tree.ts", "../../../core/src/atoms/decal/decal-limits.ts", "../../../core/src/premades/rig-builder.ts", "../../../core/src/premades/build-template.ts", "../../../core/src/premades/stamps-box.ts", "../../../core/src/atoms/palette/poc-color-ref.ts", "../../../core/src/premades/template-color.ts", "../../../core/src/premades/face-decals.ts", "../../../core/src/premades/baked-part-for.ts", "../../../core/src/premades/part-styles.ts", "../../../core/src/premades/body-stamps-for-bone.ts", "../../../core/src/atoms/look/catalogs.ts", "../../../core/src/premades/coat-stamps.ts", "../../../core/src/premades/wing-frame.ts", "../../../core/src/premades/wing-defaults.ts", "../../../core/src/premades/make-flat-part.ts", "../../../core/src/premades/make-baked-part.ts", "../../../core/src/premades/style-for-bone.ts", "../../../core/src/premades/make-body-part.ts", "../../../core/src/premades/build-premade-rig.ts", "../../../core/src/premades/premade-fit.ts", "../../../core/src/premades/part-slots.ts", "../../../core/src/premades/bake-authoring.ts", "../../../core/src/premades/ant-bake.ts", "../../../core/src/premades/bee-bake.ts", "../../../core/src/premades/bird-bake.ts", "../../../core/src/premades/centipede-bake.ts", "../../../core/src/premades/crab-bake.ts", "../../../core/src/premades/gorilla-bake.ts", "../../../core/src/premades/humanoid-bake.ts", "../../../core/src/premades/insect6-bake.ts", "../../../core/src/premades/scorpion-bake.ts", "../../../core/src/premades/dragon-bake.ts", "../../../core/src/premades/fish-bake.ts", "../../../core/src/premades/jellyfish-bake.ts", "../../../core/src/premades/shark-bake.ts", "../../../core/src/premades/whale-bake.ts", "../../../core/src/premades/spider-bake.ts", "../../../core/src/premades/lizard-bake.ts", "../../../core/src/premades/rodent-bake.ts", "../../../core/src/premades/sitter-bake.ts", "../../../core/src/premades/snake-bake.ts", "../../../core/src/premades/turtle-bake.ts", "../../../core/src/premades/wolf-bake.ts", "../../../core/src/premades/worm-bake.ts", "../../../core/src/premades/skeleton-bakes.ts", "../../../core/src/premades/template-catalog.ts", "../../../core/src/premades/variants/variant-authoring.ts", "../../../core/src/premades/variants/head-variants.ts", "../../../core/src/premades/variants/aquatic-variants.ts", "../../../core/src/premades/variants/coat-variants.ts", "../../../core/src/premades/variants/ear-variants.ts", "../../../core/src/premades/variants/horn-variants.ts", "../../../core/src/premades/variants/leg-variants.ts", "../../../core/src/premades/variants/tail-variants.ts", "../../../core/src/premades/variants/fantasy-variants.ts", "../../../core/src/premades/variants/fantasy-more-variants.ts", "../../../core/src/premades/variants/land-variants.ts", "../../../core/src/premades/variants/index.ts", "../../../core/src/premades/part-kits.ts", "../../../core/src/premades/fit-part-slot.ts", "../../../core/src/premades/reseat-attachments.ts", "../../../core/src/premades/graft-slot.ts", "../../../core/src/premades/swap-slot.ts", "../../../core/src/apply/part-slot-swapped.ts", "../../../core/src/apply/creature-generated.ts", "../../../core/src/apply/part-grafted.ts", "../../../core/src/apply/pose-preset-applied.ts", "../../../core/src/apply/premade-applied.ts", "../../../core/src/apply/region-blend-set.ts", "../../../core/src/apply/rig-created.ts", "../../../core/src/apply/rig-mirror-set.ts", "../../../core/src/apply/rig-mode-set.ts", "../../../core/src/apply/sculpt-created.ts", "../../../core/src/atoms/look/merge-look.ts", "../../../core/src/apply/sculpt-look-set.ts", "../../../core/src/atoms/stamp/apply-stamp-props.ts", "../../../core/src/atoms/stamp/normalize-base.ts", "../../../core/src/apply/smear-group-set.ts", "../../../core/src/apply/stamp-placements-set.ts", "../../../core/src/apply/stamp-props-set.ts", "../../../core/src/apply/stamps-added.ts", "../../../core/src/apply/stamps-removed.ts", "../../../core/src/apply/symmetry-set-for-all.ts", "../../../core/src/fold.ts", "../../../core/src/atoms/rig/find-rig.ts", "../../../core/src/molecules/molecule.ts", "../../../core/src/molecules/add-body-part.ts", "../../../core/src/atoms/scene/unique-name.ts", "../../../core/src/molecules/add-bone.ts", "../../../core/src/atoms/check/check.ts", "../../../core/src/atoms/palette/is-color-ref.ts", "../../../core/src/atoms/look/look-problem.ts", "../../../core/src/atoms/decal/decal-problem.ts", "../../../core/src/atoms/sculpt/target-sculpt.ts", "../../../core/src/molecules/add-decals.ts", "../../../core/src/atoms/stamp/stamp-problem.ts", "../../../core/src/molecules/add-stamps.ts", "../../../core/src/atoms/scene/object-tree.ts", "../../../core/src/molecules/apply-premade.ts", "../../../core/src/atoms/rig/side-from-name.ts", "../../../core/src/molecules/auto-tag-sides.ts", "../../../core/src/molecules/create-rig.ts", "../../../core/src/molecules/create-sculpt.ts", "../../../core/src/atoms/sculpt/all-sculpts.ts", "../../../core/src/molecules/delete-design.ts", "../../../core/src/molecules/delete-objects.ts", "../../../core/src/atoms/scene/copy-with-new-ids.ts", "../../../core/src/molecules/duplicate-objects.ts", "../../../core/src/molecules/mirror-objects.ts", "../../../core/src/molecules/remove-body-part.ts", "../../../core/src/molecules/remove-bone.ts", "../../../core/src/molecules/remove-decal.ts", "../../../core/src/molecules/remove-smear-group.ts", "../../../core/src/atoms/stamp/emptied-groups.ts", "../../../core/src/molecules/remove-stamps.ts", "../../../core/src/molecules/rename-bone.ts", "../../../core/src/molecules/rename-object.ts", "../../../core/src/molecules/reparent-bone.ts", "../../../core/src/atoms/scene/world-matrix.ts", "../../../core/src/molecules/reparent-object.ts", "../../../core/src/molecules/reset-palette.ts", "../../../core/src/molecules/reset-pose.ts", "../../../core/src/atoms/rig/pose-rule.ts", "../../../core/src/atoms/rig/pose-template-rules.ts", "../../../core/src/atoms/rig/pose-presets.ts", "../../../core/src/molecules/apply-pose-preset.ts", "../../../core/src/molecules/set-bone-sizes.ts", "../../../core/src/molecules/swap-part-slot.ts", "../../../core/src/premades/premade-infos.ts", "../../../core/src/premades/generate-creature.ts", "../../../core/src/molecules/generate-creature.ts", "../../../core/src/molecules/graft-part.ts", "../../../core/src/atoms/decal/design-problem.ts", "../../../core/src/molecules/save-design.ts", "../../../core/src/molecules/set-bone-tags.ts", "../../../core/src/molecules/set-bone-transforms.ts", "../../../core/src/atoms/wing/wing-problem.ts", "../../../core/src/molecules/set-flat-wings.ts", "../../../core/src/molecules/set-object-transforms.ts", "../../../core/src/molecules/set-palette-color.ts", "../../../core/src/molecules/set-pivot.ts", "../../../core/src/molecules/set-region-blend.ts", "../../../core/src/molecules/set-rig-mirror.ts", "../../../core/src/molecules/set-rig-mode.ts", "../../../core/src/atoms/rig/partner-target.ts", "../../../core/src/atoms/sculpt/is-wing-target.ts", "../../../core/src/molecules/set-sculpt-look.ts", "../../../core/src/atoms/stamp/clean-props.ts", "../../../core/src/molecules/set-smear-group.ts", "../../../core/src/atoms/stamp/move-locked-groups.ts", "../../../core/src/molecules/set-stamp-placements.ts", "../../../core/src/molecules/set-stamp-props.ts", "../../../core/src/molecules/set-symmetry-for-all.ts", "../../../core/src/decide.ts", "../../../core/src/create-creation-api.ts", "../../../core/src/atoms/stamp/resolve-stamp-props.ts"],
|
|
4
|
+
"sourcesContent": ["/** Name patterns for bones without a `role:` tag (POC PART_ROLES, first match wins, else \"limb\"). */\nexport const PART_ROLES: readonly (readonly [string, RegExp])[] = [\n [\"core\", /Pelvis|Hips|Spine|Thorax|Cephalothorax|Carapace|Abdomen|Gaster|Mantle|Body|Segment|Petiole/i],\n [\"flat\", /Wing|Fin/i],\n [\"head\", /Head/i],\n [\"thin\", /Neck|Tail|Antenna|Stinger/i],\n];\n\ntype Named = { readonly name: string; readonly tags: readonly string[] };\n\n/** The `role:<role>` tag, if any. */\nexport function taggedRole(bone: Named): string | undefined {\n const tag = bone.tags.find((t) => t.startsWith(\"role:\"));\n return tag?.slice(5);\n}\n\n/** POC resolveBoneRole: the role tag, else a role guessed from the name. */\nexport function resolveBoneRole(bone: Named): string {\n return taggedRole(bone) ?? PART_ROLES.find(([, re]) => re.test(bone.name))?.[0] ?? \"limb\";\n}\n", "import type { BodyRegion, RegionBlends } from \"@dreamy/api\";\nimport { resolveBoneRole } from \"./bone-role.js\";\n\nexport const DEFAULT_REGION_BLENDS: RegionBlends = { torso: 0.12, limb: 0.12, wing: 0.12, tail: 0.12, head: 0.12 };\n\nexport const BODY_REGIONS: readonly BodyRegion[] = [\"torso\", \"limb\", \"wing\", \"tail\", \"head\"];\n\n/** POC getBoneRegion: which region blend a bone's part follows. */\nexport function boneRegion(bone: { readonly name: string; readonly tags: readonly string[] }): BodyRegion {\n const role = resolveBoneRole(bone), name = bone.name;\n if (role === \"wing\" || role === \"insect-wing\" || /Wing|Forewing|Hindwing|Feather|Patagium/i.test(name)) return \"wing\";\n if (role === \"tail\" || role === \"stinger\" || /Tail|Stinger/i.test(name)) return \"tail\";\n if (\n [\"head\", \"ear\", \"beak\", \"horn\", \"mandible\", \"antenna\"].includes(role) ||\n /Head|Ear|Snout|Jaw|Beak|Horn|Mandible|Antenna/i.test(name)\n ) {\n return \"head\";\n }\n if (\n [\"core\", \"neck\", \"abdomen\"].includes(role) ||\n /Pelvis|Hips|Spine|Thorax|Cephalothorax|Carapace|Abdomen|Gaster|Mantle|Body|Segment|Petiole|Neck/i.test(name)\n ) {\n return \"torso\";\n }\n return \"limb\";\n}\n", "import type { Palette, PaletteSlot } from \"@dreamy/api\";\n\nexport const DEFAULT_PALETTE: Palette = {\n primary: 0xf87171,\n secondary: 0xfbbf24,\n detail: 0x34d399,\n highlight: 0x60a5fa,\n eye: 0xa78bfa,\n pupil: 0x1e1b3a,\n custom: 0x888888,\n};\n\n/** The editable slots, in the POC's index order (`s:0` \u2026 `s:6`). */\nexport const PALETTE_SLOTS: readonly PaletteSlot[] = [\n \"primary\",\n \"secondary\",\n \"detail\",\n \"highlight\",\n \"eye\",\n \"pupil\",\n \"custom\",\n];\n", "import type { Bone } from \"@dreamy/api\";\n\n/** POC mirrorPartner: the bone on the opposite `side:` sharing a `mirror:` key, if any. */\nexport function mirrorPartner(bones: readonly Bone[], bone: Bone): Bone | undefined {\n const side = bone.tags.find((t) => t.startsWith(\"side:\"));\n const opposite = side === \"side:L\" ? \"side:R\" : side === \"side:R\" ? \"side:L\" : undefined;\n const keys = bone.tags.filter((t) => t.startsWith(\"mirror:\"));\n if (!opposite || keys.length === 0) return undefined;\n return bones.find((b) => b.id !== bone.id && b.tags.includes(opposite) && keys.some((k) => b.tags.includes(k)));\n}\n", "import type { Symmetry, SymmetryAxis } from \"@dreamy/api\";\n\nexport const SYM_MAX_N = 12;\nexport const SYM_MAX_INSTANCES = 128;\nconst AXIS_ORDER: readonly SymmetryAxis[] = [\"x\", \"y\", \"z\"];\n\n/** The listed axes once each, in x, y, z order. */\nexport const symmetryAxes = (axes: readonly SymmetryAxis[]): SymmetryAxis[] => AXIS_ORDER.filter((a) => axes.includes(a));\n\n/**\n * POC symClampN: N rounded into 1\u201312, then lowered until N^(axis count) fits 128 instances\n * (1 axis: 12, 2 axes: 11, 3 axes: 5).\n */\nexport function clampCount(n: number, axes: readonly SymmetryAxis[]): number {\n let count = Math.max(1, Math.min(SYM_MAX_N, Math.round(n) || 1));\n const len = symmetryAxes(axes).length;\n while (len > 0 && count > 1 && Math.pow(count, len) > SYM_MAX_INSTANCES) count--;\n return count;\n}\n\nexport function clampSymmetry(s: Symmetry): Symmetry {\n const axes = symmetryAxes(s.axes);\n return { count: clampCount(s.count, axes), axes };\n}\n", "import type { Vec3 } from \"@dreamy/api\";\n\nexport const vec3 = (x: number, y: number, z: number): Vec3 => ({ x, y, z });\n\nexport const ZERO: Vec3 = vec3(0, 0, 0);\nexport const ONE: Vec3 = vec3(1, 1, 1);\n\nexport const add = (a: Vec3, b: Vec3): Vec3 => vec3(a.x + b.x, a.y + b.y, a.z + b.z);\n\nexport const sub = (a: Vec3, b: Vec3): Vec3 => vec3(a.x - b.x, a.y - b.y, a.z - b.z);\n\nexport const scale = (a: Vec3, k: number): Vec3 => vec3(a.x * k, a.y * k, a.z * k);\n\nexport const mul = (a: Vec3, b: Vec3): Vec3 => vec3(a.x * b.x, a.y * b.y, a.z * b.z);\n\nexport const addScaled = (a: Vec3, b: Vec3, k: number): Vec3 => vec3(a.x + b.x * k, a.y + b.y * k, a.z + b.z * k);\n\nexport const dot = (a: Vec3, b: Vec3): number => a.x * b.x + a.y * b.y + a.z * b.z;\n\nexport const cross = (a: Vec3, b: Vec3): Vec3 =>\n vec3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);\n\nexport const length = (a: Vec3): number => Math.sqrt(dot(a, a));\n\nexport const distance = (a: Vec3, b: Vec3): number => length(sub(a, b));\n\nexport function normalize(a: Vec3): Vec3 {\n const l = length(a);\n return l > 0 ? scale(a, 1 / l) : vec3(0, 0, 0);\n}\n\nexport const lerp = (a: Vec3, b: Vec3, t: number): Vec3 =>\n vec3(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t);\n\nexport const negate = (a: Vec3): Vec3 => vec3(-a.x, -a.y, -a.z);\n\nexport const fromArray = (a: readonly number[]): Vec3 => vec3(a[0] ?? 0, a[1] ?? 0, a[2] ?? 0);\n\nexport const isFiniteVec = (a: Vec3): boolean => Number.isFinite(a.x) && Number.isFinite(a.y) && Number.isFinite(a.z);\n", "import type { Sculpt, Vec3 } from \"@dreamy/api\";\nimport { distance, lerp } from \"../math/vec3.js\";\n\n/** Fraction of the stamp size between smear dabs. */\nexport const SMEAR_SPACING_FACTOR = 0.4;\n/** Most dabs one pointer move adds. */\nexport const SMEAR_MAX_DABS = 24;\n\nexport const smearSpacing = (stampSize: number): number => Math.max(0.04, stampSize * SMEAR_SPACING_FACTOR);\n\n/**\n * POC stampCurrentShape while smearing: evenly spaced dabs from the last dab to the pointer, none when the\n * pointer moved less than one spacing, at most 24 per move. The module may use this to build its preview.\n */\nexport function smearDabs(last: Vec3, target: Vec3, stampSize: number): Vec3[] {\n const spacing = smearSpacing(stampSize);\n const dist = distance(last, target);\n if (dist < spacing) return [];\n const n = Math.min(Math.ceil(dist / spacing), SMEAR_MAX_DABS);\n return Array.from({ length: n }, (_, i) => lerp(last, target, (i + 1) / n));\n}\n\n/** A small brush gets a proportionally small blend so dabs do not melt into one blob (POC: size \u00D7 0.5). */\nexport const smearGroupBlend = (requested: number, dabScale: Vec3): number =>\n Math.min(requested, Math.min(dabScale.x, dabScale.y, dabScale.z) * 0.5);\n\n/** \"Smear N\": one more than the highest smear number already in the sculpt. */\nexport function nextSmearName(sculpt: Sculpt): string {\n const used = sculpt.smearGroups.map((g) => /^Smear (\\d+)$/.exec(g.name)?.[1]).map(Number).filter(Number.isFinite);\n return `Smear ${Math.max(0, ...used) + 1}`;\n}\n", "import type { Creation } from \"@dreamy/api\";\nimport { DEFAULT_PALETTE } from \"./atoms/palette/default-palette.js\";\n\nexport const EMPTY_CREATION: Creation = {\n format: \"dreamy-studio\",\n schemaVersion: 1,\n palette: DEFAULT_PALETTE,\n objects: [],\n designs: [],\n};\n", "import type { Quaternion, Vec3 } from \"@dreamy/api\";\nimport { vec3 } from \"./vec3.js\";\n\nexport const quat = (x: number, y: number, z: number, w: number): Quaternion => ({ x, y, z, w });\n\nexport const IDENTITY_Q: Quaternion = quat(0, 0, 0, 1);\n\nexport function normalizeQ(q: Quaternion): Quaternion {\n const l = Math.hypot(q.x, q.y, q.z, q.w);\n return l > 0 ? quat(q.x / l, q.y / l, q.z / l, q.w / l) : IDENTITY_Q;\n}\n\n/** a * b: apply b, then a. */\nexport const multiplyQ = (a: Quaternion, b: Quaternion): Quaternion =>\n quat(\n a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y,\n a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z,\n a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x,\n a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,\n );\n\n/** Inverse of a unit quaternion. */\nexport const invertQ = (q: Quaternion): Quaternion => quat(-q.x, -q.y, -q.z, q.w);\n\nexport function rotate(v: Vec3, q: Quaternion): Vec3 {\n const ix = q.w * v.x + q.y * v.z - q.z * v.y;\n const iy = q.w * v.y + q.z * v.x - q.x * v.z;\n const iz = q.w * v.z + q.x * v.y - q.y * v.x;\n const iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n return vec3(\n ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y,\n iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z,\n iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x,\n );\n}\n\n/** The shortest rotation taking unit vector `from` onto unit vector `to` (three.js setFromUnitVectors). */\nexport function fromUnitVectors(from: Vec3, to: Vec3): Quaternion {\n const r = from.x * to.x + from.y * to.y + from.z * to.z + 1;\n if (r < Number.EPSILON) {\n return Math.abs(from.x) > Math.abs(from.z)\n ? normalizeQ(quat(-from.y, from.x, 0, 0))\n : normalizeQ(quat(0, -from.z, from.y, 0));\n }\n return normalizeQ(\n quat(from.y * to.z - from.z * to.y, from.z * to.x - from.x * to.z, from.x * to.y - from.y * to.x, r),\n );\n}\n\n/** Rotation whose matrix has columns x, y, z (three.js makeBasis + setFromRotationMatrix). */\nexport function fromBasis(x: Vec3, y: Vec3, z: Vec3): Quaternion {\n return fromRotationMatrix(x.x, y.x, z.x, x.y, y.y, z.y, x.z, y.z, z.z);\n}\n\n/** Row-major 3x3 rotation matrix to a quaternion. */\nexport function fromRotationMatrix(\n m11: number,\n m12: number,\n m13: number,\n m21: number,\n m22: number,\n m23: number,\n m31: number,\n m32: number,\n m33: number,\n): Quaternion {\n const trace = m11 + m22 + m33;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n return quat((m32 - m23) * s, (m13 - m31) * s, (m21 - m12) * s, 0.25 / s);\n }\n if (m11 > m22 && m11 > m33) {\n const s = 2 * Math.sqrt(1 + m11 - m22 - m33);\n return quat(0.25 * s, (m12 + m21) / s, (m13 + m31) / s, (m32 - m23) / s);\n }\n if (m22 > m33) {\n const s = 2 * Math.sqrt(1 + m22 - m11 - m33);\n return quat((m12 + m21) / s, 0.25 * s, (m23 + m32) / s, (m13 - m31) / s);\n }\n const s = 2 * Math.sqrt(1 + m33 - m11 - m22);\n return quat((m13 + m31) / s, (m23 + m32) / s, 0.25 * s, (m21 - m12) / s);\n}\n\n/** Euler angles in radians, XYZ order (three.js default). */\nexport function fromEulerXYZ(x: number, y: number, z: number): Quaternion {\n const c1 = Math.cos(x / 2), c2 = Math.cos(y / 2), c3 = Math.cos(z / 2);\n const s1 = Math.sin(x / 2), s2 = Math.sin(y / 2), s3 = Math.sin(z / 2);\n return quat(\n s1 * c2 * c3 + c1 * s2 * s3,\n c1 * s2 * c3 - s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3,\n );\n}\n\nexport const isFiniteQ = (q: Quaternion): boolean =>\n Number.isFinite(q.x) && Number.isFinite(q.y) && Number.isFinite(q.z) && Number.isFinite(q.w);\n", "import type { Quaternion, Transform, Vec3 } from \"@dreamy/api\";\nimport { quat } from \"../math/quat.js\";\nimport { vec3 } from \"../math/vec3.js\";\n\n/** A rotation reflected across a YZ plane (M R M with M = scale(-1, 1, 1)). */\nexport const mirrorRotation = (q: Quaternion): Quaternion => quat(q.x, -q.y, -q.z, q.w);\n\nexport const mirrorPoint = (p: Vec3, mirrorX: number): Vec3 => vec3(2 * mirrorX - p.x, p.y, p.z);\n\n/**\n * POC mirrorChannel: a bone's local transform reflected for its partner (M L M). A child bone mirrors\n * across its parent's x = 0; a root bone across the rig's mirror plane x = mirrorX.\n */\nexport function mirrorBoneTransform(t: Transform, isRoot: boolean, mirrorX: number): Transform {\n return {\n position: mirrorPoint(t.position, isRoot ? mirrorX : 0),\n rotation: mirrorRotation(t.rotation),\n scale: t.scale,\n };\n}\n", "import type { Sculpt, Stamp } from \"@dreamy/api\";\nimport { mirrorPoint, mirrorRotation } from \"./mirror-transform.js\";\n\n/** POC mirrorStamp: position reflected across x = mirrorX, rotation reflected, scale kept. */\nexport const mirrorStamp = (s: Stamp, mirrorX: number): Stamp => ({\n ...s,\n position: mirrorPoint(s.position, mirrorX),\n rotation: mirrorRotation(s.rotation),\n});\n\n/**\n * POC syncMirrorPart: the partner part becomes the source's stamps reflected, with the same smear groups.\n * Without an existing twin, the twin also takes the source's look. Stamp and group ids are shared with the\n * source (they are scoped to the part), so edits keep landing on the same stamps.\n */\nexport function mirrorSculpt(source: Sculpt, mirrorX: number, twin: Sculpt | undefined): Sculpt {\n const stamps = source.stamps.map((s) => mirrorStamp(s, mirrorX));\n if (twin) return { ...twin, stamps, smearGroups: source.smearGroups };\n return { ...source, stamps, decals: [] };\n}\n", "import type { BodyPart, Creation, Rig, Sculpt, SculptTarget, SceneObject } from \"@dreamy/api\";\nimport { mirrorPartner } from \"../rig/mirror-partner.js\";\nimport { mirrorSculpt } from \"../rig/mirror-sculpt.js\";\n\nexport const mapObject = (creation: Creation, id: string, fn: (o: SceneObject) => SceneObject): Creation => ({\n ...creation,\n objects: creation.objects.map((o) => (o.id === id ? fn(o) : o)),\n});\n\nexport const mapRig = (creation: Creation, id: string, fn: (r: Rig) => Rig): Creation =>\n mapObject(creation, id, (o) => (o.kind === \"rig\" ? { ...o, rig: fn(o.rig) } : o));\n\nfunction setPartSculpt(rig: Rig, boneId: string, sculpt: Sculpt): Rig {\n const exists = rig.parts.some((p) => p.boneId === boneId);\n const part: BodyPart = { boneId, kind: \"sculpt\", sculpt };\n if (!exists) return { ...rig, parts: [...rig.parts, part] };\n return { ...rig, parts: rig.parts.map((p) => (p.boneId === boneId && p.kind === \"sculpt\" ? part : p)) };\n}\n\n/** POC syncMirrorPart: with mirror on, the partner bone's part follows the edited part, reflected. */\nfunction syncTwin(rig: Rig, boneId: string): Rig {\n if (!rig.mirror) return rig;\n const bone = rig.bones.find((b) => b.id === boneId);\n const source = rig.parts.find((p) => p.boneId === boneId);\n const partner = bone && mirrorPartner(rig.bones, bone);\n if (!partner || source?.kind !== \"sculpt\") return rig;\n const twin = rig.parts.find((p) => p.boneId === partner.id);\n if (twin && twin.kind !== \"sculpt\") return rig;\n return setPartSculpt(rig, partner.id, mirrorSculpt(source.sculpt, rig.mirrorX, twin?.sculpt));\n}\n\n/**\n * The creation with the target's sculpt replaced by `fn(sculpt)`. Edits to a rig part are mirrored onto\n * the partner part when the rig's mirror is on (`mirror: false` skips that, e.g. for decals).\n */\nexport function updateTarget(\n creation: Creation,\n target: SculptTarget,\n fn: (s: Sculpt) => Sculpt,\n mirror = true,\n): Creation {\n return mapObject(creation, target.objectId, (o) => {\n if (\"boneId\" in target) {\n if (o.kind !== \"rig\") return o;\n const part = o.rig.parts.find((p) => p.boneId === target.boneId);\n if (part?.kind !== \"sculpt\") return o;\n const rig = setPartSculpt(o.rig, target.boneId, fn(part.sculpt));\n return { ...o, rig: mirror ? syncTwin(rig, target.boneId) : rig };\n }\n if (o.kind === \"sculpt\") return { ...o, sculpt: fn(o.sculpt) };\n return o.rig.body ? { ...o, rig: { ...o.rig, body: fn(o.rig.body) } } : o;\n });\n}\n", "import type { BodyPartAdded, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyBodyPartAdded = (c: Creation, e: BodyPartAdded): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n parts: [...r.parts.filter((p) => p.boneId !== e.payload.part.boneId), e.payload.part],\n }));\n", "import type { BodyPartRemoved, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyBodyPartRemoved = (c: Creation, e: BodyPartRemoved): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({ ...r, parts: r.parts.filter((p) => p.boneId !== e.payload.boneId) }));\n", "import type { Quaternion, Transform, Vec3 } from \"@dreamy/api\";\nimport { fromRotationMatrix, normalizeQ } from \"./quat.js\";\nimport { vec3 } from \"./vec3.js\";\n\n/** Column-major 4x4 matrix (three.js layout). */\nexport type Mat4 = readonly number[];\n\nexport const IDENTITY_M: Mat4 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\nexport function compose(position: Vec3, rotation: Quaternion, scale: Vec3): Mat4 {\n const { x, y, z, w } = rotation;\n const x2 = x + x, y2 = y + y, z2 = z + z;\n const xx = x * x2, xy = x * y2, xz = x * z2;\n const yy = y * y2, yz = y * z2, zz = z * z2;\n const wx = w * x2, wy = w * y2, wz = w * z2;\n const sx = scale.x, sy = scale.y, sz = scale.z;\n return [\n (1 - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1 - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1 - (xx + yy)) * sz, 0,\n position.x, position.y, position.z, 1,\n ];\n}\n\nexport const composeTransform = (t: Transform): Mat4 => compose(t.position, t.rotation, t.scale);\n\nconst at = (m: Mat4, i: number): number => m[i] ?? 0;\n\n/** a * b. */\nexport function multiplyM(a: Mat4, b: Mat4): Mat4 {\n const out: number[] = new Array(16).fill(0);\n for (let c = 0; c < 4; c++) {\n for (let r = 0; r < 4; r++) {\n let s = 0;\n for (let k = 0; k < 4; k++) s += at(a, k * 4 + r) * at(b, c * 4 + k);\n out[c * 4 + r] = s;\n }\n }\n return out;\n}\n\nexport function determinant(m: Mat4): number {\n const n11 = at(m, 0), n12 = at(m, 4), n13 = at(m, 8), n14 = at(m, 12);\n const n21 = at(m, 1), n22 = at(m, 5), n23 = at(m, 9), n24 = at(m, 13);\n const n31 = at(m, 2), n32 = at(m, 6), n33 = at(m, 10), n34 = at(m, 14);\n const n41 = at(m, 3), n42 = at(m, 7), n43 = at(m, 11), n44 = at(m, 15);\n return (\n n41 * (n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) +\n n42 * (n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) +\n n43 * (n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) +\n n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31)\n );\n}\n\nexport function invertM(m: Mat4): Mat4 {\n const n11 = at(m, 0), n21 = at(m, 1), n31 = at(m, 2), n41 = at(m, 3);\n const n12 = at(m, 4), n22 = at(m, 5), n32 = at(m, 6), n42 = at(m, 7);\n const n13 = at(m, 8), n23 = at(m, 9), n33 = at(m, 10), n43 = at(m, 11);\n const n14 = at(m, 12), n24 = at(m, 13), n34 = at(m, 14), n44 = at(m, 15);\n const t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\n const t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\n const t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\n const t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0) return new Array(16).fill(0);\n const d = 1 / det;\n return [\n t11 * d,\n (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * d,\n (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * d,\n (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * d,\n t12 * d,\n (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * d,\n (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * d,\n (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * d,\n t13 * d,\n (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * d,\n (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * d,\n (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * d,\n t14 * d,\n (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * d,\n (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * d,\n (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * d,\n ];\n}\n\n/** Position, rotation and scale of a matrix (three.js decompose: a negative determinant flips x). */\nexport function decompose(m: Mat4): Transform {\n let sx = Math.hypot(at(m, 0), at(m, 1), at(m, 2));\n const sy = Math.hypot(at(m, 4), at(m, 5), at(m, 6));\n const sz = Math.hypot(at(m, 8), at(m, 9), at(m, 10));\n if (determinant(m) < 0) sx = -sx;\n const ix = sx !== 0 ? 1 / sx : 0, iy = sy !== 0 ? 1 / sy : 0, iz = sz !== 0 ? 1 / sz : 0;\n const rotation = normalizeQ(\n fromRotationMatrix(\n at(m, 0) * ix, at(m, 4) * iy, at(m, 8) * iz,\n at(m, 1) * ix, at(m, 5) * iy, at(m, 9) * iz,\n at(m, 2) * ix, at(m, 6) * iy, at(m, 10) * iz,\n ),\n );\n return { position: vec3(at(m, 12), at(m, 13), at(m, 14)), rotation, scale: vec3(sx, sy, sz) };\n}\n\nexport const transformPoint = (m: Mat4, p: Vec3): Vec3 =>\n vec3(\n at(m, 0) * p.x + at(m, 4) * p.y + at(m, 8) * p.z + at(m, 12),\n at(m, 1) * p.x + at(m, 5) * p.y + at(m, 9) * p.z + at(m, 13),\n at(m, 2) * p.x + at(m, 6) * p.y + at(m, 10) * p.z + at(m, 14),\n );\n\nexport const positionOf = (m: Mat4): Vec3 => vec3(at(m, 12), at(m, 13), at(m, 14));\n", "import type { Transform } from \"@dreamy/api\";\nimport { composeTransform, decompose, invertM, multiplyM, type Mat4 } from \"../math/mat4.js\";\n\n/** parent \u2218 child as one local transform (the child lifted one level up). */\nexport const composeLocal = (parent: Transform, child: Transform): Transform =>\n decompose(multiplyM(composeTransform(parent), composeTransform(child)));\n\n/** The local transform under `parentWorld` that keeps `world` where it is. */\nexport const relativeTo = (parentWorld: Mat4, world: Mat4): Transform => decompose(multiplyM(invertM(parentWorld), world));\n", "import type { Bone, BoneRemoved, Creation } from \"@dreamy/api\";\nimport { composeLocal } from \"../atoms/rig/compose-local.js\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/** Children move up to the removed bone's parent, keeping their bind and pose placement; its part goes. */\nexport const applyBoneRemoved = (c: Creation, e: BoneRemoved): Creation =>\n mapRig(c, e.payload.rigId, (r) => {\n const gone = r.bones.find((b) => b.id === e.payload.boneId);\n if (!gone) return r;\n const bones = r.bones\n .filter((b) => b.id !== gone.id)\n .map((b): Bone => {\n if (b.parentId !== gone.id) return b;\n const { parentId: _p, ...rest } = b;\n return {\n ...rest,\n ...(gone.parentId !== undefined ? { parentId: gone.parentId } : {}),\n bind: composeLocal(gone.bind, b.bind),\n pose: composeLocal(gone.pose, b.pose),\n };\n });\n return { ...r, bones, parts: r.parts.filter((p) => p.boneId !== gone.id) };\n });\n", "import type { BoneRenamed, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyBoneRenamed = (c: Creation, e: BoneRenamed): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n bones: r.bones.map((b) => (b.id === e.payload.boneId ? { ...b, name: e.payload.name } : b)),\n }));\n", "import type { Bone, BoneReparented, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyBoneReparented = (c: Creation, e: BoneReparented): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n bones: r.bones.map((b): Bone => {\n if (b.id !== e.payload.boneId) return b;\n const { parentId: _p, ...rest } = b;\n const { parentId, bind, pose } = e.payload;\n return { ...rest, ...(parentId !== null ? { parentId } : {}), bind, pose };\n }),\n }));\n", "import type { BoneTagsSet, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport function applyBoneTagsSet(c: Creation, e: BoneTagsSet): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.boneId, ch.tags]));\n return mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n bones: r.bones.map((b) => (next.has(b.id) ? { ...b, tags: next.get(b.id) ?? b.tags } : b)),\n }));\n}\n", "import type { Transform } from \"@dreamy/api\";\nimport { invertQ, multiplyQ, normalizeQ } from \"../math/quat.js\";\nimport { add, sub, vec3 } from \"../math/vec3.js\";\n\nconst ratio = (a: number, b: number): number => (Math.abs(b) > 1e-6 ? a / b : 1);\n\n/**\n * POC Skeleton.setRigMode: a rig-mode edit moves the bind; the pose rides on top as a delta\n * (p = bind.p + dp, q = bind.q * dq, s = bind.s * ds).\n */\nexport function rebasePose(oldBind: Transform, pose: Transform, newBind: Transform): Transform {\n const dp = sub(pose.position, oldBind.position);\n const dq = multiplyQ(invertQ(oldBind.rotation), pose.rotation);\n const ds = vec3(\n ratio(pose.scale.x, oldBind.scale.x),\n ratio(pose.scale.y, oldBind.scale.y),\n ratio(pose.scale.z, oldBind.scale.z),\n );\n return {\n position: add(newBind.position, dp),\n rotation: normalizeQ(multiplyQ(newBind.rotation, dq)),\n scale: vec3(newBind.scale.x * ds.x, newBind.scale.y * ds.y, newBind.scale.z * ds.z),\n };\n}\n", "import type { BoneTransformsSet, Creation } from \"@dreamy/api\";\nimport { rebasePose } from \"../atoms/rig/rebase-pose.js\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/**\n * Bind writes keep the pose as a delta on top of the new bind (rig mode); pose writes set the pose. A pose write on\n * a premade rig keeps the whole resulting pose as its Custom preset and selects it.\n */\nexport function applyBoneTransformsSet(c: Creation, e: BoneTransformsSet): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.boneId, ch.transform]));\n return mapRig(c, e.payload.rigId, (r) => {\n const bones = r.bones.map((b) => {\n const t = next.get(b.id);\n if (!t) return b;\n return e.payload.target === \"pose\" ? { ...b, pose: t } : { ...b, bind: t, pose: rebasePose(b.bind, b.pose, t) };\n });\n if (e.payload.target !== \"pose\" || r.templateId === undefined) return { ...r, bones };\n return { ...r, bones, customPose: Object.fromEntries(bones.map((b) => [b.id, b.pose])), posePreset: { a: \"custom\", t: 0 } };\n });\n}\n", "import type { BonesAdded, Creation } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyBonesAdded = (c: Creation, e: BonesAdded): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({ ...r, bones: [...r.bones, ...e.payload.bones] }));\n", "import type { Creation, DecalRemoved } from \"@dreamy/api\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyDecalRemoved = (c: Creation, e: DecalRemoved): Creation =>\n updateTarget(c, e.payload.target, (s) => ({ ...s, decals: s.decals.filter((d) => d.id !== e.payload.decalId) }), false);\n", "import type { Creation, DecalsAdded } from \"@dreamy/api\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyDecalsAdded = (c: Creation, e: DecalsAdded): Creation =>\n updateTarget(c, e.payload.target, (s) => ({ ...s, decals: [...s.decals, ...e.payload.decals] }), false);\n", "import type { Creation, DesignDeleted } from \"@dreamy/api\";\n\nexport const applyDesignDeleted = (c: Creation, e: DesignDeleted): Creation => ({\n ...c,\n designs: c.designs.filter((d) => d.id !== e.payload.designId),\n});\n", "import type { Creation, DesignSaved } from \"@dreamy/api\";\n\nexport function applyDesignSaved(c: Creation, e: DesignSaved): Creation {\n const { design } = e.payload;\n const exists = c.designs.some((d) => d.id === design.id);\n return { ...c, designs: exists ? c.designs.map((d) => (d.id === design.id ? design : d)) : [...c.designs, design] };\n}\n", "import type { Creation, FlatWingsSet } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport function applyFlatWingsSet(c: Creation, e: FlatWingsSet): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.boneId, ch.wing]));\n return mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n parts: r.parts.map((p) => {\n const patch = next.get(p.boneId);\n return p.kind === \"wing\" && patch ? { ...p, wing: { ...p.wing, ...patch } } : p;\n }),\n }));\n}\n", "import type { Creation, ObjectRenamed } from \"@dreamy/api\";\nimport { mapObject } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyObjectRenamed = (c: Creation, e: ObjectRenamed): Creation =>\n mapObject(c, e.payload.objectId, (o) => ({ ...o, name: e.payload.name }));\n", "import type { Id, SceneObject } from \"@dreamy/api\";\n\n/**\n * The scene list with `object` (already re-parented) moved so it becomes child number `index` of its\n * parent. Only the order among siblings carries meaning, so it goes just before the sibling it displaces,\n * or to the end of the list.\n */\nexport function placeInOrder(objects: readonly SceneObject[], object: SceneObject, index: number): SceneObject[] {\n const rest = objects.filter((o) => o.id !== object.id);\n const siblings = rest.filter((o) => o.parentId === object.parentId);\n const before: Id | undefined = siblings[index]?.id;\n if (before === undefined) return [...rest, object];\n const at = rest.findIndex((o) => o.id === before);\n return [...rest.slice(0, at), object, ...rest.slice(at)];\n}\n", "import type { Creation, ObjectReparented, SceneObject } from \"@dreamy/api\";\nimport { placeInOrder } from \"../atoms/scene/place-in-order.js\";\n\nexport function applyObjectReparented(c: Creation, e: ObjectReparented): Creation {\n const { objectId, parentId, index, transform } = e.payload;\n const object = c.objects.find((o) => o.id === objectId);\n if (!object) return c;\n const { parentId: _old, ...rest } = object;\n const moved = (parentId === null ? { ...rest, transform } : { ...rest, parentId, transform }) as SceneObject;\n return { ...c, objects: placeInOrder(c.objects, moved, index) };\n}\n", "import type { Creation, ObjectTransformsSet } from \"@dreamy/api\";\n\nexport function applyObjectTransformsSet(c: Creation, e: ObjectTransformsSet): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.objectId, ch.transform]));\n return { ...c, objects: c.objects.map((o) => (next.has(o.id) ? { ...o, transform: next.get(o.id) ?? o.transform } : o)) };\n}\n", "import type { Creation, ObjectsDeleted } from \"@dreamy/api\";\n\nexport function applyObjectsDeleted(c: Creation, e: ObjectsDeleted): Creation {\n const gone = new Set(e.payload.objectIds);\n return { ...c, objects: c.objects.filter((o) => !gone.has(o.id)) };\n}\n", "import type { Creation, ObjectsDuplicated } from \"@dreamy/api\";\n\n/** The copies go to the end of the scene list, after every original. */\nexport const applyObjectsDuplicated = (c: Creation, e: ObjectsDuplicated): Creation => ({\n ...c,\n objects: [...c.objects, ...e.payload.objects],\n});\n", "import type { Creation, PaletteColorSet } from \"@dreamy/api\";\n\nexport const applyPaletteColorSet = (c: Creation, e: PaletteColorSet): Creation => ({\n ...c,\n palette: { ...c.palette, [e.payload.slot]: e.payload.color },\n});\n", "import type { Creation, PaletteReset } from \"@dreamy/api\";\nimport { DEFAULT_PALETTE } from \"../atoms/palette/default-palette.js\";\n\nexport const applyPaletteReset = (c: Creation, _e: PaletteReset): Creation => ({ ...c, palette: DEFAULT_PALETTE });\n", "import type { Creation, PivotSet } from \"@dreamy/api\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyPivotSet = (c: Creation, e: PivotSet): Creation =>\n updateTarget(c, e.payload.target, (s) => ({ ...s, pivot: e.payload.pivot }), false);\n", "import type { Creation, PoseReset } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/** Every pose back to the bind; a premade rig selects its Front preset (its Custom pose is kept). */\nexport const applyPoseReset = (c: Creation, e: PoseReset): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n bones: r.bones.map((b) => ({ ...b, pose: b.bind })),\n ...(r.templateId !== undefined ? { posePreset: { a: \"front\" as const, t: 0 } } : {}),\n }));\n", "import type { Bone, Id, Vec3 } from \"@dreamy/api\";\nimport { composeTransform, IDENTITY_M, multiplyM, positionOf, type Mat4 } from \"../math/mat4.js\";\n\n/** Every bone's matrix in the rig's space, for the bind or the pose channel. */\nexport function boneMatrices(bones: readonly Bone[], channel: \"bind\" | \"pose\"): Map<Id, Mat4> {\n const out = new Map<Id, Mat4>();\n const byId = new Map(bones.map((b) => [b.id, b]));\n const visit = (bone: Bone, depth: number): Mat4 => {\n const known = out.get(bone.id);\n if (known) return known;\n const parent = bone.parentId !== undefined ? byId.get(bone.parentId) : undefined;\n const base = parent && depth < bones.length ? visit(parent, depth + 1) : IDENTITY_M;\n const m = multiplyM(base, composeTransform(bone[channel]));\n out.set(bone.id, m);\n return m;\n };\n bones.forEach((b) => visit(b, 0));\n return out;\n}\n\n/** Every bone's bind head (joint position) in the rig's space. */\nexport function bindHeads(bones: readonly Bone[]): Map<Id, Vec3> {\n const m = boneMatrices(bones, \"bind\");\n return new Map([...m].map(([id, mat]) => [id, positionOf(mat)]));\n}\n\n/** True when `id` is `ancestorId` or one of its descendants. */\nexport function isBoneInSubtree(bones: readonly Bone[], id: Id, ancestorId: Id): boolean {\n let cur: Id | undefined = id;\n const seen = new Set<Id>();\n while (cur !== undefined && !seen.has(cur)) {\n if (cur === ancestorId) return true;\n seen.add(cur);\n cur = bones.find((b) => b.id === cur)?.parentId;\n }\n return false;\n}\n", "import type { Bone, BoneSize } from \"@dreamy/api\";\nimport { resolveBoneRole } from \"./bone-role.js\";\n\nexport const DEFAULT_BONE_SIZE: BoneSize = { length: 1, thickness: 1 };\nexport const MAX_BONE_SIZE = 2.5;\n\n/** A bone's proportions (absent = 1, 1). */\nexport const boneSize = (bone: Pick<Bone, \"size\">): BoneSize => bone.size ?? DEFAULT_BONE_SIZE;\n\n/** The smallest size a bone may take: a head is never smaller than it was made. */\nexport const minBoneSize = (bone: Pick<Bone, \"name\" | \"tags\">): number => (resolveBoneRole(bone) === \"head\" ? 1 : 0.4);\n", "import type { BodyPart, BoneSize, BoneSizesSet, Id, Rig, Transform, Vec3 } from \"@dreamy/api\";\nimport { add, length, scale, sub } from \"../math/vec3.js\";\nimport { bindHeads } from \"./bone-matrices.js\";\nimport { boneSize } from \"./bone-size.js\";\nimport { rebasePose } from \"./rebase-pose.js\";\n\ntype Resolved = BoneSizesSet[\"payload\"];\n\n/** A part carried along with its joint: stamps, decals, pivot and a flat wing's frame move by `d`. */\nexport function translatePart(part: BodyPart, d: Vec3): BodyPart {\n if (part.kind === \"wing\") return { ...part, wing: { ...part.wing, frame: { ...part.wing.frame, origin: add(part.wing.frame.origin, d) } } };\n const s = part.sculpt;\n return {\n ...part,\n sculpt: {\n ...s,\n stamps: s.stamps.map((st) => ({ ...st, position: add(st.position, d) })),\n decals: s.decals.map((dc) => ({ ...dc, position: add(dc.position, d) })),\n pivot: { ...s.pivot, position: add(s.pivot.position, d) },\n },\n };\n}\n\n/**\n * What new bone sizes do to a rig: a length change moves the bone's child joints (their bind offsets scale by new /\n * old length; their poses keep their deltas), and every part below carries along with its joint.\n */\nexport function resolveBoneSizes(rig: Rig, sizes: ReadonlyMap<Id, BoneSize>): Omit<Resolved, \"rigId\"> {\n const byId = new Map(rig.bones.map((b) => [b.id, b]));\n const moved: { boneId: Id; bind: Transform; pose: Transform }[] = [];\n for (const [id, size] of sizes) {\n const f = size.length / boneSize(byId.get(id)!).length;\n if (Math.abs(f - 1) < 1e-9) continue;\n for (const child of rig.bones.filter((b) => b.parentId === id)) {\n const bind = { ...child.bind, position: scale(child.bind.position, f) };\n moved.push({ boneId: child.id, bind, pose: rebasePose(child.bind, child.pose, bind) });\n }\n }\n const before = bindHeads(rig.bones);\n const movedBinds = new Map(moved.map((m) => [m.boneId, m.bind]));\n const after = bindHeads(rig.bones.map((b) => (movedBinds.has(b.id) ? { ...b, bind: movedBinds.get(b.id)! } : b)));\n const parts = rig.parts.flatMap((p) => {\n const d = sub(after.get(p.boneId)!, before.get(p.boneId)!);\n return length(d) > 1e-9 ? [translatePart(p, d)] : [];\n });\n return { sizes: [...sizes].map(([boneId, size]) => ({ boneId, size })), moved, parts };\n}\n\n/** A rig with resolved bone sizes applied (the fold's and the generator's one way of doing it). */\nexport function applyBoneSizes(r: Rig, e: Omit<Resolved, \"rigId\">): Rig {\n const sizes = new Map(e.sizes.map((s) => [s.boneId, s.size]));\n const moved = new Map(e.moved.map((m) => [m.boneId, m]));\n const parts = new Map(e.parts.map((p) => [p.boneId, p]));\n let customPose = r.customPose;\n if (customPose) {\n const next: { [boneId: string]: Transform } = { ...customPose };\n for (const b of r.bones) {\n const m = moved.get(b.id);\n if (m && next[b.id]) next[b.id] = rebasePose(b.bind, next[b.id]!, m.bind);\n }\n customPose = next;\n }\n return {\n ...r,\n ...(customPose ? { customPose } : {}),\n bones: r.bones.map((b) => {\n const size = sizes.get(b.id), m = moved.get(b.id);\n return { ...b, ...(size ? { size } : {}), ...(m ? { bind: m.bind, pose: m.pose } : {}) };\n }),\n parts: r.parts.map((p) => parts.get(p.boneId) ?? p),\n };\n}\n", "import type { BoneSizesSet, Creation } from \"@dreamy/api\";\nimport { applyBoneSizes } from \"../atoms/rig/resize-bones.js\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/** Sets bone sizes, moves the child joints a length change carried and the parts riding on them. */\nexport const applyBoneSizesSet = (c: Creation, e: BoneSizesSet): Creation => mapRig(c, e.payload.rigId, (r) => applyBoneSizes(r, e.payload));\n", "import type { ColorRef, Pivot, SculptLook } from \"@dreamy/api\";\nimport { IDENTITY_Q } from \"../math/quat.js\";\nimport { ZERO } from \"../math/vec3.js\";\n\n/** A new sculpt's look (POC createNewSculptObject): its color is also the foundation. */\nexport function defaultLook(color: ColorRef): SculptLook {\n return {\n color,\n foundationColor: color,\n fleck: {\n shape: \"pill\",\n size: 1,\n variation: 0,\n coverage: 1,\n regularity: 0,\n boil: 1,\n foundationDarkness: 0.08,\n normalStrength: 1,\n },\n material: { roughness: 0.8, metalness: 0, glow: 0, opacity: 1 },\n blend: 0.3,\n pattern: {\n kind: \"none\",\n scale: 1,\n strength: 1,\n rotation: ZERO,\n color: \"black\",\n color2: \"highlight\",\n },\n };\n}\n\nexport const DEFAULT_PIVOT: Pivot = { position: ZERO, rotation: IDENTITY_Q };\n", "import type { Transform, Vec3 } from \"@dreamy/api\";\nimport { IDENTITY_Q, isFiniteQ, normalizeQ } from \"./quat.js\";\nimport { isFiniteVec, ONE, ZERO } from \"./vec3.js\";\n\nexport const IDENTITY_TRANSFORM: Transform = { position: ZERO, rotation: IDENTITY_Q, scale: ONE };\n\nexport const translation = (position: Vec3): Transform => ({ position, rotation: IDENTITY_Q, scale: ONE });\n\n/** Why a transform cannot be stored, or undefined when it can (scale may be negative: mirrored objects). */\nexport function transformProblem(t: Transform): string | undefined {\n if (!isFiniteVec(t.position) || !isFiniteVec(t.scale) || !isFiniteQ(t.rotation)) {\n return \"A transform needs finite numbers.\";\n }\n if (t.scale.x === 0 || t.scale.y === 0 || t.scale.z === 0) return \"A scale cannot be zero.\";\n if (Math.hypot(t.rotation.x, t.rotation.y, t.rotation.z, t.rotation.w) < 1e-9) return \"A rotation cannot be zero.\";\n return undefined;\n}\n\n/** Same transform with a unit rotation. */\nexport const cleanTransform = (t: Transform): Transform => ({\n position: t.position,\n rotation: normalizeQ(t.rotation),\n scale: t.scale,\n});\n", "import type { BodyPart, Id, PartSlot, Rig } from \"@dreamy/api\";\n\n/**\n * A rig with a slot's fitted parts in place: `parts` replace their bones' parts, `removed` bones lose theirs. A\n * generated rig's recipe follows, so a later re-roll that keeps the slot keeps this kit.\n */\nexport function withSlotParts(r: Rig, slot: PartSlot, kit: string, fitted: { readonly parts: readonly BodyPart[]; readonly removed: readonly Id[] }): Rig {\n const replaced = new Set([...fitted.parts.map((p) => p.boneId), ...fitted.removed]);\n return {\n ...r,\n parts: [...r.parts.filter((p) => !replaced.has(p.boneId)), ...fitted.parts],\n slotKits: { ...r.slotKits, [slot]: kit },\n ...(r.recipe ? { recipe: { ...r.recipe, kits: { ...r.recipe.kits, [slot]: kit } } } : {}),\n };\n}\n", "import type { Vec3 } from \"@dreamy/api\";\n\n/** POC rigExtent: half the largest side of the bind joints' box, at least 0.8. */\nexport function rigExtent(heads: readonly Vec3[]): number {\n if (heads.length === 0) return 0.8;\n const span = (k: \"x\" | \"y\" | \"z\") => Math.max(...heads.map((h) => h[k])) - Math.min(...heads.map((h) => h[k]));\n return Math.max(Math.max(span(\"x\"), span(\"y\"), span(\"z\")) * 0.5, 0.8);\n}\n", "import type { Bone, Id, Vec3 } from \"@dreamy/api\";\nimport { add, dot, length, normalize, scale, sub, vec3 } from \"../math/vec3.js\";\n\nconst sided = (b: Bone): boolean => b.tags.includes(\"side:L\") || b.tags.includes(\"side:R\");\n\n/**\n * The frame a bone's size scales its part in: its head, and its axis toward its farthest child that isn't a side\n * branch (a centre bone's left / right ears, antennae or legs don't count), else from its parent. The viewport's\n * `writeSegmentMatrices` uses the same rule, so a head sized unevenly stays symmetric and doesn't depend on its ears.\n */\nexport function sizeFrame(bone: Bone, bones: readonly Bone[], heads: ReadonlyMap<Id, Vec3>): { readonly h: Vec3; readonly axis: Vec3 } {\n const h = heads.get(bone.id)!;\n const kids = bones.filter((b) => b.parentId === bone.id && (sided(bone) || !sided(b))).map((b) => heads.get(b.id)!);\n const far = kids.sort((a, b) => length(sub(b, h)) - length(sub(a, h)))[0];\n const parent = bone.parentId !== undefined ? heads.get(bone.parentId) : undefined;\n const axis = far && length(sub(far, h)) > 1e-6 ? normalize(sub(far, h)) : parent && length(sub(h, parent)) > 1e-6 ? normalize(sub(h, parent)) : vec3(0, 1, 0);\n return { h, axis };\n}\n\n/**\n * A point and scale of a sized bone's part as drawn: along the bone by its length, across it by its thickness\n * (`inverse` maps a drawn one back to how it's stored).\n */\nexport function sizePoint(bone: Bone, bones: readonly Bone[], heads: ReadonlyMap<Id, Vec3>, p: Vec3, s: Vec3, inverse = false): { p: Vec3; s: Vec3 } {\n const size = bone.size;\n if (!size || (size.length === 1 && size.thickness === 1)) return { p, s };\n const { h, axis } = sizeFrame(bone, bones, heads);\n const d = sub(p, h), along = dot(d, axis);\n const across = sub(d, scale(axis, along));\n const L = inverse ? 1 / size.length : size.length, T = inverse ? 1 / size.thickness : size.thickness;\n const mean = (size.length + 2 * size.thickness) / 3;\n return { p: add(h, add(scale(axis, along * L), scale(across, T))), s: scale(s, inverse ? 1 / mean : mean) };\n}\n", "import type { Bone, Id, Vec3 } from \"@dreamy/api\";\nimport { bindHeads } from \"../atoms/rig/bone-matrices.js\";\n\n/** A bone as the part generator sees it: its bind head and its tree neighbors (POC BoneNode). */\nexport type BoneNode = {\n readonly id: Id;\n readonly name: string;\n readonly tags: readonly string[];\n readonly head: Vec3;\n parent: BoneNode | undefined;\n readonly children: BoneNode[];\n};\n\n/** The rig's bones as a tree (children in list order) plus the nodes by id. */\nexport function boneTree(bones: readonly Bone[]): { readonly nodes: Map<Id, BoneNode>; readonly roots: BoneNode[] } {\n const heads = bindHeads(bones);\n const nodes = new Map<Id, BoneNode>(\n bones.map((b) => [b.id, { id: b.id, name: b.name, tags: b.tags, head: heads.get(b.id)!, parent: undefined, children: [] }]),\n );\n const roots: BoneNode[] = [];\n for (const b of bones) {\n const node = nodes.get(b.id)!;\n const parent = b.parentId !== undefined ? nodes.get(b.parentId) : undefined;\n node.parent = parent;\n (parent ? parent.children : roots).push(node);\n }\n return { nodes, roots };\n}\n", "import type { Decal } from \"@dreamy/api\";\n\nexport const MAX_DECALS = 64;\nexport const MAX_INTERIORS = 8;\n\nexport const isInterior = (d: Pick<Decal, \"art\">): boolean => d.art.kind === \"builtin\" && d.art.category === \"interior\";\n\n/** Why adding `added` to a sculpt's decals breaks the limits (64 decals, 8 interior rooms), if it does. */\nexport function decalLimitProblem(existing: readonly Decal[], added: readonly Pick<Decal, \"art\">[]): string | undefined {\n if (existing.length + added.length > MAX_DECALS) return `Decal limit reached (${MAX_DECALS} per object).`;\n if (existing.filter(isInterior).length + added.filter(isInterior).length > MAX_INTERIORS) {\n return `Interior limit reached (${MAX_INTERIORS} per object).`;\n }\n return undefined;\n}\n", "import type { Bake, TemplateColor } from \"./bake-types.js\";\n\ntype V3 = readonly [number, number, number];\n\n/** A bone of a template, in template space (the fit maps p to c + p * h). */\nexport type TemplateBone = { readonly name: string; readonly parent: string | null; readonly p: V3; readonly tags: readonly string[] };\n\n/** A face decal of a generated template: u / v across the head's front, size in head widths. */\nexport type TemplateDecal = {\n readonly bone: string;\n readonly cat: string;\n readonly name: string;\n readonly pair?: boolean;\n readonly u?: number;\n readonly v?: number;\n readonly size?: number;\n readonly flip?: boolean;\n readonly tint?: TemplateColor;\n};\n\n/** A per-bone style override (bone-name regex \u2192 style), used for flat wing parameters. */\nexport type TemplateStyle = {\n readonly kind: \"flat\";\n readonly colorKey: string;\n readonly wing: { readonly [key: string]: number | string };\n};\n\nexport type RigBuilder = {\n readonly bones: TemplateBone[];\n readonly decals: TemplateDecal[];\n readonly styles: { [pattern: string]: TemplateStyle };\n bake: Bake | undefined;\n role<T>(id: string, fn: () => T): T;\n decal(bone: string, cat: string, name: string, o?: Omit<TemplateDecal, \"bone\" | \"cat\" | \"name\">): void;\n style(key: string, over: TemplateStyle): void;\n bone(name: string, parent: string | null, p: V3, tags?: readonly string[]): string;\n chain(name: string, parent: string | null, from: V3, to: V3, n: number): string[];\n limb(parent: string | readonly string[] | null, names: string | readonly string[], pts: readonly V3[], mirror?: boolean): { first: string[]; last: string[] };\n};\n\nconst lerp3 = (a: V3, b: V3, t: number): V3 => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];\n\n/** POC makeRigBuilder: bone() adds one bone, chain() a line of bones, limb() a (mirrored) chain. */\nexport function makeRigBuilder(): RigBuilder {\n const bones: TemplateBone[] = [], used = new Set<string>(), stems = new Set<string>();\n let curRole: string | null = null;\n const uniqueStem = (s: string): string => {\n let n = s, k = 2;\n while (stems.has(n)) n = `${s} ${k++}`;\n stems.add(n);\n return n;\n };\n const api: RigBuilder = {\n bones,\n decals: [],\n styles: {},\n bake: undefined,\n role(id, fn) {\n const prev = curRole;\n curRole = id;\n try {\n return fn();\n } finally {\n curRole = prev;\n }\n },\n decal(bone, cat, name, o = {}) {\n api.decals.push({ bone, cat, name, ...o });\n },\n style(key, over) {\n api.styles[key] = over;\n },\n bone(name, parent, p, tags = []) {\n let n = name, k = 2;\n while (used.has(n)) n = `${name} ${k++}`;\n used.add(n);\n const t = tags.slice();\n if (curRole) t.push(`role:${curRole}`);\n bones.push({ name: n, parent, p, tags: t });\n return n;\n },\n chain(name, parent, from, to, n) {\n const out: string[] = [];\n let par = parent;\n for (let i = 0; i < n; i++) {\n par = api.bone(`${name} ${i + 1}`, par, lerp3(from, to, n > 1 ? i / (n - 1) : 0));\n out.push(par);\n }\n return out;\n },\n // pts are for the +x side; mirror also builds -x. +x bones get \" L\" and side:L, -x get \" R\" and side:R.\n limb(parent, names, pts, mirror = true) {\n const first: string[] = [], last: string[] = [];\n const stemOf = pts.map((_, i) => uniqueStem(typeof names === \"string\" ? `${names} ${i + 1}` : (names[i] ?? `${i + 1}`)));\n (mirror ? [1, -1] : [1]).forEach((sx, si) => {\n const side = mirror ? (sx > 0 ? \" L\" : \" R\") : \"\";\n const tag = mirror ? (sx > 0 ? \"L\" : \"R\") : null;\n let par: string | null = parent !== null && typeof parent !== \"string\" ? (parent[si] ?? null) : parent;\n pts.forEach((p, i) => {\n par = api.bone(`${stemOf[i]}${side}`, par, [p[0] * sx, p[1], p[2]], tag ? [`side:${tag}`, `mirror:${stemOf[i]}`] : []);\n if (i === 0) first.push(par);\n });\n if (par !== null) last.push(par);\n });\n return { first, last };\n },\n };\n return api;\n}\n\n\n/** POC bakeBones: a baked template's bones come straight from the bake, and so do its parts and decals. */\nexport function bakeBones(b: RigBuilder, bake: Bake): void {\n bake.bones.forEach(([name, parent, p, tags]) => b.bones.push({ name, parent, p, tags: tags.slice() }));\n b.bake = bake;\n}\n", "import { makeRigBuilder, type RigBuilder, type TemplateBone } from \"./rig-builder.js\";\nimport type { SkeletonTemplate } from \"./template-catalog.js\";\n\n/** The template's builder output with its bones in skeleton order (POC Skeleton.rebuild: depth first). */\nexport function buildTemplate(tpl: SkeletonTemplate): RigBuilder & { readonly ordered: readonly TemplateBone[] } {\n const b = makeRigBuilder();\n tpl.build(b);\n const kids = new Map<string | null, TemplateBone[]>();\n for (const bone of b.bones) {\n const list = kids.get(bone.parent) ?? [];\n list.push(bone);\n kids.set(bone.parent, list);\n }\n const ordered: TemplateBone[] = [];\n const visit = (bone: TemplateBone) => {\n ordered.push(bone);\n (kids.get(bone.name) ?? []).forEach(visit);\n };\n (kids.get(null) ?? []).forEach(visit);\n return Object.assign(b, { ordered });\n}\n", "import type { Stamp, Vec3 } from \"@dreamy/api\";\nimport { vec3 } from \"../atoms/math/vec3.js\";\n\n/**\n * The box around a sculpt's additive stamps (each a rotated box of its scale): the core's stand-in for the\n * mesh bounds the POC read after meshing. Blends make the real mesh slightly larger.\n */\nexport function stampsBox(stamps: readonly Pick<Stamp, \"mode\" | \"position\" | \"rotation\" | \"scale\">[]): { readonly min: Vec3; readonly max: Vec3 } | undefined {\n const adds = stamps.filter((s) => s.mode === \"add\");\n if (adds.length === 0) return undefined;\n const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];\n for (const s of adds) {\n const { x, y, z, w } = s.rotation;\n // rotation matrix rows\n const R = [\n [1 - 2 * (y * y + z * z), 2 * (x * y - z * w), 2 * (x * z + y * w)],\n [2 * (x * y + z * w), 1 - 2 * (x * x + z * z), 2 * (y * z - x * w)],\n [2 * (x * z - y * w), 2 * (y * z + x * w), 1 - 2 * (x * x + y * y)],\n ];\n const half = [s.scale.x / 2, s.scale.y / 2, s.scale.z / 2];\n const p = [s.position.x, s.position.y, s.position.z];\n for (let i = 0; i < 3; i++) {\n const row = R[i]!;\n const e = Math.abs(row[0]!) * half[0]! + Math.abs(row[1]!) * half[1]! + Math.abs(row[2]!) * half[2]!;\n min[i] = Math.min(min[i]!, p[i]! - e);\n max[i] = Math.max(max[i]!, p[i]! + e);\n }\n }\n return { min: vec3(min[0]!, min[1]!, min[2]!), max: vec3(max[0]!, max[1]!, max[2]!) };\n}\n", "import type { ColorRef } from \"@dreamy/api\";\nimport { PALETTE_SLOTS } from \"./default-palette.js\";\n\n/**\n * A POC slot reference (`s:0` \u2026 `s:6`, `s:tongue`, `s:teeth`, `s:black`) as a palette ref.\n * Anything else (a literal number) falls back to `fallback`: the new model never stores raw colors.\n */\nexport function pocColorRef(ref: unknown, fallback: ColorRef = \"secondary\"): ColorRef {\n if (typeof ref !== \"string\" || !ref.startsWith(\"s:\")) return fallback;\n const key = ref.slice(2);\n if (key === \"tongue\" || key === \"teeth\" || key === \"black\") return key;\n return PALETTE_SLOTS[Number(key)] ?? fallback;\n}\n", "import type { ColorRef } from \"@dreamy/api\";\nimport { pocColorRef } from \"../atoms/palette/poc-color-ref.js\";\nimport type { TemplateColor } from \"./bake-types.js\";\n\n/**\n * POC bakeColor + slot refs: \"@key\" is the template's color for that key (the POC falls back to the\n * literal 0xfbbf24, the default Secondary, which is the Secondary slot here); \"s:N\" refs become slots.\n */\nexport function templateColor(c: TemplateColor | undefined, colors: { readonly [key: string]: TemplateColor }): ColorRef {\n const ref = typeof c === \"string\" && c.startsWith(\"@\") ? (colors[c.slice(1)] ?? \"s:1\") : c;\n return pocColorRef(ref, \"secondary\");\n}\n", "import type { BodyPart, BuiltinDecalCategory, Decal, Id, Quaternion, Vec3 } from \"@dreamy/api\";\nimport { fromBasis, normalizeQ, quat } from \"../atoms/math/quat.js\";\nimport { cross, dot, normalize, vec3 } from \"../atoms/math/vec3.js\";\nimport { taggedRole } from \"../atoms/rig/bone-role.js\";\nimport type { BakeDecal } from \"./bake-types.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport type { PartContext } from \"./part-context.js\";\nimport type { TemplateDecal } from \"./rig-builder.js\";\nimport { stampsBox } from \"./stamps-box.js\";\nimport { templateColor } from \"./template-color.js\";\n\nexport type PlacedDecal = { readonly boneId: Id; readonly decal: Omit<Decal, \"id\"> };\n\nconst CATEGORIES: readonly string[] = [\"eye\", \"mouth\", \"mark\", \"door\", \"emoji\", \"interior\"];\nconst art = (cat: string, name: string): Decal[\"art\"] => ({ kind: \"builtin\", category: cat as BuiltinDecalCategory, name });\n\n/** POC autoPlaceDecalOnPart's frame: z is the surface normal, x level. */\nfunction surfaceRotation(normal: Vec3): Quaternion {\n let up = vec3(0, 1, 0);\n let x = cross(up, normal);\n if (dot(x, x) < 1e-4) {\n up = vec3(0, 0, -1);\n x = cross(up, normal);\n }\n x = normalize(x);\n return normalizeQ(fromBasis(x, cross(normal, x), normal));\n}\n\n/**\n * POC placeTemplateDecals, without a mesh: the POC cast a ray along -z at (c + u\u00B70.8\u00B7hx, c + v\u00B70.8\u00B7hy) onto\n * the head mesh. Here the ray meets the ellipsoid inscribed in the head part's stamp box instead (a miss\n * falls back to the face centre, as the POC did). Pairs place a second, flipped copy at -u.\n */\nexport function templateDecals(specs: readonly TemplateDecal[], nodes: readonly BoneNode[], parts: readonly BodyPart[], ctx: PartContext): PlacedDecal[] {\n const out: PlacedDecal[] = [];\n for (const spec of specs) {\n if (!CATEGORIES.includes(spec.cat)) continue;\n const node =\n nodes.find((n) => n.name === spec.bone) ?? nodes.find((n) => taggedRole(n) === spec.bone) ?? nodes.find((n) => /Head/i.test(n.name));\n const part = node && parts.find((p) => p.boneId === node.id);\n if (!node || part?.kind !== \"sculpt\") continue;\n const box = stampsBox(part.sculpt.stamps);\n if (!box) continue;\n const c = vec3((box.min.x + box.max.x) / 2, (box.min.y + box.max.y) / 2, (box.min.z + box.max.z) / 2);\n const h = vec3((box.max.x - box.min.x) / 2, (box.max.y - box.min.y) / 2, (box.max.z - box.min.z) / 2);\n const u0 = spec.u ?? 0.32;\n const us = spec.pair ? [Math.abs(u0), -Math.abs(u0)] : [spec.u ?? 0];\n const size = (spec.size ?? 0.5) * Math.max(h.x, h.y) * 2;\n us.forEach((u, i) => {\n let dx = u * h.x * 0.8, dy = (spec.v ?? 0) * h.y * 0.8;\n let k = 1 - (dx / h.x) ** 2 - (dy / h.y) ** 2;\n if (k < 0) {\n dx = 0;\n dy = 0;\n k = 1;\n }\n const dz = h.z * Math.sqrt(k);\n const normal = normalize(vec3(dx / (h.x * h.x), dy / (h.y * h.y), dz / (h.z * h.z)));\n out.push({\n boneId: node.id,\n decal: {\n art: art(spec.cat, spec.name),\n position: vec3(c.x + dx, c.y + dy, c.z + dz),\n rotation: surfaceRotation(normal),\n size,\n flip: !!(spec.flip ?? (spec.pair && i === 1)),\n ...(spec.tint !== undefined ? { tint: templateColor(spec.tint, ctx.colors) } : {}),\n opacity: 1,\n },\n });\n });\n }\n return out;\n}\n\n/** POC placeBakedDecals: exact template-space poses mapped with the fit (sizes by the mean scale). */\nexport function bakedDecals(specs: readonly BakeDecal[], nodes: readonly BoneNode[], parts: readonly BodyPart[], ctx: PartContext): PlacedDecal[] {\n const { c, h } = ctx;\n const hm = (h.x + h.y + h.z) / 3;\n return specs.flatMap((spec): PlacedDecal[] => {\n const node = nodes.find((n) => n.name === spec.bone);\n const part = node && parts.find((p) => p.boneId === node.id);\n if (!node || part?.kind !== \"sculpt\" || !CATEGORIES.includes(spec.cat)) return [];\n const [qx, qy, qz, qw] = spec.q;\n return [\n {\n boneId: node.id,\n decal: {\n art: art(spec.cat, spec.name),\n position: vec3(c.x + spec.p[0] * h.x, c.y + spec.p[1] * h.y, c.z + spec.p[2] * h.z),\n rotation: quat(qx, qy, qz, qw),\n size: spec.size * hm,\n flip: !!spec.flip,\n ...(spec.tint !== undefined ? { tint: templateColor(spec.tint, ctx.colors) } : {}),\n opacity: 1,\n },\n },\n ];\n });\n}\n", "import type { BakePart } from \"./bake-types.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport type { PartContext } from \"./part-context.js\";\n\n/**\n * POC bakedPartFor: the bake's entry for a bone (a part, or null for no part) and whether it is the side L\n * twin's part reused for a side R bone; undefined when the bake says nothing (generate one).\n */\nexport function bakedPartFor(node: BoneNode, ctx: PartContext): { spec: BakePart | null; mirror: boolean } | undefined {\n const bake = ctx.bake;\n if (!bake) return undefined;\n const own = bake.parts[node.name];\n if (own !== undefined) return { spec: own, mirror: false };\n const mt = node.tags.find((t) => t.startsWith(\"mirror:\"));\n if (!mt || !node.tags.includes(\"side:R\")) return undefined;\n const twin = bake.bones.find((d) => d[3].includes(mt) && d[3].includes(\"side:L\"));\n const twinPart = twin ? bake.parts[twin[0]] : undefined;\n return twin && twinPart !== undefined ? { spec: twinPart, mirror: true } : undefined;\n}\n", "/* Port of the POC's per-role body part styles (rig-parts.js PART_STYLES, PART_K, PART_PALETTE). */\nimport type { FleckShape } from \"@dreamy/api\";\n\nexport type PartFleck = {\n readonly shape: FleckShape;\n readonly size?: number;\n readonly coverage?: number;\n readonly variation?: number;\n readonly regularity?: number;\n readonly boil?: number;\n readonly normalStrength?: number;\n};\n\nexport type PartStyle = {\n readonly kind: \"body\" | \"head\" | \"limb\" | \"wing\" | \"flat\";\n readonly colorKey: string;\n readonly fleck?: PartFleck;\n readonly mat?: { readonly roughness?: number; readonly metalness?: number; readonly foundationDarkness?: number };\n readonly opacity?: number;\n /** limb: radius at the chain root / tip (\u00D7 extent), joint sphere factor, cone at the chain tip. */\n readonly r0?: number;\n readonly r1?: number;\n readonly joint?: number;\n readonly tipCone?: boolean;\n /** wing panels: thickness and chord (\u00D7 extent). */\n readonly thick?: number;\n readonly chord?: readonly number[];\n /** flat wing parameters (templates override them per bone). */\n readonly wing?: { readonly [key: string]: number | string };\n};\n\n/** Radius = segment length \u00D7 K for body kinds. */\nexport const PART_K: { readonly [role: string]: number } = { core: 0.55, flat: 0.5, head: 0.4, thin: 0.3, limb: 0.2 };\n\n/** Default color per role (index into the editable palette) when no template color applies. */\nexport const PART_PALETTE: { readonly [role: string]: number } = { head: 0, core: 1, thin: 2, limb: 3, flat: 4 };\n\nexport const PART_STYLES: { readonly [role: string]: PartStyle } = {\n core: { kind: \"body\", colorKey: \"core\", fleck: { shape: \"plates\", size: 0.8, coverage: 1, variation: 0.25, regularity: 0.6, normalStrength: 1.1 }, mat: { roughness: 0.45, metalness: 0.15, foundationDarkness: 0.3 } },\n head: { kind: \"head\", colorKey: \"head\", fleck: { shape: \"plates\", size: 0.5, coverage: 1, variation: 0.2, regularity: 0.7, normalStrength: 1.0 }, mat: { roughness: 0.4, metalness: 0.1, foundationDarkness: 0.3 } },\n \"insect-leg\": { kind: \"limb\", r0: 0.045, r1: 0.026, joint: 1.15, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"limb\" },\n \"spider-leg\": { kind: \"limb\", r0: 0.055, r1: 0.03, joint: 1.2, tipCone: true, fleck: { shape: \"grass\", size: 0.25, coverage: 0.8, variation: 0.3 }, colorKey: \"limb\" },\n leg: { kind: \"limb\", r0: 0.065, r1: 0.038, joint: 1.1, tipCone: false, fleck: { shape: \"sand\", size: 0.4, coverage: 0.9, variation: 0.3 }, colorKey: \"limb\" },\n arm: { kind: \"limb\", r0: 0.065, r1: 0.038, joint: 1.12, tipCone: false, fleck: { shape: \"sand\", size: 0.35, coverage: 0.85, variation: 0.3 }, colorKey: \"limb\" },\n antenna: { kind: \"limb\", r0: 0.018, r1: 0.01, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"thin\" },\n wing: { kind: \"wing\", thick: 0.022, chord: [0.45, 0.5, 0.22], opacity: 0.55, fleck: { shape: \"none\" }, colorKey: \"flat\" },\n tentacle: { kind: \"limb\", r0: 0.085, r1: 0.022, joint: 1.0, tipCone: true, fleck: { shape: \"circle\", size: 0.5, coverage: 0.9, regularity: 0.8 }, colorKey: \"thin\" },\n neck: { kind: \"limb\", r0: 0.07, r1: 0.045, joint: 1.1, tipCone: false, fleck: { shape: \"circle\", size: 0.4, coverage: 0.9 }, colorKey: \"thin\" },\n tail: { kind: \"limb\", r0: 0.07, r1: 0.028, joint: 1.05, tipCone: true, fleck: { shape: \"circle\", size: 0.4, coverage: 0.9 }, colorKey: \"thin\" },\n // Flat membrane: only the first bone of the chain gets the plane; templates set per-bone wing params.\n \"insect-wing\": { kind: \"flat\", colorKey: \"flat\", wing: { outline: \"dragonfly\", style: \"clear\", border: 0.3, base: \"@flat\", base2: \"@flat\" } },\n fin: { kind: \"wing\", thick: 0.02, chord: [0.4, 0.5, 0.25], opacity: 0.7, fleck: { shape: \"none\" }, colorKey: \"flat\" },\n mandible: { kind: \"limb\", r0: 0.03, r1: 0.01, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"detail\" },\n claw: { kind: \"limb\", r0: 0.04, r1: 0.01, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"detail\" },\n stinger: { kind: \"limb\", r0: 0.035, r1: 0.015, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"thin\" },\n ear: { kind: \"limb\", r0: 0.04, r1: 0.02, joint: 1.0, tipCone: false, fleck: { shape: \"none\" }, colorKey: \"limb\" },\n beak: { kind: \"limb\", r0: 0.03, r1: 0.01, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"accent\" },\n horn: { kind: \"limb\", r0: 0.035, r1: 0.01, joint: 1.0, tipCone: true, fleck: { shape: \"none\" }, colorKey: \"detail\" },\n abdomen: { kind: \"body\", fleck: { shape: \"plates\", size: 0.6, coverage: 1, variation: 0.2, regularity: 0.6 }, colorKey: \"abdomen\" },\n // legacy name roles\n flat: { kind: \"wing\", thick: 0.022, chord: [0.45, 0.5, 0.22], fleck: { shape: \"none\" }, colorKey: \"flat\" },\n thin: { kind: \"limb\", r0: 0.04, r1: 0.015, joint: 1.05, tipCone: false, fleck: { shape: \"none\" }, colorKey: \"thin\" },\n limb: { kind: \"limb\", r0: 0.05, r1: 0.022, joint: 1.05, tipCone: false, fleck: { shape: \"sand\", size: 0.35, coverage: 0.85, variation: 0.3 }, colorKey: \"limb\" },\n};\n", "import type { ColorRef, Quaternion, StampShape, Vec3 } from \"@dreamy/api\";\nimport { pocColorRef } from \"../atoms/palette/poc-color-ref.js\";\nimport { fromBasis, fromUnitVectors, IDENTITY_Q } from \"../atoms/math/quat.js\";\nimport { add, addScaled, cross, distance, dot, length, normalize, scale, sub, vec3 } from \"../atoms/math/vec3.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport { PART_K, PART_PALETTE, PART_STYLES, type PartStyle } from \"./part-styles.js\";\nimport type { PartStamp } from \"./part-stamp.js\";\n\nexport type GeneratedBody = { readonly stamps: PartStamp[]; readonly color: ColorRef; readonly blend: number; readonly role: string };\n\nconst Y = vec3(0, 1, 0);\n\n/** POC roleChainInfo: how deep the bone sits in its role chain, and the chain's length. */\nfunction roleChainInfo(node: BoneNode, role: string): { depth: number; n: number } {\n let depth = 0;\n for (let par = node.parent; par && resolveBoneRole(par) === role; par = par.parent) depth++;\n let n = depth + 1;\n for (let cur = node; ; ) {\n const k = cur.children.find((c) => resolveBoneRole(c) === role);\n if (!k) break;\n n++;\n cur = k;\n }\n return { depth, n };\n}\n\n/** Wing panels: span along the bone, membrane as level as the bone allows. */\nfunction panelQuat(dir: Vec3): Quaternion {\n let z = cross(dir, Y);\n if (dot(z, z) < 1e-4) z = cross(dir, vec3(0, 0, 1));\n z = normalize(z);\n return fromBasis(dir, cross(z, dir), z);\n}\n\n/**\n * POC bodyStampsForBone: a generated part (one stamp per bone segment plus joint spheres) in the rig's\n * bind space, or null when the bone gets no part (a cone tip already ends there).\n */\nexport function bodyStampsForBone(node: BoneNode, extent: number): GeneratedBody | null {\n const role = resolveBoneRole(node);\n const st: PartStyle = PART_STYLES[role] ?? PART_STYLES[\"limb\"]!;\n const rMin = 0.025 * extent, rMax = 0.28 * extent;\n const clampR = (r: number) => Math.min(rMax, Math.max(rMin, r));\n const color = pocColorRef(`s:${PART_PALETTE[role] ?? 3}`);\n const head = node.head, stamps: PartStamp[] = [];\n const thick = Math.max(0.06 * extent, 0.05);\n let minDim = Infinity, joint = 0;\n const addStamp = (shape: StampShape, position: Vec3, rotation: Quaternion, w: number, h: number, d: number) => {\n stamps.push({ shape, mode: \"add\", position, rotation, scale: vec3(w, h, d), color });\n minDim = Math.min(minDim, w, h, d);\n };\n const kids = node.children;\n const sameRole = (c: BoneNode) => resolveBoneRole(c) === role;\n const bodyKind = (c: BoneNode) => {\n const s = PART_STYLES[resolveBoneRole(c)];\n return !!s && (s.kind === \"body\" || s.kind === \"head\");\n };\n const par = node.parent;\n const jointK = st.joint || 1.1;\n // First bone of a limb / wing chain: a short stalk back to the parent's joint\n const connect = (r: number) => {\n if (!par || resolveBoneRole(par) === role) return;\n const seg = sub(head, par.head), L = length(seg);\n if (L < 1e-4) return;\n addStamp(\"cylinder\", addScaled(par.head, seg, 0.5), fromUnitVectors(Y, scale(seg, 1 / L)), 2 * r, L, 2 * r);\n };\n\n if (st.kind === \"limb\") {\n const info = roleChainInfo(node, role);\n const t = info.n > 1 ? info.depth / (info.n - 1) : 0;\n const r0 = st.r0 ?? 0.075, r1 = st.r1 ?? 0.045;\n const rNominal = extent * (r0 + (r1 - r0) * t);\n connect(clampR(rNominal) * 0.9);\n kids.filter(sameRole).forEach((k) => {\n const seg = sub(k.head, head), L = length(seg);\n if (L < 1e-4) return;\n const dir = scale(seg, 1 / L), mid = addScaled(head, seg, 0.5);\n const r = clampR(Math.max(rNominal, 0.04 * L));\n const isLast = !k.children.some((c) => resolveBoneRole(c) === role);\n if (st.tipCone && isLast) {\n addStamp(\"cone\", mid, fromUnitVectors(Y, dir), 2 * r, L * 1.04, 2 * r);\n } else {\n addStamp(\"cylinder\", mid, fromUnitVectors(Y, dir), 2 * r, L * 1.04, 2 * r);\n addStamp(\"sphere\", k.head, IDENTITY_Q, 2 * jointK * r, 2 * jointK * r, 2 * jointK * r);\n }\n joint = Math.max(joint, r);\n });\n if (joint > 0) addStamp(\"sphere\", head, IDENTITY_Q, 2 * jointK * joint, 2 * jointK * joint, 2 * jointK * joint);\n if (!kids.some(sameRole)) {\n const rT = clampR(rNominal);\n const along = par ? normalize(sub(head, par.head)) : Y;\n if (role === \"leg\" && along.y < -0.5) {\n addStamp(\"sphere\", add(head, vec3(0, -0.2 * rT, 0.6 * rT)), IDENTITY_Q, 2.4 * rT, 1.5 * rT, 3.4 * rT);\n } else if (st.tipCone && par && resolveBoneRole(par) === role) {\n return null;\n } else {\n addStamp(\"sphere\", head, IDENTITY_Q, 2 * jointK * rT, 2 * jointK * rT, 2 * jointK * rT);\n }\n }\n } else if (st.kind === \"wing\") {\n const thickK = st.thick || 0.022, chord0 = st.chord?.[0] ?? 0.45;\n connect(Math.max(thickK * extent, 0.02) * 0.8);\n kids.filter(sameRole).forEach((k) => {\n const seg = sub(k.head, head), L = length(seg);\n if (L < 1e-4) return;\n const dir = scale(seg, 1 / L), mid = addScaled(head, seg, 0.5);\n const chord = Math.max(chord0 * extent, 0.05);\n const th = Math.max(thickK * extent, 0.08 * L);\n addStamp(\"cube\", mid, panelQuat(dir), L * 1.04, th, chord);\n });\n if (!kids.some(sameRole) && par && resolveBoneRole(par) !== role) {\n // Single-bone fin / wing: a panel from the parent's joint out to this bone\n const seg = sub(head, par.head), L = length(seg);\n if (L > 1e-4) {\n const dir = scale(seg, 1 / L);\n const chord = Math.max(chord0 * extent * 0.8, 0.05);\n addStamp(\"cube\", addScaled(par.head, seg, 0.6), panelQuat(dir), L * 0.8, Math.max(thickK * extent, 0.08 * L), Math.min(chord, L * 0.9));\n }\n }\n if (!stamps.length) addStamp(\"cube\", head, IDENTITY_Q, thick * 1.5, thick, thick * 1.5);\n } else {\n kids.filter(bodyKind).forEach((k) => {\n const seg = sub(k.head, head), L = length(seg);\n if (L < 1e-4) return;\n const dir = scale(seg, 1 / L), mid = addScaled(head, seg, 0.5);\n const r = clampR(L * (PART_K[role] ?? 0.4));\n addStamp(\"cylinder\", mid, fromUnitVectors(Y, dir), 2 * r, L * 1.04, 2 * r);\n addStamp(\"sphere\", k.head, IDENTITY_Q, 2 * r, 2 * r, 2 * r);\n joint = Math.max(joint, r);\n });\n if (joint > 0) addStamp(\"sphere\", head, IDENTITY_Q, 2.1 * joint, 2.1 * joint, 2.1 * joint);\n }\n\n if (!stamps.length) {\n const plen = par ? distance(par.head, head) : extent * 0.2;\n if (st.kind === \"wing\") addStamp(\"cube\", head, IDENTITY_Q, thick * 1.5, thick, thick * 1.5);\n else {\n // a head's sub-bone (snout, jaw) is a smaller lobe than the head itself\n const k = st.kind === \"head\" ? (par && resolveBoneRole(par) === \"head\" ? 0.35 : 0.6) : 0.3;\n const r = clampR(plen * k);\n addStamp(\"sphere\", head, IDENTITY_Q, 2 * r, 2 * r, 2 * r);\n }\n }\n return { stamps, color, blend: Math.min(0.3, Math.max(0.03, minDim * 0.3)), role };\n}\n", "import type { FleckShape, PatternKind, StampMode, StampShape } from \"@dreamy/api\";\n\n/** The POC's fleck shapes; the order is the shader's index. */\nexport const FLECK_SHAPES: readonly FleckShape[] = [\n \"pill\", \"circle\", \"square\", \"diamond\", \"triangle\", \"hexagon\", \"star\", \"cross\", \"ring\", \"streak\",\n \"leaf\", \"sand\", \"gravel\", \"cement\", \"grass\", \"terrazzo\", \"scales\", \"plates\", \"none\",\n];\n\n/** The POC's pattern types; the order is its `patternType` index. */\nexport const PATTERN_KINDS: readonly PatternKind[] = [\n \"none\", \"stripes\", \"tiger\", \"leopard\", \"cow\", \"thunder\", \"dots\", \"scales\", \"camouflage\",\n];\n\nexport const STAMP_SHAPES: readonly StampShape[] = [\n \"cube\", \"sphere\", \"cylinder\", \"torus\", \"cone\", \"pyramid\", \"prism\", \"octahedron\", \"capsule\", \"dome\",\n];\n\nexport const STAMP_MODES: readonly StampMode[] = [\"add\", \"subtract\", \"intersect\", \"paint\"];\n\n/** POC shape ids that were renamed in the new model. */\nexport function pocStampShape(type: string): StampShape {\n if (type === \"box\") return \"cube\";\n if (type === \"hemisphere\") return \"dome\";\n return (STAMP_SHAPES as readonly string[]).includes(type) ? (type as StampShape) : \"cube\";\n}\n", "import type { BakeCoat, BakeStamp, TemplateColor } from \"./bake-types.js\";\n\n/** POC coatStamps: procedural wool, rings of puffs on an ellipsoid plus a filler core, symmetric about x = 0. */\nexport function coatStamps(coat: BakeCoat, color: TemplateColor): BakeStamp[] {\n const out: BakeStamp[] = [];\n const [cx, cy, cz] = coat.c, [rx, ry, rz] = coat.r, rings = coat.rings || 5;\n const sphere = (p: readonly [number, number, number], d: number): BakeStamp => [\"sphere\", \"add\", p, [0, 0, 0], [d, d, d], color];\n out.push([\"sphere\", \"add\", [cx, cy, cz], [0, 0, 0], [rx * 1.85, ry * 1.85, rz * 1.85], color]);\n for (let i = 0; i <= rings; i++) {\n const th = (i / rings) * Math.PI * 0.86;\n const ringR = Math.sin(th) * (rx + rz) * 0.5;\n const k = i === 0 ? 1 : Math.max(3, Math.round((2 * Math.PI * ringR) / (coat.puff * 0.62)));\n for (let j = 0; j < k; j++) {\n const ph = ((j + 0.5) * 2 * Math.PI) / k;\n const wob = 1 + 0.14 * Math.sin(7.3 * Math.cos(ph) + 2.1 * i);\n out.push(sphere([cx + rx * Math.sin(th) * Math.sin(ph), cy + ry * Math.cos(th), cz + rz * Math.sin(th) * Math.cos(ph)], coat.puff * wob));\n }\n }\n return out;\n}\n", "import type { WingFrame } from \"@dreamy/api\";\nimport { cross, length, normalize, scale, sub, vec3, negate } from \"../atoms/math/vec3.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\n\nconst sideOf = (n: BoneNode) => n.tags.find((t) => t.startsWith(\"side:\"));\n\nfunction chainTip(node: BoneNode, role: string): BoneNode {\n let cur = node;\n for (;;) {\n const k = cur.children.find((c) => resolveBoneRole(c) === role);\n if (!k) return cur;\n cur = k;\n }\n}\n\n/**\n * POC wingFrameFor: span from the root to the end of the wing chain; the membrane plane is the sibling\n * wing pair's plane (fore and hind coplanar), else level; the chord points backwards, as long as the span.\n */\nexport function wingFrameFor(node: BoneNode, siblings: readonly BoneNode[], extent: number): { frame: WingFrame; part: \"fore\" | \"hind\" } {\n const role = resolveBoneRole(node);\n const root = node.head;\n let X = sub(chainTip(node, role).head, root);\n if (length(X) < 1e-4) {\n const d = node.parent ? normalize(sub(root, node.parent.head)) : vec3(1, 0, 0);\n X = scale(d, extent * 0.6);\n }\n const L = length(X), dir = normalize(X);\n const side = sideOf(node);\n const sib = siblings.find((c) => c !== node && resolveBoneRole(c) === role && sideOf(c) === side);\n let N = undefined as ReturnType<typeof vec3> | undefined;\n let part: \"fore\" | \"hind\" = \"fore\";\n if (sib) {\n let sd = sub(chainTip(sib, role).head, sib.head);\n if (length(sd) > 1e-4) {\n sd = normalize(sd);\n const c = cross(dir, sd);\n if (length(c) > 0.05) N = normalize(c);\n part = dir.z >= sd.z ? \"fore\" : \"hind\";\n }\n }\n if (!N) {\n let z = cross(dir, vec3(0, 1, 0));\n if (z.x * z.x + z.y * z.y + z.z * z.z < 1e-4) z = cross(dir, vec3(0, 0, 1));\n N = normalize(cross(normalize(z), dir));\n }\n if (N.y < 0) N = negate(N);\n let C = normalize(cross(N, dir));\n if (C.z > 0) C = negate(C);\n return { frame: { origin: root, span: X, chord: scale(C, L) }, part };\n}\n", "import type { FlatWing } from \"@dreamy/api\";\n\n/** POC WING_DEFAULTS (colors as palette refs). */\nexport const WING_DEFAULTS: Omit<FlatWing, \"frame\"> = {\n outline: \"monarch\",\n part: \"fore\",\n span: 1,\n chord: 1,\n tail: 0,\n style: \"veins\",\n density: 0.5,\n seed: 1,\n border: 0.4,\n spots: 0.5,\n base: \"primary\",\n base2: \"secondary\",\n mark: \"detail\",\n ink: \"black\",\n dot: \"teeth\",\n};\n\nexport const WING_COLOR_KEYS = [\"base\", \"base2\", \"mark\", \"ink\", \"dot\"] as const;\n", "import type { BodyPart, FlatWing, Material } from \"@dreamy/api\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport type { PartContext } from \"./part-context.js\";\nimport { templateColor } from \"./template-color.js\";\nimport { wingFrameFor } from \"./wing-frame.js\";\nimport { WING_COLOR_KEYS, WING_DEFAULTS } from \"./wing-defaults.js\";\n\n/**\n * POC makeFlatPart + createFlatWingPart: defaults, then the frame's fore / hind guess, then the style's\n * parameters (\"@key\" colors from the template; base and base2 default to the style's color key).\n */\nexport function makeFlatPart(\n node: BoneNode,\n style: { readonly colorKey: string; readonly wing?: { readonly [key: string]: number | string } },\n material: Partial<Material>,\n ctx: PartContext,\n): BodyPart {\n const siblings = node.parent ? node.parent.children : ctx.roots;\n const fr = wingFrameFor(node, siblings, ctx.extent);\n const spec: Record<string, unknown> = { ...(style.wing ?? {}) };\n for (const k of WING_COLOR_KEYS) {\n if (spec[k] !== undefined) spec[k] = templateColor(spec[k] as string, ctx.colors);\n }\n for (const k of [\"base\", \"base2\"] as const) {\n if (spec[k] === undefined && ctx.colors[style.colorKey] !== undefined) spec[k] = templateColor(ctx.colors[style.colorKey], ctx.colors);\n }\n const wing = { ...WING_DEFAULTS, part: fr.part, ...spec, frame: fr.frame } as FlatWing;\n return {\n boneId: node.id,\n kind: \"wing\",\n wing,\n material: { roughness: material.roughness ?? 0.6, metalness: material.metalness ?? 0, glow: material.glow ?? 0, opacity: material.opacity ?? 1 },\n };\n}\n", "import type { BodyPart, FleckShape, IdGenerator, PatternKind, SculptLook, Stamp, StampMode } from \"@dreamy/api\";\nimport { PATTERN_KINDS, pocStampShape } from \"../atoms/look/catalogs.js\";\nimport { DEFAULT_PIVOT, defaultLook } from \"../atoms/look/default-look.js\";\nimport { fromEulerXYZ } from \"../atoms/math/quat.js\";\nimport { vec3 } from \"../atoms/math/vec3.js\";\nimport type { BakeLook, BakePart } from \"./bake-types.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport { coatStamps } from \"./coat-stamps.js\";\nimport { makeFlatPart } from \"./make-flat-part.js\";\nimport type { PartContext } from \"./part-context.js\";\nimport { templateColor } from \"./template-color.js\";\n\nconst num = (sd: BakeLook, k: string, fallback: number): number => (typeof sd[k] === \"number\" ? (sd[k] as number) : fallback);\n\n/** A baked part's look: the sculpt defaults overlaid with the bake's sculptData keys. */\nfunction bakedLook(spec: BakePart, ctx: PartContext): SculptLook {\n const sd = spec.sd, base = defaultLook(templateColor(spec.color, ctx.colors));\n const col = (k: string, fallback: SculptLook[\"color\"]) => (sd[k] !== undefined ? templateColor(String(sd[k]), ctx.colors) : fallback);\n const f = base.fleck, m = base.material, p = base.pattern;\n return {\n color: base.color,\n foundationColor: col(\"foundationColor\", base.foundationColor),\n fleck: {\n shape: (typeof sd[\"shape\"] === \"string\" ? sd[\"shape\"] : f.shape) as FleckShape,\n size: num(sd, \"size\", f.size),\n variation: num(sd, \"variation\", f.variation),\n coverage: num(sd, \"coverage\", f.coverage),\n regularity: num(sd, \"regularity\", f.regularity),\n boil: num(sd, \"boil\", f.boil),\n foundationDarkness: num(sd, \"foundationDarkness\", f.foundationDarkness),\n normalStrength: num(sd, \"normalStrength\", f.normalStrength),\n },\n material: {\n roughness: num(sd, \"roughness\", m.roughness),\n metalness: num(sd, \"metalness\", m.metalness),\n glow: num(sd, \"glow\", m.glow),\n opacity: num(sd, \"opacity\", m.opacity),\n },\n blend: num(sd, \"blend\", 0.1),\n pattern: {\n kind: (PATTERN_KINDS[num(sd, \"patternType\", 0)] ?? \"none\") as PatternKind,\n scale: num(sd, \"patternScale\", p.scale),\n strength: num(sd, \"patternStrength\", p.strength),\n rotation: vec3(num(sd, \"patternRotX\", 0), num(sd, \"patternRotY\", 0), num(sd, \"patternRotZ\", 0)),\n color: col(\"patternColor\", p.color),\n color2: col(\"patternColor2\", p.color2),\n },\n };\n}\n\n/**\n * POC makeBakedPart: template-space stamps mapped into rig space (positions per axis, sizes by the mean\n * fit scale); a side R bone without its own entry reuses its side L twin's part reflected (`mirror`).\n */\nexport function makeBakedPart(node: BoneNode, spec: BakePart, mirror: boolean, ctx: PartContext, ids: IdGenerator): BodyPart {\n const { c, h } = ctx;\n const hm = (h.x + h.y + h.z) / 3, sx = mirror ? -1 : 1;\n if (spec.wing) {\n const sd = spec.sd ?? {};\n return makeFlatPart(node, { colorKey: \"flat\", wing: spec.wing }, {\n roughness: num(sd, \"roughness\", 0.6),\n metalness: num(sd, \"metalness\", 0),\n glow: num(sd, \"glow\", 0),\n opacity: num(sd, \"opacity\", 1),\n }, ctx);\n }\n const rows = spec.coat ? [...spec.stamps, ...coatStamps(spec.coat, spec.color)] : spec.stamps;\n const toMode = (m: string): StampMode => (m === \"subtract\" || m === \"intersect\" || m === \"paint\" ? m : \"add\");\n const stamps = rows.map(([type, mode, p, r, s, col, over]): Stamp => ({\n id: ids.next(),\n shape: pocStampShape(type),\n mode: toMode(mode),\n position: vec3(c.x + sx * p[0] * h.x, c.y + p[1] * h.y, c.z + p[2] * h.z),\n rotation: fromEulerXYZ(r[0], sx * r[1], sx * r[2]),\n scale: vec3(s[0] * hm, s[1] * hm, s[2] * hm),\n color: templateColor(col, ctx.colors),\n ...(over?.blend !== undefined ? { blend: over.blend } : {}),\n ...(over?.foundationColor !== undefined ? { foundationColor: templateColor(over.foundationColor, ctx.colors) } : {}),\n }));\n return { boneId: node.id, kind: \"sculpt\", sculpt: { stamps, smearGroups: [], look: bakedLook(spec, ctx), pivot: DEFAULT_PIVOT, decals: [] } };\n}\n", "import type { BoneNode } from \"./bone-tree.js\";\nimport { PART_STYLES, type PartStyle } from \"./part-styles.js\";\nimport type { TemplateStyle } from \"./rig-builder.js\";\n\n/** POC getStyleForBone: a template style whose key (a regex) matches the name, else the role's style. */\nexport function styleForBone(\n node: BoneNode,\n role: string,\n styles: { readonly [pattern: string]: TemplateStyle },\n): PartStyle | TemplateStyle | undefined {\n for (const key of Object.keys(styles)) {\n try {\n if (new RegExp(key).test(node.name)) return styles[key];\n } catch {\n // a bad pattern matches nothing\n }\n }\n return PART_STYLES[role];\n}\n", "import type { BodyPart, ColorRef, IdGenerator, SculptLook } from \"@dreamy/api\";\nimport { DEFAULT_PIVOT, defaultLook } from \"../atoms/look/default-look.js\";\nimport { IDENTITY_Q } from \"../atoms/math/quat.js\";\nimport { vec3 } from \"../atoms/math/vec3.js\";\nimport { boneRegion } from \"../atoms/rig/bone-region.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { bakedPartFor } from \"./baked-part-for.js\";\nimport { bodyStampsForBone } from \"./body-stamps-for-bone.js\";\nimport type { BoneNode } from \"./bone-tree.js\";\nimport { makeBakedPart } from \"./make-baked-part.js\";\nimport { makeFlatPart } from \"./make-flat-part.js\";\nimport type { PartContext } from \"./part-context.js\";\nimport type { PartStamp } from \"./part-stamp.js\";\nimport type { PartStyle } from \"./part-styles.js\";\nimport { styleForBone } from \"./style-for-bone.js\";\nimport { templateColor } from \"./template-color.js\";\n\n/** POC applyPartStyle: a role style's material and fleck over the sculpt defaults. */\nfunction styledLook(color: ColorRef, blend: number, st: PartStyle | undefined): SculptLook {\n const base = defaultLook(color);\n if (!st) return { ...base, blend };\n const f = st.fleck, m = st.mat;\n return {\n ...base,\n blend,\n fleck: {\n ...base.fleck,\n ...(f ? { shape: f.shape } : {}),\n ...(f?.size !== undefined ? { size: f.size } : {}),\n ...(f?.coverage !== undefined ? { coverage: f.coverage } : {}),\n ...(f?.variation !== undefined ? { variation: f.variation } : {}),\n ...(f?.regularity !== undefined ? { regularity: f.regularity } : {}),\n ...(f?.boil !== undefined ? { boil: f.boil } : {}),\n ...(f?.normalStrength !== undefined ? { normalStrength: f.normalStrength } : {}),\n ...(m?.foundationDarkness !== undefined ? { foundationDarkness: m.foundationDarkness } : {}),\n },\n material: {\n ...base.material,\n ...(m?.roughness !== undefined ? { roughness: m.roughness } : {}),\n ...(m?.metalness !== undefined ? { metalness: m.metalness } : {}),\n ...(st.opacity !== undefined ? { opacity: st.opacity } : {}),\n },\n };\n}\n\nconst sculptPart = (node: BoneNode, stamps: readonly PartStamp[], look: SculptLook, ids: IdGenerator): BodyPart => ({\n boneId: node.id,\n kind: \"sculpt\",\n sculpt: { stamps: stamps.map((s) => ({ ...s, id: ids.next() })), smearGroups: [], look, pivot: DEFAULT_PIVOT, decals: [] },\n});\n\n/** A small knob at the joint: where to start sculpting a bone that gets no generated part. */\nfunction knob(node: BoneNode, extent: number): PartStamp {\n const r = Math.max(0.025 * extent, 0.05);\n return { shape: \"sphere\", mode: \"add\", position: node.head, rotation: IDENTITY_Q, scale: vec3(2 * r, 2 * r, 2 * r), color: \"highlight\" };\n}\n\n/**\n * POC makeBodyPart: the bake's part, a flat wing for a wing chain's first bone, or a generated part\n * colored by the template and styled by the bone's role. Null when the bone gets no part; `generate`\n * (the user asked to sculpt this bone) always returns a part, falling back to a knob.\n */\nexport function makeBodyPart(node: BoneNode, ctx: PartContext, ids: IdGenerator, generate = false): BodyPart | null {\n const baked = bakedPartFor(node, ctx);\n if (baked?.spec) return makeBakedPart(node, baked.spec, baked.mirror, ctx, ids);\n if (baked && !generate) return null;\n const role = resolveBoneRole(node);\n const flat = styleForBone(node, role, ctx.styles);\n if (flat?.kind === \"flat\") {\n if (node.parent && resolveBoneRole(node.parent) === role) {\n return generate ? sculptPart(node, [knob(node, ctx.extent)], { ...defaultLook(\"highlight\"), blend: 0.05 }, ids) : null;\n }\n return makeFlatPart(node, flat, {}, ctx);\n }\n let body = bodyStampsForBone(node, ctx.extent);\n if (!body) {\n if (!generate) return null;\n body = { stamps: [knob(node, ctx.extent)], color: \"highlight\", blend: 0.05, role };\n }\n const st = styleForBone(node, body.role, ctx.styles) as PartStyle | undefined;\n const keyed = st?.colorKey !== undefined ? (ctx.colors[st.colorKey] ?? ctx.colors[\"core\"]) : undefined;\n const color = keyed !== undefined ? templateColor(keyed, ctx.colors) : body.color;\n const stamps = keyed !== undefined ? body.stamps.map((s) => ({ ...s, color })) : body.stamps;\n return sculptPart(node, stamps, styledLook(color, ctx.regionBlends[boneRegion(node)], st), ids);\n}\n", "import type { Bone, BodyPart, Id, IdGenerator, RegionBlends, Rig, Vec3 } from \"@dreamy/api\";\nimport { translation } from \"../atoms/math/transform.js\";\nimport { fromEulerXYZ, rotate } from \"../atoms/math/quat.js\";\nimport { sub, vec3 } from \"../atoms/math/vec3.js\";\nimport { MAX_DECALS } from \"../atoms/decal/decal-limits.js\";\nimport { rigExtent } from \"../atoms/rig/rig-extent.js\";\nimport type { BakeStamp } from \"./bake-types.js\";\nimport { boneTree, type BoneNode } from \"./bone-tree.js\";\nimport { buildTemplate } from \"./build-template.js\";\nimport { bakedDecals, templateDecals } from \"./face-decals.js\";\nimport { makeBodyPart } from \"./make-body-part.js\";\nimport type { PartContext } from \"./part-context.js\";\nimport type { Fit } from \"./premade-fit.js\";\nimport type { SkeletonTemplate } from \"./template-catalog.js\";\n\nexport type PremadeOptions = {\n readonly fit: Fit;\n readonly withBody: boolean;\n /** Kept from a replaced rig (a new rig: mirror off, default region blends). */\n readonly mirror: boolean;\n readonly regionBlends: RegionBlends;\n};\n\n/** The template's bones in rig space: joint p lands at c + p * h; bind rotation identity, scale 1. */\nfunction premadeBones(tpl: SkeletonTemplate, fit: Fit, ids: IdGenerator): { bones: Bone[]; built: ReturnType<typeof buildTemplate> } {\n const built = buildTemplate(tpl);\n const world = new Map<string, Vec3>(), idOf = new Map<string, Id>();\n const { c, h } = fit;\n const bones = built.ordered.map((d): Bone => {\n const w = vec3(c.x + d.p[0] * h.x, c.y + d.p[1] * h.y, c.z + d.p[2] * h.z);\n const parentWorld = d.parent !== null ? world.get(d.parent) : undefined;\n const bind = translation(parentWorld ? sub(w, parentWorld) : w);\n const id = ids.next();\n world.set(d.name, w);\n idOf.set(d.name, id);\n const parentId = d.parent !== null ? idOf.get(d.parent) : undefined;\n return { id, name: d.name, ...(parentId !== undefined ? { parentId } : {}), tags: d.tags.slice(), bind, pose: bind };\n });\n return { bones, built };\n}\n\n/**\n * POC applyPremadeSkeleton (+ buildBodyParts, placeBakedDecals / placeTemplateDecals): the template's\n * skeleton fitted to `fit`; with a body, every bone's part (baked or generated) and the face decals, and\n * the rig starts in pose mode.\n */\nexport function buildPremadeRig(tpl: SkeletonTemplate, opts: PremadeOptions, ids: IdGenerator): Rig {\n const { bones, built } = premadeBones(tpl, opts.fit, ids);\n const bake = built.bake;\n const regionBlends = bake ? { ...bake.regionBlends } : opts.regionBlends;\n const rig: Rig = {\n bones,\n mode: opts.withBody ? \"pose\" : \"rig\",\n mirror: opts.mirror,\n mirrorX: opts.fit.c.x,\n regionBlends,\n parts: [],\n templateId: tpl.id,\n };\n if (!opts.withBody) return rig;\n\n const { nodes, roots } = boneTree(bones);\n const ordered: BoneNode[] = bones.map((b) => nodes.get(b.id)!);\n const ctx: PartContext = {\n colors: tpl.colors,\n styles: built.styles,\n ...(bake ? { bake } : {}),\n c: opts.fit.c,\n h: opts.fit.h,\n regionBlends,\n extent: rigExtent(ordered.map((n) => n.head)),\n roots,\n };\n const parts: BodyPart[] = ordered.flatMap((n) => {\n const part = makeBodyPart(n, ctx, ids);\n return part ? [part] : [];\n });\n const placed = bake ? bakedDecals(bake.decals, ordered, parts, ctx) : templateDecals(built.decals, ordered, parts, ctx);\n const withDecals = parts.map((p): BodyPart => {\n if (p.kind !== \"sculpt\") return p;\n const mine = placed.filter((d) => d.boneId === p.boneId).slice(0, MAX_DECALS);\n if (mine.length === 0) return p;\n return { ...p, sculpt: { ...p.sculpt, decals: mine.map((d) => ({ ...d.decal, id: ids.next() })) } };\n });\n return { ...rig, parts: withDecals };\n}\n\n/**\n * How far a baked stamp reaches below its center: a sphere by its rotated ellipsoid, a capsule by its axis segment\n * plus its radius, anything else by its rotated box.\n */\nfunction halfHeight(s: BakeStamp): number {\n const q = fromEulerXYZ(s[3][0], s[3][1], s[3][2]);\n const ys = [vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1)].map((a) => rotate(a, q).y);\n const half = [0.5 * s[4][0], 0.5 * s[4][1], 0.5 * s[4][2]] as const;\n if (s[0] === \"sphere\") return Math.hypot(ys[0]! * half[0], ys[1]! * half[1], ys[2]! * half[2]);\n if (s[0] === \"capsule\") {\n const r = Math.max(half[0], half[2]);\n return Math.abs(ys[1]!) * Math.max(half[1] - r, 0) + r;\n }\n return ys.reduce((h, y, j) => h + Math.abs(y) * half[j]!, 0);\n}\n\n/**\n * POC: a new rig stands on the ground. The lowest joint (and, for a baked body, the lowest point of a solid baked\n * stamp's box) goes to y = 0, but the rig rises at least 0.35 \u00D7 h.y. Unlike the POC (half the largest size), a stamp\n * reaches down by its rotated box, so flat stamps (a shell rim) don't leave the rig floating; subtract and paint\n * stamps add no material and don't count.\n */\nexport function premadeLift(tpl: SkeletonTemplate, fit: Fit, withBody: boolean): number {\n const built = buildTemplate(tpl);\n let minY = Math.min(...built.bones.map((d) => d.p[1]));\n if (built.bake && withBody) {\n for (const part of Object.values(built.bake.parts)) {\n part?.stamps.forEach((s) => {\n if (s[1] === \"subtract\" || s[1] === \"paint\") return;\n minY = Math.min(minY, s[2][1] - halfHeight(s));\n });\n }\n }\n return Math.max(-minY * fit.h.y, 0.35 * fit.h.y);\n}\n", "import type { Vec3 } from \"@dreamy/api\";\nimport { vec3, ZERO } from \"../atoms/math/vec3.js\";\nimport type { SkeletonTemplate } from \"./template-catalog.js\";\n\n/** Templates fill 90% of the object's bounds. */\nexport const RIG_FIT = 0.9;\nexport const RIG_DEFAULT_SIZE: readonly [number, number, number] = [2.2, 2.2, 2.2];\n\nexport type Fit = { readonly c: Vec3; readonly h: Vec3 };\n\n/**\n * POC applyPremadeSkeleton's fit: a new rig uses the template size around the origin; an object uses its\n * content's center and 90% of its half-size (no content, e.g. an empty rig: the template size). Each\n * half-size is at least 0.15.\n */\nexport function premadeFit(tpl: SkeletonTemplate, content?: { readonly center: Vec3; readonly halfSize: Vec3 }): Fit {\n const size = tpl.size ?? RIG_DEFAULT_SIZE;\n const hasContent = !!content && content.halfSize.x > 0 && content.halfSize.y > 0 && content.halfSize.z > 0;\n const c = hasContent ? content.center : ZERO;\n const raw = hasContent ? vec3(content.halfSize.x * RIG_FIT, content.halfSize.y * RIG_FIT, content.halfSize.z * RIG_FIT) : vec3(size[0], size[1], size[2]);\n return { c, h: vec3(Math.max(raw.x, 0.15), Math.max(raw.y, 0.15), Math.max(raw.z, 0.15)) };\n}\n", "import type { Bone, PartSlot, Vec3 } from \"@dreamy/api\";\nimport { bindHeads } from \"../atoms/rig/bone-matrices.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\n\n/** The chain slots in picker order; the coat is the skin, not a chain. */\nexport const PART_SLOTS: readonly PartSlot[] = [\"head\", \"ears\", \"horns\", \"tail\", \"wings\", \"legs\", \"arms\", \"antennae\", \"fins\", \"tentacles\", \"coat\"];\n\nconst SLOT_OF_ROLE: { readonly [role: string]: PartSlot } = {\n head: \"head\",\n ear: \"ears\",\n horn: \"horns\",\n tail: \"tail\",\n wing: \"wings\",\n \"insect-wing\": \"wings\",\n leg: \"legs\",\n \"insect-leg\": \"legs\",\n \"spider-leg\": \"legs\",\n arm: \"arms\",\n antenna: \"antennae\",\n fin: \"fins\",\n tentacle: \"tentacles\",\n};\n\n/** Bone roles whose parts wear the coat (not claws, horns, fangs, wings, fins or eyes). */\nexport const COAT_ROLES = new Set([\"core\", \"abdomen\", \"neck\", \"head\", \"leg\", \"arm\", \"tail\", \"ear\", \"insect-leg\", \"spider-leg\", \"tentacle\"]);\n\nexport const slotOfBone = (bone: Pick<Bone, \"name\" | \"tags\">): PartSlot | undefined => SLOT_OF_ROLE[resolveBoneRole(bone)];\n\n/** One chain of a slot: its bones from the start outward, their bind heads, side and (legs) front or hind. */\nexport type SlotChain = {\n readonly bones: readonly Bone[];\n readonly heads: readonly Vec3[];\n readonly side: 1 | -1 | 0;\n readonly front: boolean;\n};\n\n/** A slot's chains in a rig: runs of bones in that slot, each from a bone whose parent is not in it. */\nexport function slotChains(bones: readonly Bone[], slot: PartSlot): SlotChain[] {\n if (slot === \"coat\") return [];\n const heads = bindHeads(bones);\n const inSlot = (b: Bone) => slotOfBone(b) === slot;\n const byId = new Map(bones.map((b) => [b.id, b]));\n const starts = bones.filter((b) => inSlot(b) && !(b.parentId !== undefined && inSlot(byId.get(b.parentId)!)));\n const chains = starts.map((start) => {\n const run: Bone[] = [];\n const visit = (b: Bone) => {\n run.push(b);\n bones.filter((c) => c.parentId === b.id && inSlot(c)).forEach(visit);\n };\n visit(start);\n const side = start.tags.includes(\"side:L\") ? 1 : start.tags.includes(\"side:R\") ? -1 : 0;\n return { bones: run, heads: run.map((b) => heads.get(b.id)!), side: side as 1 | -1 | 0 };\n });\n const zs = chains.map((c) => c.heads[0]!.z);\n const mid = zs.length ? (Math.min(...zs) + Math.max(...zs)) / 2 : 0;\n return chains.map((c) => ({ ...c, front: zs.length < 2 || c.heads[0]!.z >= mid }));\n}\n\n/** The slots a skeleton has (chains present, plus the coat when it has any coat part). */\nexport const slotsOf = (bones: readonly Bone[]): PartSlot[] =>\n PART_SLOTS.filter((slot) => slot === \"coat\" || slotChains(bones, slot).length > 0);\n", "/*\n * Authoring helpers for hand-made premade bakes (dragon, spider): template-space stamps, mirrored limbs and decals\n * on an ellipsoid. Template space: +z forward, y up; stamp scales are full sizes.\n */\nimport type { BakeBone, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\n\nexport type V3 = readonly [number, number, number];\n\nconst BODY = \"@core\";\n\nexport const sub3 = (a: V3, b: V3): V3 => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\nexport const mid3 = (a: V3, b: V3): V3 => [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2];\nexport const len3 = (a: V3): number => Math.hypot(a[0], a[1], a[2]);\n\n/** Euler XYZ (three.js order) of the rotation taking +y onto `dir`. */\nexport function eulerUp(dir: V3): V3 {\n const L = len3(dir);\n const [x, y, z] = [dir[0] / L, dir[1] / L, dir[2] / L];\n // quaternion from (0,1,0) to (x,y,z)\n let qx = z, qy = 0, qz = -x, qw = 1 + y;\n if (qw < 1e-6) [qx, qy, qz, qw] = [1, 0, 0, 0];\n const n = Math.hypot(qx, qy, qz, qw);\n [qx, qy, qz, qw] = [qx / n, qy / n, qz / n, qw / n];\n // rotation matrix entries needed for XYZ euler\n const m11 = 1 - 2 * (qy * qy + qz * qz), m12 = 2 * (qx * qy - qz * qw), m13 = 2 * (qx * qz + qy * qw);\n const m22 = 1 - 2 * (qx * qx + qz * qz), m23 = 2 * (qy * qz - qx * qw), m33 = 1 - 2 * (qx * qx + qy * qy);\n const ey = Math.asin(Math.max(-1, Math.min(1, m13)));\n return Math.abs(m13) < 0.9999999 ? [Math.atan2(-m23, m33), ey, Math.atan2(-m12, m11)] : [Math.atan2(2 * (qy * qz + qx * qw), m22), ey, 0];\n}\n\nexport const R0: V3 = [0, 0, 0];\nexport const sphere = (p: V3, s: V3, color: TemplateColor = BODY): BakeStamp => [\"sphere\", \"add\", p, R0, s, color];\nexport const ball = (p: V3, d: number, color: TemplateColor = BODY): BakeStamp => sphere(p, [d, d, d], color);\nexport const paint = (p: V3, s: V3, color: TemplateColor): BakeStamp => [\"sphere\", \"paint\", p, R0, s, color];\nexport const carve = (p: V3, d: number): BakeStamp => [\"sphere\", \"subtract\", p, R0, [d, d, d], BODY];\n/** A capsule from a to b, `d` thick. */\nexport const limb = (a: V3, b: V3, d: number, color: TemplateColor = BODY): BakeStamp => [\"capsule\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [d, len3(sub3(b, a)) + d, d], color];\n/** A cone with its base at `a` and its point at `b`; a sharp blend keeps small points from melting away. */\nexport const cone = (a: V3, b: V3, d: number, color: TemplateColor, blend = 0.015): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [d, len3(sub3(b, a)), d], color, { blend }];\n/** A baked part: its stamps, its look (sculptData keys) and the part blend. */\nexport const part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook, color: TemplateColor = BODY): BakePart => ({\n color, sd: { ...look, blend }, stamps,\n});\n\nexport const mirrorX = (p: V3): V3 => [-p[0], p[1], p[2]];\nexport const tagsOf = (role: string, stem?: string, side?: \"L\" | \"R\"): string[] => (stem && side ? [`side:${side}`, `mirror:${stem}`, `role:${role}`] : [`role:${role}`]);\n\n/** A mirrored limb: names get \" L\" / \" R\", +x is L. */\nexport function pair(role: string, parent: string | ((side: \"L\" | \"R\") => string), joints: readonly (readonly [string, V3])[]): BakeBone[] {\n const out: BakeBone[] = [];\n for (const side of [\"L\", \"R\"] as const) {\n let par = typeof parent === \"string\" ? parent : parent(side);\n for (const [stem, p] of joints) {\n const name = `${stem} ${side}`;\n out.push([name, par, side === \"L\" ? p : mirrorX(p), tagsOf(role, stem, side)]);\n par = name;\n }\n }\n return out;\n}\n/** A decal on the ellipsoid (center c, full sizes s) where direction d leaves it; normal = the decal's +z. */\nexport function onEllipsoid(c: V3, s: V3, d: V3): { p: V3; q: readonly [number, number, number, number] } {\n const L = len3(d), u: V3 = [d[0] / L, d[1] / L, d[2] / L];\n const k = 1 / Math.hypot((2 * u[0]) / s[0], (2 * u[1]) / s[1], (2 * u[2]) / s[2]);\n const p: V3 = [c[0] + u[0] * k, c[1] + u[1] * k, c[2] + u[2] * k];\n const nRaw: V3 = [(p[0] - c[0]) / (s[0] * s[0]), (p[1] - c[1]) / (s[1] * s[1]), (p[2] - c[2]) / (s[2] * s[2])];\n const n = len3(nRaw), z: V3 = [nRaw[0] / n, nRaw[1] / n, nRaw[2] / n];\n // x level (up \u00D7 z), y = z \u00D7 x, as face-decals' surfaceRotation\n let x: V3 = [z[2], 0, -z[0]];\n const xl = len3(x);\n x = [x[0] / xl, x[1] / xl, x[2] / xl];\n const y: V3 = [z[1] * x[2] - z[2] * x[1], z[2] * x[0] - z[0] * x[2], z[0] * x[1] - z[1] * x[0]];\n const tr = x[0] + y[1] + z[2];\n let q: [number, number, number, number];\n if (tr > 0) {\n const t = 2 * Math.sqrt(tr + 1);\n q = [(y[2] - z[1]) / t, (z[0] - x[2]) / t, (x[1] - y[0]) / t, t / 4];\n } else if (x[0] > y[1] && x[0] > z[2]) {\n const t = 2 * Math.sqrt(1 + x[0] - y[1] - z[2]);\n q = [t / 4, (y[0] + x[1]) / t, (z[0] + x[2]) / t, (y[2] - z[1]) / t];\n } else if (y[1] > z[2]) {\n const t = 2 * Math.sqrt(1 + y[1] - x[0] - z[2]);\n q = [(y[0] + x[1]) / t, t / 4, (z[1] + y[2]) / t, (z[0] - x[2]) / t];\n } else {\n const t = 2 * Math.sqrt(1 + z[2] - x[0] - y[1]);\n q = [(z[0] + x[2]) / t, (z[1] + y[2]) / t, t / 4, (x[1] - y[0]) / t];\n }\n return { p, q };\n}\n\n\n/** A thin jointed leg through `joints` (hip, knee, foot\u2026): capsules with knobs at the joints, `d` thick. */\nexport const jointedLeg = (joints: readonly V3[], d: number, color: TemplateColor = BODY): BakeStamp[] =>\n joints.slice(0, -1).flatMap((a, i) => [limb(a, joints[i + 1]!, d * (1 - 0.15 * i), color), ball(a, d * 1.25 * (1 - 0.15 * i), color)]);\n\n/** A flat ellipsoid lobe from a to b: thin across `thin`, `w` wide (fins, folded wings, ears, claw fingers). */\nexport const lobe = (a: V3, b: V3, w: number, thin: number, color: TemplateColor = BODY): BakeStamp =>\n [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thin, len3(sub3(b, a)) * 1.15, w], color];\n\n/** A baked flat wing part (its frame comes from the bone chain). */\nexport const flatWing = (wing: { readonly [key: string]: number | string }, color: TemplateColor = \"@flat\"): BakePart => ({\n color, sd: { roughness: 0.6, metalness: 0, glow: 0, opacity: 1 }, stamps: [], wing,\n});\n", "/*\n * The Ant premade, authored for the app: a big raised gaster, a narrow petiole, a humped thorax, a head with\n * mandibles and elbowed antennae, and six long thin legs with high knees. Bone names follow the generic ant.\n * Template space: +z forward, y up, feet on y \u2248 -0.32.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, jointedLeg, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", JAW = \"@jaw\";\n\nconst GLOSSY: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.35, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.3, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, GLOSSY, color);\n\nconst P = {\n th1: [0, 0.12, 0.26], th2: [0, 0.14, 0.06], head: [0, 0.14, 0.48],\n mandible: [0.05, 0.04, 0.66],\n scape: [0.07, 0.24, 0.56], funiculus: [0.16, 0.42, 0.62], antTip: [0.3, 0.36, 0.82],\n petiole: [0, 0.14, -0.08], gaster: [[0, 0.18, -0.32], [0, 0.12, -0.58]],\n} as const;\n\nconst legJoints = (i: number): [string, V3][] => {\n const z = [0.28, 0.16, 0.06][i]!, dz = [0.22, 0, -0.26][i]!;\n return [[`Leg ${i + 1} Coxa`, [0.07, 0.06, z]], [`Leg ${i + 1} Femur`, [0.3, 0.26, z + dz * 0.4]], [`Leg ${i + 1} Tibia`, [0.48, -0.32, z + dz]]];\n};\n\nconst bones: BakeBone[] = [\n [\"Thorax 1\", null, P.th1, tagsOf(\"core\")],\n [\"Head\", \"Thorax 1\", P.head, tagsOf(\"head\")],\n ...pair(\"mandible\", \"Head\", [[\"Mandible\", P.mandible]]),\n ...pair(\"antenna\", \"Head\", [[\"Antenna Scape\", P.scape], [\"Antenna Funiculus\", P.funiculus], [\"Antenna Tip\", P.antTip]]),\n [\"Thorax 2\", \"Thorax 1\", P.th2, tagsOf(\"core\")],\n [\"Petiole\", \"Thorax 2\", P.petiole, tagsOf(\"core\")],\n [\"Gaster 1\", \"Petiole\", P.gaster[0], tagsOf(\"abdomen\")],\n [\"Gaster 2\", \"Gaster 1\", P.gaster[1], tagsOf(\"abdomen\")],\n ...[0, 1, 2].flatMap((i) => pair(\"insect-leg\", i < 2 ? \"Thorax 1\" : \"Thorax 2\", legJoints(i))),\n];\n\nconst HEAD_S: V3 = [0.3, 0.27, 0.32];\n\nconst parts: { [bone: string]: BakePart | null } = {\n \"Thorax 1\": part([sphere([0, 0.12, 0.24], [0.2, 0.2, 0.3])], 0.06),\n \"Thorax 2\": part([sphere([0, 0.15, 0.06], [0.18, 0.22, 0.2])], 0.06),\n Head: part([sphere(P.head, HEAD_S)], 0.06),\n \"Mandible L\": part([cone([0.06, 0.06, 0.6], [0.02, 0.03, 0.74], 0.06, JAW, 0.02)], 0.02, JAW),\n \"Antenna Scape L\": part([limb(P.scape, P.funiculus, 0.05), limb(P.funiculus, P.antTip, 0.045), ball(P.antTip, 0.06)], 0.02),\n \"Antenna Funiculus L\": null,\n \"Antenna Tip L\": null,\n Petiole: part([ball([0, 0.13, -0.06], 0.1), ball([0, 0.2, -0.08], 0.07)], 0.04),\n \"Gaster 1\": part([sphere([0, 0.18, -0.34], [0.42, 0.4, 0.54])], 0.06),\n \"Gaster 2\": null,\n ...Object.fromEntries([0, 1, 2].flatMap((i) => {\n const j = legJoints(i);\n return [[j[0]![0] + \" L\", part(jointedLeg(j.map((x) => x[1]), 0.045), 0.02)], [j[1]![0] + \" L\", null], [j[2]![0] + \" L\", null]];\n })),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Beetle Eye\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(P.head, HEAD_S, [0.8 * side, 0.25, 0.5]) });\n\nexport const ANT_BAKE: Bake = {\n regionBlends: { torso: 0.06, limb: 0.03, wing: 0.03, tail: 0.03, head: 0.06 },\n bones,\n parts,\n decals: [eye(1), eye(-1)],\n};\n", "/*\n * The Bee premade, authored for the app: a fuzzy thorax, a round head with big bug eyes and antennae, a fat abdomen\n * tilted down and banded in black, a stinger, flat clear fore and hind wings, and six thin black legs.\n * Bone names follow the generic bee. Template space: +z forward, y up, feet on y \u2248 -0.4.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, eulerUp, flatWing, jointedLeg, limb, onEllipsoid, pair, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", ABDOMEN = \"@abdomen\", BAND = \"@band\", LEG = \"@leg\";\n\nconst FUZZ: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.25, shape: \"grass\", size: 0.2, coverage: 0.9, variation: 0.3, regularity: 0,\n boil: 0, normalStrength: 0.5, roughness: 0.8, metalness: 0, glow: 0, opacity: 1,\n};\nconst SMOOTH: BakeLook = { ...FUZZ, shape: \"none\", roughness: 0.4 };\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = FUZZ, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, look, color);\n\nconst P = {\n thorax: [0, 0.05, 0.2], head: [0, 0.07, 0.48],\n antBase: [0.07, 0.2, 0.56], antTip: [0.18, 0.38, 0.72],\n ab: [[0, 0.0, -0.04], [0, -0.1, -0.28], [0, -0.2, -0.5]], stinger: [0, -0.28, -0.68],\n foreBase: [0.1, 0.24, 0.22], foreTip: [0.44, 0.66, 0.0],\n hindBase: [0.1, 0.22, 0.12], hindTip: [0.36, 0.5, -0.2],\n} as const;\n\n/** One leg pair: hip on the thorax side, knee out and up, foot on the ground. */\nconst legJoints = (i: number): [string, V3][] => {\n const z = [0.3, 0.2, 0.1][i]!, dz = [0.14, 0, -0.16][i]!;\n return [[`Leg ${i + 1} Coxa`, [0.1, -0.06, z]], [`Leg ${i + 1} Femur`, [0.26, -0.04, z + dz * 0.5]], [`Leg ${i + 1} Tibia`, [0.32, -0.4, z + dz]]];\n};\n\nconst bones: BakeBone[] = [\n [\"Thorax\", null, P.thorax, tagsOf(\"core\")],\n [\"Head\", \"Thorax\", P.head, tagsOf(\"head\")],\n ...pair(\"antenna\", \"Head\", [[\"Antenna Base\", P.antBase], [\"Antenna Tip\", P.antTip]]),\n ...P.ab.map((p, i): BakeBone => [`Abdomen ${i + 1}`, i ? `Abdomen ${i}` : \"Thorax\", p, tagsOf(\"abdomen\")]),\n [\"Stinger\", \"Abdomen 3\", P.stinger, tagsOf(\"stinger\")],\n ...pair(\"insect-wing\", \"Thorax\", [[\"Forewing Base\", P.foreBase], [\"Forewing Tip\", P.foreTip]]),\n ...pair(\"insect-wing\", \"Thorax\", [[\"Hindwing Base\", P.hindBase], [\"Hindwing Tip\", P.hindTip]]),\n ...[0, 1, 2].flatMap((i) => pair(\"insect-leg\", \"Thorax\", legJoints(i))),\n];\n\nconst HEAD_S: V3 = [0.32, 0.3, 0.28];\nconst AB_C: V3 = [0, -0.1, -0.27], AB_DIR = sub3(P.ab[2], P.ab[0]);\n/** A black band across the abdomen at t along its axis. */\nconst band = (t: number, w: number): BakeStamp => {\n const c: V3 = [AB_C[0] + AB_DIR[0] * (t - 0.5), AB_C[1] + AB_DIR[1] * (t - 0.5), AB_C[2] + AB_DIR[2] * (t - 0.5)];\n return [\"sphere\", \"paint\", c, eulerUp(AB_DIR), [w, 0.07, w], BAND];\n};\nconst clear = { style: \"clear\", density: 0.4, border: 0.35, base: \"@flat\", base2: \"@flat\", outline: \"bee\", chord: 1.4 };\n\nconst parts: { [bone: string]: BakePart | null } = {\n Thorax: part([sphere([0, 0.05, 0.2], [0.4, 0.38, 0.38])], 0.1),\n Head: part([sphere(P.head, HEAD_S)], 0.08, SMOOTH),\n \"Antenna Base L\": part([limb(P.antBase, P.antTip, 0.045, LEG), ball(P.antTip, 0.065, LEG)], 0.02, SMOOTH, LEG),\n \"Antenna Tip L\": null,\n \"Abdomen 1\": part([\n [\"sphere\", \"add\", AB_C, eulerUp(AB_DIR), [0.46, 0.72, 0.46], ABDOMEN],\n band(0.38, 0.6), band(0.6, 0.6), band(0.8, 0.5),\n ], 0.08, FUZZ, ABDOMEN),\n \"Abdomen 2\": null,\n \"Abdomen 3\": null,\n Stinger: part([cone([0, -0.22, -0.6], P.stinger, 0.06, LEG, 0.02)], 0.02, SMOOTH, LEG),\n \"Forewing Base L\": flatWing({ ...clear, part: \"fore\" }),\n \"Forewing Tip L\": null,\n \"Hindwing Base L\": flatWing({ ...clear, part: \"hind\" }),\n \"Hindwing Tip L\": null,\n ...Object.fromEntries([0, 1, 2].flatMap((i) => {\n const j = legJoints(i);\n return [[j[0]![0] + \" L\", part(jointedLeg(j.map((x) => x[1]), 0.05, LEG), 0.02, SMOOTH, LEG)], [j[1]![0] + \" L\", null], [j[2]![0] + \" L\", null]];\n })),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Bug Eye\", size: 0.16, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(P.head, HEAD_S, [0.7 * side, 0.2, 0.7]) });\n\nconst decals: BakeDecal[] = [eye(1), eye(-1)];\n\nexport const BEE_BAKE: Bake = {\n regionBlends: { torso: 0.1, limb: 0.03, wing: 0.05, tail: 0.03, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Bird premade, authored for the app: a plump round body with a pale breast, a round head with a pointed beak,\n * wings folded along the sides, a tail fan and thin legs with three-toed feet. Bone names follow the generic bird.\n * Template space: +z forward, y up, feet on y \u2248 -0.52.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { cone, limb, lobe, onEllipsoid, pair, paint, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", PALE = \"@pale\", WING = \"@wing\", BEAK = \"@beak\", LEG = \"@leg\";\n\nconst FEATHERS: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.25, shape: \"circle\", size: 0.2, coverage: 0.5, variation: 0.2, regularity: 0.4,\n boil: 0, normalStrength: 0.25, roughness: 0.7, metalness: 0, glow: 0, opacity: 1,\n};\nconst SMOOTH: BakeLook = { ...FEATHERS, shape: \"none\", roughness: 0.4 };\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = FEATHERS, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, look, color);\n\nconst P = {\n hips: [0, -0.06, -0.12], spine1: [0, 0.02, 0.04], spine2: [0, 0.1, 0.16],\n neck: [[0, 0.2, 0.22], [0, 0.28, 0.26], [0, 0.34, 0.28]], head: [0, 0.42, 0.3], beak: [0, 0.38, 0.56],\n shoulder: [0.18, 0.16, 0.12], elbow: [0.22, 0.12, -0.04], wrist: [0.22, 0.1, -0.2], wingTip: [0.18, 0.08, -0.42],\n thigh: [0.1, -0.18, -0.06], shin: [0.1, -0.34, -0.02], foot: [0.1, -0.5, 0.0], toe: [0.1, -0.52, 0.12],\n tail: [[0, 0.0, -0.34], [0, 0.06, -0.5], [0, 0.1, -0.66]],\n} as const;\n\nconst bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n ...P.neck.map((p, i): BakeBone => [`Neck ${i + 1}`, i ? `Neck ${i}` : \"Spine 2\", p, tagsOf(\"neck\")]),\n [\"Head\", \"Neck 3\", P.head, tagsOf(\"head\")],\n [\"Beak\", \"Head\", P.beak, tagsOf(\"beak\")],\n ...pair(\"wing\", \"Spine 1\", [[\"Shoulder\", P.shoulder], [\"Elbow\", P.elbow], [\"Wrist\", P.wrist], [\"Wing Tip\", P.wingTip]]),\n ...pair(\"leg\", \"Hips\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Foot\", P.foot], [\"Toe\", P.toe]]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n];\n\nconst HEAD_S: V3 = [0.36, 0.34, 0.36];\nconst foot = (p: V3): BakeStamp[] => [-0.5, 0, 0.5].map((a) => cone(p, [p[0] + Math.sin(a) * 0.1, p[1] - 0.01, p[2] + Math.cos(a) * 0.12], 0.035, LEG, 0.01));\n\nconst parts: { [bone: string]: BakePart | null } = {\n Hips: part([sphere([0, -0.02, -0.06], [0.5, 0.48, 0.56])], 0.12),\n \"Spine 1\": part([sphere([0, 0.06, 0.08], [0.46, 0.46, 0.46]), paint([0, -0.02, 0.24], [0.34, 0.4, 0.18], PALE)], 0.12),\n \"Spine 2\": null,\n \"Neck 1\": part([sphere([0, 0.24, 0.22], [0.3, 0.26, 0.28])], 0.1),\n \"Neck 2\": null,\n \"Neck 3\": null,\n Head: part([sphere(P.head, HEAD_S)], 0.1),\n Beak: part([cone([0, 0.39, 0.44], P.beak, 0.13, BEAK, 0.02)], 0.02, SMOOTH, BEAK),\n // folded wing lying along the body's side\n \"Shoulder L\": part([lobe([0.2, 0.14, 0.14], P.wingTip, 0.3, 0.07, WING)], 0.03, FEATHERS, WING),\n \"Elbow L\": null,\n \"Wrist L\": null,\n \"Wing Tip L\": null,\n \"Thigh L\": part([limb(P.thigh, P.shin, 0.08)], 0.04),\n \"Shin L\": part([limb(P.shin, P.foot, 0.035, LEG)], 0.02, SMOOTH, LEG),\n \"Foot L\": part(foot(P.foot), 0.01, SMOOTH, LEG),\n \"Toe L\": null,\n \"Tail 1\": part([lobe([0, 0.0, -0.3], P.tail[2], 0.28, 0.05, WING)], 0.03, FEATHERS, WING),\n \"Tail 2\": null,\n \"Tail 3\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Glossy Eye\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(P.head, HEAD_S, [0.62 * side, 0.2, 0.76]) });\n\nexport const BIRD_BAKE: Bake = {\n regionBlends: { torso: 0.12, limb: 0.03, wing: 0.04, tail: 0.04, head: 0.1 },\n bones,\n parts,\n decals: [eye(1), eye(-1)],\n};\n", "/*\n * The Centipede premade, authored for the app: six flat, glossy body plates in a gentle S on the ground, each with\n * a pair of thin legs, a flat head with long antennae and black forcipules (fangs). Bone names follow the generic\n * centipede; the body chain is rooted at the back (Body 6), so the front can rear up while the rest stays down.\n * Template space: +z forward, y up, feet on y \u2248 -0.18.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, jointedLeg, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", LEG = \"@leg\", FANG = \"@fang\";\n\nconst GLOSSY: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.35, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.3, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, GLOSSY, color);\n\nconst SEGMENTS = 6;\n/** Body plate centers: z from front to back, a gentle sideways S. */\nconst body = (i: number): V3 => {\n const z = 0.6 - i * 0.28;\n return [0.08 * Math.sin(i * 1.1), 0, z];\n};\nconst legJoints = (i: number): [string, V3][] => {\n const [bx, , bz] = body(i);\n return [[`Hip ${i + 1}`, [bx + 0.14, -0.02, bz]], [`Leg ${i + 1} Mid`, [bx + 0.32, 0.08, bz - 0.04]], [`Leg ${i + 1} Foot`, [bx + 0.44, -0.18, bz - 0.08]]];\n};\n\nconst HEAD: V3 = [0, 0.0, 0.84], HEAD_S: V3 = [0.3, 0.14, 0.22];\n\nconst bones: BakeBone[] = [\n ...Array.from({ length: SEGMENTS }, (_, i): BakeBone => [`Body ${i + 1}`, i < SEGMENTS - 1 ? `Body ${i + 2}` : null, body(i), tagsOf(\"core\")]),\n ...Array.from({ length: SEGMENTS }, (_, i) => pair(\"insect-leg\", `Body ${i + 1}`, legJoints(i))).flat(),\n [\"Head\", \"Body 1\", HEAD, tagsOf(\"head\")],\n ...pair(\"antenna\", \"Head\", [[\"Antenna Base\", [0.08, 0.04, 0.92]], [\"Antenna Tip\", [0.3, 0.12, 1.16]]]),\n];\n\nconst parts: { [bone: string]: BakePart | null } = {\n ...Object.fromEntries(Array.from({ length: SEGMENTS }, (_, i) => {\n // a plate, and the joint toward the front (which pivots on this bone); the last plate also ends the tail\n const c = body(i), ahead = i > 0 ? body(i - 1) : null, w = 0.36 - i * 0.025;\n const stamps: BakeStamp[] = [sphere(c, [w, 0.16, 0.26])];\n if (ahead) stamps.push(limb(c, ahead, 0.12));\n if (i === SEGMENTS - 1) stamps.push(cone(c, [c[0] - 0.04, 0, c[2] - 0.22], 0.12, BODY, 0.04));\n return [`Body ${i + 1}`, part(stamps, 0.05)];\n })),\n ...Object.fromEntries(Array.from({ length: SEGMENTS }, (_, i) => {\n const j = legJoints(i);\n return [[j[0]![0] + \" L\", part(jointedLeg(j.map((x) => x[1]), 0.065, LEG), 0.02, LEG)], [j[1]![0] + \" L\", null], [j[2]![0] + \" L\", null]];\n }).flat()),\n Head: part([\n sphere(HEAD, HEAD_S),\n cone([0.06, -0.03, 0.9], [0.02, -0.05, 1.0], 0.05, FANG, 0.02), // forcipules\n cone([-0.06, -0.03, 0.9], [-0.02, -0.05, 1.0], 0.05, FANG, 0.02),\n ], 0.04),\n \"Antenna Base L\": part([limb([0.08, 0.04, 0.92], [0.3, 0.12, 1.16], 0.045, LEG), ball([0.3, 0.12, 1.16], 0.06, LEG)], 0.02, LEG),\n \"Antenna Tip L\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.06, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD, HEAD_S, [0.5 * side, 0.7, 0.5]) });\n\nexport const CENTIPEDE_BAKE: Bake = {\n regionBlends: { torso: 0.05, limb: 0.03, wing: 0.03, tail: 0.03, head: 0.05 },\n bones,\n parts,\n decals: [eye(1), eye(-1)],\n};\n", "/*\n * The Crab premade, authored for the app (new): a wide, domed carapace with a pale front, big pincers raised forward,\n * and four pairs of legs splayed to the sides. Template space: +z forward, y up, feet on y \u2248 -0.26.\n * Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, jointedLeg, limb, onEllipsoid, pair, paint, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SHELL = \"@core\", PALE = \"@pale\";\n\nconst SHELL_LOOK: BakeLook = {\n foundationColor: SHELL, foundationDarkness: 0.35, shape: \"circle\", size: 0.25, coverage: 0.5, variation: 0.2, regularity: 0.3,\n boil: 0, normalStrength: 0.3, roughness: 0.35, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = SHELL): BakePart => bakedPart(stamps, blend, SHELL_LOOK, color);\n\nconst P = {\n carapace: [0, 0.04, 0],\n arm: [0.28, 0.0, 0.16], forearm: [0.44, 0.12, 0.3], clawFixed: [0.4, 0.18, 0.5], clawMov: [0.48, 0.24, 0.48],\n} as const;\n\nconst legJoints = (i: number): [string, V3][] => {\n const z = [0.06, -0.04, -0.13, -0.22][i]!, k = [0.95, 1, 1, 0.92][i]!;\n return [[`Leg ${i + 1} Coxa`, [0.3, -0.02, z]], [`Leg ${i + 1} Femur`, [0.3 + 0.28 * k, 0.16, z * 1.3]], [`Leg ${i + 1} Tibia`, [0.3 + 0.44 * k, -0.26, z * 1.6]]];\n};\n\nconst bones: BakeBone[] = [\n [\"Carapace\", null, P.carapace, tagsOf(\"core\")],\n ...pair(\"claw\", \"Carapace\", [[\"Claw Arm\", P.arm], [\"Claw Forearm\", P.forearm], [\"Claw Fixed\", P.clawFixed], [\"Claw Movable\", P.clawMov]]),\n ...[0, 1, 2, 3].flatMap((i) => pair(\"insect-leg\", \"Carapace\", legJoints(i))),\n];\n\nconst CAR_C: V3 = [0, 0.06, 0], CAR_S: V3 = [0.78, 0.36, 0.58];\nconst HAND: V3 = [0.44, 0.15, 0.4];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Carapace: part([\n sphere(CAR_C, CAR_S),\n sphere([0, -0.04, 0], [0.62, 0.16, 0.46]), // flatter underside\n paint([0, 0.0, 0.26], [0.44, 0.18, 0.14], PALE), // pale front, under the eyes\n ], 0.08),\n \"Claw Arm L\": part([ball(P.arm, 0.15), limb(P.arm, P.forearm, 0.13), ball(P.forearm, 0.15)], 0.04),\n \"Claw Forearm L\": part([sphere(HAND, [0.32, 0.28, 0.36])], 0.05),\n \"Claw Fixed L\": part([cone([0.42, 0.12, 0.5], [0.36, 0.1, 0.7], 0.15, SHELL, 0.02)], 0.02),\n \"Claw Movable L\": part([cone(P.clawMov, [0.42, 0.26, 0.68], 0.13, SHELL, 0.02)], 0.02),\n ...Object.fromEntries([0, 1, 2, 3].flatMap((i) => {\n const j = legJoints(i);\n return [[j[0]![0] + \" L\", part(jointedLeg(j.map((x) => x[1]), 0.065), 0.02)], [j[1]![0] + \" L\", null], [j[2]![0] + \" L\", null]];\n })),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Carapace\", cat: \"eye\", name: \"Angry\", size: 0.12, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(CAR_C, CAR_S, [0.24 * side, 0.2, 1]) });\n\nexport const CRAB_BAKE: Bake = {\n regionBlends: { torso: 0.08, limb: 0.03, wing: 0.03, tail: 0.03, head: 0.06 },\n bones,\n parts,\n decals: [eye(1), eye(-1), { bone: \"Carapace\", cat: \"mouth\", name: \"Small\", size: 0.08, tint: \"s:black\", ...onEllipsoid(CAR_C, CAR_S, [0, -0.15, 1]) }],\n};\n", "/*\n * The Biped premade as a gorilla, authored for the app: a big chest and shoulders, long heavy arms reaching low,\n * short legs, a crested head with a pale face and muzzle. Bone names follow the generic biped (no tail).\n * Template space: +z forward, y up, feet on y \u2248 -0.62. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, limb, onEllipsoid, pair, paint, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst FUR = \"@core\", PALE = \"@pale\";\n\nconst FURRY: BakeLook = {\n foundationColor: FUR, foundationDarkness: 0.3, shape: \"grass\", size: 0.28, coverage: 0.8, variation: 0.3, regularity: 0,\n boil: 0, normalStrength: 0.5, roughness: 0.85, metalness: 0, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = FURRY, color: TemplateColor = FUR): BakePart => bakedPart(stamps, blend, look, color);\n\nconst P = {\n pelvis: [0, -0.12, 0], spine1: [0, 0.08, 0.02], spine2: [0, 0.26, 0.04], neck: [0, 0.42, 0.08], head: [0, 0.52, 0.1],\n shoulder: [0.16, 0.34, 0.04], upperArm: [0.34, 0.3, 0.06], forearm: [0.42, 0.0, 0.1], hand: [0.43, -0.3, 0.14],\n thigh: [0.14, -0.16, 0], shin: [0.17, -0.4, 0.04], foot: [0.17, -0.58, 0.02], toe: [0.17, -0.6, 0.16],\n} as const satisfies Record<string, V3>;\n\nconst bones: BakeBone[] = [\n [\"Pelvis\", null, P.pelvis, tagsOf(\"core\")],\n [\"Spine 1\", \"Pelvis\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Neck\", \"Spine 2\", P.neck, tagsOf(\"neck\")],\n [\"Head\", \"Neck\", P.head, tagsOf(\"head\")],\n ...pair(\"arm\", \"Spine 2\", [[\"Shoulder\", P.shoulder], [\"Upper Arm\", P.upperArm], [\"Forearm\", P.forearm], [\"Hand\", P.hand]]),\n ...pair(\"leg\", \"Pelvis\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Foot\", P.foot], [\"Toe\", P.toe]]),\n];\n\nconst SKULL: V3 = [0, 0.54, 0.08], SKULL_S: V3 = [0.36, 0.38, 0.34];\nconst MUZZLE: V3 = [0, 0.45, 0.22], MUZZLE_S: V3 = [0.22, 0.14, 0.13];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Pelvis: part([sphere([0, -0.12, 0], [0.46, 0.34, 0.36])], 0.12),\n \"Spine 1\": part([sphere([0, 0.06, 0.03], [0.52, 0.46, 0.42]), paint([0, 0.1, 0.22], [0.3, 0.3, 0.12], PALE)], 0.12),\n \"Spine 2\": part([sphere([0, 0.28, 0.02], [0.68, 0.36, 0.42])], 0.12),\n Neck: null,\n Head: part([\n sphere(SKULL, SKULL_S),\n sphere([0, 0.7, 0.02], [0.2, 0.18, 0.2]), // crest\n sphere([0, 0.6, 0.2], [0.3, 0.07, 0.09]), // brow ridge\n paint([0, 0.52, 0.22], [0.28, 0.24, 0.12], PALE), // face\n sphere(MUZZLE, MUZZLE_S, PALE),\n ball([0.18, 0.55, 0.05], 0.08), // ears\n ball([-0.18, 0.55, 0.05], 0.08),\n ], 0.08),\n \"Shoulder L\": part([ball(P.shoulder, 0.26), limb(P.shoulder, P.upperArm, 0.22)], 0.08),\n \"Upper Arm L\": part([limb(P.upperArm, P.forearm, 0.19)], 0.06),\n \"Forearm L\": part([limb(P.forearm, P.hand, 0.18)], 0.06),\n \"Hand L\": part([sphere([0.43, -0.33, 0.15], [0.17, 0.12, 0.17])], 0.05),\n \"Thigh L\": part([limb(P.thigh, P.shin, 0.18)], 0.06),\n \"Shin L\": part([limb(P.shin, P.foot, 0.16)], 0.05),\n \"Foot L\": part([sphere([0.17, -0.59, 0.08], [0.17, 0.08, 0.26])], 0.04),\n \"Toe L\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.08, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(SKULL, SKULL_S, [0.3 * side, 0.08, 1]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Ape Mouth\", size: 0.17, ...onEllipsoid(MUZZLE, MUZZLE_S, [0, 0, 1]) },\n];\n\nexport const GORILLA_BAKE: Bake = {\n regionBlends: { torso: 0.12, limb: 0.06, wing: 0.05, tail: 0.05, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Humanoid premade, authored for the app: a cute, chunky person with a big head and hair cap, a shirt, pants,\n * hands and black shoes. Bone names follow the generic humanoid (the biped's, without a tail).\n * Template space: +z forward, y up, feet on y \u2248 -0.62.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SKIN = \"@core\", SHIRT = \"@shirt\", PANTS = \"@pants\", HAIR = \"@hair\", SHOE = \"@shoe\";\n\nconst SOFT: BakeLook = {\n foundationColor: SKIN, foundationDarkness: 0.2, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.6, metalness: 0, glow: 0, opacity: 1,\n};\nconst CLOTH: BakeLook = { ...SOFT, shape: \"sand\", size: 0.2, coverage: 0.6, variation: 0.2, normalStrength: 0.15, roughness: 0.85 };\n/** A part in one color: stamps drawn with the default body color take the part's color (the hair keeps its own). */\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor, look: BakeLook = CLOTH): BakePart =>\n bakedPart(stamps.map((st): BakeStamp => {\n if (st[5] !== SKIN) return st;\n const [shape, mode, p, r, sc, , over] = st;\n return over ? [shape, mode, p, r, sc, color, over] : [shape, mode, p, r, sc, color];\n }), blend, { ...look, foundationColor: color }, color);\n\nconst P = {\n pelvis: [0, -0.12, 0], spine1: [0, 0.04, 0], spine2: [0, 0.2, 0], neck: [0, 0.32, 0], head: [0, 0.5, 0.02],\n shoulder: [0.12, 0.28, 0], upperArm: [0.2, 0.26, 0], forearm: [0.25, 0.06, 0.02], hand: [0.26, -0.12, 0.04],\n thigh: [0.09, -0.16, 0], shin: [0.1, -0.38, 0.01], foot: [0.1, -0.58, 0], toe: [0.1, -0.6, 0.12],\n} as const satisfies Record<string, V3>;\n\nconst bones: BakeBone[] = [\n [\"Pelvis\", null, P.pelvis, tagsOf(\"core\")],\n [\"Spine 1\", \"Pelvis\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Neck\", \"Spine 2\", P.neck, tagsOf(\"neck\")],\n [\"Head\", \"Neck\", P.head, tagsOf(\"head\")],\n ...pair(\"arm\", \"Spine 2\", [[\"Shoulder\", P.shoulder], [\"Upper Arm\", P.upperArm], [\"Forearm\", P.forearm], [\"Hand\", P.hand]]),\n ...pair(\"leg\", \"Pelvis\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Foot\", P.foot], [\"Toe\", P.toe]]),\n];\n\nconst HEAD_C: V3 = [0, 0.5, 0.02], HEAD_S: V3 = [0.4, 0.4, 0.38];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Pelvis: part([sphere([0, -0.1, 0], [0.32, 0.18, 0.22])], 0.08, PANTS),\n \"Spine 1\": part([limb([0, -0.04, 0], [0, 0.2, 0], 0.3)], 0.1, SHIRT),\n \"Spine 2\": part([sphere([0, 0.22, 0], [0.36, 0.16, 0.24])], 0.08, SHIRT),\n Neck: part([limb([0, 0.28, 0], [0, 0.34, 0], 0.1)], 0.04, SKIN, SOFT),\n Head: part([\n sphere(HEAD_C, HEAD_S),\n [\"sphere\", \"add\", [0, 0.56, -0.02], [-0.25, 0, 0], [0.42, 0.34, 0.38], HAIR], // hair cap over the top and back\n ], 0.06, SKIN, SOFT),\n \"Shoulder L\": part([ball([0.16, 0.26, 0], 0.12), limb(P.upperArm, P.forearm, 0.1)], 0.05, SHIRT),\n \"Upper Arm L\": null,\n \"Forearm L\": part([limb(P.forearm, P.hand, 0.085)], 0.04, SKIN, SOFT),\n \"Hand L\": part([ball([0.26, -0.15, 0.04], 0.11)], 0.04, SKIN, SOFT),\n \"Thigh L\": part([limb(P.thigh, P.shin, 0.13)], 0.04, PANTS),\n \"Shin L\": part([limb(P.shin, P.foot, 0.11)], 0.04, PANTS),\n \"Foot L\": part([sphere([0.1, -0.59, 0.05], [0.13, 0.08, 0.2])], 0.03, SHOE, SOFT),\n \"Toe L\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Round\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.3 * side, -0.02, 1]) });\n\nexport const HUMANOID_BAKE: Bake = {\n regionBlends: { torso: 0.08, limb: 0.04, wing: 0.04, tail: 0.04, head: 0.06 },\n bones,\n parts,\n decals: [eye(1), eye(-1), { bone: \"Head\", cat: \"mouth\", name: \"Smile\", size: 0.1, tint: \"s:black\", ...onEllipsoid(HEAD_C, HEAD_S, [0, -0.32, 1]) }],\n};\n", "/*\n * The 6-Winged Insect premade, authored for the app: a dragonfly-like flier with a big head and fly eyes, three\n * thorax segments each carrying a pair of clear flat wings and a pair of thin legs, and a long slender segmented\n * abdomen. Bone names follow the generic 6-winged insect. Template space: +z forward, y up, feet on y \u2248 -0.3.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, flatWing, jointedLeg, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", ABDOMEN = \"@abdomen\", LEG = \"@leg\";\n\nconst GLOSSY: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.3, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.3, metalness: 0.15, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, { ...GLOSSY, foundationColor: color }, color);\n\nconst TH: readonly V3[] = [[0, 0.04, 0.3], [0, 0.04, 0.14], [0, 0.03, -0.02]];\nconst AB: readonly V3[] = [[0, 0.02, -0.2], [0, 0.0, -0.42], [0, -0.02, -0.64], [0, -0.04, -0.86]];\nconst HEAD: V3 = [0, 0.06, 0.48], HEAD_S: V3 = [0.34, 0.28, 0.26];\n\nconst legJoints = (i: number): [string, V3][] => {\n const z = TH[i]![2], dz = [0.12, 0, -0.12][i]!;\n return [[`Leg ${i + 1} Coxa`, [0.08, -0.04, z]], [`Leg ${i + 1} Femur`, [0.24, 0.02, z + dz * 0.5]], [`Leg ${i + 1} Tibia`, [0.32, -0.3, z + dz]]];\n};\nconst wingJoints = (i: number): [string, V3][] => {\n const z = TH[i]![2];\n return [[`Wing ${i + 1} Base`, [0.08, 0.14, z]], [`Wing ${i + 1} Tip`, [0.9 - i * 0.1, 0.32, z - 0.2]]];\n};\n\nconst bones: BakeBone[] = [\n ...TH.map((p, i): BakeBone => [`Thorax ${i + 1}`, i ? `Thorax ${i}` : null, p, tagsOf(\"core\")]),\n [\"Head\", \"Thorax 1\", HEAD, tagsOf(\"head\")],\n ...pair(\"antenna\", \"Head\", [[\"Antenna Base\", [0.06, 0.18, 0.56]], [\"Antenna Tip\", [0.14, 0.3, 0.66]]]),\n ...AB.map((p, i): BakeBone => [`Abdomen ${i + 1}`, i ? `Abdomen ${i}` : \"Thorax 3\", p, tagsOf(\"abdomen\")]),\n ...[0, 1, 2].flatMap((i) => pair(\"insect-wing\", `Thorax ${i + 1}`, wingJoints(i))),\n ...[0, 1, 2].flatMap((i) => pair(\"insect-leg\", `Thorax ${i + 1}`, legJoints(i))),\n];\n\nconst parts: { [bone: string]: BakePart | null } = {\n ...Object.fromEntries(TH.map((p, i) => [`Thorax ${i + 1}`, part([sphere(p, [0.24, 0.24, 0.22])], 0.06)])),\n Head: part([sphere(HEAD, HEAD_S)], 0.05),\n \"Antenna Base L\": part([limb([0.06, 0.18, 0.56], [0.14, 0.3, 0.66], 0.02, LEG), ball([0.14, 0.3, 0.66], 0.03, LEG)], 0.02, LEG),\n \"Antenna Tip L\": null,\n ...Object.fromEntries(AB.map((p, i) => {\n const next = AB[i + 1];\n const stamps: BakeStamp[] = [ball(p, 0.13 - i * 0.01, ABDOMEN)];\n if (next) stamps.push(limb(p, next, 0.1 - i * 0.012, ABDOMEN));\n return [`Abdomen ${i + 1}`, part(stamps, 0.04, ABDOMEN)];\n })),\n ...Object.fromEntries([0, 1, 2].flatMap((i) => {\n const w = wingJoints(i), l = legJoints(i);\n const wing = flatWing({ outline: \"dragonfly\", part: i ? \"hind\" : \"fore\", chord: 1.3, style: \"clear\", density: 0.6, border: 0.3, base: \"@flat\", base2: \"@detail\", seed: i + 1 });\n return [\n [w[0]![0] + \" L\", wing], [w[1]![0] + \" L\", null],\n [l[0]![0] + \" L\", part(jointedLeg(l.map((x) => x[1]), 0.035, LEG), 0.02, LEG)], [l[1]![0] + \" L\", null], [l[2]![0] + \" L\", null],\n ];\n })),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Fly Eye\", size: 0.18, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD, HEAD_S, [0.75 * side, 0.3, 0.55]) });\n\nexport const INSECT6_BAKE: Bake = {\n regionBlends: { torso: 0.06, limb: 0.03, wing: 0.05, tail: 0.03, head: 0.06 },\n bones,\n parts,\n decals: [eye(1), eye(-1)],\n};\n", "/*\n * The Scorpion premade, authored for the app: a flat carapace and plated abdomen, big pincers held forward, eight\n * legs, and a beaded tail curling up over the back to a stinger. Bone names follow the generic scorpion.\n * Template space: +z forward, y up, feet on y \u2248 -0.2.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, jointedLeg, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", STING = \"@sting\";\n\nconst SHELL: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.35, shape: \"plates\", size: 0.5, coverage: 1, variation: 0.1, regularity: 0.8,\n boil: 0, normalStrength: 0.5, roughness: 0.35, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, SHELL, color);\n\nconst P = {\n carapace: [0, 0, 0.3], ab: [[0, 0, 0.08], [0, 0, -0.12], [0, 0.0, -0.3]],\n tail: [[0, 0.06, -0.44], [0, 0.22, -0.56], [0, 0.42, -0.56], [0, 0.58, -0.44], [0, 0.64, -0.26]], stinger: [0, 0.56, -0.12],\n arm: [0.14, 0.0, 0.42], forearm: [0.3, 0.03, 0.56], clawFixed: [0.34, 0.03, 0.7], clawMov: [0.42, 0.03, 0.72],\n} as const;\n\nconst legJoints = (i: number): [string, V3][] => {\n const z = [0.36, 0.27, 0.18, 0.09][i]!, dz = [0.16, 0.03, -0.12, -0.26][i]!;\n return [[`Leg ${i + 1} Coxa`, [0.14, -0.02, z]], [`Leg ${i + 1} Femur`, [0.36, 0.12, z + dz * 0.4]], [`Leg ${i + 1} Tibia`, [0.5, -0.2, z + dz]]];\n};\n\nconst bones: BakeBone[] = [\n [\"Carapace\", null, P.carapace, tagsOf(\"core\")],\n ...P.ab.map((p, i): BakeBone => [`Abdomen ${i + 1}`, i ? `Abdomen ${i}` : \"Carapace\", p, tagsOf(\"abdomen\")]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Abdomen 3\", p, tagsOf(\"tail\")]),\n [\"Stinger\", \"Tail 5\", P.stinger, tagsOf(\"stinger\")],\n ...pair(\"claw\", \"Carapace\", [[\"Pedipalp Arm\", P.arm], [\"Pedipalp Forearm\", P.forearm], [\"Claw Fixed\", P.clawFixed], [\"Claw Movable\", P.clawMov]]),\n ...[0, 1, 2, 3].flatMap((i) => pair(\"insect-leg\", \"Carapace\", legJoints(i))),\n];\n\nconst CAR_C: V3 = [0, 0.0, 0.3], CAR_S: V3 = [0.4, 0.18, 0.42];\nconst T = P.tail;\nconst tailD = [0.14, 0.13, 0.12, 0.11, 0.1];\nconst HAND: V3 = [0.36, 0.03, 0.64];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Carapace: part([sphere(CAR_C, CAR_S)], 0.06),\n ...Object.fromEntries(P.ab.map((p, i) => [`Abdomen ${i + 1}`, part([sphere([p[0], p[1], p[2] - 0.02], [0.42 - i * 0.06, 0.17, 0.24])], 0.05)])),\n \"Tail 1\": part([limb(P.ab[2], T[0], tailD[0]!), ball(T[0], tailD[0]! * 1.1)], 0.04),\n ...Object.fromEntries(T.slice(0, 4).map((p, i) => [`Tail ${i + 2}`, part([limb(p, T[i + 1]!, tailD[i + 1]!), ball(T[i + 1]!, tailD[i + 1]! * 1.1)], 0.04)])),\n // a bulb and a curved point\n Stinger: part([ball([0, 0.62, -0.2], 0.13), cone([0, 0.6, -0.15], P.stinger, 0.06, STING, 0.02)], 0.03),\n \"Pedipalp Arm L\": part([limb(P.arm, P.forearm, 0.08), ball(P.forearm, 0.09)], 0.04),\n \"Pedipalp Forearm L\": part([sphere(HAND, [0.26, 0.17, 0.3])], 0.05),\n \"Claw Fixed L\": part([cone([0.33, 0.03, 0.72], [0.3, 0.03, 0.92], 0.12, BODY, 0.02)], 0.02),\n \"Claw Movable L\": part([cone(P.clawMov, [0.4, 0.03, 0.92], 0.1, BODY, 0.02)], 0.02),\n ...Object.fromEntries([0, 1, 2, 3].flatMap((i) => {\n const j = legJoints(i);\n return [[j[0]![0] + \" L\", part(jointedLeg(j.map((x) => x[1]), 0.05), 0.02)], [j[1]![0] + \" L\", null], [j[2]![0] + \" L\", null]];\n })),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Carapace\", cat: \"eye\", name: \"Mantis Eye\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(CAR_C, CAR_S, [0.3 * side, 0.45, 0.85]) });\n\nexport const SCORPION_BAKE: Bake = {\n regionBlends: { torso: 0.06, limb: 0.03, wing: 0.03, tail: 0.04, head: 0.06 },\n bones,\n parts,\n decals: [eye(1), eye(-1)],\n};\n", "/*\n * The Dragon premade, authored for the app (not ported from the POC, whose generated dragon read as tubes and\n * slabs). Template space: +z forward, y up, feet on y \u2248 -0.6. Stamp scales are full sizes. Side R bones have no\n * entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, eulerUp, limb, mirrorX, onEllipsoid, pair, part as bakedPart, paint, R0, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", BELLY = \"@belly\", SPIKE = \"@accent\", HORN = \"@detail\", CLAW = \"@claw\";\n\n\n/** A back spike rising from the spine at p, leaning back. */\nconst spike = (p: V3, h: number): BakeStamp => cone([p[0], p[1] - h * 0.3, p[2]], [p[0], p[1] + h, p[2] - h * 0.5], h * 0.9, SPIKE);\n/** Three claws in front of a foot. */\nconst claws = (foot: V3): BakeStamp[] =>\n [-0.05, 0, 0.05].map((dx) => cone([foot[0] + dx, foot[1], foot[2] + 0.06], [foot[0] + dx * 1.3, foot[1] - 0.03, foot[2] + 0.17], 0.055, CLAW));\n\n// ---- looks ----\n\nconst SCALES: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.35, shape: \"plates\", size: 0.45, coverage: 1, variation: 0.2, regularity: 0.75,\n boil: 0, normalStrength: 0.9, roughness: 0.45, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst SMOOTH: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.2, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.35, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SCALES, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- skeleton ----\n\nconst P = {\n hips: [0, -0.05, -0.28], spine1: [0, -0.02, -0.04], spine2: [0, 0.04, 0.17],\n neck1: [0, 0.16, 0.28], neck2: [0, 0.3, 0.36], head: [0, 0.45, 0.42], jaw: [0, 0.36, 0.6],\n hornBase: [0.1, 0.58, 0.36], hornTip: [0.16, 0.74, 0.2],\n scapula: [0.13, 0.0, 0.17], upperLeg: [0.17, -0.18, 0.2], lowerLeg: [0.17, -0.4, 0.21], claw: [0.17, -0.57, 0.26],\n thigh: [0.15, -0.06, -0.3], shin: [0.2, -0.24, -0.2], hock: [0.2, -0.43, -0.33], claw2: [0.2, -0.57, -0.25],\n tail: [[0, -0.1, -0.48], [0, -0.22, -0.64], [0, -0.28, -0.82], [0, -0.22, -0.97], [0, -0.06, -1.03], [0, 0.1, -0.97]],\n wing: [0.12, 0.17, 0.08], wingTip: [0.74, 0.74, -0.26],\n} as const satisfies Record<string, V3 | readonly V3[]>;\n\n\nconst bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Neck 1\", \"Spine 2\", P.neck1, tagsOf(\"neck\")],\n [\"Neck 2\", \"Neck 1\", P.neck2, tagsOf(\"neck\")],\n [\"Head\", \"Neck 2\", P.head, tagsOf(\"head\")],\n [\"Jaw\", \"Head\", P.jaw, tagsOf(\"head\")],\n ...pair(\"horn\", \"Head\", [[\"Horn Base\", P.hornBase], [\"Horn Tip\", P.hornTip]]),\n ...pair(\"wing\", \"Spine 2\", [[\"Wing\", P.wing], [\"Wing Tip\", P.wingTip]]),\n ...pair(\"leg\", \"Spine 2\", [[\"Scapula\", P.scapula], [\"Upper Leg\", P.upperLeg], [\"Lower Leg\", P.lowerLeg], [\"Claw\", P.claw]]),\n ...pair(\"leg\", \"Hips\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Hock\", P.hock], [\"Claw 2\", P.claw2]]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n];\n\n// ---- body parts ----\n\nconst T = P.tail;\nconst tailDia = [0.2, 0.16, 0.12, 0.09, 0.07];\nconst headC: V3 = [0, 0.47, 0.42], headR: V3 = [0.36, 0.32, 0.36];\nconst snoutC: V3 = [0, 0.41, 0.58], snoutR: V3 = [0.24, 0.19, 0.26];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Hips: part([\n sphere([0, -0.04, -0.3], [0.44, 0.4, 0.46]),\n paint([0, -0.16, -0.26], [0.34, 0.22, 0.4], BELLY),\n spike([0, 0.15, -0.3], 0.14),\n ], 0.12),\n \"Spine 1\": part([\n sphere([0, -0.02, -0.05], [0.48, 0.44, 0.5]),\n paint([0, -0.15, -0.03], [0.36, 0.24, 0.5], BELLY),\n spike([0, 0.19, -0.06], 0.17),\n ], 0.12),\n \"Spine 2\": part([\n sphere([0, 0.04, 0.16], [0.42, 0.44, 0.42]),\n paint([0, -0.08, 0.26], [0.3, 0.36, 0.3], BELLY),\n spike([0, 0.25, 0.14], 0.15),\n ball(P.wing, 0.1),\n ball(mirrorX(P.wing), 0.1),\n ], 0.12),\n \"Neck 1\": part([\n limb([0, 0.08, 0.2], [0, 0.34, 0.37], 0.2),\n paint([0, 0.18, 0.37], [0.15, 0.32, 0.14], BELLY),\n spike([0, 0.28, 0.27], 0.12),\n ], 0.1),\n \"Neck 2\": null,\n Head: part([\n sphere(headC, headR),\n sphere(snoutC, snoutR),\n // brow ridges over the eyes\n sphere([0.09, 0.56, 0.5], [0.12, 0.06, 0.14]),\n sphere([-0.09, 0.56, 0.5], [0.12, 0.06, 0.14]),\n // cheek frills\n cone([0.15, 0.45, 0.36], [0.27, 0.48, 0.28], 0.08, SPIKE),\n cone([-0.15, 0.45, 0.36], [-0.27, 0.48, 0.28], 0.08, SPIKE),\n spike([0, 0.62, 0.36], 0.1),\n ], 0.08),\n Jaw: part([sphere([0, 0.35, 0.56], [0.2, 0.09, 0.22]), paint([0, 0.32, 0.58], [0.16, 0.06, 0.18], BELLY)], 0.06),\n \"Horn Base L\": part([cone(P.hornBase, P.hornTip, 0.075, HORN)], 0.04, SMOOTH, HORN),\n \"Horn Tip L\": null,\n \"Wing L\": { color: \"@flat\", sd: { roughness: 0.6, metalness: 0, glow: 0, opacity: 1 }, stamps: [], wing: {\n outline: \"bat\", span: 1, chord: 1.05, style: \"veins\", density: 0.5, spots: 0, border: 0.5, base: \"@flat\", base2: \"@flat\", ink: BODY, seed: 3,\n } },\n \"Wing Tip L\": null,\n \"Scapula L\": part([ball([0.15, -0.02, 0.18], 0.22), limb(P.scapula, P.upperLeg, 0.19)], 0.08),\n \"Upper Leg L\": part([limb(P.upperLeg, P.lowerLeg, 0.17)], 0.06),\n \"Lower Leg L\": part([limb(P.lowerLeg, P.claw, 0.15)], 0.06),\n \"Claw L\": part([sphere([0.17, -0.58, 0.29], [0.19, 0.1, 0.22]), ...claws([0.17, -0.58, 0.3])], 0.04),\n \"Thigh L\": part([sphere([0.17, -0.1, -0.27], [0.24, 0.32, 0.32]), limb(P.thigh, P.shin, 0.2)], 0.08),\n \"Shin L\": part([limb(P.shin, P.hock, 0.16)], 0.06),\n \"Hock L\": part([limb(P.hock, P.claw2, 0.14)], 0.06),\n \"Claw 2 L\": part([sphere([0.2, -0.58, -0.22], [0.19, 0.1, 0.22]), ...claws([0.2, -0.58, -0.21])], 0.04),\n ...Object.fromEntries(\n T.slice(0, 5).map((p, i) => [`Tail ${i + 1}`, part([\n limb(p, T[i + 1]!, tailDia[i]!),\n ...(i < 4 ? [spike([p[0], p[1] + tailDia[i]! * 0.42, p[2]], 0.07 + 0.02 * (4 - i))] : []),\n ], 0.06)]),\n ),\n // spade: a flat arrowhead with two lobes at its base, in the tail's plane\n \"Tail 6\": part([\n [\"cone\", \"add\", [0, 0.25, -0.94], eulerUp([0, 0.32, 0.06]), [0.05, 0.32, 0.3], SPIKE],\n [\"sphere\", \"add\", [0, 0.1, -0.96], R0, [0.05, 0.1, 0.26], SPIKE],\n ], 0.02, SMOOTH, SPIKE),\n};\n\n// ---- face ----\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dragon Eye\", size: 0.13, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(headC, headR, [0.5 * side, 0.32, 0.8]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n // nostrils, white fangs and the mouth line all come from the decal\n { bone: \"Head\", cat: \"mouth\", name: \"Snake Mouth\", size: 0.18, ...onEllipsoid(snoutC, snoutR, [0, -0.05, 1]) },\n];\n\nexport const DRAGON_BAKE: Bake = {\n regionBlends: { torso: 0.12, limb: 0.06, wing: 0.06, tail: 0.06, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Fish premade, authored for the app: a chubby, deep-bodied cartoon fish with a big eye, a white band behind\n * the head, and flat fins (forked tail, dorsal, pectorals, pelvics). Bone names follow the generic fish.\n * Template space: +z forward, y up. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { eulerUp, len3, limb, mid3, onEllipsoid, pair, paint, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", FIN = \"@fin\", BAND = \"@band\";\n\nconst SMOOTH: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.2, shape: \"scales\", size: 0.18, coverage: 0.5, variation: 0.1, regularity: 0.8,\n boil: 0, normalStrength: 0.1, roughness: 0.3, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst FIN_LOOK: BakeLook = { ...SMOOTH, foundationColor: FIN, shape: \"none\" };\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SMOOTH, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, look, color);\nconst finPart = (stamps: readonly BakeStamp[]): BakePart => bakedPart(stamps, 0.03, FIN_LOOK, FIN);\n\n/** A flat fin lobe from a to b: an ellipsoid thin across x, `w` wide. */\nconst lobe = (a: V3, b: V3, w: number, thick = 0.07): BakeStamp => [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thick, len3(sub3(b, a)) * 1.15, w], FIN];\n/** A flat triangular fin from its base at a to its point at b. */\nconst sail = (a: V3, b: V3, w: number): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [0.07, len3(sub3(b, a)), w], FIN, { blend: 0.02 }];\n\n// ---- skeleton ----\n\nconst P = {\n head: [0, 0.02, 0.4], spine: [[0, 0.02, 0.22], [0, 0.02, 0.02], [0, 0.01, -0.16], [0, 0, -0.3], [0, 0, -0.42]],\n tailUp: [0, 0.36, -0.8], tailDown: [0, -0.36, -0.8], dorsal: [0, 0.56, -0.16],\n pecBase: [0.17, -0.08, 0.2], pecTip: [0.34, -0.2, -0.02], pelvic: [0.08, -0.36, 0.0],\n} as const;\n\nconst bones: BakeBone[] = [\n [\"Head\", null, P.head, tagsOf(\"head\")],\n ...P.spine.map((p, i): BakeBone => [`Spine ${i + 1}`, i ? `Spine ${i}` : \"Head\", p, tagsOf(\"core\")]),\n [\"Tail Fin Upper\", \"Spine 5\", P.tailUp, tagsOf(\"fin\")],\n [\"Tail Fin Lower\", \"Spine 5\", P.tailDown, tagsOf(\"fin\")],\n [\"Dorsal Fin\", \"Spine 2\", P.dorsal, tagsOf(\"fin\")],\n ...pair(\"fin\", \"Spine 1\", [[\"Pectoral Fin Base\", P.pecBase], [\"Pectoral Fin Tip\", P.pecTip]]),\n ...pair(\"fin\", \"Spine 2\", [[\"Pelvic Fin\", P.pelvic]]),\n];\n\n// ---- parts ----\n\nconst HEAD_C: V3 = [0, 0.02, 0.3], HEAD_S: V3 = [0.32, 0.52, 0.42];\nconst TAIL_BASE: V3 = [0, 0, -0.42];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Head: part([sphere(HEAD_C, HEAD_S)], 0.12),\n \"Spine 1\": part([\n sphere([0, 0.02, 0.04], [0.36, 0.62, 0.62]),\n paint([0, 0.0, 0.19], [0.44, 0.74, 0.1], BAND), // the white band behind the head\n ], 0.12),\n \"Spine 2\": part([sphere([0, 0.01, -0.14], [0.28, 0.46, 0.42])], 0.12),\n \"Spine 3\": part([limb([0, 0.01, -0.2], TAIL_BASE, 0.18)], 0.1),\n \"Spine 4\": null,\n \"Spine 5\": null,\n // forked tail: two lobes from the tail base\n \"Tail Fin Upper\": finPart([lobe(TAIL_BASE, P.tailUp, 0.28)]),\n \"Tail Fin Lower\": finPart([lobe(TAIL_BASE, P.tailDown, 0.28)]),\n \"Dorsal Fin\": finPart([sail([0, 0.22, 0.16], P.dorsal, 0.46)]),\n \"Pectoral Fin Base L\": finPart([lobe(P.pecBase, P.pecTip, 0.18, 0.06)]),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": finPart([sail([0.06, -0.22, 0.08], P.pelvic, 0.18)]),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Glossy Eye\", size: 0.13, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.75 * side, 0.22, 0.62]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Small\", size: 0.09, tint: \"s:black\", ...onEllipsoid(HEAD_C, HEAD_S, [0, -0.12, 1]) },\n];\n\nexport const FISH_BAKE: Bake = {\n regionBlends: { torso: 0.12, limb: 0.03, wing: 0.03, tail: 0.03, head: 0.12 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Jellyfish premade, authored for the app: a translucent, softly glowing bell with a rim and a cute face, and\n * eight long frilly tentacles trailing down. Bone names follow the Octopus (Mantle, Mantle Tip, Arm k Seg 1\u20134), so\n * the two share pose rules and swap tentacles and heads.\n * Template space: +z forward, y up.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp } from \"./bake-types.js\";\nimport { ball, limb, onEllipsoid, part as bakedPart, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BELL = \"@core\", FRILL = \"@frill\";\n\n/** Jelly: smooth, glossy, see-through and glowing a little. */\nconst JELLY: BakeLook = {\n foundationColor: BELL, foundationDarkness: 0.1, shape: \"none\", size: 0.3, coverage: 0, variation: 0.1, regularity: 0.8,\n boil: 0, normalStrength: 0.1, roughness: 0.15, metalness: 0.1, glow: 0.35, opacity: 0.72,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, color = BELL): BakePart => bakedPart(stamps, blend, JELLY, color);\n\n// ---- skeleton ----\n\nconst MANTLE: V3 = [0, 0.45, 0], TIP: V3 = [0, 0.72, 0];\nconst RIM_Y = 0.36, RIM_R = 0.3;\n/** Arm k (1\u20138) goes round from the front toward +x, as the Octopus's do. */\nconst angle = (k: number) => ((k - 1) * Math.PI) / 4;\n/** An arm's joints: from the rim, swaying out and down, each a little further round (a gentle spiral). */\nconst joints = (k: number): V3[] =>\n [0, 1, 2, 3].map((j) => {\n const a = angle(k) + j * 0.12, r = RIM_R * (0.95 + 0.22 * j + 0.1 * Math.sin(j * 1.7)), y = RIM_Y - 0.02 - j * 0.33;\n return [r * Math.sin(a), y, r * Math.cos(a)];\n });\nconst sideTags = (k: number): readonly string[] => {\n const x = Math.sin(angle(k));\n return x > 0.01 ? [\"side:L\"] : x < -0.01 ? [\"side:R\"] : [];\n};\n\nconst bones: BakeBone[] = [\n [\"Mantle\", null, MANTLE, tagsOf(\"core\")],\n [\"Mantle Tip\", \"Mantle\", TIP, tagsOf(\"head\")],\n ...[1, 2, 3, 4, 5, 6, 7, 8].flatMap((k) =>\n joints(k).map((p, j): BakeBone => [`Arm ${k} Seg ${j + 1}`, j ? `Arm ${k} Seg ${j}` : \"Mantle\", p, [...sideTags(k), ...tagsOf(\"tentacle\")]])),\n];\n\n// ---- parts ----\n\nconst BELL_C: V3 = [0, RIM_Y, 0], BELL_S: V3 = [0.92, 0.8, 0.92];\n\n/** A tentacle: thin and tapering, with frills along its upper half. */\nfunction arm(k: number): { [bone: string]: BakePart } {\n const J = joints(k), end: V3 = [J[3]![0] * 1.05, J[3]![1] - 0.3, J[3]![2] * 1.05];\n const pts = [...J, end];\n const out: { [bone: string]: BakePart } = {};\n for (let j = 0; j < 4; j++) {\n const a = pts[j]!, b = pts[j + 1]!, d = 0.06 - j * 0.01;\n const frills: BakeStamp[] = j < 2 ? [0.3, 0.7].map((t): BakeStamp => ball([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t], d * 1.9, FRILL)) : [];\n out[`Arm ${k} Seg ${j + 1}`] = part([limb(a, b, d, FRILL), ...frills], 0.04, FRILL);\n }\n return out;\n}\n\nconst parts: { [bone: string]: BakePart | null } = {\n // the bell: a dome (it fills the lower half of its box: flat at the rim, round on top), with a soft rim\n Mantle: part([\n [\"dome\", \"add\", [0, RIM_Y + 0.4, 0], [0, 0, 0], [0.92, 0.8, 0.92], BELL],\n [\"torus\", \"add\", [0, RIM_Y + 0.01, 0], [0, 0, 0], [0.86, 0.2, 0.86], BELL, { blend: 0.04 }],\n ], 0.08),\n \"Mantle Tip\": part([[\"sphere\", \"add\", [0, 0.7, 0], [0, 0, 0], [0.42, 0.2, 0.42], BELL]], 0.12),\n ...Object.assign({}, ...[1, 2, 3, 4, 5, 6, 7, 8].map(arm)),\n};\n\nconst decals: BakeDecal[] = [\n ...([1, -1] as const).map((side): BakeDecal => ({ bone: \"Mantle\", cat: \"eye\", name: \"Cute\", size: 0.13, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(BELL_C, BELL_S, [0.32 * side, 0.45, 0.85]) })),\n { bone: \"Mantle\", cat: \"mouth\", name: \"Smile\", size: 0.1, tint: \"s:black\", ...onEllipsoid(BELL_C, BELL_S, [0, 0.22, 1]) },\n];\n\nexport const JELLYFISH_BAKE: Bake = {\n regionBlends: { torso: 0.08, limb: 0.04, wing: 0.04, tail: 0.04, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Shark premade, authored for the app: a cartoon shark with a torpedo body, a pointed snout, a white belly, gill\n * slits, a tall dorsal fin, wide swept pectorals and a crescent tail with a longer upper lobe. Bone names follow the\n * Fish (Head, Spine 1\u20135, the fins), so it shares the Fish's pose rules.\n * Template space: +z forward, y up. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { eulerUp, len3, limb, mid3, onEllipsoid, pair, paint, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", FIN = \"@fin\", BELLY = \"@belly\";\n\nconst SKIN: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.15, shape: \"none\", size: 0.15, coverage: 0, variation: 0.05, regularity: 0.8,\n boil: 0, normalStrength: 0.05, roughness: 0.35, metalness: 0.05, glow: 0, opacity: 1,\n};\nconst FIN_LOOK: BakeLook = { ...SKIN, foundationColor: FIN };\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, SKIN, color);\nconst finPart = (stamps: readonly BakeStamp[]): BakePart => bakedPart(stamps, 0.03, FIN_LOOK, FIN);\n\n/** A flat fin lobe from a to b: an ellipsoid thin across x, `w` wide. */\nconst lobe = (a: V3, b: V3, w: number, thick = 0.06): BakeStamp => [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thick, len3(sub3(b, a)) * 1.15, w], FIN];\n/** A flat triangular fin from its base at a to its point at b. */\nconst sail = (a: V3, b: V3, w: number, thick = 0.07): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thick, len3(sub3(b, a)), w], FIN, { blend: 0.02 }];\n\n// ---- skeleton ----\n\nconst P = {\n head: [0, 0.04, 0.5],\n spine: [[0, 0.04, 0.28], [0, 0.04, 0.04], [0, 0.04, -0.22], [0, 0.05, -0.46], [0, 0.06, -0.66]],\n tailUp: [0, 0.56, -1.04], tailDown: [0, -0.28, -0.88], dorsal: [0, 0.68, -0.1],\n pecBase: [0.18, -0.12, 0.18], pecTip: [0.58, -0.26, -0.06], pelvic: [0.1, -0.26, -0.42],\n} as const;\n\nconst bones: BakeBone[] = [\n [\"Head\", null, P.head, tagsOf(\"head\")],\n ...P.spine.map((p, i): BakeBone => [`Spine ${i + 1}`, i ? `Spine ${i}` : \"Head\", p, tagsOf(\"core\")]),\n [\"Tail Fin Upper\", \"Spine 5\", P.tailUp, tagsOf(\"fin\")],\n [\"Tail Fin Lower\", \"Spine 5\", P.tailDown, tagsOf(\"fin\")],\n [\"Dorsal Fin\", \"Spine 2\", P.dorsal, tagsOf(\"fin\")],\n ...pair(\"fin\", \"Spine 1\", [[\"Pectoral Fin Base\", P.pecBase], [\"Pectoral Fin Tip\", P.pecTip]]),\n ...pair(\"fin\", \"Spine 3\", [[\"Pelvic Fin\", P.pelvic]]),\n];\n\n// ---- parts ----\n\nconst HEAD_C: V3 = [0, 0.03, 0.46], HEAD_S: V3 = [0.36, 0.34, 0.62];\nconst TAIL_BASE = P.spine[4] as V3;\n\n/** Three gill slits on one side, just behind the head: shallow grooves (paint this small smears into one blot). */\nconst gills = (side: 1 | -1): BakeStamp[] =>\n [0.33, 0.26, 0.19].map((z): BakeStamp => [\"sphere\", \"subtract\", [0.235 * side, 0.03, z], [0, 0, 0], [0.06, 0.17, 0.022], BODY, { blend: 0.006 }]);\n\nconst parts: { [bone: string]: BakePart | null } = {\n Head: part([\n sphere(HEAD_C, HEAD_S),\n sphere([0, 0.05, 0.7], [0.2, 0.17, 0.24]), // the pointed snout\n paint([0, -0.16, 0.46], [0.6, 0.24, 0.8], BELLY),\n ], 0.12),\n \"Spine 1\": part([\n sphere([0, 0.04, 0.14], [0.44, 0.44, 0.78]),\n paint([0, -0.17, 0.14], [0.6, 0.26, 0.86], BELLY),\n ...gills(1),\n ...gills(-1),\n ], 0.14),\n \"Spine 2\": part([sphere([0, 0.04, -0.14], [0.36, 0.36, 0.62]), paint([0, -0.14, -0.12], [0.5, 0.22, 0.66], BELLY)], 0.14),\n \"Spine 3\": part([limb([0, 0.04, -0.3], [0, 0.05, -0.5], 0.22)], 0.12),\n \"Spine 4\": part([limb([0, 0.05, -0.48], TAIL_BASE, 0.12)], 0.08),\n \"Spine 5\": null,\n // crescent tail: a long upper lobe and a shorter lower one\n \"Tail Fin Upper\": finPart([lobe(TAIL_BASE, P.tailUp, 0.26)]),\n \"Tail Fin Lower\": finPart([lobe(TAIL_BASE, P.tailDown, 0.22)]),\n \"Dorsal Fin\": finPart([sail([0, 0.18, 0.06], P.dorsal, 0.42, 0.08)]),\n \"Pectoral Fin Base L\": finPart([lobe(P.pecBase, P.pecTip, 0.26, 0.05)]),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": finPart([sail([0.06, -0.12, -0.34], P.pelvic, 0.12, 0.05)]),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.08, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.8 * side, 0.35, 0.5]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Fangs\", size: 0.16, tint: \"s:black\", ...onEllipsoid(HEAD_C, HEAD_S, [0, -0.55, 0.85]) },\n];\n\nexport const SHARK_BAKE: Bake = {\n regionBlends: { torso: 0.14, limb: 0.03, wing: 0.03, tail: 0.03, head: 0.12 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Whale premade, authored for the app: a big round-headed cartoon whale with a long tapering body, a pale\n * grooved belly, a blowhole, a small dorsal hump, paddle flippers and wide horizontal flukes. Bone names follow the\n * Fish (Head, Spine 1\u20135, Dorsal Fin, Pectoral Fins), plus Fluke L / R, so it shares the Fish's pose rules.\n * Template space: +z forward, y up. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { carve, eulerUp, len3, limb, mid3, onEllipsoid, pair, paint, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", FIN = \"@fin\", BELLY = \"@belly\", GROOVE = \"@groove\";\n\nconst SKIN: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.15, shape: \"none\", size: 0.15, coverage: 0, variation: 0.05, regularity: 0.8,\n boil: 0, normalStrength: 0.05, roughness: 0.4, metalness: 0.05, glow: 0, opacity: 1,\n};\nconst FIN_LOOK: BakeLook = { ...SKIN, foundationColor: FIN };\nconst part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, SKIN, color);\nconst finPart = (stamps: readonly BakeStamp[]): BakePart => bakedPart(stamps, 0.04, FIN_LOOK, FIN);\n\n/** A flat paddle from a to b, `w` wide, lying flat (thin across y): an ellipsoid turned about y only. */\nconst fluke = (a: V3, b: V3, w: number, thick = 0.06): BakeStamp => {\n const d = sub3(b, a);\n return [\"sphere\", \"add\", mid3(a, b), [0, Math.atan2(d[0], d[2]), 0], [w, thick, len3(d) * 1.15], FIN];\n};\n/** A flipper from a to b: an ellipsoid along the bone, `w` wide and `thick` thin. */\nconst flipper = (a: V3, b: V3, w: number, thick = 0.07): BakeStamp => [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [w, len3(sub3(b, a)) * 1.2, thick], FIN];\n\n// ---- skeleton ----\n\nconst P = {\n head: [0, 0.02, 0.55],\n spine: [[0, 0.04, 0.3], [0, 0.04, 0.02], [0, 0.04, -0.28], [0, 0.06, -0.55], [0, 0.08, -0.78]],\n fluke: [0.5, 0.1, -1.1], dorsal: [0, 0.4, -0.42],\n pecBase: [0.3, -0.18, 0.3], pecTip: [0.64, -0.3, 0.08],\n} as const;\n\nconst bones: BakeBone[] = [\n [\"Head\", null, P.head, tagsOf(\"head\")],\n ...P.spine.map((p, i): BakeBone => [`Spine ${i + 1}`, i ? `Spine ${i}` : \"Head\", p, tagsOf(\"core\")]),\n [\"Dorsal Fin\", \"Spine 3\", P.dorsal, tagsOf(\"fin\")],\n ...pair(\"fin\", \"Spine 5\", [[\"Fluke\", P.fluke]]),\n ...pair(\"fin\", \"Spine 1\", [[\"Pectoral Fin Base\", P.pecBase], [\"Pectoral Fin Tip\", P.pecTip]]),\n];\n\n// ---- parts ----\n\nconst HEAD_C: V3 = [0, 0.04, 0.46], HEAD_S: V3 = [0.74, 0.68, 0.9];\nconst TAIL_BASE = P.spine[4] as V3;\n\n/** The throat grooves: pale stripes along the belly. */\nconst grooves: BakeStamp[] = [-0.16, -0.08, 0, 0.08, 0.16].map((x) => [\"sphere\", \"paint\", [x, -0.3, 0.42], [0, 0, 0], [0.025, 0.14, 0.62], GROOVE, { blend: 0.004 }] as BakeStamp);\n\nconst parts: { [bone: string]: BakePart | null } = {\n Head: part([\n sphere(HEAD_C, HEAD_S),\n paint([0, -0.3, 0.5], [0.9, 0.4, 0.8], BELLY),\n ...grooves,\n carve([0, 0.37, 0.4], 0.07), // the blowhole\n ], 0.16),\n // long overlapping pieces, so the body tapers smoothly instead of reading as beads\n \"Spine 1\": part([sphere([0, 0.04, 0.1], [0.74, 0.68, 0.96]), paint([0, -0.3, 0.1], [0.9, 0.38, 0.98], BELLY)], 0.22),\n \"Spine 2\": part([sphere([0, 0.05, -0.22], [0.62, 0.58, 0.9]), paint([0, -0.24, -0.2], [0.76, 0.32, 0.9], BELLY)], 0.22),\n \"Spine 3\": part([limb([0, 0.05, -0.34], [0, 0.07, -0.64], 0.42)], 0.18),\n \"Spine 4\": part([limb([0, 0.06, -0.56], TAIL_BASE, 0.22)], 0.12),\n \"Spine 5\": null,\n \"Dorsal Fin\": finPart([[\"cone\", \"add\", [0, 0.31, -0.42], eulerUp([0, 1, -0.6]), [0.08, 0.16, 0.2], FIN, { blend: 0.03 }]]),\n \"Fluke L\": finPart([fluke([0.03, 0.09, -0.82], P.fluke, 0.32)]),\n \"Pectoral Fin Base L\": finPart([flipper(P.pecBase, P.pecTip, 0.2)]),\n \"Pectoral Fin Tip L\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Cute\", size: 0.14, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.85 * side, -0.05, 0.55]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Grin\", size: 0.34, tint: \"s:black\", ...onEllipsoid(HEAD_C, HEAD_S, [0, -0.3, 1]) },\n];\n\nexport const WHALE_BAKE: Bake = {\n regionBlends: { torso: 0.18, limb: 0.04, wing: 0.04, tail: 0.04, head: 0.16 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Spider premade, authored for the app (the POC's generated spider read as one sausage on needle legs).\n * Template space: +z forward, y up, feet on y = -0.4. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, limb, onEllipsoid, pair, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst BODY = \"@core\", FANG = \"@fang\";\nconst FOOT_Y = -0.4;\n\n// ---- looks ----\n\n/** Short fuzz all over (the POC's spider-leg fleck). */\nconst HAIRY: BakeLook = {\n foundationColor: BODY, foundationDarkness: 0.35, shape: \"grass\", size: 0.25, coverage: 0.85, variation: 0.3, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.7, metalness: 0, glow: 0, opacity: 1,\n};\n/** The abdomen: fuzz plus bands across it in the accent color. */\nconst BANDED: BakeLook = {\n ...HAIRY, patternType: 1, patternScale: 1.1, patternStrength: 1, patternColor: \"@accent\", patternColor2: \"@accent\",\n patternRotX: 90, patternRotY: 0, patternRotZ: 0,\n};\nconst GLOSSY: BakeLook = {\n foundationColor: FANG, foundationDarkness: 0.1, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.25, metalness: 0.1, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = HAIRY, color: TemplateColor = BODY): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- body ----\n\nconst CEPH: V3 = [0, 0.02, 0.22], CEPH_S: V3 = [0.5, 0.32, 0.54];\nconst HEAD: V3 = [0, 0.08, 0.43], HEAD_S: V3 = [0.3, 0.24, 0.24];\nconst ABDOMEN: V3 = [0, 0.2, -0.36], ABDOMEN_S: V3 = [0.76, 0.66, 0.88];\n\n// ---- legs: four pairs fanning from the cephalothorax rim, knees high, feet on the ground ----\n\nconst LEG_ANGLES = [62, 26, -12, -50]; // degrees from +x toward +z (front pair reaches forward)\nconst LEG_REACH = [1.12, 1, 1, 1.12];\n\nfunction legJoints(i: number): readonly (readonly [string, V3])[] {\n const t = (LEG_ANGLES[i]! * Math.PI) / 180, k = LEG_REACH[i]!;\n const dx = Math.cos(t), dz = Math.sin(t);\n const base: V3 = [0.2 * dx, 0.03, CEPH[2] + 0.22 * dz];\n const at = (r: number, y: number): V3 => [base[0] + dx * r * k, y, base[2] + dz * r * k];\n return [\n [`Leg ${i + 1} Coxa`, base],\n [`Leg ${i + 1} Femur`, at(0.3, 0.42)],\n [`Leg ${i + 1} Tibia`, at(0.6, 0.24)],\n [`Leg ${i + 1} Tarsus`, at(0.84, FOOT_Y)],\n ];\n}\n\nconst PALP: readonly V3[] = [[0.11, -0.02, 0.46], [0.2, 0.08, 0.6], [0.22, -0.1, 0.7]];\n\nconst bones: BakeBone[] = [\n [\"Cephalothorax\", null, CEPH, tagsOf(\"core\")],\n [\"Pedicel\", \"Cephalothorax\", [0, 0.06, -0.02], tagsOf(\"core\")],\n [\"Abdomen\", \"Pedicel\", [0, 0.18, -0.34], tagsOf(\"abdomen\")],\n [\"Spinneret\", \"Abdomen\", [0, 0.12, -0.8], tagsOf(\"abdomen\")],\n ...pair(\"mandible\", \"Cephalothorax\", [[\"Chelicera\", [0.06, -0.02, 0.5]], [\"Fang\", [0.05, -0.2, 0.52]]]),\n ...pair(\"leg\", \"Cephalothorax\", PALP.map((p, j) => [`Pedipalp ${j + 1}`, p] as const)),\n ...[0, 1, 2, 3].flatMap((i) => pair(\"spider-leg\", \"Cephalothorax\", legJoints(i))),\n];\n\n/** A leg's parts: thick femur up to the knee, tibia, then a tapering foot segment ending in a point. */\nfunction legParts(i: number): { [bone: string]: BakePart | null } {\n const [[, coxa], [, knee], [, ankle], [, foot]] = legJoints(i) as [readonly [string, V3], readonly [string, V3], readonly [string, V3], readonly [string, V3]];\n const near: V3 = [ankle[0] + (foot[0] - ankle[0]) * 0.72, ankle[1] + (foot[1] - ankle[1]) * 0.72, ankle[2] + (foot[2] - ankle[2]) * 0.72];\n return {\n [`Leg ${i + 1} Coxa L`]: part([ball(coxa, 0.15), limb(coxa, knee, 0.12)], 0.05),\n [`Leg ${i + 1} Femur L`]: part([ball(knee, 0.13), limb(knee, ankle, 0.1)], 0.05),\n [`Leg ${i + 1} Tibia L`]: part([ball(ankle, 0.1), limb(ankle, near, 0.08), cone(near, foot, 0.075, BODY, 0.03)], 0.04),\n [`Leg ${i + 1} Tarsus L`]: null,\n };\n}\n\nconst parts: { [bone: string]: BakePart | null } = {\n Cephalothorax: part([sphere(CEPH, CEPH_S), sphere(HEAD, HEAD_S)], 0.1),\n Pedicel: part([limb([0, 0.04, 0.0], [0, 0.12, -0.12], 0.16)], 0.06),\n Abdomen: part([sphere(ABDOMEN, ABDOMEN_S)], 0.08, BANDED),\n Spinneret: part([cone([0, 0.15, -0.74], [0, 0.1, -0.86], 0.1, BODY)], 0.03),\n \"Chelicera L\": part([limb([0.06, 0.01, 0.48], [0.06, -0.09, 0.52], 0.12), cone([0.06, -0.09, 0.52], [0.05, -0.22, 0.51], 0.065, FANG)], 0.03),\n \"Fang L\": null,\n \"Pedipalp 1 L\": part([limb(PALP[0]!, PALP[1]!, 0.075)], 0.03),\n \"Pedipalp 2 L\": part([limb(PALP[1]!, PALP[2]!, 0.07), ball(PALP[2]!, 0.095)], 0.03),\n \"Pedipalp 3 L\": null,\n ...Object.assign({}, ...[0, 1, 2, 3].map(legParts)),\n};\n// the fangs read as glossy black\nparts[\"Chelicera L\"] = { ...parts[\"Chelicera L\"]!, sd: { ...GLOSSY, foundationColor: BODY, blend: 0.03 } };\n\nconst decals: BakeDecal[] = [\n { bone: \"Cephalothorax\", cat: \"eye\", name: \"Spider Eyes\", size: 0.26, ...onEllipsoid(HEAD, HEAD_S, [0, 0.55, 1]) },\n];\n\nexport const SPIDER_BAKE: Bake = {\n regionBlends: { torso: 0.1, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Crawler premade as a lizard, authored for the app (the POC's generated crawler read as tubes): a low,\n * slightly flat body with a pale belly and patches on the back, a wedge head with brow ridges, legs splayed with the\n * elbows out, three-toed feet and a long tapering tail. Template space: +z forward, y up, feet on y \u2248 -0.17.\n * Bone names follow the generic crawler. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, limb, onEllipsoid, pair, paint, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SKIN = \"@core\", PALE = \"@pale\";\nconst FOOT_Y = -0.17;\n\n// ---- looks ----\n\nconst SCALY: BakeLook = {\n foundationColor: SKIN, foundationDarkness: 0.3, shape: \"scales\", size: 0.2, coverage: 0.6, variation: 0.2, regularity: 0.7,\n boil: 0, normalStrength: 0.12, roughness: 0.5, metalness: 0.05, glow: 0, opacity: 1,\n};\n/** The back: scales plus irregular patches. */\nconst PATCHED: BakeLook = {\n ...SCALY, patternType: 4, patternScale: 1.3, patternStrength: 1, patternColor: \"@spots\", patternColor2: \"@spots\",\n patternRotX: 0, patternRotY: 0, patternRotZ: 0,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SCALY, color: TemplateColor = SKIN): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- skeleton ----\n\nconst P = {\n hips: [0, -0.02, -0.3], spine1: [0, 0, -0.1], spine2: [0, 0.01, 0.1], spine3: [0, 0.02, 0.28],\n neck: [0, 0.04, 0.44], head: [0, 0.06, 0.58], snout: [0, 0.04, 0.8],\n shoulder: [0.12, 0.0, 0.28], elbow: [0.28, 0.03, 0.31], wrist: [0.34, -0.1, 0.37], foot: [0.41, FOOT_Y, 0.45],\n hip: [0.12, 0.0, -0.3], knee: [0.3, 0.04, -0.26], ankle: [0.37, -0.1, -0.36], foot2: [0.45, FOOT_Y, -0.28],\n tail: [[0, -0.03, -0.48], [0, -0.06, -0.64], [0.02, -0.09, -0.78], [0.07, -0.11, -0.9], [0.14, -0.13, -0.99], [0.23, -0.14, -1.04]],\n} as const satisfies Record<string, V3 | readonly V3[]>;\n\nconst bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Spine 3\", \"Spine 2\", P.spine3, tagsOf(\"core\")],\n [\"Neck\", \"Spine 3\", P.neck, tagsOf(\"neck\")],\n [\"Head\", \"Neck\", P.head, tagsOf(\"head\")],\n [\"Snout\", \"Head\", P.snout, tagsOf(\"head\")],\n ...pair(\"leg\", \"Spine 3\", [[\"Shoulder\", P.shoulder], [\"Elbow\", P.elbow], [\"Wrist\", P.wrist], [\"Foot\", P.foot]]),\n ...pair(\"leg\", \"Hips\", [[\"Hip\", P.hip], [\"Knee\", P.knee], [\"Ankle\", P.ankle], [\"Foot 2\", P.foot2]]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n];\n\n// ---- body parts ----\n\n/** A flat pad with three toes fanning forward and outward. */\nfunction foot(p: V3): BakeStamp[] {\n const pad: V3 = [p[0], p[1] + 0.01, p[2] + 0.02];\n const toes = [-0.6, 0, 0.6].map((a) => {\n const d: V3 = [Math.sin(a + 0.35), 0, Math.cos(a + 0.35)];\n return cone([pad[0] + d[0] * 0.03, pad[1], pad[2] + d[2] * 0.03], [pad[0] + d[0] * 0.13, pad[1] - 0.01, pad[2] + d[2] * 0.13], 0.045, SKIN, 0.02);\n });\n return [sphere(pad, [0.12, 0.045, 0.12]), ...toes];\n}\n/** A back segment: a flattened ellipsoid with its belly painted pale. */\nconst segment = (c: V3, s: V3): BakeStamp[] => [sphere(c, s), paint([c[0], c[1] - s[1] * 0.45, c[2]], [s[0] * 0.75, s[1] * 0.4, s[2] * 0.9], PALE)];\n\nconst HEAD_C: V3 = [0, 0.07, 0.58], HEAD_S: V3 = [0.28, 0.19, 0.28];\nconst SNOUT_C: V3 = [0, 0.04, 0.72], SNOUT_S: V3 = [0.22, 0.13, 0.26];\nconst T = P.tail;\nconst tailD = [0.17, 0.14, 0.11, 0.085, 0.06];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Hips: part(segment([0, -0.03, -0.3], [0.3, 0.2, 0.32]), 0.1, PATCHED),\n \"Spine 1\": part(segment([0, -0.02, -0.1], [0.34, 0.22, 0.34]), 0.1, PATCHED),\n \"Spine 2\": part(segment([0, 0, 0.1], [0.34, 0.22, 0.34]), 0.1, PATCHED),\n \"Spine 3\": part(segment([0, 0.01, 0.27], [0.3, 0.21, 0.3]), 0.1, PATCHED),\n Neck: part(segment([0, 0.03, 0.43], [0.22, 0.17, 0.22]), 0.08),\n Head: part([\n sphere(HEAD_C, HEAD_S),\n sphere(SNOUT_C, SNOUT_S),\n sphere([0.08, 0.15, 0.6], [0.1, 0.06, 0.13]), // brow ridges\n sphere([-0.08, 0.15, 0.6], [0.1, 0.06, 0.13]),\n paint([0, -0.02, 0.68], [0.2, 0.06, 0.26], PALE), // pale chin\n ], 0.08),\n Snout: null,\n \"Shoulder L\": part([ball(P.shoulder, 0.15), limb(P.shoulder, P.elbow, 0.13)], 0.06),\n \"Elbow L\": part([ball(P.elbow, 0.12), limb(P.elbow, P.wrist, 0.1)], 0.05),\n \"Wrist L\": part([limb(P.wrist, P.foot, 0.085)], 0.04),\n \"Foot L\": part(foot(P.foot), 0.03),\n \"Hip L\": part([sphere([0.15, 0.0, -0.3], [0.18, 0.16, 0.2]), limb(P.hip, P.knee, 0.14)], 0.06),\n \"Knee L\": part([ball(P.knee, 0.13), limb(P.knee, P.ankle, 0.11)], 0.05),\n \"Ankle L\": part([limb(P.ankle, P.foot2, 0.09)], 0.04),\n \"Foot 2 L\": part(foot(P.foot2), 0.03),\n ...Object.fromEntries(T.slice(0, 5).map((p, i) => [`Tail ${i + 1}`,\n part(i < 4 ? [limb(p, T[i + 1]!, tailD[i]!)] : [cone(p, T[i + 1]!, tailD[i]!, SKIN, 0.04)], 0.05, i < 2 ? PATCHED : SCALY)])),\n \"Tail 6\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Narrow\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.72 * side, 0.4, 0.55]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Flat\", size: 0.13, tint: \"s:black\", ...onEllipsoid(SNOUT_C, SNOUT_S, [0, -0.25, 1]) },\n];\n\nexport const LIZARD_BAKE: Bake = {\n regionBlends: { torso: 0.1, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Rodent premade, authored for the app: a cute mouse on all fours (chubby teardrop body, big round ears with\n * pink insides, a pointed snout with a pink nose, pink paws and a long thin pink tail curling up).\n * Template space: +z forward, y up, feet on y \u2248 -0.4. Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, eulerUp, len3, limb, mid3, onEllipsoid, pair, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst FUR = \"@core\", PINK = \"@pink\", NOSE = \"@pink\";\n\n// ---- looks ----\n\n/** Soft, short fur. */\nconst SOFT: BakeLook = {\n foundationColor: FUR, foundationDarkness: 0.2, shape: \"circle\", size: 0.15, coverage: 0.3, variation: 0.2, regularity: 0,\n boil: 0, normalStrength: 0.1, roughness: 0.75, metalness: 0, glow: 0, opacity: 1,\n};\nconst SKIN: BakeLook = { ...SOFT, foundationColor: PINK, shape: \"none\" };\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SOFT, color: TemplateColor = FUR): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- skeleton ----\n\nconst P = {\n hips: [0, -0.12, -0.24], spine1: [0, -0.08, -0.02], spine2: [0, -0.06, 0.16], head: [0, -0.02, 0.34],\n earBase: [0.11, 0.12, 0.29], earTip: [0.18, 0.3, 0.27],\n frontLeg: [0.1, -0.18, 0.2], frontPaw: [0.11, -0.36, 0.26],\n thigh: [0.13, -0.16, -0.24], hindFoot: [0.15, -0.36, -0.16], toe: [0.15, -0.38, -0.02],\n tail: [[0, -0.2, -0.48], [0, -0.22, -0.66], [0, -0.14, -0.82], [0, 0.02, -0.9], [0, 0.18, -0.86]],\n} as const satisfies Record<string, V3 | readonly V3[]>;\n\nconst bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Head\", \"Spine 2\", P.head, tagsOf(\"head\")],\n ...pair(\"ear\", \"Head\", [[\"Ear Base\", P.earBase], [\"Ear Tip\", P.earTip]]),\n ...pair(\"leg\", \"Spine 2\", [[\"Front Leg\", P.frontLeg], [\"Front Paw\", P.frontPaw]]),\n ...pair(\"leg\", \"Hips\", [[\"Thigh\", P.thigh], [\"Hind Foot\", P.hindFoot], [\"Toe\", P.toe]]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n];\n\n// ---- body parts ----\n\nconst SKULL: V3 = [0, 0.0, 0.32], SKULL_S: V3 = [0.34, 0.32, 0.34];\nconst EAR_C: V3 = [0.16, 0.22, 0.28];\nconst T = P.tail;\n/** Ears turned 45\u00B0 outward so they read as round discs from the front and the side. */\nconst EAR_TURN: V3 = [0, 0.55, 0];\n/** A thin tube from a to b with a ball at b: capsules this thin taper into beads. */\nconst tube = (a: V3, b: V3, d: number): BakeStamp[] => [[\"cylinder\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [d, len3(sub3(b, a)), d], PINK], ball(b, d, PINK)];\n\nconst parts: { [bone: string]: BakePart | null } = {\n // teardrop: a big round rump tapering to the shoulders\n Hips: part([sphere([0, -0.08, -0.24], [0.52, 0.5, 0.56])], 0.14),\n \"Spine 1\": part([sphere([0, -0.11, -0.02], [0.42, 0.38, 0.46])], 0.14),\n \"Spine 2\": part([sphere([0, -0.1, 0.16], [0.3, 0.27, 0.3])], 0.12),\n Head: part([\n sphere(SKULL, SKULL_S),\n limb([0, -0.02, 0.4], [0, -0.06, 0.55], 0.13), // pointed snout\n ball([0, -0.05, 0.61], 0.065, NOSE),\n ], 0.1),\n // big round ears facing forward, pink inside\n \"Ear Base L\": part([\n ball([0.11, 0.12, 0.29], 0.1), // base, into the head\n [\"sphere\", \"add\", EAR_C, EAR_TURN, [0.28, 0.28, 0.1], FUR],\n [\"sphere\", \"paint\", [EAR_C[0] + 0.02, EAR_C[1], EAR_C[2] + 0.04], EAR_TURN, [0.2, 0.2, 0.08], PINK],\n ], 0.04),\n \"Ear Tip L\": null,\n \"Front Leg L\": part([limb(P.frontLeg, P.frontPaw, 0.075)], 0.04),\n \"Front Paw L\": part([sphere([0.11, -0.37, 0.29], [0.09, 0.05, 0.12], PINK)], 0.03, SKIN, PINK),\n \"Thigh L\": part([sphere([0.13, -0.17, -0.22], [0.22, 0.26, 0.3]), limb(P.thigh, P.hindFoot, 0.08)], 0.08),\n \"Hind Foot L\": part([sphere([0.15, -0.37, -0.08], [0.1, 0.05, 0.24], PINK)], 0.03, SKIN, PINK),\n \"Toe L\": null,\n // long thin pink tail, curling up at the end\n ...Object.fromEntries(T.slice(0, 4).map((p, i) => [`Tail ${i + 1}`, part(tube(p, T[i + 1]!, 0.055 - 0.006 * i), 0.02, SKIN, PINK)])),\n \"Tail 5\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.075, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(SKULL, SKULL_S, [0.62 * side, 0.22, 0.75]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Cat\", size: 0.08, tint: \"s:black\", ...onEllipsoid([0, -0.04, 0.48], [0.13, 0.13, 0.2], [0, -0.6, 0.8]) },\n];\n\nexport const RODENT_BAKE: Bake = {\n regionBlends: { torso: 0.14, limb: 0.04, wing: 0.04, tail: 0.02, head: 0.1 },\n bones,\n parts,\n decals,\n};\n", "/*\n * Sitting quadrupeds, authored for the app: the Feline (a sleek cat with a slim tail curled round its feet) and the\n * Fox (a pointier snout, big black-tipped ears, a pale chest / face / tail tip and a huge bushy tail raised behind).\n * Both sit upright on folded hind legs with straight front legs. Template space: +z forward, y up, paws on y \u2248 -0.6.\n * Side R bones have no entries and mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, eulerUp, len3, limb, mid3, onEllipsoid, pair, paint, part as bakedPart, R0, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst COAT = \"@core\", PALE = \"@pale\", NOSE = \"@nose\", TIP = \"@tip\", INNER = \"@inner\";\n\ntype Sitter = {\n readonly fur: BakeLook;\n /** Snout length past the skull. */\n readonly snout: number;\n /** Ear height and width. */\n readonly ear: readonly [number, number];\n readonly earTips: boolean;\n readonly pale: boolean;\n readonly tail: \"slim\" | \"bushy\";\n readonly eye: string;\n /** \"round\": a cat's papercraft-style head (a cranium over wider jowls, a flat face plane, a small muzzle);\n * \"long\": a fox's longer head. */\n readonly head: \"round\" | \"long\";\n};\n\nconst fur = (size: number, normal: number): BakeLook => ({\n foundationColor: COAT, foundationDarkness: 0.25, shape: \"grass\", size, coverage: 0.8, variation: 0.25, regularity: 0,\n boil: 0, normalStrength: normal, roughness: 0.75, metalness: 0, glow: 0, opacity: 1,\n});\n\nconst P = {\n hips: [0, -0.4, -0.1], spine1: [0, -0.22, 0.0], spine2: [0, -0.02, 0.08], neck: [0, 0.14, 0.12], head: [0, 0.3, 0.14],\n scapula: [0.08, -0.04, 0.12], upperLeg: [0.09, -0.2, 0.2], lowerLeg: [0.09, -0.45, 0.22], paw: [0.09, -0.58, 0.26],\n thigh: [0.12, -0.4, -0.1], shin: [0.16, -0.42, 0.08], hock: [0.15, -0.56, -0.16], paw2: [0.15, -0.58, 0.02],\n} as const satisfies Record<string, V3>;\n\n/** Tail joints: the cat's curls round the feet on the ground, the fox's rises behind in a big plume. */\nconst TAILS: Record<Sitter[\"tail\"], readonly V3[]> = {\n slim: [[0, -0.52, -0.26], [0.12, -0.56, -0.34], [0.26, -0.56, -0.26], [0.32, -0.56, -0.08], [0.3, -0.55, 0.1]],\n bushy: [[0, -0.5, -0.3], [0.06, -0.36, -0.48], [0.1, -0.12, -0.56], [0.08, 0.08, -0.48]],\n};\n\nfunction sitter(o: Sitter): Bake {\n const part = (stamps: readonly BakeStamp[], blend: number, color: TemplateColor = COAT): BakePart => bakedPart(stamps, blend, o.fur, color);\n const T = TAILS[o.tail];\n const round = o.head === \"round\";\n // a round head sets its ears wider and leaning out, on the top corners of the skull\n const earBase: V3 = round ? [0.13, 0.42, 0.1] : [0.1, 0.44, 0.1];\n const earTip: V3 = round ? [0.2, 0.42 + o.ear[0], 0.08] : [0.15, 0.44 + o.ear[0], 0.07];\n\n const bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Neck\", \"Spine 2\", P.neck, tagsOf(\"neck\")],\n [\"Head\", \"Neck\", P.head, tagsOf(\"head\")],\n ...pair(\"ear\", \"Head\", [[\"Ear Base\", earBase], [\"Ear Tip\", earTip]]),\n ...pair(\"leg\", \"Spine 2\", [[\"Scapula\", P.scapula], [\"Upper Leg\", P.upperLeg], [\"Lower Leg\", P.lowerLeg], [\"Paw\", P.paw]]),\n ...pair(\"leg\", \"Hips\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Hock\", P.hock], [\"Paw 2\", P.paw2]]),\n ...T.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n ];\n\n const SKULL: V3 = [0, 0.3, 0.14], SKULL_S: V3 = round ? [0.42, 0.34, 0.3] : [0.34, 0.3, 0.32];\n const snoutEnd: V3 = [0, 0.23, 0.26 + o.snout];\n const MUZZLE_C: V3 = round ? [0, 0.22, 0.3] : mid3([0, 0.25, 0.22], snoutEnd);\n const MUZZLE_S: V3 = round ? [0.15, 0.09, 0.07] : [0.16, 0.12, 0.1 + o.snout];\n // the cat's face plane: eyes and mouth sit on this ellipsoid, whose front matches the cut at z \u2248 0.31\n const FACE_C: V3 = [0, 0.29, 0.12], FACE_S: V3 = [0.5, 0.34, 0.38];\n const headStamps: BakeStamp[] = round\n ? [\n sphere([0, 0.34, 0.12], [0.4, 0.3, 0.3]), // cranium\n sphere([0, 0.25, 0.14], [0.54, 0.24, 0.32]), // jowls: wider than the cranium, so the head reads as a pear\n [\"cube\", \"subtract\", [0, 0.28, 0.39], R0, [0.8, 0.6, 0.16], COAT], // a flat face plane\n sphere(MUZZLE_C, MUZZLE_S), // small muzzle on the plane (the nose is the mouth decal's)\n ]\n : [\n sphere(SKULL, SKULL_S),\n sphere(MUZZLE_C, MUZZLE_S),\n ...(o.pale ? [paint([0, 0.22, 0.28], [0.26, 0.12, 0.14 + o.snout], PALE), paint([0.12, 0.27, 0.2], [0.12, 0.1, 0.12], PALE), paint([-0.12, 0.27, 0.2], [0.12, 0.1, 0.12], PALE)] : []),\n ball([0, snoutEnd[1] + 0.03, snoutEnd[2] + 0.02], 0.045, NOSE),\n ];\n const ear: BakeStamp[] = [\n [\"cone\", \"add\", mid3(earBase, earTip), eulerUp(sub3(earTip, earBase)), [o.ear[1], len3(sub3(earTip, earBase)), 0.05], COAT, { blend: 0.02 }],\n paint([earBase[0] + 0.01, earBase[1] + o.ear[0] * 0.35, earBase[2] + 0.03], [o.ear[1] * 0.5, o.ear[0] * 0.5, 0.06], INNER),\n ...(o.earTips ? [paint(earTip, [o.ear[1] * 0.7, o.ear[0] * 0.45, 0.12], TIP)] : []),\n ];\n const tailParts: { [bone: string]: BakePart | null } =\n o.tail === \"slim\"\n ? Object.fromEntries([\n ...T.slice(0, -2).map((p, i) => [`Tail ${i + 1}`, part([limb(p, T[i + 1]!, 0.08 - i * 0.008)], 0.04)]),\n [`Tail ${T.length - 1}`, part([cone(T[T.length - 2]!, T[T.length - 1]!, 0.06, COAT, 0.03)], 0.03)],\n [`Tail ${T.length}`, null],\n ])\n : {\n // one part, so the plume blends into a single smooth shape (separate parts can't blend)\n \"Tail 1\": part([\n limb(T[0]!, T[1]!, 0.16),\n sphere([0.07, -0.26, -0.52], [0.32, 0.4, 0.32]),\n sphere([0.09, -0.04, -0.53], [0.3, 0.34, 0.28]),\n paint([0.08, 0.08, -0.48], [0.32, 0.22, 0.3], PALE),\n ], 0.18),\n \"Tail 2\": null,\n \"Tail 3\": null,\n \"Tail 4\": null,\n };\n\n const parts: { [bone: string]: BakePart | null } = {\n Hips: part([sphere([0, -0.42, -0.1], [0.42, 0.36, 0.44])], 0.12),\n \"Spine 1\": part([limb([0, -0.38, -0.06], [0, -0.04, 0.06], 0.32)], 0.12),\n \"Spine 2\": part([sphere([0, -0.06, 0.1], [0.3, 0.32, 0.3]), ...(o.pale ? [paint([0, -0.08, 0.24], [0.22, 0.34, 0.12], PALE)] : [])], 0.12),\n Neck: part([limb([0, 0.0, 0.1], [0, 0.2, 0.14], 0.19)], 0.1),\n Head: part(headStamps, 0.08),\n \"Ear Base L\": part(ear, 0.03),\n \"Ear Tip L\": null,\n \"Scapula L\": part([limb(P.scapula, P.upperLeg, 0.11)], 0.06),\n \"Upper Leg L\": part([limb(P.upperLeg, P.lowerLeg, 0.09)], 0.05),\n \"Lower Leg L\": part([limb(P.lowerLeg, P.paw, 0.08)], 0.04),\n \"Paw L\": part([sphere([0.09, -0.58, 0.28], [0.1, 0.06, 0.13])], 0.04),\n \"Thigh L\": part([sphere([0.14, -0.42, -0.04], [0.18, 0.26, 0.34])], 0.08),\n \"Shin L\": null,\n \"Hock L\": part([limb(P.hock, P.paw2, 0.08)], 0.04),\n \"Paw 2 L\": part([sphere([0.15, -0.58, 0.04], [0.1, 0.05, 0.2])], 0.04),\n ...tailParts,\n };\n\n // a cat's big eyes face forward; a fox's sit a little more to the sides\n const eye = (side: 1 | -1): BakeDecal => round\n ? { bone: \"Head\", cat: \"eye\", name: o.eye, size: 0.145, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(FACE_C, FACE_S, [0.6 * side, 0.14, 0.8]) }\n : { bone: \"Head\", cat: \"eye\", name: o.eye, size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(SKULL, SKULL_S, [0.36 * side, 0.12, 0.92]) };\n const decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n round\n ? { bone: \"Head\", cat: \"mouth\", name: \"Cat Mouth\", size: 0.14, ...onEllipsoid(MUZZLE_C, MUZZLE_S, [0, 0.1, 1]) }\n : { bone: \"Head\", cat: \"mouth\", name: \"Cat\", size: 0.08, tint: \"s:black\", ...onEllipsoid(MUZZLE_C, MUZZLE_S, [0, -0.45, 0.9]) },\n ];\n return { regionBlends: { torso: 0.12, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 }, bones, parts, decals };\n}\n\nexport const FELINE_BAKE: Bake = sitter({ fur: fur(0.18, 0.15), snout: 0.0, ear: [0.21, 0.21], earTips: false, pale: false, tail: \"slim\", eye: \"Cat Eye\", head: \"round\" });\nexport const FOX_BAKE: Bake = sitter({ fur: fur(0.28, 0.3), snout: 0.12, ear: [0.22, 0.17], earTips: true, pale: true, tail: \"bushy\", eye: \"Glossy Eye\", head: \"long\" });\n", "/*\n * The Snake premade, authored for the app: coiled on the ground with an S-curved neck rising from the front of the\n * coil to a raised head, a forked tongue, a pale belly and the tail tip sticking out. The 16 bones keep the generic\n * snake's names, Spine 1 (the head) to Spine 16 (the tail tip), but the chain is rooted at the tail tip: a bone turns\n * the body from its joint toward the head, so the head can rise while the coil stays on the ground.\n * Template space: +z forward, y up, coil on y \u2248 -0.2.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { cone, limb, onEllipsoid, paint, part as bakedPart, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SKIN = \"@core\", BELLY = \"@belly\", TONGUE = \"@tongue\";\n\nconst SCALY: BakeLook = {\n foundationColor: SKIN, foundationDarkness: 0.3, shape: \"scales\", size: 0.2, coverage: 0.7, variation: 0.15, regularity: 0.8,\n boil: 0, normalStrength: 0.15, roughness: 0.4, metalness: 0.05, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SCALY, color: TemplateColor = SKIN): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- the body path, head to tail ----\n\nconst COIL_C: V3 = [0, -0.1, -0.15], COIL_R = 0.36;\nconst onCoil = (deg: number): V3 => {\n const t = (deg * Math.PI) / 180;\n return [COIL_R * Math.sin(t), COIL_C[1], COIL_C[2] + COIL_R * Math.cos(t)];\n};\n\nconst PATH: readonly V3[] = [\n [0, 0.56, 0.3], // head\n [0, 0.5, 0.12],\n [0, 0.37, 0.03],\n [0, 0.23, 0.08], // the neck's S\n [0, 0.08, 0.16],\n onCoil(0), // the neck meets the front of the coil\n ...[40, 80, 120, 160, 200, 240, 280, 320].map(onCoil),\n [-0.42, -0.13, 0.12],\n [-0.56, -0.15, 0.24], // tail tip, outside the coil\n];\n\n/** Body thickness along the path: a slimmer neck, a full coil, a tapering tail. */\nconst THICK = [0.2, 0.17, 0.17, 0.18, 0.19, 0.21, 0.22, 0.22, 0.22, 0.21, 0.2, 0.19, 0.17, 0.15, 0.11, 0.07];\n\nconst bones: BakeBone[] = PATH.map((p, i) => [`Spine ${i + 1}`, i < PATH.length - 1 ? `Spine ${i + 2}` : null, p, tagsOf(\"core\")]);\n\n// ---- parts ----\n\nconst HEAD_C: V3 = [0, 0.57, 0.36], HEAD_S: V3 = [0.27, 0.2, 0.34];\nconst SNOUT_C: V3 = [0, 0.54, 0.49], SNOUT_S: V3 = [0.19, 0.13, 0.16];\n\n/** A body segment from a to b with the belly painted on the side facing `belly`. */\nfunction segment(i: number): BakeStamp[] {\n const a = PATH[i]!, b = PATH[i + 1]!, d = THICK[i]!;\n const mid: V3 = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2];\n // the neck shows its belly to the front, the coil underneath and toward the outside\n const out: V3 = i < 5 ? [0, 0, 1] : [mid[0] - COIL_C[0], -0.9, mid[2] - COIL_C[2]];\n const L = Math.hypot(out[0], out[1], out[2]);\n const belly: V3 = [mid[0] + (out[0] / L) * d * 0.45, mid[1] + (out[1] / L) * d * 0.45, mid[2] + (out[2] / L) * d * 0.45];\n if (i === PATH.length - 2) return [cone(a, b, d, SKIN, 0.03)];\n return [limb(a, b, d), paint(belly, [d * 0.7, d * 0.7, d * 0.7], BELLY)];\n}\n\nconst parts: { [bone: string]: BakePart | null } = {\n // Spine 1 carries the head; Spine n + 2 carries segment n, which pivots on its joint\n \"Spine 1\": part([\n sphere(HEAD_C, HEAD_S),\n sphere(SNOUT_C, SNOUT_S),\n paint([0, 0.49, 0.42], [0.2, 0.08, 0.3], BELLY), // pale chin\n cone([0, 0.5, 0.56], [0.035, 0.46, 0.68], 0.025, TONGUE, 0.01), // forked tongue\n cone([0, 0.5, 0.56], [-0.035, 0.46, 0.68], 0.025, TONGUE, 0.01),\n limb([0, 0.53, 0.5], [0, 0.5, 0.57], 0.03, TONGUE),\n ], 0.06),\n ...Object.fromEntries(PATH.slice(0, -1).map((_, j) => [`Spine ${j + 2}`, part(segment(j), 0.08)])),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Spine 1\", cat: \"eye\", name: \"Dragon Eye\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.7 * side, 0.45, 0.55]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Spine 1\", cat: \"mouth\", name: \"Snake Mouth\", size: 0.17, ...onEllipsoid(SNOUT_C, SNOUT_S, [0, 0.05, 1]) },\n];\n\nexport const SNAKE_BAKE: Bake = {\n regionBlends: { torso: 0.08, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Turtle premade, authored for the app: a domed shell with a rim and scute plates, a head on a short neck, four\n * stubby legs and a little tail. Template space: +z forward, y up, feet on y \u2248 -0.4. Side R bones have no entries and\n * mirror their side L twins.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { cone, limb, onEllipsoid, pair, part as bakedPart, R0, sphere, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SKIN = \"@core\", SHELL = \"@shell\";\n\n// ---- looks ----\n\nconst SKIN_LOOK: BakeLook = {\n foundationColor: SKIN, foundationDarkness: 0.3, shape: \"scales\", size: 0.25, coverage: 0.7, variation: 0.2, regularity: 0.6,\n boil: 0, normalStrength: 0.25, roughness: 0.6, metalness: 0, glow: 0, opacity: 1,\n};\n/** Plates plus a scales pattern in the scute color read as the shell's scutes. */\nconst SHELL_LOOK: BakeLook = {\n foundationColor: SHELL, foundationDarkness: 0.45, shape: \"plates\", size: 1.2, coverage: 1, variation: 0.15, regularity: 0.85,\n boil: 0, normalStrength: 1.1, roughness: 0.45, metalness: 0.05, glow: 0, opacity: 1,\n patternType: 7, patternScale: 0.55, patternStrength: 1, patternColor: \"@scute\", patternColor2: \"@scute\",\n patternRotX: 0, patternRotY: 0, patternRotZ: 0,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SKIN_LOOK, color: TemplateColor = SKIN): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- skeleton ----\n\nconst P = {\n shell: [0, 0, 0], neck: [0, -0.06, 0.38], head: [0, 0.06, 0.54],\n frontLeg: [0.3, -0.16, 0.28], frontFoot: [0.34, -0.34, 0.32],\n backLeg: [0.28, -0.16, -0.28], backFoot: [0.32, -0.34, -0.32],\n tail: [0, -0.14, -0.48], tailTip: [0, -0.2, -0.64],\n} as const satisfies Record<string, V3>;\n\nconst bones: BakeBone[] = [\n [\"Shell\", null, P.shell, tagsOf(\"core\")],\n [\"Neck\", \"Shell\", P.neck, tagsOf(\"neck\")],\n [\"Head\", \"Neck\", P.head, tagsOf(\"head\")],\n ...pair(\"leg\", \"Shell\", [[\"Front Leg\", P.frontLeg], [\"Front Foot\", P.frontFoot]]),\n ...pair(\"leg\", \"Shell\", [[\"Back Leg\", P.backLeg], [\"Back Foot\", P.backFoot]]),\n [\"Tail\", \"Shell\", P.tail, tagsOf(\"tail\")],\n [\"Tail Tip\", \"Tail\", P.tailTip, tagsOf(\"tail\")],\n];\n\n// ---- body parts ----\n\nconst HEAD_C: V3 = [0, 0.08, 0.6], HEAD_S: V3 = [0.32, 0.3, 0.34];\nconst SNOUT_C: V3 = [0, 0.04, 0.72], SNOUT_S: V3 = [0.2, 0.17, 0.14];\n/** A stubby leg down to a flat round foot. */\nconst leg = (a: V3, b: V3): BakeStamp[] => [limb(a, b, 0.25), sphere([b[0] + 0.01, b[1] - 0.02, b[2] + 0.03], [0.25, 0.1, 0.27])];\n\nconst parts: { [bone: string]: BakePart | null } = {\n Shell: part([\n // a dome stamp fills the lower half of its box: base at y - sy / 2, top at y\n [\"dome\", \"add\", [0, 0.42, 0], R0, [0.92, 1.14, 1.02], SHELL],\n [\"torus\", \"add\", [0, -0.14, 0], R0, [0.94, 0.12, 1.04], SHELL], // rim\n sphere([0, -0.16, 0], [0.72, 0.12, 0.84], SKIN), // plastron\n ], 0.05, SHELL_LOOK, SHELL),\n Neck: part([limb([0, -0.08, 0.32], [0, 0.04, 0.5], 0.2)], 0.06),\n Head: part([sphere(HEAD_C, HEAD_S), sphere(SNOUT_C, SNOUT_S)], 0.08),\n \"Front Leg L\": part(leg(P.frontLeg, P.frontFoot), 0.05),\n \"Front Foot L\": null,\n \"Back Leg L\": part(leg(P.backLeg, P.backFoot), 0.05),\n \"Back Foot L\": null,\n Tail: part([cone([0, -0.13, -0.44], [0, -0.2, -0.66], 0.11, SKIN, 0.03)], 0.03),\n \"Tail Tip\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.085, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.7 * side, 0.28, 0.66]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Smile\", size: 0.1, tint: \"s:black\", ...onEllipsoid(SNOUT_C, SNOUT_S, [0, -0.3, 1]) },\n];\n\nexport const TURTLE_BAKE: Bake = {\n regionBlends: { torso: 0.05, limb: 0.05, wing: 0.05, tail: 0.03, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Quadruped premade as a wolf, authored for the app (the POC's generated quadruped read as tubes and beads).\n * Template space: +z forward, y up, paws on y \u2248 -0.6. Side R bones have no entries and mirror their side L twins.\n * Bone names follow the generic quadruped (Hips, Spine, Neck, Head, Scapula \u2026 Paw, Thigh \u2026 Paw 2, Tail).\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { ball, cone, eulerUp, limb, mid3, onEllipsoid, pair, paint, part as bakedPart, sphere, sub3, len3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst COAT = \"@core\", PALE = \"@pale\", NOSE = \"@nose\";\nconst PAW_Y = -0.58;\n\n// ---- looks ----\n\n/** Fur: a short fuzz over the coat. */\nconst FUR: BakeLook = {\n foundationColor: COAT, foundationDarkness: 0.3, shape: \"grass\", size: 0.32, coverage: 0.9, variation: 0.3, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.8, metalness: 0, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = FUR, color: TemplateColor = COAT): BakePart => bakedPart(stamps, blend, look, color);\n\n// ---- skeleton ----\n\nconst P = {\n hips: [0, 0.12, -0.42], spine1: [0, 0.14, -0.18], spine2: [0, 0.16, 0.06], spine3: [0, 0.18, 0.28],\n neck1: [0, 0.3, 0.42], neck2: [0, 0.42, 0.52], head: [0, 0.48, 0.62],\n earBase: [0.08, 0.6, 0.58], earTip: [0.13, 0.82, 0.55],\n scapula: [0.12, 0.16, 0.3], upperLeg: [0.14, -0.08, 0.31], lowerLeg: [0.13, -0.42, 0.3], paw: [0.13, PAW_Y, 0.35],\n thigh: [0.13, 0.1, -0.42], shin: [0.15, -0.14, -0.32], hock: [0.14, -0.38, -0.5], paw2: [0.14, PAW_Y, -0.45],\n tail: [[0, 0.14, -0.58], [0, 0.07, -0.72], [0, -0.05, -0.84], [0, -0.17, -0.92]],\n} as const satisfies Record<string, V3 | readonly V3[]>;\n\nconst bones: BakeBone[] = [\n [\"Hips\", null, P.hips, tagsOf(\"core\")],\n [\"Spine 1\", \"Hips\", P.spine1, tagsOf(\"core\")],\n [\"Spine 2\", \"Spine 1\", P.spine2, tagsOf(\"core\")],\n [\"Spine 3\", \"Spine 2\", P.spine3, tagsOf(\"core\")],\n [\"Neck 1\", \"Spine 3\", P.neck1, tagsOf(\"neck\")],\n [\"Neck 2\", \"Neck 1\", P.neck2, tagsOf(\"neck\")],\n [\"Head\", \"Neck 2\", P.head, tagsOf(\"head\")],\n ...pair(\"ear\", \"Head\", [[\"Ear Base\", P.earBase], [\"Ear Tip\", P.earTip]]),\n ...pair(\"leg\", \"Spine 3\", [[\"Scapula\", P.scapula], [\"Upper Leg\", P.upperLeg], [\"Lower Leg\", P.lowerLeg], [\"Paw\", P.paw]]),\n ...pair(\"leg\", \"Hips\", [[\"Thigh\", P.thigh], [\"Shin\", P.shin], [\"Hock\", P.hock], [\"Paw 2\", P.paw2]]),\n ...P.tail.map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]),\n];\n\n// ---- body parts ----\n\n/** A flat, pointed ear from base to tip (thin front to back). */\nconst ear = (a: V3, b: V3): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [0.17, len3(sub3(b, a)), 0.06], COAT, { blend: 0.02 }];\n/** A paw: a rounded pad slightly forward of the ankle. */\nconst paw = (p: V3): BakeStamp => sphere([p[0], p[1], p[2] + 0.03], [0.12, 0.07, 0.16]);\n\nconst SKULL: V3 = [0, 0.5, 0.62], SKULL_S: V3 = [0.3, 0.26, 0.3];\nconst SNOUT_A: V3 = [0, 0.47, 0.68], SNOUT_B: V3 = [0, 0.43, 0.86];\nconst T = P.tail;\n\nconst parts: { [bone: string]: BakePart | null } = {\n Hips: part([sphere([0, 0.12, -0.4], [0.32, 0.3, 0.34])], 0.12),\n \"Spine 1\": part([limb([0, 0.12, -0.36], [0, 0.14, -0.06], 0.28), paint([0, 0.0, -0.14], [0.26, 0.12, 0.4], PALE)], 0.12),\n \"Spine 2\": part([limb([0, 0.14, -0.06], [0, 0.17, 0.2], 0.34), paint([0, 0.0, 0.06], [0.28, 0.14, 0.36], PALE)], 0.12),\n \"Spine 3\": part([\n sphere([0, 0.13, 0.27], [0.38, 0.46, 0.42]),\n sphere([0, 0.27, 0.36], [0.36, 0.34, 0.3]), // ruff over the shoulders\n paint([0, 0.04, 0.42], [0.28, 0.36, 0.2], PALE), // pale chest\n ], 0.12),\n \"Neck 1\": part([limb([0, 0.24, 0.38], [0, 0.44, 0.54], 0.24), paint([0, 0.3, 0.5], [0.16, 0.26, 0.14], PALE)], 0.1),\n \"Neck 2\": null,\n Head: part([\n sphere(SKULL, SKULL_S),\n sphere([0.1, 0.44, 0.6], [0.16, 0.18, 0.18]), // cheek ruffs\n sphere([-0.1, 0.44, 0.6], [0.16, 0.18, 0.18]),\n limb(SNOUT_A, SNOUT_B, 0.15),\n paint([0, 0.38, 0.8], [0.13, 0.07, 0.22], PALE), // pale lower muzzle\n ball([0, 0.45, 0.93], 0.065, NOSE),\n ], 0.08),\n \"Ear Base L\": part([ear(P.earBase, P.earTip)], 0.03),\n \"Ear Tip L\": null,\n \"Scapula L\": part([ball(P.scapula, 0.18), limb(P.scapula, P.upperLeg, 0.15)], 0.08),\n \"Upper Leg L\": part([limb(P.upperLeg, P.lowerLeg, 0.1)], 0.05),\n \"Lower Leg L\": part([limb(P.lowerLeg, P.paw, 0.08)], 0.04),\n \"Paw L\": part([paw(P.paw)], 0.04),\n \"Thigh L\": part([sphere([0.13, 0.04, -0.4], [0.2, 0.32, 0.28]), limb(P.thigh, P.shin, 0.15)], 0.08),\n \"Shin L\": part([limb(P.shin, P.hock, 0.11)], 0.05),\n \"Hock L\": part([limb(P.hock, P.paw2, 0.08)], 0.04),\n \"Paw 2 L\": part([paw(P.paw2)], 0.04),\n // bushy tail: thin at the root, full in the middle, pale tip\n \"Tail 1\": part([limb(T[0]!, T[1]!, 0.12)], 0.08),\n \"Tail 2\": part([limb(T[1]!, T[2]!, 0.2)], 0.08),\n \"Tail 3\": part([limb(T[2]!, T[3]!, 0.17), cone(T[2]!, [0, -0.24, -0.97], 0.12, COAT, 0.08), paint([0, -0.2, -0.95], [0.16, 0.14, 0.14], PALE)], 0.08),\n \"Tail 4\": null,\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Glossy Eye\", size: 0.1, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(SKULL, SKULL_S, [0.42 * side, 0.3, 0.86]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Head\", cat: \"mouth\", name: \"Cat Muzzle\", size: 0.11, ...onEllipsoid([0, 0.44, 0.8], [0.15, 0.15, 0.26], [0, -0.25, 1]) },\n];\n\nexport const WOLF_BAKE: Bake = {\n regionBlends: { torso: 0.12, limb: 0.05, wing: 0.05, tail: 0.08, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/*\n * The Worm premade, authored for the app: a fat, soft body lying in an S on the ground with its rounded head raised,\n * and segment rings painted around it. The 10 bones keep the generic worm's names, Segment 1 (the head) to\n * Segment 10 (the tail), rooted at the tail so the head end can move while the rest stays on the ground.\n * Template space: +z forward, y up, body on y \u2248 -0.15.\n */\nimport type { Bake, BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp, TemplateColor } from \"./bake-types.js\";\nimport { eulerUp, limb, mid3, onEllipsoid, part as bakedPart, sphere, sub3, tagsOf, type V3 } from \"./bake-authoring.js\";\n\nconst SKIN = \"@core\", RING = \"@ring\";\n\nconst SOFT: BakeLook = {\n foundationColor: SKIN, foundationDarkness: 0.2, shape: \"none\", size: 0.4, coverage: 1, variation: 0, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.35, metalness: 0.05, glow: 0, opacity: 1,\n};\nconst part = (stamps: readonly BakeStamp[], blend: number, look: BakeLook = SOFT, color: TemplateColor = SKIN): BakePart => bakedPart(stamps, blend, look, color);\n\n/** The body path, head first: raised head curving down into an S on the ground. */\nconst PATH: readonly V3[] = [\n [-0.24, 0.36, 0.36], [-0.12, 0.2, 0.44], [0.08, 0.04, 0.42], [0.27, -0.06, 0.28], [0.31, -0.1, 0.05],\n [0.15, -0.12, -0.12], [-0.1, -0.12, -0.2], [-0.28, -0.12, -0.36], [-0.25, -0.12, -0.58], [-0.08, -0.12, -0.72],\n];\nconst THICK = [0.27, 0.28, 0.29, 0.29, 0.28, 0.27, 0.26, 0.24, 0.21];\n\nconst bones: BakeBone[] = PATH.map((p, i) => [`Segment ${i + 1}`, i < PATH.length - 1 ? `Segment ${i + 2}` : null, p, tagsOf(\"core\")]);\n\n/** A thin painted ring around the body at p, across the direction `dir`, for a body `d` thick. */\nconst ring = (p: V3, dir: V3, d: number): BakeStamp => [\"torus\", \"paint\", p, eulerUp(dir), [d / 0.8, 0.05, d / 0.8], RING];\n\nfunction segment(i: number): BakeStamp[] {\n const a = PATH[i]!, b = PATH[i + 1]!, d = THICK[i]!, dir = sub3(b, a);\n return [limb(a, b, d), ring(mid3(a, b), dir, d)];\n}\n\nconst HEAD_C: V3 = [-0.26, 0.39, 0.37], HEAD_S: V3 = [0.29, 0.29, 0.3];\n\nconst parts: { [bone: string]: BakePart | null } = {\n // Segment n + 2 carries segment n, which pivots on its joint; the tail tip rides on the root\n \"Segment 1\": part([sphere(HEAD_C, HEAD_S)], 0.1),\n ...Object.fromEntries(PATH.slice(0, -2).map((_, j) => [`Segment ${j + 2}`, part(segment(j), 0.1)])),\n \"Segment 10\": part([...segment(8), sphere(PATH[9]!, [0.2, 0.2, 0.2])], 0.1),\n};\n\nconst eye = (side: 1 | -1): BakeDecal => ({ bone: \"Segment 1\", cat: \"eye\", name: \"Glossy Eye\", size: 0.09, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(HEAD_C, HEAD_S, [0.42 * side - 0.25, 0.3, 0.85]) });\n\nconst decals: BakeDecal[] = [\n eye(1),\n eye(-1),\n { bone: \"Segment 1\", cat: \"mouth\", name: \"Small\", size: 0.1, tint: \"s:black\", ...onEllipsoid(HEAD_C, HEAD_S, [-0.25, -0.25, 1]) },\n];\n\nexport const WORM_BAKE: Bake = {\n regionBlends: { torso: 0.1, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 },\n bones,\n parts,\n decals,\n};\n", "/* Generated by scripts/port-bakes.mjs from references/dreams-poc/js/skeleton-bakes.js: do not edit by hand. */\n/* Baked premade bodies in template space (applying maps p to c + p * h); see bake-types.ts. */\nimport type { Bake } from \"./bake-types.js\";\n\nexport const SKELETON_BAKES: { readonly [id: string]: Bake } = {\n sheep: {\"regionBlends\":{\"torso\":0.08,\"limb\":0.08,\"wing\":0.08,\"tail\":0.08,\"head\":0.08},\"bones\":[[\"Hips\",null,[0,0.1,-0.5],[\"role:core\"]],[\"Spine 1\",\"Hips\",[0,0.15,-0.2],[\"role:core\"]],[\"Spine 2\",\"Spine 1\",[0,0.2,0.1],[\"role:core\"]],[\"Spine 3\",\"Spine 2\",[0,0.25,0.4],[\"role:core\"]],[\"Neck 1\",\"Spine 3\",[0,0.4,0.58],[\"role:neck\"]],[\"Neck 2\",\"Neck 1\",[0,0.524,0.693],[\"role:neck\"]],[\"Head\",\"Neck 2\",[0,0.585,0.856],[\"role:head\"]],[\"Ear Base L\",\"Head\",[0.119,0.592,0.858],[\"side:L\",\"mirror:Ear Base\",\"role:ear\"]],[\"Ear Tip L\",\"Ear Base L\",[0.406,0.646,0.879],[\"side:L\",\"mirror:Ear Tip\",\"role:ear\"]],[\"Ear Base R\",\"Head\",[-0.119,0.592,0.858],[\"side:R\",\"mirror:Ear Base\",\"role:ear\"]],[\"Ear Tip R\",\"Ear Base R\",[-0.406,0.646,0.879],[\"side:R\",\"mirror:Ear Tip\",\"role:ear\"]],[\"Scapula L\",\"Spine 3\",[0.145,0.2,0.4],[\"side:L\",\"mirror:Scapula\",\"role:leg\"]],[\"Upper Leg L\",\"Scapula L\",[0.169,0.187,0.418],[\"side:L\",\"mirror:Upper Leg\",\"role:leg\"]],[\"Lower Leg L\",\"Upper Leg L\",[0.169,-0.233,0.418],[\"side:L\",\"mirror:Lower Leg\",\"role:leg\"]],[\"Paw L\",\"Lower Leg L\",[0.169,-0.54,0.488],[\"side:L\",\"mirror:Paw\",\"role:leg\"]],[\"Scapula R\",\"Spine 3\",[-0.145,0.2,0.4],[\"side:R\",\"mirror:Scapula\",\"role:leg\"]],[\"Upper Leg R\",\"Scapula R\",[-0.169,0.187,0.418],[\"side:R\",\"mirror:Upper Leg\",\"role:leg\"]],[\"Lower Leg R\",\"Upper Leg R\",[-0.169,-0.233,0.418],[\"side:R\",\"mirror:Lower Leg\",\"role:leg\"]],[\"Paw R\",\"Lower Leg R\",[-0.169,-0.54,0.488],[\"side:R\",\"mirror:Paw\",\"role:leg\"]],[\"Thigh L\",\"Hips\",[0.057,0.05,-0.5],[\"side:L\",\"mirror:Thigh\",\"role:leg\"]],[\"Shin L\",\"Thigh L\",[0.12,-0.035,-0.55],[\"side:L\",\"mirror:Shin\",\"role:leg\"]],[\"Hock L\",\"Shin L\",[0.103,-0.285,-0.608],[\"side:L\",\"mirror:Hock\",\"role:leg\"]],[\"Paw 2 L\",\"Hock L\",[0.103,-0.576,-0.55],[\"side:L\",\"mirror:Paw 2\",\"role:leg\"]],[\"Thigh R\",\"Hips\",[-0.057,0.05,-0.5],[\"side:R\",\"mirror:Thigh\",\"role:leg\"]],[\"Shin R\",\"Thigh R\",[-0.12,-0.035,-0.55],[\"side:R\",\"mirror:Shin\",\"role:leg\"]],[\"Hock R\",\"Shin R\",[-0.103,-0.285,-0.608],[\"side:R\",\"mirror:Hock\",\"role:leg\"]],[\"Paw 2 R\",\"Hock R\",[-0.103,-0.576,-0.55],[\"side:R\",\"mirror:Paw 2\",\"role:leg\"]],[\"Tail 1\",\"Hips\",[0,0.1,-0.68],[\"role:tail\"]],[\"Tail 2\",\"Tail 1\",[0,0.05,-0.76],[\"role:tail\"]],[\"Tail 3\",\"Tail 2\",[0,0,-0.84],[\"role:tail\"]],[\"Tail 4\",\"Tail 3\",[0,-0.05,-0.92],[\"role:tail\"]],[\"Tail 5\",\"Tail 4\",[0,-0.1,-1],[\"role:tail\"]]],\"parts\":{\"Hips\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.209,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.125,-0.35],[1.406,0,0],[0.335,0.316,0.335],\"@core\"],[\"sphere\",\"add\",[0,0.1,-0.5],[0,0,0],[0.351,0.351,0.351],\"@core\"]]},\"Spine 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.209,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"coat\":{\"c\":[0,0.191,-0.355],\"r\":[0.336,0.318,0.364],\"puff\":0.282,\"rings\":6},\"stamps\":[[\"cylinder\",\"add\",[0,0.175,-0.05],[1.406,0,0],[0.335,0.316,0.335],\"@core\"],[\"sphere\",\"add\",[0,0.15,-0.2],[0,0,0],[0.351,0.351,0.351],\"@core\"]]},\"Spine 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.4,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"coat\":{\"c\":[0,0.336,0.127],\"r\":[0.364,0.345,0.373],\"puff\":0.309,\"rings\":6},\"stamps\":[[\"cylinder\",\"add\",[0,0.225,0.25],[1.406,0,0],[0.335,0.316,0.335],\"@core\"]]},\"Spine 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.12,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.25,0.4],[0,0,-0.111],[0.113,0.18,0.182],\"@core\"]]},\"Neck 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.35,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"coat\":{\"c\":[0,0.527,0.627],\"r\":[0.2,0.2,0.191],\"puff\":0.191,\"rings\":4},\"stamps\":[[\"cylinder\",\"add\",[0,0.462,0.637],[0.74,0,0],[0.109,0.174,0.109],\"@core\"],[\"sphere\",\"add\",[0,0.366,0.534],[-0.011,0,0],[0.218,0.219,0.219],\"@core\",{\"blend\":0.45}]]},\"Neck 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.081,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.524,0.693],[-0.114,0,0],[0.099,0.1,0.103],\"@core\"]]},\"Head\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.3,\"variation\":0.2,\"coverage\":1,\"regularity\":0.7,\"boil\":1,\"blend\":0.15,\"size\":0.5,\"shape\":\"plates\",\"roughness\":1,\"metalness\":0.1,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.533,0.771],[-1.114,0,-0.003],[0.389,0.593,0.483],\"@head\"],[\"sphere\",\"add\",[-0.011,0.421,1.026],[-1.534,0.006,-0.084],[0.093,0.188,0.093],\"@head\",{\"blend\":0.25}]]},\"Ear Base L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.85,\"regularity\":0,\"boil\":1,\"blend\":0.08,\"size\":0.35,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.263,0.619,0.869],[0.436,0.012,-1.369],[0.067,0.305,0.067],\"@head\"],[\"sphere\",\"add\",[0.406,0.646,0.879],[-0.115,0.422,0.096],[0.085,0.07,0.075],\"@head\"],[\"sphere\",\"add\",[0.119,0.592,0.858],[-0.115,0.422,0.096],[0.085,0.07,0.075],\"@head\"]]},\"Ear Tip L\":null,\"Scapula L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.082,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.157,0.194,0.409],[0.702,-0.733,-1.527],[0.11,0.034,0.11],\"@head\"],[\"sphere\",\"add\",[0.145,0.2,0.4],[-0.403,-0.122,0.55],[0.12,0.015,0.12],\"@head\"]]},\"Upper Leg L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.071,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.169,-0.023,0.418],[0,0,3.142],[0.094,0.437,0.094],\"@head\"],[\"sphere\",\"add\",[0.169,0.187,0.418],[0,0,0],[0.104,0.11,0.104],\"@head\"]]},\"Lower Leg L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.06,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.169,-0.387,0.453],[2.917,0,0],[0.079,0.328,0.079],\"@head\"],[\"sphere\",\"add\",[0.169,-0.233,0.418],[0,0,0],[0.087,0.087,0.087],\"@head\"]]},\"Paw L\":{\"color\":\"@accent\",\"sd\":{\"foundationColor\":\"@accent\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.142,\"size\":0.4,\"shape\":\"none\",\"roughness\":0.5,\"metalness\":0.1,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.169,-0.567,0.506],[0,0,0],[0.151,0.117,0.199],\"@accent\"]]},\"Thigh L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.082,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.089,0.008,-0.525],[-1.97,0.753,-0.826],[0.125,0.121,0.125],\"@head\"],[\"sphere\",\"add\",[0.057,0.05,-0.5],[0.247,0.028,0.434],[0.137,0.05,0.136],\"@head\"]]},\"Shin L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.071,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.112,-0.16,-0.579],[-2.873,-0.548,0.076],[0.09,0.268,0.09],\"@head\"],[\"sphere\",\"add\",[0.12,-0.035,-0.55],[0.03,0,-0.008],[0.098,0.086,0.098],\"@head\"]]},\"Hock L\":{\"color\":\"@head\",\"sd\":{\"foundationColor\":\"@head\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.06,\"size\":0.4,\"shape\":\"sand\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.103,-0.431,-0.579],[2.944,0,0],[0.075,0.309,0.075],\"@head\"],[\"sphere\",\"add\",[0.103,-0.285,-0.608],[0,0,0],[0.083,0.083,0.083],\"@head\"]]},\"Paw 2 L\":{\"color\":\"@accent\",\"sd\":{\"foundationColor\":\"@accent\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.141,\"size\":0.4,\"shape\":\"none\",\"roughness\":0.5,\"metalness\":0.1,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.103,-0.604,-0.532],[0,0,0],[0.143,0.111,0.187],\"@accent\"]]},\"Tail 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.065,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"coat\":{\"c\":[0,0.127,-0.691],\"r\":[0.091,0.091,0.091],\"puff\":0.109,\"rings\":2},\"stamps\":[[\"cylinder\",\"add\",[0,0.075,-0.72],[-2.129,0,0],[0.134,0.098,0.134],\"@core\"],[\"sphere\",\"add\",[0,0.1,-0.68],[0,0,0],[0.141,0.141,0.141],\"@core\"]]},\"Tail 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.065,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.025,-0.8],[-2.129,0,0],[0.114,0.098,0.114],\"@core\"],[\"sphere\",\"add\",[0,0.05,-0.76],[0,0,0],[0.12,0.12,0.12],\"@core\"]]},\"Tail 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.062,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.025,-0.88],[-2.129,0,0],[0.094,0.098,0.094],\"@core\"],[\"sphere\",\"add\",[0,0,-0.84],[0,0,0],[0.099,0.099,0.099],\"@core\"]]},\"Tail 4\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.049,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0,-0.075,-0.96],[-2.129,0,0],[0.074,0.098,0.074],\"@core\"],[\"sphere\",\"add\",[0,-0.05,-0.92],[0,0,0],[0.078,0.078,0.078],\"@core\"]]},\"Tail 5\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.18,\"variation\":0.2,\"coverage\":0.6,\"regularity\":0,\"boil\":1,\"blend\":0.037,\"size\":0.35,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,-0.1,-1],[0,0,0],[0.057,0.057,0.057],\"@core\"]]}},\"decals\":[{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Brow Eye\",\"p\":[0.069,0.52,1.036],\"q\":[-0.123,0.282,0.036,0.951],\"size\":0.113},{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Brow Eye\",\"p\":[-0.096,0.517,1.018],\"q\":[-0.049,-0.408,-0.022,0.912],\"size\":0.113,\"flip\":true},{\"bone\":\"Head\",\"cat\":\"mouth\",\"name\":\"Cat Muzzle\",\"p\":[-0.01,0.444,1.108],\"q\":[-0.019,-0.032,-0.001,0.999],\"size\":0.137,\"flip\":true}]},\n rabbit: {\"regionBlends\":{\"torso\":0.08,\"limb\":0.08,\"wing\":0.08,\"tail\":0.08,\"head\":0.08},\"bones\":[[\"Hips\",null,[0,-0.1,-0.4],[\"role:core\"]],[\"Spine 1\",\"Hips\",[0,0,-0.1],[\"role:core\"]],[\"Spine 2\",\"Spine 1\",[0,0.117,0.094],[\"role:core\"]],[\"Spine 3\",\"Spine 2\",[0,0.167,0.319],[\"role:core\"]],[\"Neck\",\"Spine 3\",[0,0.267,0.519],[\"role:neck\"]],[\"Head\",\"Neck\",[0,0.317,0.769],[\"role:head\"]],[\"Ear Base L\",\"Head\",[0.164,0.659,0.632],[\"side:L\",\"mirror:Ear Base\",\"role:ear\"]],[\"Ear Tip L\",\"Ear Base L\",[0.246,1.273,0.496],[\"side:L\",\"mirror:Ear Tip\",\"role:ear\"]],[\"Ear Base R\",\"Head\",[-0.164,0.659,0.632],[\"side:R\",\"mirror:Ear Base\",\"role:ear\"]],[\"Ear Tip R\",\"Ear Base R\",[-0.246,1.273,0.496],[\"side:R\",\"mirror:Ear Tip\",\"role:ear\"]],[\"Upper Leg L\",\"Spine 3\",[0.174,0.334,0.319],[\"side:L\",\"mirror:Upper Leg\",\"role:leg\"]],[\"Lower Leg L\",\"Upper Leg L\",[0.174,-0.066,0.419],[\"side:L\",\"mirror:Lower Leg\",\"role:leg\"]],[\"Paw L\",\"Lower Leg L\",[0.174,-0.54,0.569],[\"side:L\",\"mirror:Paw\",\"role:leg\"]],[\"Upper Leg R\",\"Spine 3\",[-0.174,0.334,0.319],[\"side:R\",\"mirror:Upper Leg\",\"role:leg\"]],[\"Lower Leg R\",\"Upper Leg R\",[-0.174,-0.066,0.419],[\"side:R\",\"mirror:Lower Leg\",\"role:leg\"]],[\"Paw R\",\"Lower Leg R\",[-0.174,-0.54,0.569],[\"side:R\",\"mirror:Paw\",\"role:leg\"]],[\"Thigh L\",\"Hips\",[0.252,-0.326,-0.528],[\"side:L\",\"mirror:Thigh\",\"role:leg\"]],[\"Shin L\",\"Thigh L\",[0.405,0.208,0.009],[\"side:L\",\"mirror:Shin\",\"role:leg\"]],[\"Foot L\",\"Shin L\",[0.396,-0.518,-0.335],[\"side:L\",\"mirror:Foot\",\"role:leg\"]],[\"Toe L\",\"Foot L\",[0.396,-0.518,0.205],[\"side:L\",\"mirror:Toe\",\"role:leg\"]],[\"Thigh R\",\"Hips\",[-0.252,-0.326,-0.528],[\"side:R\",\"mirror:Thigh\",\"role:leg\"]],[\"Shin R\",\"Thigh R\",[-0.405,0.208,0.009],[\"side:R\",\"mirror:Shin\",\"role:leg\"]],[\"Foot R\",\"Shin R\",[-0.396,-0.518,-0.335],[\"side:R\",\"mirror:Foot\",\"role:leg\"]],[\"Toe R\",\"Foot R\",[-0.396,-0.518,0.205],[\"side:R\",\"mirror:Toe\",\"role:leg\"]],[\"Tail 1\",\"Hips\",[0,-0.05,-0.8],[\"role:tail\"]],[\"Tail 2\",\"Tail 1\",[0,0.05,-0.95],[\"role:tail\"]]],\"parts\":{\"Hips\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.217,\"size\":0.2,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0.15,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.039,-0.137],[1.249,0,0],[0.604,0.53,0.71],\"@core\"],[\"sphere\",\"add\",[0,-0.1,-0.56],[0,0,0],[0.488,0.885,0.623],\"@core\"]]},\"Spine 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.158,\"size\":0.2,\"shape\":\"circle\",\"roughness\":0.45,\"metalness\":0.15,\"normalStrength\":0.2,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.059,-0.003],[1.026,0,0],[0.254,0.236,0.254],\"@core\"],[\"sphere\",\"add\",[0,0,-0.1],[-0.326,0,0],[0.266,0.266,0.262],\"@core\"]]},\"Spine 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0,\"boil\":0,\"blend\":0.158,\"size\":0.2,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0.1,\"normalStrength\":0.05,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.142,0.206],[1.352,0,0],[0.722,0.29,0.833],\"@core\"],[\"sphere\",\"add\",[0,0.215,0.377],[0,0,0],[0.675,0.675,0.675],\"@core\"]]},\"Spine 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.091,\"size\":0.8,\"shape\":\"circle\",\"roughness\":0.45,\"metalness\":0.15,\"normalStrength\":1.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.167,0.319],[0,0,1.692],[0.126,0.108,0.138],\"@core\"]]},\"Neck\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@thin\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.089,\"size\":0.4,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.267,0.519],[0,0,0],[0.134,0.134,0.134],\"@core\"]]},\"Head\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.06,\"coverage\":0.1,\"regularity\":0,\"boil\":0,\"blend\":0.202,\"size\":0.2,\"shape\":\"circle\",\"roughness\":1,\"metalness\":0.1,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.369,0.612],[0,0,0],[0.681,0.681,0.681],\"@core\"],[\"sphere\",\"add\",[0.052,0.298,0.938],[0,0,0],[0.118,0.118,0.118],\"@core\"],[\"sphere\",\"add\",[-0.058,0.299,0.953],[0,0,0],[0.118,0.118,0.118],\"@core\"]]},\"Ear Base L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.051,\"size\":1,\"shape\":\"none\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.187,0.852,0.564],[-0.217,0.014,-0.129],[0.268,0.66,0.106],\"@core\"],[\"sphere\",\"add\",[0.164,0.659,0.632],[0,0,0],[0.106,0.106,0.106],\"@core\"]]},\"Ear Tip L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.184,\"size\":1,\"shape\":\"none\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.245,1.273,0.533],[0.008,-0.024,-0.094],[0.325,0.418,0.273],\"@core\"],[\"sphere\",\"subtract\",[0.24,1.244,0.714],[0,0,0],[0.378,0.378,0.378],\"@core\"]]},\"Upper Leg L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.084,\"size\":0.4,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.174,0.134,0.369],[2.897,0,0],[0.165,0.429,0.167],\"@core\"],[\"sphere\",\"add\",[0.174,0.334,0.319],[0,0,0],[0.139,0.139,0.139],\"@core\"]]},\"Lower Leg L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.066,\"size\":0.2,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.174,-0.303,0.494],[2.835,0,0],[0.149,0.516,0.164],\"@core\"],[\"sphere\",\"add\",[0.174,-0.066,0.419],[0.055,0,0],[0.11,0.126,0.113],\"@core\"]]},\"Paw L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.169,\"size\":0.2,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.174,-0.539,0.606],[-1.413,-0.046,-0.064],[0.256,0.256,0.153],\"@core\"]]},\"Thigh L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.084,\"size\":0.2,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.328,-0.059,-0.259],[0.947,0.035,-0.295],[0.147,0.838,0.153],\"@core\"],[\"sphere\",\"add\",[0.252,-0.326,-0.528],[-1.521,-0.161,0.332],[0.383,0.537,0.5],\"@core\",{\"blend\":0.8}]]},\"Shin L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.072,\"size\":0.3,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.4,-0.155,-0.163],[-2.698,-0.13,0.011],[0.105,0.754,0.173],\"@core\"],[\"sphere\",\"add\",[0.413,0.053,0.001],[-0.608,-0.033,0.045],[0.011,0.011,0.011],\"@core\",{\"blend\":0.8}]]},\"Foot L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.06,\"size\":0.3,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.396,-0.518,-0.065],[1.57,0,0],[0.229,0.562,0.092],\"@core\",{\"blend\":0.6}],[\"sphere\",\"add\",[0.396,-0.518,-0.335],[-0.113,0,0],[0.132,0.154,0.228],\"@core\"]]},\"Toe L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@limb\",\"foundationDarkness\":0.08,\"variation\":0.3,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.179,\"size\":0.3,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":0.05,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.396,-0.518,0.205],[0,0,0],[0.272,0.11,0.338],\"@core\"]]},\"Tail 1\":{\"color\":\"@thin\",\"sd\":{\"foundationColor\":\"@thin\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.09,\"size\":0.4,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0,0,-0.875],[-0.983,0,0],[0.136,0.187,0.136],\"@thin\"],[\"sphere\",\"add\",[0,-0.05,-0.8],[0,0,0],[0.143,0.143,0.143],\"@thin\"]]},\"Tail 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@thin\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0,\"boil\":1,\"blend\":0.071,\"size\":0.4,\"shape\":\"circle\",\"roughness\":0.8,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.3,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@detail\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.05,-0.95],[0,0,0],[0.33,0.33,0.33],\"@core\"]]}},\"decals\":[{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Cute\",\"p\":[-0.145,0.428,0.912],\"q\":[-0.109,-0.23,-0.026,0.967],\"size\":0.248},{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Cute\",\"p\":[0.148,0.429,0.91],\"q\":[-0.111,0.227,0.026,0.967],\"size\":0.248},{\"bone\":\"Head\",\"cat\":\"mouth\",\"name\":\"Cat\",\"p\":[-0.003,0.289,0.94],\"q\":[0.112,-0.022,0.003,0.994],\"size\":0.248,\"tint\":\"s:black\"},{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Dot\",\"p\":[-0.013,0.35,1.012],\"q\":[-0.178,-0.038,-0.007,0.983],\"size\":0.174}]},\n butterfly: {\"regionBlends\":{\"torso\":0.14,\"limb\":0.08,\"wing\":0.5,\"tail\":0.08,\"head\":0.08},\"bones\":[[\"Thorax\",null,[0,0,0.25],[\"role:core\"]],[\"Head\",\"Thorax\",[0,0.356,0.433],[\"role:head\"]],[\"Antenna Base L\",\"Head\",[0.1,0.533,0.636],[\"side:L\",\"mirror:Antenna Base\",\"role:antenna\"]],[\"Antenna Tip L\",\"Antenna Base L\",[0.25,0.665,0.896],[\"side:L\",\"mirror:Antenna Tip\",\"role:antenna\"]],[\"Antenna Base R\",\"Head\",[-0.1,0.533,0.636],[\"side:R\",\"mirror:Antenna Base\",\"role:antenna\"]],[\"Antenna Tip R\",\"Antenna Base R\",[-0.25,0.665,0.896],[\"side:R\",\"mirror:Antenna Tip\",\"role:antenna\"]],[\"Abdomen 1\",\"Thorax\",[0,-0.356,0.067],[\"role:abdomen\"]],[\"Abdomen 2\",\"Abdomen 1\",[0,-0.568,-0.032],[\"role:abdomen\"]],[\"Abdomen 3\",\"Abdomen 2\",[0,-0.78,-0.132],[\"role:abdomen\"]],[\"Abdomen 4\",\"Abdomen 3\",[0,-0.992,-0.231],[\"role:abdomen\"]],[\"Forewing Base L\",\"Thorax\",[0.12,0.159,0.074],[\"side:L\",\"mirror:Forewing Base\",\"role:wing\"]],[\"Forewing Mid L\",\"Forewing Base L\",[0.5,0.271,0.081],[\"side:L\",\"mirror:Forewing Mid\",\"role:wing\"]],[\"Forewing Tip L\",\"Forewing Mid L\",[0.95,0.205,0.106],[\"side:L\",\"mirror:Forewing Tip\",\"role:wing\"]],[\"Forewing Base R\",\"Thorax\",[-0.12,0.159,0.074],[\"side:R\",\"mirror:Forewing Base\",\"role:wing\"]],[\"Forewing Mid R\",\"Forewing Base R\",[-0.5,0.271,0.081],[\"side:R\",\"mirror:Forewing Mid\",\"role:wing\"]],[\"Forewing Tip R\",\"Forewing Mid R\",[-0.95,0.205,0.106],[\"side:R\",\"mirror:Forewing Tip\",\"role:wing\"]],[\"Hindwing Base L\",\"Thorax\",[0.12,0.026,0.005],[\"side:L\",\"mirror:Hindwing Base\",\"role:wing\"]],[\"Hindwing Tip L\",\"Hindwing Base L\",[0.7,-0.493,-0.296],[\"side:L\",\"mirror:Hindwing Tip\",\"role:wing\"]],[\"Hindwing Base R\",\"Thorax\",[-0.12,0.026,0.005],[\"side:R\",\"mirror:Hindwing Base\",\"role:wing\"]],[\"Hindwing Tip R\",\"Hindwing Base R\",[-0.7,-0.493,-0.296],[\"side:R\",\"mirror:Hindwing Tip\",\"role:wing\"]],[\"Leg 1 Coxa L\",\"Thorax\",[0.12,0.087,0.3],[\"side:L\",\"mirror:Leg 1 Coxa\",\"role:insect-leg\"]],[\"Leg 1 Femur L\",\"Leg 1 Coxa L\",[0.308,-0.264,0.618],[\"side:L\",\"mirror:Leg 1 Femur\",\"role:insect-leg\"]],[\"Leg 1 Tibia L\",\"Leg 1 Femur L\",[0.209,-0.627,0.831],[\"side:L\",\"mirror:Leg 1 Tibia\",\"role:insect-leg\"]],[\"Leg 1 Coxa R\",\"Thorax\",[-0.12,0.087,0.3],[\"side:R\",\"mirror:Leg 1 Coxa\",\"role:insect-leg\"]],[\"Leg 1 Femur R\",\"Leg 1 Coxa R\",[-0.308,-0.264,0.618],[\"side:R\",\"mirror:Leg 1 Femur\",\"role:insect-leg\"]],[\"Leg 1 Tibia R\",\"Leg 1 Femur R\",[-0.209,-0.627,0.831],[\"side:R\",\"mirror:Leg 1 Tibia\",\"role:insect-leg\"]],[\"Leg 2 Coxa L\",\"Thorax\",[0.12,0,0.25],[\"side:L\",\"mirror:Leg 2 Coxa\",\"role:insect-leg\"]],[\"Leg 2 Femur L\",\"Leg 2 Coxa L\",[0.323,-0.48,0.46],[\"side:L\",\"mirror:Leg 2 Femur\",\"role:insect-leg\"]],[\"Leg 2 Tibia L\",\"Leg 2 Femur L\",[0.241,-0.84,0.619],[\"side:L\",\"mirror:Leg 2 Tibia\",\"role:insect-leg\"]],[\"Leg 2 Coxa R\",\"Thorax\",[-0.12,0,0.25],[\"side:R\",\"mirror:Leg 2 Coxa\",\"role:insect-leg\"]],[\"Leg 2 Femur R\",\"Leg 2 Coxa R\",[-0.323,-0.48,0.46],[\"side:R\",\"mirror:Leg 2 Femur\",\"role:insect-leg\"]],[\"Leg 2 Tibia R\",\"Leg 2 Femur R\",[-0.241,-0.84,0.619],[\"side:R\",\"mirror:Leg 2 Tibia\",\"role:insect-leg\"]],[\"Leg 3 Coxa L\",\"Thorax\",[0.12,-0.087,0.2],[\"side:L\",\"mirror:Leg 3 Coxa\",\"role:insect-leg\"]],[\"Leg 3 Femur L\",\"Leg 3 Coxa L\",[0.369,-0.608,0.204],[\"side:L\",\"mirror:Leg 3 Femur\",\"role:insect-leg\"]],[\"Leg 3 Tibia L\",\"Leg 3 Femur L\",[0.131,-0.995,0.315],[\"side:L\",\"mirror:Leg 3 Tibia\",\"role:insect-leg\"]],[\"Leg 3 Coxa R\",\"Thorax\",[-0.12,-0.087,0.2],[\"side:R\",\"mirror:Leg 3 Coxa\",\"role:insect-leg\"]],[\"Leg 3 Femur R\",\"Leg 3 Coxa R\",[-0.369,-0.608,0.204],[\"side:R\",\"mirror:Leg 3 Femur\",\"role:insect-leg\"]],[\"Leg 3 Tibia R\",\"Leg 3 Femur R\",[-0.131,-0.995,0.315],[\"side:R\",\"mirror:Leg 3 Tibia\",\"role:insect-leg\"]]],\"parts\":{\"Thorax\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.14,\"size\":0.8,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0.15,\"normalStrength\":1.1,\"glow\":0,\"opacity\":1,\"patternType\":4,\"patternScale\":0.9,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":90,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,0.178,0.341],[0.474,0,0],[0.441,0.416,0.441],\"@core\",{\"foundationColor\":\"@detail\"}],[\"cylinder\",\"add\",[0,-0.178,0.159],[-2.667,0,0],[0.441,0.416,0.441],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0,0,0.25],[-1.047,0,0],[0.463,0.463,0.463],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Head\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.3,\"variation\":0.2,\"coverage\":1,\"regularity\":0.7,\"boil\":1,\"blend\":0.05,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0.1,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,0.356,0.433],[0.018,0,0],[0.481,0.481,0.481],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Antenna Base L\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.05,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.175,0.599,0.766],[1.038,-0.119,-0.479],[0.047,0.341,0.047],\"@detail\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.1,0.533,0.636],[0.559,0,0],[0.047,0.047,0.047],\"@detail\",{\"foundationColor\":\"@detail\"}],[\"cylinder\",\"add\",[0.195,0.616,0.762],[0.827,-0.259,-0.528],[0.034,0.276,0.03],\"@detail\"]]},\"Antenna Tip L\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.05,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.25,0.665,0.896],[0.559,0,0],[0.077,0.077,0.077],\"@detail\",{\"foundationColor\":\"@detail\"}]]},\"Abdomen 1\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0.2,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.14,\"size\":0.6,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":1,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":90,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.462,0.017],[-2.703,0,0],[0.187,0.244,0.187],\"@detail\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0,-0.356,0.067],[-1.047,0,0],[0.197,0.197,0.197],\"@detail\",{\"foundationColor\":\"@detail\"}]]},\"Abdomen 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0.2,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.14,\"size\":0.6,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.674,-0.082],[-2.703,0,0],[0.187,0.244,0.187],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0,-0.568,-0.032],[-1.047,0,0],[0.197,0.197,0.197],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Abdomen 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0.2,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.14,\"size\":0.6,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.886,-0.182],[-2.703,0,0],[0.187,0.244,0.187],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0,-0.78,-0.132],[-1.047,0,0],[0.197,0.197,0.197],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Abdomen 4\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0.2,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.14,\"size\":0.6,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0,-0.992,-0.231],[-1.047,0,0],[0.14,0.14,0.14],\"@detail\",{\"foundationColor\":\"@detail\"}]]},\"Forewing Base L\":{\"color\":\"@flat\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.5,\"size\":1,\"shape\":\"none\",\"roughness\":0.55,\"metalness\":0.05,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":6,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"wing\":{\"style\":\"dots\",\"density\":0.55,\"spots\":0.6,\"border\":0.5,\"base\":\"@flat\",\"base2\":\"@flat\",\"mark\":\"@accent\",\"ink\":\"s:black\",\"dot\":\"s:teeth\",\"seed\":7,\"outline\":\"monarch\",\"part\":\"fore\",\"chord\":1.15},\"stamps\":[]},\"Forewing Mid L\":null,\"Forewing Tip L\":null,\"Hindwing Base L\":{\"color\":\"@flat\",\"sd\":{\"foundationColor\":\"@pale\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.5,\"size\":1,\"shape\":\"none\",\"roughness\":0.55,\"metalness\":0.05,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":7,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"wing\":{\"style\":\"dots\",\"density\":0.55,\"spots\":0.6,\"border\":0.5,\"base\":\"@flat\",\"base2\":\"@flat\",\"mark\":\"@accent\",\"ink\":\"s:black\",\"dot\":\"s:teeth\",\"seed\":7,\"outline\":\"monarch\",\"part\":\"hind\",\"chord\":1.1},\"stamps\":[]},\"Hindwing Tip L\":null,\"Leg 1 Coxa L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.05,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":0.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.214,-0.089,0.459],[0.035,-1.054,-2.3],[0.076,0.529,0.076],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.12,0.087,0.3],[0.123,-1.029,-1.884],[0.094,0.132,0.089],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 1 Femur L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.064,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":0.5,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.258,-0.445,0.724],[-0.749,-0.747,2.827],[0.097,0.45,0.097],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.308,-0.264,0.618],[-0.447,0.016,-0.38],[0.111,0.041,0.111],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 1 Tibia L\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.3,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.208,-0.687,0.862],[2.696,0,0],[0.002,0.011,0.001],\"@detail\"]]},\"Leg 2 Coxa L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.05,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":0.5,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.221,-0.24,0.355],[-0.414,0,-2.772],[0.076,0.584,0.076],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.12,0,0.25],[-0.448,0.018,-2.392],[0.097,0.148,0.087],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 2 Femur L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.064,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.282,-0.66,0.54],[-0.414,0,2.936],[0.096,0.418,0.096],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.323,-0.48,0.46],[-0.397,0.024,-0.368],[0.11,0.038,0.111],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 2 Tibia L\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.3,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.241,-0.84,0.619],[-0.414,0,0],[0.005,0.005,0.005],\"@detail\",{\"foundationColor\":\"@detail\"}]]},\"Leg 3 Coxa L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.05,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":0.5,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.245,-0.347,0.202],[-0.933,1.031,-2.145],[0.076,0.601,0.076],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.12,-0.087,0.2],[-1.017,0.68,-1.726],[0.097,0.149,0.09],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 3 Femur L\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.064,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":5,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.25,-0.801,0.26],[0.171,0.634,2.459],[0.097,0.487,0.097],\"@core\",{\"foundationColor\":\"@detail\"}],[\"sphere\",\"add\",[0.369,-0.608,0.204],[-0.327,0.018,-0.678],[0.111,0.044,0.111],\"@core\",{\"foundationColor\":\"@detail\"}]]},\"Leg 3 Tibia L\":{\"color\":\"@detail\",\"sd\":{\"foundationColor\":\"@detail\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":1,\"regularity\":0,\"boil\":1,\"blend\":0.3,\"size\":1,\"shape\":\"none\",\"roughness\":0.9,\"metalness\":0,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1.4,\"patternStrength\":1,\"patternColor\":\"@accent\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.131,-0.995,0.315],[-0.402,0,0],[0.01,0.01,0.01],\"@detail\",{\"foundationColor\":\"@detail\"}]]}},\"decals\":[{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Glossy Eye\",\"p\":[-0.111,0.403,0.638],\"q\":[-0.087,-0.26,-0.028,0.961],\"size\":0.218},{\"bone\":\"Head\",\"cat\":\"eye\",\"name\":\"Glossy Eye\",\"p\":[0.097,0.402,0.646],\"q\":[-0.102,0.227,0.028,0.968],\"size\":0.218},{\"bone\":\"Head\",\"cat\":\"mouth\",\"name\":\"Insect Mouth\",\"p\":[-0.009,0.265,0.653],\"q\":[0.179,-0.019,0.003,0.984],\"size\":0.318}]},\n octopus: {\"regionBlends\":{\"torso\":0.12,\"limb\":0.12,\"wing\":0.12,\"tail\":0.12,\"head\":0.12},\"bones\":[[\"Mantle\",null,[0,0.3,-0.076],[\"role:core\"]],[\"Mantle Tip\",\"Mantle\",[0.011,0.475,0.013],[\"role:head\"]],[\"Arm 1 Seg 1\",\"Mantle\",[0,-0.05,0.274],[\"role:tentacle\"]],[\"Arm 1 Seg 2\",\"Arm 1 Seg 1\",[0,-0.33,0.524],[\"role:tentacle\"]],[\"Arm 1 Seg 3\",\"Arm 1 Seg 2\",[0,-0.61,0.774],[\"role:tentacle\"]],[\"Arm 1 Seg 4\",\"Arm 1 Seg 3\",[0,-0.946,0.698],[\"role:tentacle\"]],[\"Arm 2 Seg 1\",\"Mantle\",[0.177,-0.05,0.2],[\"side:L\",\"mirror:Arm 1 Seg 1\",\"role:tentacle\"]],[\"Arm 2 Seg 2\",\"Arm 2 Seg 1\",[0.354,-0.33,0.377],[\"side:L\",\"mirror:Arm 1 Seg 2\",\"role:tentacle\"]],[\"Arm 2 Seg 3\",\"Arm 2 Seg 2\",[0.436,-0.686,0.463],[\"side:L\",\"mirror:Arm 1 Seg 3\",\"role:tentacle\"]],[\"Arm 2 Seg 4\",\"Arm 2 Seg 3\",[0.492,-1.022,0.512],[\"side:L\",\"mirror:Arm 1 Seg 4\",\"role:tentacle\"]],[\"Arm 3 Seg 1\",\"Mantle\",[0.25,-0.05,0.024],[\"side:L\",\"mirror:Arm 2 Seg 1\",\"role:tentacle\"]],[\"Arm 3 Seg 2\",\"Arm 3 Seg 1\",[0.557,-0.265,0.002],[\"side:L\",\"mirror:Arm 2 Seg 2\",\"role:tentacle\"]],[\"Arm 3 Seg 3\",\"Arm 3 Seg 2\",[0.761,-0.58,0.011],[\"side:L\",\"mirror:Arm 2 Seg 3\",\"role:tentacle\"]],[\"Arm 3 Seg 4\",\"Arm 3 Seg 3\",[0.732,-0.923,0.017],[\"side:L\",\"mirror:Arm 2 Seg 4\",\"role:tentacle\"]],[\"Arm 4 Seg 1\",\"Mantle\",[0.177,-0.05,-0.153],[\"side:L\",\"mirror:Arm 3 Seg 1\",\"role:tentacle\"]],[\"Arm 4 Seg 2\",\"Arm 4 Seg 1\",[0.498,-0.129,-0.33],[\"side:L\",\"mirror:Arm 3 Seg 2\",\"role:tentacle\"]],[\"Arm 4 Seg 3\",\"Arm 4 Seg 2\",[0.659,-0.418,-0.507],[\"side:L\",\"mirror:Arm 3 Seg 3\",\"role:tentacle\"]],[\"Arm 4 Seg 4\",\"Arm 4 Seg 3\",[0.569,-0.719,-0.648],[\"side:L\",\"mirror:Arm 3 Seg 4\",\"role:tentacle\"]],[\"Arm 5 Seg 1\",\"Mantle\",[0,-0.05,-0.226],[\"role:tentacle\"]],[\"Arm 5 Seg 2\",\"Arm 5 Seg 1\",[0.01,-0.334,-0.471],[\"role:tentacle\"]],[\"Arm 5 Seg 3\",\"Arm 5 Seg 2\",[0.019,-0.707,-0.52],[\"role:tentacle\"]],[\"Arm 5 Seg 4\",\"Arm 5 Seg 3\",[0.025,-1.021,-0.38],[\"role:tentacle\"]],[\"Arm 6 Seg 1\",\"Mantle\",[-0.177,-0.05,-0.153],[\"side:R\",\"mirror:Arm 3 Seg 1\",\"role:tentacle\"]],[\"Arm 6 Seg 2\",\"Arm 6 Seg 1\",[-0.498,-0.129,-0.33],[\"side:R\",\"mirror:Arm 3 Seg 2\",\"role:tentacle\"]],[\"Arm 6 Seg 3\",\"Arm 6 Seg 2\",[-0.659,-0.418,-0.507],[\"side:R\",\"mirror:Arm 3 Seg 3\",\"role:tentacle\"]],[\"Arm 6 Seg 4\",\"Arm 6 Seg 3\",[-0.569,-0.719,-0.648],[\"side:R\",\"mirror:Arm 3 Seg 4\",\"role:tentacle\"]],[\"Arm 7 Seg 1\",\"Mantle\",[-0.25,-0.05,0.024],[\"side:R\",\"mirror:Arm 2 Seg 1\",\"role:tentacle\"]],[\"Arm 7 Seg 2\",\"Arm 7 Seg 1\",[-0.557,-0.265,0.002],[\"side:R\",\"mirror:Arm 2 Seg 2\",\"role:tentacle\"]],[\"Arm 7 Seg 3\",\"Arm 7 Seg 2\",[-0.761,-0.58,0.011],[\"side:R\",\"mirror:Arm 2 Seg 3\",\"role:tentacle\"]],[\"Arm 7 Seg 4\",\"Arm 7 Seg 3\",[-0.732,-0.923,0.017],[\"side:R\",\"mirror:Arm 2 Seg 4\",\"role:tentacle\"]],[\"Arm 8 Seg 1\",\"Mantle\",[-0.177,-0.05,0.2],[\"side:R\",\"mirror:Arm 1 Seg 1\",\"role:tentacle\"]],[\"Arm 8 Seg 2\",\"Arm 8 Seg 1\",[-0.354,-0.33,0.377],[\"side:R\",\"mirror:Arm 1 Seg 2\",\"role:tentacle\"]],[\"Arm 8 Seg 3\",\"Arm 8 Seg 2\",[-0.436,-0.686,0.463],[\"side:R\",\"mirror:Arm 1 Seg 3\",\"role:tentacle\"]],[\"Arm 8 Seg 4\",\"Arm 8 Seg 3\",[-0.492,-1.022,0.512],[\"side:R\",\"mirror:Arm 1 Seg 4\",\"role:tentacle\"]]],\"parts\":{\"Mantle\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.25,\"coverage\":1,\"regularity\":0.6,\"boil\":1,\"blend\":0.12,\"size\":0.8,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1.1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[-0.001,0.267,0.018],[0,0,0],[0.895,0.895,0.895],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"subtract\",[0.014,-0.18,0.071],[0,0,0],[0.381,0.381,0.381],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Mantle Tip\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.3,\"variation\":0.2,\"coverage\":1,\"regularity\":0.7,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"sphere\",\"add\",[0.021,0.4,0.016],[0,0,0],[0.677,0.677,0.677],\"@core\",{\"foundationColor\":\"@core\"}],[\"capsule\",\"add\",[0.021,0.525,-0.263],[-1.521,0,0],[0.677,0.748,0.47],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.164,0.255,0.198],[0,0,0],[0.277,0.277,0.277],\"@core\"],[\"sphere\",\"add\",[-0.162,0.273,0.195],[0,0,0],[0.277,0.277,0.277],\"@core\"]]},\"Arm 1 Seg 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.19,0.375],[2.413,0,0],[0.161,0.39,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0,-0.33,0.5],[0,0,0],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0,-0.05,0.25],[0,0,0],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 1 Seg 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0,-0.47,0.625],[2.413,0,0],[0.122,0.39,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0,-0.61,0.75],[0,0,0],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0,-0.33,0.5],[0,0,0],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 1 Seg 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0,-0.76,0.72],[-2.92,0,0],[0.082,0.358,0.082],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0,-0.592,0.758],[0.842,0,0],[0.082,0.082,0.082],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 1 Seg 4\":null,\"Arm 2 Seg 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.265,-0.19,0.265],[1.307,-1.061,-1.307],[0.161,0.39,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.354,-0.33,0.354],[0,0,0],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.177,-0.05,0.177],[0,0,0],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 2 Seg 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.399,-0.5,0.398],[2.105,-1.266,-0.823],[0.122,0.39,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.441,-0.678,0.441],[0.33,-0.197,-0.194],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.358,-0.322,0.355],[0.33,-0.197,-0.194],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 2 Seg 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.469,-0.846,0.466],[2.308,-1.319,-0.705],[0.082,0.358,0.082],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.441,-0.678,0.441],[0.33,-0.197,-0.194],[0.082,0.082,0.082],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 2 Seg 4\":null,\"Arm 3 Seg 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.402,-0.157,-0.011],[0.01,0.064,-2.18],[0.161,0.39,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.556,-0.264,-0.022],[0.01,0.064,0.233],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.248,-0.05,0],[0.01,0.064,0.233],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 3 Seg 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.661,-0.422,-0.017],[0.018,-0.072,-2.566],[0.122,0.39,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.763,-0.579,-0.012],[0.018,-0.072,-0.153],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.559,-0.264,-0.022],[0.018,-0.072,-0.153],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 3 Seg 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.748,-0.752,-0.01],[-0.023,-0.071,3.058],[0.082,0.358,0.082],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.763,-0.58,-0.012],[-0.023,-0.071,-0.704],[0.082,0.082,0.082],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 3 Seg 4\":null,\"Arm 4 Seg 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.338,-0.089,-0.265],[-1.437,0.307,-1.117],[0.161,0.39,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.498,-0.129,-0.354],[0,0,0.767],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.177,-0.05,-0.177],[0,0,0.767],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 4 Seg 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.579,-0.274,-0.442],[-1.278,1.115,-1.34],[0.122,0.39,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.659,-0.418,-0.53],[0,0,-0.055],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.498,-0.129,-0.354],[0,0,-0.055],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 4 Seg 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.614,-0.568,-0.601],[1.294,1.223,2.257],[0.082,0.358,0.082],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.659,-0.418,-0.53],[0,0,-0.761],[0.082,0.082,0.082],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 4 Seg 4\":null,\"Arm 5 Seg 1\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.006,-0.193,-0.372],[-2.429,0.063,-0.025],[0.161,0.39,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.011,-0.335,-0.495],[-0.018,-0.064,-0.023],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.001,-0.05,-0.25],[-0.018,-0.064,-0.023],[0.161,0.161,0.161],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 5 Seg 2\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cylinder\",\"add\",[0.016,-0.534,-0.515],[-3.01,0.063,-0.025],[0.122,0.39,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.021,-0.72,-0.539],[-0.599,-0.064,-0.023],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.011,-0.348,-0.491],[-0.599,-0.064,-0.023],[0.122,0.122,0.122],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 5 Seg 3\":{\"color\":\"@core\",\"sd\":{\"foundationColor\":\"@core\",\"foundationDarkness\":0.08,\"variation\":0,\"coverage\":0.9,\"regularity\":0.8,\"boil\":1,\"blend\":0.12,\"size\":0.5,\"shape\":\"none\",\"roughness\":0.35,\"metalness\":0.7,\"normalStrength\":1,\"glow\":0,\"opacity\":1,\"patternType\":0,\"patternScale\":1,\"patternStrength\":1,\"patternColor\":\"s:black\",\"patternColor2\":\"@accent\",\"patternRotX\":0,\"patternRotY\":0,\"patternRotZ\":0},\"stamps\":[[\"cone\",\"add\",[0.024,-0.884,-0.462],[2.725,0.066,-0.018],[0.082,0.358,0.082],\"@core\",{\"foundationColor\":\"@core\"}],[\"sphere\",\"add\",[0.021,-0.727,-0.532],[-1.038,-0.064,-0.023],[0.082,0.082,0.082],\"@core\",{\"foundationColor\":\"@core\"}]]},\"Arm 5 Seg 4\":null},\"decals\":[{\"bone\":\"Mantle Tip\",\"cat\":\"eye\",\"name\":\"Octopus Eye\",\"p\":[0.257,0.268,0.301],\"q\":[0.068,0.349,-0.025,0.934],\"size\":0.264},{\"bone\":\"Mantle Tip\",\"cat\":\"eye\",\"name\":\"Octopus Eye\",\"p\":[-0.273,0.265,0.268],\"q\":[0.113,-0.481,0.062,0.867],\"size\":0.264}]},\n};\n", "/* Port of references/dreams-poc/js/skeleton-templates.js (SKELETON_TEMPLATES), in picker order. */\nimport { bakeBones, type RigBuilder } from \"./rig-builder.js\";\nimport { ANT_BAKE } from \"./ant-bake.js\";\nimport { BEE_BAKE } from \"./bee-bake.js\";\nimport { BIRD_BAKE } from \"./bird-bake.js\";\nimport { CENTIPEDE_BAKE } from \"./centipede-bake.js\";\nimport { CRAB_BAKE } from \"./crab-bake.js\";\nimport { GORILLA_BAKE } from \"./gorilla-bake.js\";\nimport { HUMANOID_BAKE } from \"./humanoid-bake.js\";\nimport { INSECT6_BAKE } from \"./insect6-bake.js\";\nimport { SCORPION_BAKE } from \"./scorpion-bake.js\";\nimport { DRAGON_BAKE } from \"./dragon-bake.js\";\nimport { FISH_BAKE } from \"./fish-bake.js\";\nimport { JELLYFISH_BAKE } from \"./jellyfish-bake.js\";\nimport { SHARK_BAKE } from \"./shark-bake.js\";\nimport { WHALE_BAKE } from \"./whale-bake.js\";\nimport { SPIDER_BAKE } from \"./spider-bake.js\";\nimport { LIZARD_BAKE } from \"./lizard-bake.js\";\nimport { RODENT_BAKE } from \"./rodent-bake.js\";\nimport { FELINE_BAKE, FOX_BAKE } from \"./sitter-bake.js\";\nimport { SNAKE_BAKE } from \"./snake-bake.js\";\nimport { TURTLE_BAKE } from \"./turtle-bake.js\";\nimport { WOLF_BAKE } from \"./wolf-bake.js\";\nimport { WORM_BAKE } from \"./worm-bake.js\";\nimport { SKELETON_BAKES } from \"./skeleton-bakes.js\";\nimport type { CreatureFamily } from \"@dreamy/api\";\nimport type { Bake, TemplateColor } from \"./bake-types.js\";\n\nexport type SkeletonTemplate = {\n readonly id: string;\n readonly name: string;\n readonly icon: string;\n /** Parts swap within a family unless the user asks for a chimera. */\n readonly family: CreatureFamily;\n readonly desc: string;\n /** Template-space extent for a new rig (default 2.2 on each axis). */\n readonly size?: readonly [number, number, number];\n /** Body color keys \u2192 POC color refs (\"s:0\", \"s:black\"\u2026). */\n readonly colors: { readonly [key: string]: TemplateColor };\n readonly build: (b: RigBuilder) => void;\n};\n\nconst bake = (id: string) => {\n const found = SKELETON_BAKES[id];\n if (!found) throw new Error(`No bake for ${id}`);\n return found;\n};\n\n/** The bake with its eye decals swapped for another built-in eye (the generated bake file stays the POC's). */\nconst withEyes = (b: Bake, name: string): Bake => ({ ...b, decals: b.decals.map((d) => (d.cat === \"eye\" ? { ...d, name } : d)) });\n\n\nexport const SKELETON_TEMPLATES: readonly SkeletonTemplate[] = [\n {\n id: \"biped\", family: \"mammal\", name: \"Biped\", icon: \"\uD83E\uDD8D\", desc: \"A gorilla: big chest and shoulders, long heavy arms, short legs, crested head with a pale face.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:1\", pale: \"s:1\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, GORILLA_BAKE),\n },\n {\n id: \"quadruped\", family: \"mammal\", name: \"Quadruped\", icon: \"\uD83D\uDC3A\", desc: \"A wolf: deep chest, long legs, pointed ears, long snout and a bushy tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", pale: \"s:1\", nose: \"s:black\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, WOLF_BAKE),\n },\n {\n id: \"feline\", family: \"mammal\", name: \"Feline\", icon: \"\uD83D\uDC08\", desc: \"A sitting cat: sleek body, pointed ears, slit eyes and a slim tail curled round its feet.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", pale: \"s:1\", nose: \"s:tongue\", inner: \"s:tongue\", tip: \"s:black\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, FELINE_BAKE),\n },\n {\n id: \"fox\", family: \"mammal\", name: \"Fox\", icon: \"\uD83E\uDD8A\", desc: \"A sitting fox: pointed snout, big black-tipped ears, pale chest and face, and a huge bushy tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", pale: \"s:teeth\", nose: \"s:black\", inner: \"s:tongue\", tip: \"s:black\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, FOX_BAKE),\n },\n {\n id: \"sheep\", family: \"mammal\", name: \"Sheep\", icon: \"\uD83D\uDC11\", desc: \"Woolly quadruped: puffy coat, floppy ears, slim legs with hooves.\",\n colors: { core: \"s:0\", head: \"s:1\", limb: \"s:1\", thin: \"s:0\", flat: \"s:0\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, bake(\"sheep\")),\n },\n {\n id: \"rabbit\", family: \"mammal\", name: \"Rabbit\", icon: \"\uD83D\uDC07\", desc: \"Crouched body, tall ears, folded hind legs, puff tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:1\", thin: \"s:1\", flat: \"s:0\", accent: \"s:tongue\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, bake(\"rabbit\")),\n },\n {\n id: \"rodent\", family: \"mammal\", name: \"Rodent\", icon: \"\uD83D\uDC2D\", desc: \"A mouse: chubby teardrop body, big round ears, pointed pink nose, pink paws and a long thin tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", pink: \"s:tongue\", accent: \"s:1\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, RODENT_BAKE),\n },\n {\n id: \"bird\", family: \"bird\", name: \"Bird\", icon: \"\uD83D\uDC26\", desc: \"Plump body with a pale breast, round head and beak, folded wings, tail fan, thin legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:1\", thin: \"s:1\", flat: \"s:0\", pale: \"s:1\", wing: \"s:1\", beak: \"s:1\", leg: \"s:1\", accent: \"s:1\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, BIRD_BAKE),\n },\n {\n id: \"crawler\", family: \"reptile\", name: \"Crawler\", icon: \"\uD83E\uDD8E\", desc: \"A lizard: low patched body, pale belly, wedge head, splayed legs with toes and a long tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:1\", pale: \"s:1\", spots: \"s:1\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, LIZARD_BAKE),\n },\n {\n id: \"turtle\", family: \"reptile\", name: \"Turtle\", icon: \"\uD83D\uDC22\", desc: \"Domed shell with scutes and a rim, head on a short neck, four stubby legs and a little tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", shell: \"s:1\", scute: \"s:2\", accent: \"s:1\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, TURTLE_BAKE),\n },\n {\n id: \"snake\", family: \"reptile\", name: \"Snake\", icon: \"\uD83D\uDC0D\", desc: \"Coiled on the ground, S-curved neck raising its head, forked tongue and a pale belly.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", belly: \"s:1\", tongue: \"s:tongue\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, SNAKE_BAKE),\n },\n {\n id: \"worm\", family: \"bug\", name: \"Worm\", icon: \"\uD83E\uDEB1\", desc: \"A fat, soft worm lying in an S with its head raised and segment rings.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", ring: \"s:1\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, WORM_BAKE),\n },\n {\n id: \"dragon\", family: \"reptile\", name: \"Dragon\", icon: \"\uD83D\uDC09\", desc: \"Chunky quadruped with a belly, horns, back spikes, bat wings and a spade-tipped tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:1\", belly: \"s:1\", accent: \"s:1\", detail: \"s:teeth\", claw: \"s:black\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, DRAGON_BAKE),\n },\n {\n id: \"butterfly\", family: \"bug\", name: \"Butterfly\", icon: \"\uD83E\uDD8B\", desc: \"Upright body, big patterned fore and hind wings, curled antennae, 6 legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:1\", flat: \"s:1\", accent: \"s:2\", detail: \"s:1\", abdomen: \"s:0\", pale: \"s:3\" },\n build: (b) => bakeBones(b, withEyes(bake(\"butterfly\"), \"Bug Eye\")),\n },\n {\n id: \"bee\", family: \"bug\", name: \"Bee\", icon: \"\uD83D\uDC1D\", desc: \"Fuzzy thorax, big bug eyes, banded abdomen with a stinger, clear fore and hind wings, 6 legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:teeth\", abdomen: \"s:1\", band: \"s:black\", leg: \"s:black\", accent: \"s:black\", detail: \"s:black\" },\n build: (b) => bakeBones(b, BEE_BAKE),\n },\n {\n id: \"insect6\", family: \"bug\", name: \"6-Winged Insect\", icon: \"\uD83E\uDEB0\", desc: \"A dragonfly-like flier: big fly-eyed head, three thorax segments with a wing pair and a leg pair each, slender abdomen.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:1\", abdomen: \"s:1\", leg: \"s:black\", accent: \"s:black\", detail: \"s:teeth\" },\n build: (b) => bakeBones(b, INSECT6_BAKE),\n },\n {\n id: \"ant\", family: \"bug\", name: \"Ant\", icon: \"\uD83D\uDC1C\", desc: \"Big raised gaster, petiole waist, humped thorax, head with mandibles and elbowed antennae, 6 long legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", jaw: \"s:black\", accent: \"s:black\", detail: \"s:black\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, ANT_BAKE),\n },\n {\n id: \"spider\", family: \"bug\", name: \"Spider\", icon: \"\uD83D\uDD77\uFE0F\", desc: \"Small cephalothorax, big banded abdomen, fangs, pedipalps and 8 high-kneed hairy legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", accent: \"s:1\", detail: \"s:black\", fang: \"s:black\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, SPIDER_BAKE),\n },\n {\n id: \"centipede\", family: \"bug\", name: \"Centipede\", icon: \"\uD83D\uDC1B\", desc: \"Six glossy body plates in a gentle S, a leg pair on each, flat head with long antennae and fangs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:1\", thin: \"s:1\", flat: \"s:1\", leg: \"s:1\", fang: \"s:black\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, CENTIPEDE_BAKE),\n },\n {\n id: \"humanoid\", family: \"mammal\", name: \"Humanoid\", icon: \"\uD83E\uDDD1\", desc: \"A cute chunky person: big head with hair, shirt, pants, hands and shoes.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:1\", thin: \"s:1\", flat: \"s:1\", shirt: \"s:1\", pants: \"s:3\", hair: \"s:black\", shoe: \"s:black\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, HUMANOID_BAKE),\n },\n {\n id: \"fish\", family: \"aquatic\", name: \"Fish\", icon: \"\uD83D\uDC1F\", desc: \"A chubby cartoon fish: big eye, white band, forked tail, dorsal, pectoral and pelvic fins.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:1\", fin: \"s:1\", band: \"s:teeth\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, FISH_BAKE),\n },\n {\n id: \"shark\", family: \"aquatic\", name: \"Shark\", icon: \"\uD83E\uDD88\", desc: \"A cartoon shark: torpedo body, pointed snout, white belly, gill slits, tall dorsal fin and a crescent tail.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", fin: \"s:0\", belly: \"s:teeth\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, SHARK_BAKE),\n },\n {\n id: \"whale\", family: \"aquatic\", name: \"Whale\", icon: \"\uD83D\uDC0B\", desc: \"A big round-headed whale: pale grooved belly, blowhole, small dorsal hump, flippers and wide flukes.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", fin: \"s:0\", belly: \"s:1\", groove: \"s:teeth\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, WHALE_BAKE),\n },\n {\n id: \"octopus\", family: \"aquatic\", name: \"Octopus\", icon: \"\uD83D\uDC19\", desc: \"Central mantle hub with 8 four-bone arms radiating around it.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", accent: \"s:2\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, bake(\"octopus\")),\n },\n {\n id: \"jellyfish\", family: \"aquatic\", name: \"Jellyfish\", icon: \"\uD83E\uDEBC\", desc: \"A glowing see-through bell with a cute face and eight long frilly tentacles.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", frill: \"s:1\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, JELLYFISH_BAKE),\n },\n {\n id: \"scorpion\", family: \"bug\", name: \"Scorpion\", icon: \"\uD83E\uDD82\", desc: \"Flat carapace, plated abdomen, big pincers, 8 legs and a beaded tail curling over the back to a stinger.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", sting: \"s:black\", accent: \"s:black\", detail: \"s:1\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, SCORPION_BAKE),\n },\n {\n id: \"crab\", family: \"aquatic\", name: \"Crab\", icon: \"\uD83E\uDD80\", desc: \"Wide domed shell with a pale front, big raised pincers and four pairs of splayed legs.\",\n colors: { core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", pale: \"s:1\", accent: \"s:black\", detail: \"s:teeth\", abdomen: \"s:0\" },\n build: (b) => bakeBones(b, CRAB_BAKE),\n },\n];\n\nexport const findTemplate = (id: string): SkeletonTemplate | undefined => SKELETON_TEMPLATES.find((t) => t.id === id);\n", "import type { CreatureFamily, PartSlot } from \"@dreamy/api\";\nimport type { Bake, BakeBone, BakeLook, BakePart, BakeStamp, TemplateColor } from \"../bake-types.js\";\nimport { part as bakedPart, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport { bakeBones } from \"../rig-builder.js\";\nimport type { PartVariant } from \"./part-variant.js\";\n\nexport const LEAF = \"@leaf\", MOSS = \"@moss\", PETAL = \"@petal\", CAP = \"@cap\", SPOT = \"@spot\", STEM = \"@stem\", CRYSTAL = \"@crystal\", ROCK = \"@rock\";\nexport const METAL = \"@metal\", PANEL = \"@panel\", NEON = \"@neon\", FIRE = \"@fire\", EMBER = \"@ember\", ICE = \"@ice\", SLIME = \"@slime\";\nexport const CORE = \"@core\", HORN = \"@horn\", HOOF = \"@hoof\", WHITE = \"@white\", PALE = \"@pale\", NOSE = \"@nose\", INNER = \"@inner\", STRIPE = \"@stripe\", MANE = \"@mane\", TUSK = \"@tusk\", BEAK = \"@beak\";\n\n/** Every variant's color keys (the scene palette's roles). */\nexport const COLORS: { readonly [key: string]: TemplateColor } = {\n core: \"s:0\", head: \"s:0\", limb: \"s:0\", thin: \"s:0\", flat: \"s:0\", abdomen: \"s:0\", trunk: \"s:0\", ear: \"s:0\",\n horn: \"s:teeth\", hoof: \"s:black\", pale: \"s:1\", white: \"s:teeth\", nose: \"s:black\", inner: \"s:tongue\", stripe: \"s:black\", mane: \"s:1\", tusk: \"s:teeth\", beak: \"s:2\",\n accent: \"s:black\", detail: \"s:teeth\",\n // made-up parts: leaves and moss (detail), petals and crystals (highlight), caps, metal, neon (eye), fire, ice\n leaf: \"s:2\", moss: \"s:2\", petal: \"s:3\", cap: \"s:tongue\", spot: \"s:teeth\", stem: \"s:1\", crystal: \"s:3\", rock: \"s:0\",\n metal: \"s:0\", panel: \"s:1\", neon: \"s:4\", fire: \"s:1\", ember: \"s:tongue\", ice: \"s:teeth\", slime: \"s:2\", fin: \"s:1\",\n};\n\nexport const FUR: BakeLook = {\n foundationColor: CORE, foundationDarkness: 0.3, shape: \"grass\", size: 0.32, coverage: 0.9, variation: 0.3, regularity: 0,\n boil: 0, normalStrength: 1, roughness: 0.8, metalness: 0, glow: 0, opacity: 1,\n};\nexport const SKIN: BakeLook = { ...FUR, shape: \"none\", coverage: 0, normalStrength: 0.1, roughness: 0.5 };\nexport const SCALES: BakeLook = { ...FUR, shape: \"scales\", size: 0.2, coverage: 0.6, variation: 0.15, regularity: 0.8, normalStrength: 0.4, roughness: 0.5 };\nexport const FEATHERS: BakeLook = { ...FUR, size: 0.26, coverage: 0.8 };\nexport const HORNY: BakeLook = { ...SKIN, foundationColor: \"@horn\", roughness: 0.45 };\n\nexport const corePart = (stamps: readonly BakeStamp[], look: BakeLook = FUR, blend = 0.08): BakePart => bakedPart(stamps, blend, look, CORE);\n\n/** A paint mark with its own sharp blend (a part's blend would smear a small mark into a blot). */\nexport const mark = (p: V3, s: V3, color: TemplateColor, rot: V3 = [0, 0, 0]): BakeStamp => [\"sphere\", \"paint\", p, rot, s, color, { blend: 0.004 }];\n/** Both sides of a sided stamp. */\nexport const both = (f: (side: 1 | -1) => BakeStamp): BakeStamp[] => [f(1), f(-1)];\n\nexport const HEAD_BONE: BakeBone = [\"Head\", null, [0, 0, 0], tagsOf(\"head\")];\nconst REGIONS = { torso: 0.1, limb: 0.05, wing: 0.05, tail: 0.05, head: 0.08 };\n\n/** A reference torso (`Hips`, a core bone at the origin) for variants that hang from the body: tails, legs, coats. */\nexport const HIPS_BONE: BakeBone = [\"Hips\", null, [0, 0, 0], tagsOf(\"core\")];\n\n/** A variant from its bake (the `Head` bone is added first, or `root` instead: the `Hips` for body parts). */\nexport function variant(\n slot: PartSlot, id: string, name: string, icon: string, family: CreatureFamily, desc: string,\n bake: Omit<Bake, \"regionBlends\" | \"bones\"> & { readonly bones?: readonly BakeBone[]; readonly root?: BakeBone },\n companions?: PartVariant[\"companions\"],\n): PartVariant {\n const full: Bake = { regionBlends: REGIONS, bones: [bake.root ?? HEAD_BONE, ...(bake.bones ?? [])], parts: bake.parts, decals: bake.decals };\n return { id: `${slot}:${id}`, slot, name, icon, family, desc, colors: COLORS, build: (b) => bakeBones(b, full), ...(companions ? { companions } : {}) };\n}\n", "/*\n * Head variants, authored for the app. Each is a small bake: a `Head` bone at the origin with the cranium centered\n * on it (as the Wolf's is), the snout toward +z, y up; a trunk comes as a jointed chain under the head. The kit's\n * head parts are fitted to a rig's head by the cranium (its largest stamp), so manes and snouts keep their size.\n */\nimport type { BakeBone, BakeDecal, BakeStamp, TemplateColor } from \"../bake-types.js\";\nimport { ball, cone, limb, onEllipsoid, sphere, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { BEAK, both, CORE, WHITE, corePart as headPart, FEATHERS, FUR, INNER, MANE, mark, NOSE, PALE, SCALES, SKIN, STRIPE, TUSK, variant } from \"./variant-authoring.js\";\n\nexport const eyes = (c: V3, s: V3, name: string, size: number, d: V3): BakeDecal[] =>\n ([1, -1] as const).map((side) => ({ bone: \"Head\", cat: \"eye\", name, size, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid(c, s, [d[0] * side, d[1], d[2]]) }));\nexport const mouth = (c: V3, s: V3, name: string, size: number, d: V3, tint?: TemplateColor): BakeDecal => ({ bone: \"Head\", cat: \"mouth\", name, size, ...(tint ? { tint } : {}), ...onEllipsoid(c, s, d) });\nexport const headVariant = (...args: Parameters<typeof variant> extends [unknown, ...infer R] ? R : never): PartVariant => variant(\"head\", ...args);\n\n// ---- mammals ----\n\nconst DOG_C: V3 = [0, 0.02, 0], DOG_S: V3 = [0.34, 0.32, 0.32];\nconst DOG = headVariant(\"dog\", \"Puppy head\", \"\uD83D\uDC36\", \"mammal\", \"A cute round puppy head: short muzzle, big eyes and a button nose.\", {\n parts: {\n Head: headPart([\n sphere(DOG_C, DOG_S),\n sphere([0, -0.06, 0.13], [0.22, 0.15, 0.17]), // short muzzle\n ...both((s) => sphere([0.08 * s, -0.07, 0.1], [0.13, 0.12, 0.12])), // cheeks\n mark([0, -0.08, 0.16], [0.2, 0.12, 0.16], PALE),\n ball([0, -0.02, 0.22], 0.06, NOSE),\n ]),\n },\n decals: [\n ...eyes(DOG_C, DOG_S, \"Cute\", 0.11, [0.42, 0.3, 0.86]),\n mouth([0, -0.06, 0.13], [0.22, 0.15, 0.17], \"Smile\", 0.08, [0, -0.75, 0.7], \"s:black\"),\n ],\n}, { ears: \"ears:floppy\" });\n\n/** A cat-family face: cranium, cheek ruffs, a broad muzzle and a pink nose. */\nconst BIGCAT_C: V3 = [0, 0.02, 0], BIGCAT_S: V3 = [0.34, 0.3, 0.32];\nconst bigCatFace = (): BakeStamp[] => [\n sphere(BIGCAT_C, BIGCAT_S),\n ...both((s) => sphere([0.12 * s, -0.05, 0.04], [0.16, 0.16, 0.16])),\n sphere([0, -0.06, 0.13], [0.2, 0.13, 0.15]),\n mark([0, -0.08, 0.15], [0.2, 0.1, 0.14], PALE),\n ...both((s) => mark([0.13 * s, -0.07, 0.07], [0.12, 0.1, 0.12], PALE)),\n ball([0, -0.02, 0.2], 0.06, INNER),\n];\nconst bigCatDecals = (): BakeDecal[] => [\n ...eyes(BIGCAT_C, BIGCAT_S, \"Cat Eye\", 0.09, [0.4, 0.3, 0.86]),\n mouth([0, -0.06, 0.13], [0.2, 0.13, 0.15], \"Cat Mouth\", 0.08, [0, -0.4, 1]),\n];\n\nconst TIGER = headVariant(\"tiger\", \"Tiger head\", \"\uD83D\uDC2F\", \"mammal\", \"A tiger: broad face with ruffed cheeks, a pink nose and black stripes.\", {\n parts: {\n Head: headPart([\n ...bigCatFace(),\n // forehead stripes and cheek stripes\n mark([0, 0.13, 0.06], [0.03, 0.1, 0.22], STRIPE),\n ...both((s) => mark([0.06 * s, 0.13, 0.05], [0.025, 0.08, 0.2], STRIPE, [0, 0, 0.35 * s])),\n ...both((s) => mark([0.17 * s, -0.02, 0.05], [0.12, 0.025, 0.06], STRIPE, [0, 0, 0.3 * s])),\n ...both((s) => mark([0.17 * s, -0.08, 0.04], [0.12, 0.025, 0.06], STRIPE, [0, 0, -0.2 * s])),\n ]),\n },\n decals: bigCatDecals(),\n}, { ears: \"ears:cat\" });\n\n/** A ring of mane tufts around the face, set back behind the cheeks. */\nconst mane = (): BakeStamp[] =>\n Array.from({ length: 12 }, (_, i) => {\n const a = (i / 12) * Math.PI * 2;\n return ball([0.21 * Math.cos(a), 0.01 + 0.21 * Math.sin(a), -0.11], 0.16, MANE);\n });\nconst LION = headVariant(\"lion\", \"Lion head\", \"\uD83E\uDD81\", \"mammal\", \"A lion: a big-cat face in a full round mane.\", {\n parts: { Head: headPart([...bigCatFace(), sphere([0, 0.01, -0.12], [0.48, 0.48, 0.16], MANE), ...mane()], FUR, 0.06) },\n decals: bigCatDecals(),\n}, { ears: \"ears:mouse\" });\n\n// elephant: a domed head, tusks, and a jointed trunk curling down and forward\nconst ELE_C: V3 = [0, 0.03, 0], ELE_S: V3 = [0.38, 0.38, 0.34];\nconst TRUNK: readonly V3[] = [[0, -0.04, 0.15], [0, -0.13, 0.24], [0, -0.26, 0.28], [0, -0.38, 0.26], [0, -0.46, 0.2]];\nconst ELEPHANT = headVariant(\"elephant\", \"Elephant head\", \"\uD83D\uDC18\", \"mammal\", \"An elephant: a domed head, ivory tusks and a jointed trunk that curls.\", {\n bones: TRUNK.slice(0, 4).map((p, i): BakeBone => [`Trunk ${i + 1}`, i ? `Trunk ${i}` : \"Head\", p, tagsOf(\"trunk\")]),\n parts: {\n Head: headPart([\n sphere(ELE_C, ELE_S),\n sphere([0, 0.1, 0.05], [0.3, 0.22, 0.26]), // forehead dome\n sphere([0, -0.05, 0.11], [0.2, 0.16, 0.14]), // trunk root\n ...both((s) => cone([0.07 * s, -0.08, 0.12], [0.11 * s, -0.17, 0.3], 0.05, TUSK, 0.01)),\n ], SKIN),\n \"Trunk 1\": headPart([limb(TRUNK[0]!, TRUNK[1]!, 0.12)], SKIN, 0.04),\n \"Trunk 2\": headPart([limb(TRUNK[1]!, TRUNK[2]!, 0.1)], SKIN, 0.04),\n \"Trunk 3\": headPart([limb(TRUNK[2]!, TRUNK[3]!, 0.085)], SKIN, 0.04),\n \"Trunk 4\": headPart([limb(TRUNK[3]!, TRUNK[4]!, 0.075), ball(TRUNK[4]!, 0.09)], SKIN, 0.04),\n },\n decals: [...eyes(ELE_C, ELE_S, \"Glossy Eye\", 0.07, [0.5, 0.05, 0.86]), mouth(ELE_C, ELE_S, \"Small\", 0.07, [0, -0.62, 0.8], \"s:black\")],\n}, { ears: \"ears:elephant\" });\n\nconst PIG_C: V3 = [0, 0.02, 0], PIG_S: V3 = [0.34, 0.3, 0.32];\nconst PIG = headVariant(\"pig\", \"Pig head\", \"\uD83D\uDC37\", \"mammal\", \"A pig: a round head with a flat pink snout and two nostrils.\", {\n parts: {\n Head: headPart([\n sphere(PIG_C, PIG_S),\n ...both((s) => sphere([0.1 * s, -0.06, 0.06], [0.14, 0.13, 0.14])),\n limb([0, -0.04, 0.12], [0, -0.04, 0.19], 0.15), // the snout\n mark([0, -0.04, 0.25], [0.14, 0.12, 0.04], INNER),\n ...both((s) => mark([0.03 * s, -0.04, 0.265], [0.025, 0.04, 0.03], NOSE)),\n ], SKIN),\n },\n decals: [...eyes(PIG_C, PIG_S, \"Round\", 0.07, [0.38, 0.35, 0.86]), mouth([0, -0.05, 0.1], [0.24, 0.16, 0.2], \"Smile\", 0.09, [0, -0.6, 0.8], \"s:black\")],\n}, { ears: \"ears:pig\" });\n\nconst COW_C: V3 = [0, 0.04, 0], COW_S: V3 = [0.32, 0.3, 0.3];\nconst COW = headVariant(\"cow\", \"Cow head\", \"\uD83D\uDC2E\", \"mammal\", \"A cow: a long pale muzzle with nostrils, and a dark patch.\", {\n parts: {\n Head: headPart([\n sphere(COW_C, COW_S),\n sphere([0, -0.07, 0.14], [0.26, 0.2, 0.24]),\n mark([0, -0.09, 0.2], [0.27, 0.18, 0.16], INNER),\n ...both((s) => mark([0.05 * s, -0.06, 0.255], [0.035, 0.05, 0.03], NOSE)),\n mark([0.1, 0.1, 0.06], [0.14, 0.12, 0.2], STRIPE), // a patch over one eye\n ], SKIN),\n },\n decals: [...eyes(COW_C, COW_S, \"Glossy Eye\", 0.08, [0.48, 0.25, 0.84]), mouth([0, -0.07, 0.14], [0.26, 0.2, 0.24], \"Smile\", 0.1, [0, -0.6, 0.8], \"s:black\")],\n}, { ears: \"ears:floppy\" });\n\nconst HORSE_C: V3 = [0, 0.04, -0.02], HORSE_S: V3 = [0.26, 0.28, 0.28];\nconst HORSE = headVariant(\"horse\", \"Horse head\", \"\uD83D\uDC34\", \"mammal\", \"A horse: a long face with a soft muzzle, nostrils and a forelock.\", {\n parts: {\n Head: headPart([\n sphere(HORSE_C, HORSE_S),\n limb([0, 0.0, 0.04], [0, -0.1, 0.28], 0.2), // the long face\n sphere([0, -0.12, 0.32], [0.22, 0.18, 0.18]), // muzzle\n mark([0, -0.13, 0.36], [0.23, 0.16, 0.14], PALE),\n ...both((s) => mark([0.05 * s, -0.1, 0.405], [0.03, 0.045, 0.03], NOSE)),\n cone([0, 0.12, 0.02], [0, 0.16, 0.17], 0.09, MANE, 0.02), // forelock\n ]),\n },\n decals: [...eyes(HORSE_C, HORSE_S, \"Glossy Eye\", 0.08, [0.6, 0.25, 0.6]), mouth([0, -0.12, 0.32], [0.22, 0.18, 0.18], \"Smile\", 0.08, [0, -0.7, 0.7], \"s:black\")],\n}, { ears: \"ears:cat\" });\n\nconst BEAR_C: V3 = [0, 0.02, 0], BEAR_S: V3 = [0.34, 0.3, 0.3];\nconst bearFace = (patches: boolean): BakeStamp[] => {\n const fur = patches ? WHITE : CORE;\n return [\n sphere(BEAR_C, BEAR_S, fur),\n ...both((s) => sphere([0.1 * s, -0.05, 0.04], [0.16, 0.15, 0.15], fur)),\n sphere([0, -0.06, 0.13], [0.17, 0.13, 0.14], fur),\n mark([0, -0.06, 0.17], [0.17, 0.13, 0.1], patches ? WHITE : PALE),\n ball([0, -0.03, 0.2], 0.06, NOSE),\n ...(patches ? both((s) => mark([0.075 * s, 0.03, 0.13], [0.09, 0.11, 0.08], STRIPE, [0, 0, -0.5 * s])) : []),\n ];\n};\nconst BEAR = headVariant(\"bear\", \"Bear head\", \"\uD83D\uDC3B\", \"mammal\", \"A bear: a round head with a short pale muzzle and a black nose.\", {\n parts: { Head: headPart(bearFace(false)) },\n decals: [...eyes(BEAR_C, BEAR_S, \"Dot\", 0.07, [0.36, 0.3, 0.88]), mouth([0, -0.06, 0.13], [0.17, 0.13, 0.14], \"Cat Mouth\", 0.08, [0, -0.45, 1])],\n}, { ears: \"ears:mouse\" });\n\nconst PANDA = headVariant(\"panda\", \"Panda head\", \"\uD83D\uDC3C\", \"mammal\", \"A panda: a white round head with black eye patches.\", {\n parts: { Head: { ...headPart(bearFace(true)), color: WHITE, sd: { ...headPart([]).sd, foundationColor: WHITE } } },\n decals: [...eyes(BEAR_C, BEAR_S, \"Round\", 0.06, [0.36, 0.3, 0.88]), mouth([0, -0.06, 0.13], [0.17, 0.13, 0.14], \"Cat Mouth\", 0.08, [0, -0.45, 1])],\n}, { ears: \"ears:mouse\" });\n\n// ---- reptiles ----\n\nconst FROG_C: V3 = [0, 0, 0.02], FROG_S: V3 = [0.42, 0.22, 0.34];\nconst FROG = headVariant(\"frog\", \"Frog head\", \"\uD83D\uDC38\", \"reptile\", \"A frog: a wide flat head with bulging eyes on top and a big grin.\", {\n parts: {\n Head: headPart([\n sphere(FROG_C, FROG_S),\n ...both((s) => ball([0.11 * s, 0.09, 0.06], 0.14)), // the eye bulges\n mark([0, -0.08, 0.06], [0.4, 0.1, 0.3], PALE),\n ], SKIN, 0.06),\n },\n decals: [\n ...([1, -1] as const).map((side): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Round\", size: 0.09, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid([0.11 * side, 0.09, 0.06], [0.14, 0.14, 0.14], [0.3 * side, 0.4, 0.86]) })),\n mouth(FROG_C, FROG_S, \"Grin\", 0.26, [0, -0.2, 1], \"s:black\"),\n ],\n});\n\nconst CROC_C: V3 = [0, 0.02, -0.02], CROC_S: V3 = [0.3, 0.2, 0.28];\nconst CROC = headVariant(\"crocodile\", \"Crocodile head\", \"\uD83D\uDC0A\", \"reptile\", \"A crocodile: a long flat snout lined with teeth, eye bumps and nostril bumps.\", {\n parts: {\n Head: headPart([\n sphere(CROC_C, CROC_S),\n sphere([0, -0.02, 0.26], [0.22, 0.12, 0.46]), // the snout\n ...both((s) => ball([0.07 * s, 0.09, 0.03], 0.09)), // eye bumps\n ...both((s) => ball([0.04 * s, 0.03, 0.46], 0.05)), // nostril bumps\n ...[0.12, 0.22, 0.32, 0.42].flatMap((z) => both((s) => cone([0.09 * s * (1.05 - z * 0.6), -0.05, z], [0.095 * s * (1.05 - z * 0.6), -0.1, z], 0.035, TUSK, 0.005))),\n ], SCALES, 0.05),\n },\n decals: [\n ...([1, -1] as const).map((side): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dragon Eye\", size: 0.06, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid([0.07 * side, 0.09, 0.03], [0.09, 0.09, 0.09], [0.5 * side, 0.4, 0.75]) })),\n mouth([0, -0.02, 0.26], [0.22, 0.12, 0.46], \"Snake Mouth\", 0.14, [0, -0.15, 1]),\n ],\n});\n\n// ---- birds ----\n\nconst OWL_C: V3 = [0, 0.02, 0], OWL_S: V3 = [0.36, 0.34, 0.32];\nconst OWL = headVariant(\"owl\", \"Owl head\", \"\uD83E\uDD89\", \"bird\", \"An owl: a round feathered head, pale facial discs, ear tufts and a small hooked beak.\", {\n parts: {\n Head: headPart([\n sphere(OWL_C, OWL_S),\n ...both((s) => mark([0.075 * s, 0.03, 0.13], [0.15, 0.17, 0.08], PALE)),\n ...both((s) => cone([0.11 * s, 0.13, 0.0], [0.15 * s, 0.24, -0.03], 0.08, CORE, 0.02)),\n cone([0, -0.01, 0.14], [0, -0.07, 0.2], 0.06, BEAK, 0.008),\n ], FEATHERS),\n },\n decals: eyes(OWL_C, OWL_S, \"Round\", 0.1, [0.28, 0.12, 0.95]),\n});\n\n/** Head variants (the slot's parts: the head's shapes and face; a trunk comes as a jointed chain). */\nexport const HEAD_VARIANTS: readonly PartVariant[] = [DOG, TIGER, LION, ELEPHANT, PIG, COW, HORSE, BEAR, PANDA, FROG, CROC, OWL];\n", "/*\n * Aquatic variants, authored for the app: fin sets (the Fish's fin names, so each fin lands on its counterpart),\n * tentacle sets (the Octopus's arm names) and sea-creature heads (cranium on the `Head` bone, as other head variants).\n */\nimport type { BakeBone, BakeDecal, BakeLook, BakePart, BakeStamp } from \"../bake-types.js\";\nimport { ball, cone, eulerUp, len3, limb, mid3, pair, sphere, sub3, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport { eyes, headVariant, mouth } from \"./head-variants.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { CORE, corePart, mark, NEON, PALE, SKIN, SPOT, TUSK, variant } from \"./variant-authoring.js\";\n\nconst FIN = \"@fin\";\nconst FIN_LOOK: BakeLook = { ...SKIN, foundationColor: FIN, opacity: 0.85, roughness: 0.3 };\n\n/** A flat fin lobe from a to b: an ellipsoid thin across x, `w` wide. */\nconst lobe = (a: V3, b: V3, w: number, thick = 0.06): BakeStamp => [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thick, len3(sub3(b, a)) * 1.15, w], FIN];\n/** A flat triangular fin from its base at a to its point at b. */\nconst sail = (a: V3, b: V3, w: number, thick = 0.06): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [thick, len3(sub3(b, a)), w], FIN, { blend: 0.02 }];\n/** A fan of spines from a, toward each of `tips`, with webbing between them. */\nconst spines = (a: V3, tips: readonly V3[], d = 0.035): BakeStamp[] => tips.map((t) => cone(a, t, d, FIN, 0.008));\n\n// ---- fins: on a reference fish body (the Fish's skeleton) ----\n\nexport const FISH = {\n head: [0, 0.02, 0.4] as V3, spine: [[0, 0.02, 0.22], [0, 0.02, 0.02], [0, 0.01, -0.16], [0, 0, -0.3], [0, 0, -0.42]] as V3[],\n pecBase: [0.17, -0.08, 0.2] as V3,\n};\nexport const TAIL_BASE = FISH.spine[4]!;\nexport const finBones = (tailUp: V3, tailDown: V3, dorsal: V3, pecTip: V3, pelvic: V3): BakeBone[] => [\n ...FISH.spine.map((p, i): BakeBone => [`Spine ${i + 1}`, i ? `Spine ${i}` : \"Head\", p, tagsOf(\"core\")]),\n [\"Tail Fin Upper\", \"Spine 5\", tailUp, tagsOf(\"fin\")],\n [\"Tail Fin Lower\", \"Spine 5\", tailDown, tagsOf(\"fin\")],\n [\"Dorsal Fin\", \"Spine 2\", dorsal, tagsOf(\"fin\")],\n ...pair(\"fin\", \"Spine 1\", [[\"Pectoral Fin Base\", FISH.pecBase], [\"Pectoral Fin Tip\", pecTip]]),\n ...pair(\"fin\", \"Spine 2\", [[\"Pelvic Fin\", pelvic]]),\n];\nconst BODY: { [bone: string]: BakePart } = {\n Head: corePart([sphere([0, 0.02, 0.3], [0.32, 0.5, 0.42])], SKIN),\n \"Spine 1\": corePart([sphere([0, 0.02, 0.04], [0.36, 0.6, 0.6])], SKIN),\n};\nconst finPart = (stamps: readonly BakeStamp[]): BakePart => corePart(stamps, FIN_LOOK, 0.03);\nexport const finVariant = (id: string, name: string, icon: string, desc: string, bones: readonly BakeBone[], parts: { readonly [bone: string]: BakePart | null }, family: PartVariant[\"family\"] = \"aquatic\"): PartVariant =>\n variant(\"fins\", id, name, icon, family, desc, { root: [\"Head\", null, FISH.head, tagsOf(\"head\")], bones, parts: { ...BODY, ...parts }, decals: [] });\n\nconst VEIL = finVariant(\"veil\", \"Veil fins\", \"\uD83D\uDC20\", \"Fancy goldfish fins: a long flowing double tail, a tall dorsal and trailing pectorals.\",\n finBones([0, 0.25, -1.2], [0, -0.5, -1.12], [0, 0.62, -0.1], [0.42, -0.36, -0.14], [0.1, -0.5, -0.06]), {\n \"Tail Fin Upper\": finPart([lobe(TAIL_BASE, [0, 0.25, -1.2], 0.5, 0.05), lobe(TAIL_BASE, [0.08, 0.05, -1.25], 0.4, 0.04)]),\n \"Tail Fin Lower\": finPart([lobe(TAIL_BASE, [0, -0.5, -1.12], 0.5, 0.05), lobe(TAIL_BASE, [-0.08, -0.25, -1.2], 0.4, 0.04)]),\n \"Dorsal Fin\": finPart([sail([0, 0.24, 0.2], [0, 0.62, -0.1], 0.6, 0.05)]),\n \"Pectoral Fin Base L\": finPart([lobe(FISH.pecBase, [0.42, -0.36, -0.14], 0.24, 0.04)]),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": finPart([lobe([0.06, -0.22, 0.04], [0.1, -0.5, -0.06], 0.16, 0.04)]),\n });\n\nconst SAILFIN = finVariant(\"sail\", \"Sail fins\", \"\uD83D\uDC1F\", \"A huge sail of a dorsal fin, long trailing belly fins and a slim forked tail.\",\n finBones([0, 0.42, -0.86], [0, -0.42, -0.86], [0, 0.95, -0.3], [0.3, -0.2, 0.0], [0.08, -0.8, -0.2]), {\n \"Tail Fin Upper\": finPart([lobe(TAIL_BASE, [0, 0.42, -0.86], 0.18)]),\n \"Tail Fin Lower\": finPart([lobe(TAIL_BASE, [0, -0.42, -0.86], 0.18)]),\n \"Dorsal Fin\": finPart([[\"sphere\", \"add\", [0, 0.55, -0.12], [0.2, 0, 0], [0.05, 0.8, 0.9], FIN], mark([0, 0.62, -0.12], [0.07, 0.04, 0.8], PALE)]),\n \"Pectoral Fin Base L\": finPart([lobe(FISH.pecBase, [0.3, -0.2, 0.0], 0.14)]),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": finPart([sail([0.05, -0.22, 0.02], [0.08, -0.8, -0.2], 0.12, 0.04)]),\n });\n\nconst LION_TIPS = (base: V3, out: V3, n: number, spread: number): V3[] =>\n Array.from({ length: n }, (_, i) => { const t = (i / (n - 1) - 0.5) * spread; return [out[0], out[1] + t * 0.6, out[2] + t] as V3; }).map((p) => [base[0] + p[0], base[1] + p[1], base[2] + p[2]]);\nconst SPINY = finVariant(\"spiny\", \"Spiny fins\", \"\uD83E\uDD82\", \"Lionfish fins: fans of long venomous spines with striped webbing.\",\n finBones([0, 0.38, -0.82], [0, -0.38, -0.82], [0, 0.75, -0.1], [0.55, -0.3, -0.1], [0.1, -0.5, 0]), {\n \"Tail Fin Upper\": finPart([lobe(TAIL_BASE, [0, 0.38, -0.82], 0.26)]),\n \"Tail Fin Lower\": finPart([lobe(TAIL_BASE, [0, -0.38, -0.82], 0.26)]),\n \"Dorsal Fin\": finPart([...spines([0, 0.2, 0.05], LION_TIPS([0, 0.2, 0.05], [0, 0.5, -0.1], 6, 0.7)), sail([0, 0.22, 0.04], [0, 0.55, -0.1], 0.6, 0.045)]),\n \"Pectoral Fin Base L\": finPart([...spines(FISH.pecBase, LION_TIPS(FISH.pecBase, [0.38, -0.18, -0.25], 5, 0.5)), lobe(FISH.pecBase, [0.5, -0.3, -0.2], 0.4, 0.045)]),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": finPart([...spines([0.06, -0.2, 0.04], LION_TIPS([0.06, -0.2, 0.04], [0.04, -0.3, -0.06], 3, 0.2))]),\n });\n\n// ---- tentacles: on a reference mantle (the Octopus's arm names) ----\n\n/** Arm k's joints, as the Octopus's: out and down from under the mantle, curling in at the end. */\nconst armJoints = (k: number, reach = 1, droop = 1): V3[] => {\n const a = ((k - 1) * Math.PI) / 4;\n return [[0.27, -0.05], [0.55, -0.33], [0.85, -0.61], [0.8, -0.95]].map(([r, y]) => [r! * reach * Math.sin(a), y! * droop, r! * reach * Math.cos(a)] as V3);\n};\nconst armSide = (k: number): string[] => {\n const x = Math.sin(((k - 1) * Math.PI) / 4);\n return x > 0.01 ? [\"side:L\"] : x < -0.01 ? [\"side:R\"] : [];\n};\nconst ARMS = [1, 2, 3, 4, 5, 6, 7, 8];\nexport const tentacleVariant = (id: string, name: string, icon: string, desc: string, segment: (k: number, j: number, a: V3, b: V3) => readonly BakeStamp[], look: BakeLook = SKIN, reach = 1, droop = 1, family: PartVariant[\"family\"] = \"aquatic\"): PartVariant => {\n const bones: BakeBone[] = ARMS.flatMap((k) => armJoints(k, reach, droop).map((p, j): BakeBone => [`Arm ${k} Seg ${j + 1}`, j ? `Arm ${k} Seg ${j}` : \"Mantle\", p, [...armSide(k), ...tagsOf(\"tentacle\")]]));\n const parts: { [bone: string]: BakePart } = { Mantle: corePart([sphere([0, 0.3, 0], [0.6, 0.7, 0.6])], SKIN) };\n for (const k of ARMS) {\n const J = armJoints(k, reach, droop), end: V3 = [J[3]![0] * 0.85, J[3]![1] - 0.25, J[3]![2] * 0.85];\n const pts = [...J, end];\n for (let j = 0; j < 4; j++) parts[`Arm ${k} Seg ${j + 1}`] = corePart(segment(k, j, pts[j]!, pts[j + 1]!), look, 0.05);\n }\n return variant(\"tentacles\", id, name, icon, family, desc, { root: [\"Mantle\", null, [0, 0.3, 0], tagsOf(\"core\")], bones, parts, decals: [] });\n};\nconst lerp3 = (a: V3, b: V3, t: number): V3 => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];\n\nconst SQUID = tentacleVariant(\"squid\", \"Squid arms\", \"\uD83E\uDD91\", \"Straight, thick squid arms lined with pale suckers, ending in flattened clubs.\",\n (_k, j, a, b) => [\n limb(a, b, 0.16 - j * 0.025),\n ...[0.3, 0.7].map((t): BakeStamp => mark(lerp3(a, b, t), [0.05, 0.05, 0.05], SPOT)),\n ...(j === 3 ? [[\"sphere\", \"add\", b, eulerUp(sub3(b, a)), [0.16, 0.24, 0.06], CORE] as BakeStamp] : []),\n ], SKIN, 0.85, 1.15);\n\nconst CURLY = tentacleVariant(\"curly\", \"Curly tentacles\", \"\uD83D\uDC19\", \"Fat tapering tentacles whose tips coil up into spirals.\",\n (_k, j, a, b) => j < 3 ? [limb(a, b, 0.2 - j * 0.045)] : [\n limb(a, b, 0.07),\n // the coil: a ring of small balls at the tip\n ...Array.from({ length: 6 }, (_, i): BakeStamp => { const t = (i / 6) * Math.PI * 2; return ball([b[0] + 0.07 * Math.cos(t), b[1] + 0.07 * Math.sin(t), b[2]], 0.06 - i * 0.006); }),\n ]);\n\nconst RIBBON = tentacleVariant(\"ribbon\", \"Ribbon tentacles\", \"\uD83E\uDEBC\", \"Long see-through ribbons that wave and trail.\",\n (_k, j, a, b) => {\n // each segment twisted the other way, so the ribbon waves\n const e = eulerUp(sub3(b, a));\n return [[\"sphere\", \"add\", mid3(a, b), [e[0], e[1], e[2] + 0.6 * (j % 2 ? 1 : -1)], [0.14 - j * 0.02, len3(sub3(b, a)) * 1.2, 0.05], CORE]];\n },\n { ...SKIN, opacity: 0.7, glow: 0.3, roughness: 0.15 }, 0.75, 1.3);\n\n// ---- heads ----\n\nconst ANG_C: V3 = [0, 0.04, 0], ANG_S: V3 = [0.42, 0.34, 0.38];\nconst LURE: readonly V3[] = [[0, 0.16, 0.06], [0, 0.32, 0.12], [0, 0.38, 0.28], [0, 0.3, 0.38]];\nconst ANGLER = headVariant(\"angler\", \"Anglerfish head\", \"\uD83C\uDFA3\", \"aquatic\", \"A huge-jawed anglerfish head with needle fangs and a glowing lure on a jointed rod.\", {\n bones: LURE.slice(0, 3).map((p, i): BakeBone => [`Lure ${i + 1}`, i ? `Lure ${i}` : \"Head\", p, tagsOf(\"lure\")]),\n parts: {\n Head: corePart([\n sphere(ANG_C, ANG_S),\n sphere([0, -0.1, 0.1], [0.44, 0.2, 0.4]), // the underbite jaw\n ...[-0.12, -0.04, 0.04, 0.12].map((x): BakeStamp => cone([x, -0.04, 0.27], [x * 1.1, 0.06, 0.3], 0.03, TUSK, 0.004)),\n ...[-0.15, -0.05, 0.05, 0.15].map((x): BakeStamp => cone([x, 0.03, 0.24], [x, -0.07, 0.26], 0.025, TUSK, 0.004)),\n ], SKIN, 0.06),\n \"Lure 1\": corePart([limb(LURE[0]!, LURE[1]!, 0.025)], SKIN, 0.02),\n \"Lure 2\": corePart([limb(LURE[1]!, LURE[2]!, 0.022)], SKIN, 0.02),\n \"Lure 3\": { ...corePart([limb(LURE[2]!, LURE[3]!, 0.02), ball(LURE[3]!, 0.08, NEON)], { ...SKIN, glow: 1.5 }, 0.02), color: NEON },\n },\n decals: eyes(ANG_C, ANG_S, \"Dot\", 0.06, [0.5, 0.45, 0.7]),\n});\n\nconst HAMMER = headVariant(\"hammerhead\", \"Hammerhead\", \"\uD83E\uDD88\", \"aquatic\", \"A shark head flattened into a wide hammer, with an eye at each end.\", {\n parts: { Head: corePart([sphere([0, 0, -0.02], [0.3, 0.26, 0.3]), sphere([0, 0.02, 0.12], [0.86, 0.12, 0.22]), sphere([0, -0.04, 0.06], [0.24, 0.16, 0.3])], SKIN) },\n decals: [\n ...([1, -1] as const).map((side): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Dot\", size: 0.07, ...(side < 0 ? { flip: true } : {}), ...{ p: [0.43 * side, 0.02, 0.12] as V3, q: [0, Math.sin((side * Math.PI) / 4), 0, Math.cos((side * Math.PI) / 4)] as const } })),\n mouth([0, -0.04, 0.06], [0.24, 0.16, 0.3], \"Fangs\", 0.12, [0, -0.6, 0.8], \"s:black\"),\n ],\n});\n\nconst SWORD_C: V3 = [0, 0.02, 0], SWORD_S: V3 = [0.3, 0.32, 0.36];\nconst SWORDFISH = headVariant(\"swordfish\", \"Swordfish head\", \"\uD83D\uDDE1\uFE0F\", \"aquatic\", \"A sleek head with a long flat bill like a sword.\", {\n parts: { Head: corePart([sphere(SWORD_C, SWORD_S), [\"cone\", \"add\", [0, -0.01, 0.48], eulerUp([0, 0, 1]), [0.07, 0.62, 0.03], CORE, { blend: 0.02 }]], SKIN) },\n decals: [...eyes(SWORD_C, SWORD_S, \"Glossy Eye\", 0.09, [0.55, 0.25, 0.75]), mouth(SWORD_C, SWORD_S, \"Flat\", 0.1, [0, -0.35, 0.95], \"s:black\")],\n});\n\nconst PUFF_C: V3 = [0, 0.02, 0], PUFF_S: V3 = [0.44, 0.42, 0.42];\nconst PUFFER = headVariant(\"puffer\", \"Pufferfish head\", \"\uD83D\uDC21\", \"aquatic\", \"A round puffed-up head covered in little spines, with big eyes and a tiny mouth.\", {\n parts: {\n Head: corePart([\n sphere(PUFF_C, PUFF_S),\n // spines spread evenly over the head (a golden spiral), leaving the face clear\n ...Array.from({ length: 22 }, (_, i): BakeStamp[] => {\n const y = 1 - (2 * (i + 0.5)) / 22, r = Math.sqrt(1 - y * y), t = i * 2.4;\n const n: V3 = [r * Math.cos(t), y, r * Math.sin(t)];\n if (n[2] > 0.55 && Math.abs(n[1]) < 0.55) return [];\n return [cone([n[0] * 0.2, n[1] * 0.2 + 0.02, n[2] * 0.2], [n[0] * 0.3, n[1] * 0.3 + 0.02, n[2] * 0.3], 0.04, PALE, 0.006)];\n }).flat(),\n ], SKIN, 0.05),\n },\n decals: [...eyes(PUFF_C, PUFF_S, \"Round\", 0.12, [0.4, 0.25, 0.88]), mouth(PUFF_C, PUFF_S, \"Open\", 0.06, [0, -0.25, 1], \"s:black\")],\n});\n\n/** Aquatic variants: fins, tentacles and sea heads. */\nexport const AQUATIC_VARIANTS: readonly PartVariant[] = [VEIL, SAILFIN, SPINY, SQUID, CURLY, RIBBON, ANGLER, HAMMER, SWORDFISH, PUFFER];\n", "/*\n * Coat variants, authored for the app: a fleck and a pattern on a reference torso. A coat swap copies the fleck,\n * pattern and material onto every skin part of the rig; the rig keeps its colors (the pattern's colors are palette\n * roles: black marks over the scene's body color).\n */\nimport type { BakeLook } from \"../bake-types.js\";\nimport { sphere } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { corePart, FUR, HIPS_BONE, SKIN, variant } from \"./variant-authoring.js\";\n\n/** A patterned look: the pattern (by its index in the catalog), its scale, strength and colors. */\nexport const patterned = (base: BakeLook, kind: number, scale: number, rot: readonly [number, number, number] = [0, 0, 0], strength = 1, color = \"@stripe\"): BakeLook => ({\n ...base, patternType: kind, patternScale: scale, patternStrength: strength, patternColor: color, patternColor2: color,\n patternRotX: rot[0], patternRotY: rot[1], patternRotZ: rot[2],\n});\n\nexport const coatVariant = (id: string, name: string, icon: string, desc: string, look: BakeLook, family: PartVariant[\"family\"] = \"mammal\"): PartVariant =>\n variant(\"coat\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n parts: { Hips: corePart([sphere([0, 0, 0], [0.4, 0.36, 0.6])], look, 0.1) },\n decals: [],\n });\n\n// pattern kinds: 1 stripes, 2 tiger, 3 leopard, 4 cow, 6 dots\nconst TIGER = coatVariant(\"tiger\", \"Tiger stripes\", \"\uD83D\uDC2F\", \"Bold black tiger stripes over the fur.\", patterned(FUR, 2, 1.2));\nconst LEOPARD = coatVariant(\"leopard\", \"Leopard spots\", \"\uD83D\uDC06\", \"Leopard rosettes scattered over the fur.\", patterned(FUR, 3, 1.4));\nconst ZEBRA = coatVariant(\"zebra\", \"Zebra stripes\", \"\uD83E\uDD93\", \"Narrow, even zebra stripes wrapping around the body, on short fur.\", patterned({ ...FUR, size: 0.2, coverage: 0.6 }, 1, 2.4, [90, 0, 0]));\nconst COW = coatVariant(\"cow\", \"Cow patches\", \"\uD83D\uDC2E\", \"Big irregular black patches on smooth hide.\", patterned(SKIN, 4, 1.6));\nconst DALMATIAN = coatVariant(\"dalmatian\", \"Dalmatian spots\", \"\uD83D\uDC36\", \"Small round black spots on short fur.\", patterned({ ...FUR, size: 0.2, coverage: 0.6 }, 6, 1.8));\n\n/** Coat variants: a fleck and a pattern for a rig's skin. */\nexport const COAT_VARIANTS: readonly PartVariant[] = [TIGER, LEOPARD, ZEBRA, COW, DALMATIAN];\n", "/*\n * Ear variants, authored for the app: jointed ear chains (side L; side R mirrors) on a reference head the size of\n * the Wolf's skull, centered on the `Head` bone. Only the ears are given: they're seated on a rig's head where they\n * sit on this one, at the same direction and depth, scaled by the heads' craniums.\n */\nimport type { BakeBone, BakePart, BakeStamp, TemplateColor } from \"../bake-types.js\";\nimport { eulerUp, len3, mid3, pair, sphere, sub3, type V3 } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { CORE, corePart, FUR, INNER, mark, SKIN, variant } from \"./variant-authoring.js\";\n\n/** The reference head the ears sit on (not given to rigs). */\nconst HEAD: BakePart = corePart([sphere([0, 0, 0], [0.3, 0.28, 0.3])], FUR);\n\nconst bones = (joints: readonly (readonly [string, V3])[]): BakeBone[] => pair(\"ear\", \"Head\", joints);\n\n/** A pointed flat ear from a to b: wide sideways, thin front to back. */\nconst pointed = (a: V3, b: V3, w: number, thick = 0.05, color: TemplateColor = CORE): BakeStamp => [\"cone\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [w, len3(sub3(b, a)), thick], color, { blend: 0.02 }];\n/** A flat flap hanging at the side of the head: thin across x, `l` long, `w` wide, tilted out by `tilt` about z. */\nconst flap = (c: V3, l: number, w: number, tilt: number, thick = 0.045): BakeStamp => [\"sphere\", \"add\", c, [0, 0, tilt], [thick, l, w], CORE];\n\nexport const earVariant = (id: string, name: string, icon: string, desc: string, joints: readonly (readonly [string, V3])[], parts: { readonly [bone: string]: BakePart | null }, family: PartVariant[\"family\"] = \"mammal\"): PartVariant =>\n variant(\"ears\", id, name, icon, family, desc, { bones: bones(joints), parts: { Head: HEAD, ...parts }, decals: [] });\n\nconst ELEPHANT = earVariant(\"elephant\", \"Elephant ears\", \"\uD83D\uDC18\", \"Huge flat ears hanging at the sides; the lower lobe flaps.\",\n [[\"Ear Base\", [0.15, 0.04, -0.02]], [\"Ear Mid\", [0.22, -0.08, -0.06]], [\"Ear Tip\", [0.24, -0.26, -0.06]]], {\n \"Ear Base L\": corePart([flap([0.22, -0.04, -0.07], 0.34, 0.36, 0.2), mark([0.205, -0.04, -0.07], [0.04, 0.26, 0.28], INNER)], SKIN, 0.03),\n \"Ear Mid L\": corePart([flap([0.24, -0.18, -0.07], 0.24, 0.3, 0.1)], SKIN, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst FLOPPY = earVariant(\"floppy\", \"Floppy ears\", \"\uD83D\uDC36\", \"Soft dog ears folding over and hanging down beside the cheeks.\",\n [[\"Ear Base\", [0.11, 0.1, -0.01]], [\"Ear Mid\", [0.18, 0.07, 0.0]], [\"Ear Tip\", [0.2, -0.13, 0.02]]], {\n \"Ear Base L\": corePart([sphere([0.15, 0.09, 0.0], [0.09, 0.07, 0.12])], FUR, 0.03),\n \"Ear Mid L\": corePart([flap([0.195, -0.03, 0.01], 0.24, 0.14, 0.12)], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst PIG = earVariant(\"pig\", \"Pig ears\", \"\uD83D\uDC37\", \"Triangular ears flopping forward over the eyes.\",\n [[\"Ear Base\", [0.1, 0.12, 0.0]], [\"Ear Tip\", [0.21, 0.2, 0.09]]], {\n \"Ear Base L\": corePart([pointed([0.1, 0.12, 0.0], [0.21, 0.2, 0.09], 0.15, 0.035), mark([0.15, 0.17, 0.05], [0.08, 0.03, 0.08], INNER)], SKIN, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst BAT = earVariant(\"bat\", \"Bat ears\", \"\uD83E\uDD87\", \"Huge pointed ears standing straight up, pink inside.\",\n [[\"Ear Base\", [0.09, 0.12, -0.01]], [\"Ear Tip\", [0.17, 0.42, -0.05]]], {\n \"Ear Base L\": corePart([pointed([0.09, 0.12, -0.01], [0.17, 0.42, -0.05], 0.2), mark([0.13, 0.24, 0.0], [0.09, 0.18, 0.04], INNER)], SKIN, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst MOUSE = earVariant(\"mouse\", \"Round ears\", \"\uD83D\uDC2D\", \"Big round ears like a mouse's or a bear's, pink inside.\",\n [[\"Ear Base\", [0.09, 0.12, 0.0]], [\"Ear Tip\", [0.15, 0.22, 0.0]]], {\n // the disc's lower edge sits on the root, so it grows out of the head\n \"Ear Base L\": corePart([\n sphere([0.1, 0.13, 0.0], [0.08, 0.08, 0.06]),\n [\"sphere\", \"add\", [0.135, 0.19, 0.0], [0, 0, -0.5], [0.18, 0.18, 0.05], CORE],\n mark([0.135, 0.19, 0.02], [0.12, 0.12, 0.03], INNER, [0, 0, -0.5]),\n ], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst LOP = earVariant(\"lop\", \"Lop ears\", \"\uD83D\uDC30\", \"Long bunny ears lopping down at the sides.\",\n [[\"Ear Base\", [0.08, 0.13, -0.02]], [\"Ear Mid\", [0.18, 0.17, -0.05]], [\"Ear Tip\", [0.25, -0.2, -0.03]]], {\n \"Ear Base L\": corePart([sphere([0.13, 0.15, -0.035], [0.11, 0.09, 0.11])], FUR, 0.03),\n \"Ear Mid L\": corePart([flap([0.225, -0.02, -0.04], 0.42, 0.15, 0.18, 0.05), mark([0.21, -0.02, -0.04], [0.04, 0.32, 0.1], INNER, [0, 0, 0.18])], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst CAT = earVariant(\"cat\", \"Cat ears\", \"\uD83D\uDC31\", \"Pointed triangular ears, pink inside.\",\n [[\"Ear Base\", [0.1, 0.11, 0.02]], [\"Ear Tip\", [0.15, 0.28, 0.0]]], {\n \"Ear Base L\": corePart([pointed([0.1, 0.11, 0.02], [0.15, 0.28, 0.0], 0.15), mark([0.12, 0.18, 0.03], [0.07, 0.1, 0.03], INNER)], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\n/** Ear variants: jointed ear chains on a reference head (the head itself isn't given). */\nexport const EAR_VARIANTS: readonly PartVariant[] = [ELEPHANT, FLOPPY, PIG, BAT, MOUSE, LOP, CAT];\n", "/*\n * Horn variants, authored for the app: jointed horn chains (side L; side R mirrors) on a reference head the size of\n * the Wolf's skull, centered on the `Head` bone. Only the horns are given. On a rig with its own horns they're seated\n * on its head where they sit on this one; on a rig without, they're grafted (Parts \u00B7 Add horns, or the generator).\n */\nimport type { BakeBone, BakePart, BakeStamp, TemplateColor } from \"../bake-types.js\";\nimport { cone, limb, pair, sphere, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { corePart, FUR, HORN, HORNY, mark, PALE, variant } from \"./variant-authoring.js\";\n\n/** The reference head the horns sit on (not given to rigs). */\nconst HEAD: BakePart = corePart([sphere([0, 0, 0], [0.3, 0.28, 0.3])], FUR);\n\nconst horn = (stamps: readonly BakeStamp[]): BakePart => corePart(stamps, HORNY, 0.025);\nconst segment = (a: V3, b: V3, d: number, color: TemplateColor = HORN): BakeStamp => limb(a, b, d, color);\n\nexport const hornVariant = (id: string, name: string, icon: string, desc: string, bones: readonly BakeBone[], parts: { readonly [bone: string]: BakePart | null }, head: BakePart = HEAD, family: PartVariant[\"family\"] = \"mammal\"): PartVariant =>\n variant(\"horns\", id, name, icon, family, desc, { bones, parts: { Head: head, ...parts }, decals: [] });\n\nconst RAM: readonly V3[] = [[0.08, 0.12, 0.02], [0.17, 0.15, -0.06], [0.23, 0.06, -0.1], [0.22, -0.05, -0.03], [0.17, -0.04, 0.06]];\nconst RAM_HORNS = hornVariant(\"ram\", \"Ram horns\", \"\uD83D\uDC0F\", \"Thick ridged horns curling back and around beside the face.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", RAM[0]!], [\"Horn Curl 1\", RAM[1]!], [\"Horn Curl 2\", RAM[2]!], [\"Horn Curl 3\", RAM[3]!], [\"Horn Tip\", RAM[4]!]]), {\n \"Horn Base L\": horn([segment(RAM[0]!, RAM[1]!, 0.1)]),\n \"Horn Curl 1 L\": horn([segment(RAM[1]!, RAM[2]!, 0.09)]),\n \"Horn Curl 2 L\": horn([segment(RAM[2]!, RAM[3]!, 0.075)]),\n \"Horn Curl 3 L\": horn([cone(RAM[3]!, RAM[4]!, 0.065, HORN, 0.02)]),\n \"Horn Tip L\": null,\n });\n\nconst BULL: readonly V3[] = [[0.1, 0.11, 0.03], [0.22, 0.13, 0.05], [0.28, 0.25, 0.1]];\nconst BULL_HORNS = hornVariant(\"bull\", \"Bull horns\", \"\uD83D\uDC02\", \"Horns sweeping out sideways, then up and forward to sharp points.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", BULL[0]!], [\"Horn Mid\", BULL[1]!], [\"Horn Tip\", BULL[2]!]]), {\n \"Horn Base L\": horn([segment(BULL[0]!, BULL[1]!, 0.075)]),\n \"Horn Mid L\": horn([cone(BULL[1]!, BULL[2]!, 0.065, HORN, 0.02)]),\n \"Horn Tip L\": null,\n });\n\nconst UNI: readonly V3[] = [[0, 0.13, 0.1], [0, 0.42, 0.22]];\nconst UNICORN = hornVariant(\"unicorn\", \"Unicorn horn\", \"\uD83E\uDD84\", \"One long spiral horn on the forehead.\",\n [[\"Horn Base\", \"Head\", UNI[0]!, tagsOf(\"horn\")], [\"Horn Tip\", \"Horn Base\", UNI[1]!, tagsOf(\"horn\")]], {\n \"Horn Base\": horn([\n cone(UNI[0]!, UNI[1]!, 0.08, HORN, 0.02),\n // the spiral: pale bands up the horn\n ...[0.2, 0.4, 0.6].map((t): BakeStamp => mark([0, 0.13 + 0.29 * t, 0.1 + 0.12 * t], [0.09, 0.02, 0.09], PALE, [0.4, 0, 0.5])),\n ]),\n \"Horn Tip\": null,\n });\n\n// antlers: a beam with two tines branching off it\nconst ANT: readonly V3[] = [[0.08, 0.13, 0.0], [0.14, 0.28, -0.04], [0.22, 0.4, -0.08], [0.26, 0.52, -0.06]];\nconst TINE1: V3 = [0.13, 0.38, 0.07], TINE2: V3 = [0.31, 0.47, 0.03];\nconst ANTLERS = hornVariant(\"antlers\", \"Deer antlers\", \"\uD83E\uDD8C\", \"Branching antlers: a beam rising back and out, with tines reaching forward.\", [\n ...pair(\"horn\", \"Head\", [[\"Antler Base\", ANT[0]!], [\"Antler Beam 1\", ANT[1]!], [\"Antler Beam 2\", ANT[2]!], [\"Antler Tip\", ANT[3]!]]),\n ...pair(\"horn\", (side) => `Antler Beam 1 ${side}`, [[\"Antler Tine 1\", TINE1]]),\n ...pair(\"horn\", (side) => `Antler Beam 2 ${side}`, [[\"Antler Tine 2\", TINE2]]),\n], {\n \"Antler Base L\": horn([segment(ANT[0]!, ANT[1]!, 0.05, PALE)]),\n \"Antler Beam 1 L\": horn([segment(ANT[1]!, ANT[2]!, 0.045, PALE), cone(ANT[1]!, TINE1, 0.035, PALE, 0.015)]),\n \"Antler Beam 2 L\": horn([cone(ANT[2]!, ANT[3]!, 0.04, PALE, 0.015), cone(ANT[2]!, TINE2, 0.032, PALE, 0.015)]),\n \"Antler Tip L\": null,\n \"Antler Tine 1 L\": null,\n \"Antler Tine 2 L\": null,\n});\n\n/** The rhino's reference head has a snout, so its horn seats on the snout of a rig that has one. */\nconst RHINO_HEAD: BakePart = corePart([sphere([0, 0, 0], [0.3, 0.28, 0.3]), sphere([0, -0.04, 0.17], [0.18, 0.16, 0.2])], FUR);\nconst RHINO = hornVariant(\"rhino\", \"Rhino horn\", \"\uD83E\uDD8F\", \"A big curved horn on the snout with a smaller one behind it.\",\n [[\"Horn Base\", \"Head\", [0, 0.03, 0.22], tagsOf(\"horn\")], [\"Horn Tip\", \"Horn Base\", [0, 0.25, 0.3], tagsOf(\"horn\")]], {\n \"Horn Base\": horn([cone([0, 0.03, 0.22], [0, 0.25, 0.3], 0.12, HORN, 0.03), cone([0, 0.09, 0.12], [0, 0.18, 0.12], 0.07, HORN, 0.02)]),\n \"Horn Tip\": null,\n }, RHINO_HEAD);\n\n/** Horn variants: jointed horn chains on a reference head (the head itself isn't given). */\nexport const HORN_VARIANTS: readonly PartVariant[] = [RAM_HORNS, BULL_HORNS, UNICORN, ANTLERS, RHINO];\n", "/*\n * Leg variants, authored for the app: a leg chain (side L; side R mirrors) from a reference hip at the origin down to\n * the ground, +z forward. Only the leg shapes are given: each is fitted along each of a rig's own legs (aligned and\n * scaled from its top joint to its foot), so the rig keeps its joints and still stands and poses as before.\n */\nimport type { BakePart, BakeStamp, TemplateColor } from \"../bake-types.js\";\nimport { ball, cone, limb, pair, sphere, type V3 } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { CORE, corePart, FUR, HIPS_BONE, HOOF, HORN, INNER, mark, MANE, PALE, SCALES, SKIN, variant } from \"./variant-authoring.js\";\n\nconst TORSO: BakePart = corePart([sphere([0, 0.04, 0], [0.4, 0.3, 0.5])], FUR);\n\n/** The leg's joints: hip, knee, ankle, foot (on the ground). */\nconst J: readonly V3[] = [[0.12, 0, 0], [0.13, -0.26, 0.02], [0.13, -0.46, -0.01], [0.13, -0.58, 0.02]];\nconst bones = pair(\"leg\", \"Hips\", [[\"Upper Leg\", J[0]!], [\"Lower Leg\", J[1]!], [\"Ankle\", J[2]!], [\"Foot\", J[3]!]]);\n\nexport const legVariant = (id: string, name: string, icon: string, family: PartVariant[\"family\"], desc: string, segs: readonly (readonly BakeStamp[])[], look = FUR): PartVariant =>\n variant(\"legs\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n bones,\n parts: { Hips: TORSO, \"Upper Leg L\": corePart(segs[0]!, look, 0.05), \"Lower Leg L\": corePart(segs[1]!, look, 0.04), \"Ankle L\": corePart(segs[2]!, look, 0.03), \"Foot L\": null },\n decals: [],\n });\n\nexport const LEG_JOINTS = J;\nconst x = J[0]![0];\nconst at = (y: number, z = 0): V3 => [x, y, z];\n\nconst HOOVES = legVariant(\"hooves\", \"Hooved legs\", \"\uD83D\uDC34\", \"mammal\", \"Slender legs with knobbly knees, a feathered fetlock and a dark hoof.\", [\n [sphere(at(-0.04), [0.16, 0.22, 0.18]), limb(J[0]!, J[1]!, 0.09)],\n [ball(J[1]!, 0.1), limb(J[1]!, J[2]!, 0.065)],\n [ball(at(-0.47), 0.085, MANE), limb(at(-0.5), at(-0.55, 0.02), 0.085, HOOF), [\"cylinder\", \"add\", at(-0.567, 0.02), [0, 0, 0], [0.1, 0.035, 0.11], HOOF] as BakeStamp],\n]);\n\nconst PILLARS = legVariant(\"pillars\", \"Pillar legs\", \"\uD83D\uDC18\", \"mammal\", \"Thick straight column legs with round feet and pale toenails.\", [\n [limb(J[0]!, J[1]!, 0.22)],\n [limb(J[1]!, J[2]!, 0.21)],\n [sphere(at(-0.53, 0.01), [0.24, 0.12, 0.25]), ...[-0.06, 0, 0.06].map((dx): BakeStamp => ball([x + dx, -0.56, 0.12], 0.06, HORN))],\n], SKIN);\n\nconst PAWS = legVariant(\"paws\", \"Big paws\", \"\uD83D\uDC3E\", \"mammal\", \"Sturdy legs ending in big round paws with toe beans.\", [\n [limb(J[0]!, J[1]!, 0.12)],\n [limb(J[1]!, J[2]!, 0.1)],\n [\n sphere(at(-0.54, 0.04), [0.18, 0.1, 0.22]),\n ...[-0.05, 0, 0.05].map((dx): BakeStamp => ball([x + dx, -0.535, 0.15], 0.075)),\n ...[-0.05, 0, 0.05].map((dx): BakeStamp => mark([x + dx, -0.54, 0.185], [0.04, 0.04, 0.03], INNER)),\n ],\n]);\n\nconst TALON: TemplateColor = PALE;\nconst TALONS = legVariant(\"talons\", \"Bird talons\", \"\uD83E\uDD85\", \"bird\", \"Thin scaly shanks with a feathered thigh and three forward toes and a back toe, all clawed.\", [\n [sphere(at(-0.08), [0.2, 0.26, 0.2], CORE)],\n [limb(J[1]!, J[2]!, 0.045, TALON)],\n [\n limb(J[2]!, at(-0.56), 0.045, TALON),\n ...[-0.4, 0, 0.4].map((a): BakeStamp => limb(at(-0.56), [x + Math.sin(a) * 0.13, -0.575, Math.cos(a) * 0.13], 0.035, TALON)),\n limb(at(-0.56), at(-0.575, -0.08), 0.03, TALON),\n ...[-0.4, 0, 0.4].map((a): BakeStamp => cone([x + Math.sin(a) * 0.13, -0.575, Math.cos(a) * 0.13], [x + Math.sin(a) * 0.17, -0.59, Math.cos(a) * 0.17], 0.03, HOOF, 0.005)),\n ],\n], SCALES);\n\n/** Leg variants: leg shapes fitted along a rig's own legs. */\nexport const LEG_VARIANTS: readonly PartVariant[] = [HOOVES, PILLARS, PAWS, TALONS];\n", "/*\n * Tail variants, authored for the app: a jointed tail chain on a reference torso (`Hips` at the origin, +z forward).\n * Only the tail is given: it's placed on a rig's torso where it sits on this one (the same spot of the torso's box,\n * scaled by the boxes' size), replacing the rig's tail, or grafted on a rig without one.\n */\nimport type { BakeBone, BakePart, BakeStamp } from \"../bake-types.js\";\nimport { ball, cone, limb, sphere, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { CORE, corePart, FUR, HIPS_BONE, MANE, SCALES, SKIN, variant } from \"./variant-authoring.js\";\n\n/** The reference torso the tail hangs from (not given to rigs). */\nconst TORSO: BakePart = corePart([sphere([0, 0, 0], [0.36, 0.34, 0.6])], FUR);\n\n/** A tail chain from the torso's rear: `Tail 1\u2026n`, each a joint of `joints`. */\nconst chain = (joints: readonly V3[]): BakeBone[] =>\n joints.slice(0, -1).map((p, i): BakeBone => [`Tail ${i + 1}`, i ? `Tail ${i}` : \"Hips\", p, tagsOf(\"tail\")]);\n\nexport const tailVariant = (id: string, name: string, icon: string, desc: string, joints: readonly V3[], parts: (j: readonly V3[]) => readonly (readonly BakeStamp[] | null)[], look = FUR, blend = 0.05, family: PartVariant[\"family\"] = \"mammal\"): PartVariant => {\n const stamps = parts(joints);\n return variant(\"tail\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n bones: chain(joints),\n parts: { Hips: TORSO, ...Object.fromEntries(chain(joints).map(([bone], i) => [bone, stamps[i] ? corePart(stamps[i]!, look, blend) : null])) },\n decals: [],\n });\n};\n\nconst PIG = tailVariant(\"curly\", \"Curly tail\", \"\uD83D\uDC37\", \"A short thin pig tail curling into a spiral.\",\n [[0, 0.05, -0.29], [0, 0.12, -0.36], [0.05, 0.17, -0.33], [0.06, 0.12, -0.28], [0.02, 0.1, -0.31]],\n (j) => [[limb(j[0]!, j[1]!, 0.045)], [limb(j[1]!, j[2]!, 0.042)], [limb(j[2]!, j[3]!, 0.04)], [limb(j[3]!, j[4]!, 0.036)]], SKIN, 0.02);\n\nconst LION = tailVariant(\"tuft\", \"Tufted tail\", \"\uD83E\uDD81\", \"A long thin tail drooping to a fluffy tuft at the end.\",\n [[0, 0.06, -0.29], [0, 0.0, -0.46], [0, -0.14, -0.6], [0, -0.3, -0.66], [0, -0.4, -0.66]],\n (j) => [[limb(j[0]!, j[1]!, 0.06)], [limb(j[1]!, j[2]!, 0.055)], [limb(j[2]!, j[3]!, 0.05)], [limb(j[3]!, j[4]!, 0.05), ball([0, -0.42, -0.66], 0.15, MANE), ball([0, -0.34, -0.67], 0.11, MANE)]]);\n\nconst SQUIRREL = tailVariant(\"bushy\", \"Bushy tail\", \"\uD83D\uDC3F\uFE0F\", \"A huge fluffy tail sweeping up over the back in an S.\",\n [[0, 0.04, -0.29], [0, 0.18, -0.44], [0, 0.42, -0.44], [0, 0.6, -0.3], [0, 0.66, -0.16]],\n (j) => [\n [limb(j[0]!, j[1]!, 0.14)],\n [sphere(j[1]!, [0.24, 0.28, 0.26]), limb(j[1]!, j[2]!, 0.26)],\n [limb(j[2]!, j[3]!, 0.27)],\n [limb(j[3]!, j[4]!, 0.22), sphere([0, 0.66, -0.15], [0.2, 0.18, 0.2])],\n ], FUR, 0.08);\n\nconst BEAVER = tailVariant(\"paddle\", \"Paddle tail\", \"\uD83E\uDDAB\", \"A broad, flat, scaly paddle tail.\",\n [[0, 0.0, -0.29], [0, -0.04, -0.42], [0, -0.07, -0.66]],\n (j) => [\n [limb(j[0]!, j[1]!, 0.1)],\n [[\"sphere\", \"add\", [0, -0.06, -0.56], [0.08, 0, 0], [0.3, 0.06, 0.4], CORE] as BakeStamp],\n ], SCALES, 0.04);\n\nconst HORSE = tailVariant(\"flowing\", \"Flowing tail\", \"\uD83D\uDC34\", \"A long flowing horse tail of hair, widening as it falls.\",\n [[0, 0.1, -0.28], [0, 0.07, -0.4], [0, -0.05, -0.5], [0, -0.2, -0.56], [0, -0.33, -0.56]],\n (j) => [\n [limb(j[0]!, j[1]!, 0.1, MANE)],\n [cone(j[2]!, j[1]!, 0.13, MANE, 0.04), limb(j[1]!, j[2]!, 0.1, MANE)],\n [limb(j[2]!, j[3]!, 0.13, MANE)],\n [cone(j[3]!, j[4]!, 0.13, MANE, 0.04)],\n ], FUR, 0.06);\n\n/** Tail variants: a jointed tail chain on a reference torso (the torso itself isn't given). */\nexport const TAIL_VARIANTS: readonly PartVariant[] = [PIG, LION, SQUIRREL, BEAVER, HORSE];\n", "/*\n * Made-up part variants, authored for the app: mushroom, plant, stone and crystal, robot and cyber, and elemental\n * (fire, slime) parts. Their families (fungus, plant, mineral, machine, elemental) belong to no premade, so they're\n * offered with Chimera. Heads put the cranium on the `Head` bone; horns and ears sit on the reference head; tails,\n * legs and wings hang from a reference torso, as the other variants.\n */\nimport type { BakeBone, BakeLook, BakePart, BakeStamp } from \"../bake-types.js\";\nimport { ball, cone, eulerUp, len3, limb, mid3, pair, sphere, sub3, tagsOf, type V3 } from \"../bake-authoring.js\";\nimport { coatVariant, patterned } from \"./coat-variants.js\";\nimport { earVariant } from \"./ear-variants.js\";\nimport { eyes, headVariant, mouth } from \"./head-variants.js\";\nimport { hornVariant } from \"./horn-variants.js\";\nimport { LEG_JOINTS, legVariant } from \"./leg-variants.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { tailVariant } from \"./tail-variants.js\";\nimport {\n both, CAP, corePart, CRYSTAL, EMBER, FIRE, FUR, HIPS_BONE, LEAF, mark, METAL, MOSS, NEON, PALE, PANEL, PETAL, ROCK, SKIN, SLIME, SPOT, STEM, variant,\n} from \"./variant-authoring.js\";\n\n// ---- looks ----\n\nexport const METAL_LOOK: BakeLook = { ...SKIN, foundationColor: METAL, metalness: 0.9, roughness: 0.25 };\nexport const CRYSTAL_LOOK: BakeLook = { ...SKIN, foundationColor: CRYSTAL, glow: 0.7, opacity: 0.85, roughness: 0.08, metalness: 0.3 };\nexport const ROCK_LOOK: BakeLook = { ...FUR, shape: \"gravel\", size: 0.3, coverage: 0.8, normalStrength: 1.2, roughness: 0.95, foundationDarkness: 0.4 };\nexport const BARK_LOOK: BakeLook = { ...FUR, foundationColor: STEM, shape: \"streak\", size: 0.4, coverage: 0.7, roughness: 0.9 };\nexport const LEAF_LOOK: BakeLook = { ...SKIN, foundationColor: LEAF, roughness: 0.6 };\nexport const SHROOM_LOOK: BakeLook = { ...SKIN, shape: \"cement\", size: 0.2, coverage: 0.3, roughness: 0.7 };\nexport const FIRE_LOOK: BakeLook = { ...SKIN, foundationColor: FIRE, glow: 1.6, opacity: 0.92, roughness: 0.4 };\nexport const SLIME_LOOK: BakeLook = { ...SKIN, foundationColor: SLIME, glow: 0.25, opacity: 0.72, roughness: 0.04 };\nexport const NEON_LOOK: BakeLook = { ...METAL_LOOK, glow: 1.2 };\n\n/** An ellipsoid from a to b, `w` wide and `t` thin (a leaf, a plate, a petal). */\nexport const blade = (a: V3, b: V3, w: number, t: number, color: string): BakeStamp => [\"sphere\", \"add\", mid3(a, b), eulerUp(sub3(b, a)), [t, len3(sub3(b, a)) * 1.1, w], color];\nexport const lerp3 = (a: V3, b: V3, t: number): V3 => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];\n\n// ===== heads =====\n\nconst MUSH_C: V3 = [0, 0, 0.02], MUSH_S: V3 = [0.28, 0.26, 0.28];\nconst MUSHROOM = headVariant(\"mushroom\", \"Mushroom head\", \"\uD83C\uDF44\", \"fungus\", \"A cute face under a big spotted mushroom cap.\", {\n parts: { Head: corePart([\n sphere(MUSH_C, MUSH_S, PALE),\n // a dome fills the lower half of its box: flat at y 0.1, round up to its center\n [\"dome\", \"add\", [0, 0.34, 0], [0, 0, 0], [0.66, 0.48, 0.66], CAP],\n ...([[0, 0.33, 0], [0.17, 0.27, 0.12], [-0.17, 0.27, 0.12], [0.13, 0.26, -0.18], [-0.15, 0.25, -0.15], [0.27, 0.17, -0.02], [-0.27, 0.17, 0.02], [0, 0.24, 0.24]] as V3[]).map((p): BakeStamp => mark(p, [0.08, 0.08, 0.08], SPOT)),\n ], SHROOM_LOOK) },\n decals: [...eyes(MUSH_C, MUSH_S, \"Cute\", 0.1, [0.35, 0.0, 0.94]), mouth(MUSH_C, MUSH_S, \"Smile\", 0.07, [0, -0.45, 0.9], \"s:black\")],\n}, { horns: \"horns:mushrooms\" });\n\nconst FLOWER_C: V3 = [0, 0, 0.02], FLOWER_S: V3 = [0.3, 0.3, 0.24];\nconst FLOWER = headVariant(\"flower\", \"Flower head\", \"\uD83C\uDF3B\", \"plant\", \"A smiling face in the middle of a ring of petals.\", {\n parts: { Head: corePart([\n sphere(FLOWER_C, FLOWER_S),\n ...Array.from({ length: 10 }, (_, i): BakeStamp => {\n const a = (i / 10) * Math.PI * 2;\n return [\"sphere\", \"add\", [0.25 * Math.cos(a), 0.25 * Math.sin(a), -0.04], [0, 0, a - Math.PI / 2], [0.13, 0.24, 0.04], PETAL];\n }),\n ], SKIN, 0.05) },\n decals: [...eyes(FLOWER_C, FLOWER_S, \"Cute\", 0.1, [0.35, 0.15, 0.92]), mouth(FLOWER_C, FLOWER_S, \"Smile\", 0.08, [0, -0.35, 0.94], \"s:black\")],\n}, { ears: \"ears:leaf\" });\n\nconst ROCK_C: V3 = [0, 0.02, 0], ROCK_S: V3 = [0.34, 0.3, 0.32];\nconst GOLEM = headVariant(\"golem\", \"Rock golem head\", \"\uD83E\uDEA8\", \"mineral\", \"A blocky stone head: a heavy brow, a square jaw and chips of rock.\", {\n parts: { Head: corePart([\n [\"cube\", \"add\", ROCK_C, [0.08, 0.2, 0.04], [0.3, 0.27, 0.29], ROCK],\n [\"cube\", \"add\", [0, -0.13, 0.06], [-0.12, 0, 0], [0.28, 0.13, 0.25], ROCK],\n [\"cube\", \"add\", [0, 0.09, 0.14], [0.1, 0, 0], [0.33, 0.07, 0.1], ROCK],\n [\"cube\", \"add\", [0.13, 0.13, -0.06], [0.4, 0.5, 0.2], [0.11, 0.1, 0.11], ROCK],\n [\"cube\", \"add\", [-0.12, 0.15, -0.02], [0.2, -0.4, 0.5], [0.09, 0.09, 0.09], ROCK],\n ], ROCK_LOOK, 0.03) },\n decals: [...eyes(ROCK_C, ROCK_S, \"Angry\", 0.08, [0.35, 0.05, 0.94]), mouth([0, -0.13, 0.06], [0.28, 0.13, 0.25], \"Flat\", 0.1, [0, -0.1, 1], \"s:black\")],\n}, { horns: \"horns:crystals\" });\n\nconst GEM_C: V3 = [0, 0.02, 0], GEM_S: V3 = [0.3, 0.32, 0.3];\nconst CRYSTAL_HEAD = headVariant(\"crystal\", \"Crystal head\", \"\uD83D\uDC8E\", \"mineral\", \"A faceted glowing gem of a head with shards growing from its crown.\", {\n parts: { Head: corePart([\n [\"cube\", \"add\", GEM_C, [0.62, 0.78, 0.2], [0.24, 0.24, 0.24], CRYSTAL],\n [\"cube\", \"add\", GEM_C, [0, 0.78, 0.62], [0.22, 0.26, 0.22], CRYSTAL],\n cone([0, 0.12, 0], [0, 0.34, -0.02], 0.08, CRYSTAL, 0.01),\n ...both((s) => cone([0.07 * s, 0.11, -0.02], [0.16 * s, 0.28, -0.05], 0.06, CRYSTAL, 0.01)),\n ], CRYSTAL_LOOK, 0.03) },\n decals: [...eyes(GEM_C, GEM_S, \"Sparkle\", 0.09, [0.32, 0.1, 0.94]), mouth(GEM_C, GEM_S, \"Small\", 0.06, [0, -0.4, 0.92], \"s:black\")],\n});\n\nconst BOT_C: V3 = [0, 0.02, 0], BOT_S: V3 = [0.34, 0.3, 0.32];\nconst ANT: readonly V3[] = [[0.05, 0.16, -0.02], [0.08, 0.3, -0.04], [0.06, 0.4, -0.02]];\nconst ROBOT = headVariant(\"robot\", \"Robot head\", \"\uD83E\uDD16\", \"machine\", \"A boxy metal robot head: a dark visor with glowing eyes, ear bolts and a springy antenna.\", {\n bones: ANT.slice(0, 2).map((p, i): BakeBone => [`Aerial ${i + 1}`, i ? `Aerial ${i}` : \"Head\", p, tagsOf(\"aerial\")]),\n parts: {\n Head: corePart([\n [\"cube\", \"add\", BOT_C, [0, 0, 0], [0.32, 0.28, 0.3], METAL],\n mark([0, 0.04, 0.15], [0.3, 0.09, 0.04], \"s:black\"), // the visor\n ...both((s) => [\"cylinder\", \"add\", [0.17 * s, 0.0, 0], [0, 0, Math.PI / 2], [0.1, 0.04, 0.1], PANEL] as BakeStamp),\n ...[-0.06, 0, 0.06].map((x): BakeStamp => mark([x, -0.08, 0.15], [0.02, 0.04, 0.04], \"s:black\")), // the mouth grill\n ], METAL_LOOK, 0.02),\n \"Aerial 1\": corePart([limb(ANT[0]!, ANT[1]!, 0.02, METAL)], METAL_LOOK, 0.01),\n \"Aerial 2\": { ...corePart([limb(ANT[1]!, ANT[2]!, 0.018, METAL), ball(ANT[2]!, 0.06, NEON)], NEON_LOOK, 0.01), color: NEON },\n },\n decals: eyes([0, 0.04, 0.15], [0.3, 0.09, 0.04], \"Dot\", 0.06, [0.5, 0, 0.86]),\n}, { ears: \"ears:satellite\" });\n\nconst CYB_C: V3 = [0, 0.02, 0], CYB_S: V3 = [0.32, 0.3, 0.34];\nconst CYBER = headVariant(\"cyber\", \"Cyber head\", \"\uD83E\uDDBE\", \"machine\", \"A sleek chrome helmet with a glowing visor band and swept-back fins.\", {\n parts: { Head: corePart([\n sphere(CYB_C, CYB_S, METAL),\n sphere([0, 0.04, 0.12], [0.3, 0.09, 0.12], NEON),\n ...both((s) => cone([0.12 * s, 0.08, -0.08], [0.17 * s, 0.14, -0.26], 0.07, PANEL, 0.01)),\n cone([0, 0.14, 0.02], [0, 0.2, -0.24], 0.06, PANEL, 0.01),\n ], { ...METAL_LOOK, roughness: 0.15, glow: 0.3 }, 0.03) },\n decals: [...eyes([0, 0.04, 0.12], [0.3, 0.09, 0.12], \"Narrow\", 0.07, [0.45, 0, 0.9]), mouth(CYB_C, CYB_S, \"Flat\", 0.07, [0, -0.45, 0.9], \"s:black\")],\n}, { horns: \"horns:antennas\" });\n\nconst FLAME_C: V3 = [0, 0, 0], FLAME_S: V3 = [0.3, 0.3, 0.3];\nconst FLAME_HEAD = headVariant(\"flame\", \"Flame head\", \"\uD83D\uDD25\", \"elemental\", \"A glowing ember head crowned with flickering flames.\", {\n parts: { Head: corePart([\n sphere(FLAME_C, FLAME_S, FIRE),\n ...([[0, 0.12, 0.04, 0, 0.42, -0.04], [0.08, 0.1, 0, 0.16, 0.34, -0.1], [-0.08, 0.1, 0, -0.16, 0.34, -0.1], [0, 0.1, -0.08, 0, 0.3, -0.26], [0.1, 0.06, -0.06, 0.2, 0.22, -0.22], [-0.1, 0.06, -0.06, -0.2, 0.22, -0.22]] as const)\n .map((f, i): BakeStamp => cone([f[0], f[1], f[2]], [f[3], f[4], f[5]], 0.13 - i * 0.008, i % 2 ? EMBER : FIRE, 0.03)),\n ], FIRE_LOOK, 0.05) },\n decals: [...eyes(FLAME_C, FLAME_S, \"Angry\", 0.09, [0.38, 0.1, 0.92]), mouth(FLAME_C, FLAME_S, \"Grin\", 0.12, [0, -0.35, 0.94], \"s:black\")],\n}, { horns: \"horns:flames\" });\n\nconst SLIME_C: V3 = [0, 0.02, 0], SLIME_S: V3 = [0.36, 0.32, 0.32];\nconst SLIME_HEAD = headVariant(\"slime\", \"Slime head\", \"\uD83E\uDEE7\", \"elemental\", \"A wobbly see-through blob of a head, dripping at the chin.\", {\n parts: { Head: corePart([\n sphere(SLIME_C, SLIME_S, SLIME),\n ...([[0.08, -0.15, 0.06, 0.07, 0.12], [-0.06, -0.16, 0.08, 0.06, 0.15], [0.0, -0.15, -0.06, 0.08, 0.1], [-0.13, -0.11, -0.02, 0.06, 0.1]] as const)\n .map((d): BakeStamp => [\"sphere\", \"add\", [d[0], d[1], d[2]], [0, 0, 0], [d[3], d[4], d[3]], SLIME]),\n ], SLIME_LOOK, 0.07) },\n decals: [...eyes(SLIME_C, SLIME_S, \"Cute\", 0.11, [0.35, 0.15, 0.92]), mouth(SLIME_C, SLIME_S, \"Open\", 0.07, [0, -0.3, 0.95], \"s:black\")],\n});\n\n// ===== horns =====\n\nconst crystalHorn = (base: V3, tip: V3): BakeStamp[] => [\n cone(base, tip, 0.07, CRYSTAL, 0.008),\n cone(lerp3(base, tip, 0.2), [tip[0] * 1.3, tip[1] * 0.7, tip[2] + 0.06], 0.045, CRYSTAL, 0.008),\n cone(lerp3(base, tip, 0.1), [tip[0] * 0.6, tip[1] * 0.75, tip[2] - 0.08], 0.04, CRYSTAL, 0.008),\n];\nconst CRYSTAL_HORNS = hornVariant(\"crystals\", \"Crystal horns\", \"\uD83D\uDC8E\", \"Clusters of glowing crystal shards growing from the head.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.07, 0.12, 0.0]], [\"Horn Tip\", [0.13, 0.36, -0.03]]]), {\n \"Horn Base L\": corePart(crystalHorn([0.07, 0.12, 0.0], [0.13, 0.36, -0.03]), CRYSTAL_LOOK, 0.02),\n \"Horn Tip L\": null,\n }, undefined, \"mineral\");\n\nconst MUSHROOM_HORNS = hornVariant(\"mushrooms\", \"Mushroom horns\", \"\uD83C\uDF44\", \"Two little spotted mushrooms sprouting from the head.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.07, 0.12, 0.0]], [\"Horn Tip\", [0.12, 0.27, 0.0]]]), {\n \"Horn Base L\": corePart([\n limb([0.07, 0.12, 0.0], [0.12, 0.25, 0.0], 0.045, PALE),\n [\"dome\", \"add\", [0.12, 0.31, 0.0], [0, 0, -0.2], [0.17, 0.14, 0.17], CAP],\n mark([0.12, 0.31, 0.04], [0.04, 0.04, 0.04], SPOT), mark([0.15, 0.29, -0.04], [0.035, 0.035, 0.035], SPOT),\n ], SHROOM_LOOK, 0.02),\n \"Horn Tip L\": null,\n }, undefined, \"fungus\");\n\nconst BR: readonly V3[] = [[0.08, 0.13, 0.0], [0.14, 0.27, -0.04], [0.22, 0.38, -0.06], [0.24, 0.48, -0.02]];\nconst BRANCHES = hornVariant(\"branches\", \"Branch antlers\", \"\uD83C\uDF3F\", \"Woody branches growing from the head, sprouting leaves.\", [\n ...pair(\"horn\", \"Head\", [[\"Branch Base\", BR[0]!], [\"Branch 1\", BR[1]!], [\"Branch 2\", BR[2]!], [\"Branch Tip\", BR[3]!]]),\n ...pair(\"horn\", (side) => `Branch 1 ${side}`, [[\"Twig\", [0.1, 0.38, 0.06]]]),\n], {\n \"Branch Base L\": corePart([limb(BR[0]!, BR[1]!, 0.05, STEM)], BARK_LOOK, 0.02),\n \"Branch 1 L\": corePart([limb(BR[1]!, BR[2]!, 0.042, STEM), cone(BR[1]!, [0.1, 0.38, 0.06], 0.03, STEM, 0.01), blade([0.1, 0.38, 0.06], [0.08, 0.47, 0.12], 0.08, 0.055, LEAF)], BARK_LOOK, 0.02),\n \"Branch 2 L\": corePart([cone(BR[2]!, BR[3]!, 0.035, STEM, 0.01), blade(BR[3]!, [0.27, 0.58, 0.02], 0.09, 0.055, LEAF), blade(BR[2]!, [0.33, 0.44, -0.04], 0.08, 0.055, LEAF)], BARK_LOOK, 0.02),\n \"Branch Tip L\": null,\n \"Twig L\": null,\n}, undefined, \"plant\");\n\nconst ANTENNAS = hornVariant(\"antennas\", \"Antenna horns\", \"\uD83D\uDCE1\", \"Thin metal rods topped with glowing bulbs.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.07, 0.13, -0.02]], [\"Horn Tip\", [0.14, 0.42, -0.06]]]), {\n \"Horn Base L\": { ...corePart([limb([0.07, 0.13, -0.02], [0.14, 0.42, -0.06], 0.025, METAL), ball([0.14, 0.42, -0.06], 0.07, NEON), [\"cylinder\", \"add\", [0.075, 0.14, -0.02], [0, 0, 0], [0.07, 0.03, 0.07], PANEL] as BakeStamp], NEON_LOOK, 0.01) },\n \"Horn Tip L\": null,\n }, undefined, \"machine\");\n\nconst FLAME_HORNS = hornVariant(\"flames\", \"Flame horns\", \"\uD83D\uDD25\", \"Curved horns of living fire.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.08, 0.12, 0.0]], [\"Horn Mid\", [0.16, 0.24, -0.06]], [\"Horn Tip\", [0.16, 0.4, -0.12]]]), {\n \"Horn Base L\": corePart([limb([0.08, 0.12, 0.0], [0.16, 0.24, -0.06], 0.08, FIRE)], FIRE_LOOK, 0.03),\n \"Horn Mid L\": corePart([cone([0.16, 0.24, -0.06], [0.16, 0.4, -0.12], 0.07, EMBER, 0.02)], FIRE_LOOK, 0.03),\n \"Horn Tip L\": null,\n }, undefined, \"elemental\");\n\n// ===== ears =====\n\nconst LEAF_EARS = earVariant(\"leaf\", \"Leaf ears\", \"\uD83C\uDF31\", \"Big green leaves for ears, with a pale midrib.\",\n [[\"Ear Base\", [0.1, 0.11, 0.0]], [\"Ear Tip\", [0.26, 0.32, -0.02]]], {\n \"Ear Base L\": corePart([blade([0.1, 0.11, 0.0], [0.26, 0.32, -0.02], 0.14, 0.055, LEAF), mark([0.18, 0.215, 0.0], [0.02, 0.2, 0.02], PALE, [0, 0, -0.65])], LEAF_LOOK, 0.02),\n \"Ear Tip L\": null,\n }, \"plant\");\n\nconst SATELLITE = earVariant(\"satellite\", \"Satellite ears\", \"\uD83D\uDCE1\", \"Little satellite dishes on stalks, with glowing receivers.\",\n [[\"Ear Base\", [0.14, 0.04, 0.0]], [\"Ear Tip\", [0.24, 0.08, 0.0]]], {\n \"Ear Base L\": corePart([\n limb([0.14, 0.04, 0.0], [0.21, 0.07, 0.0], 0.04, METAL),\n [\"dome\", \"add\", [0.24, 0.08, 0.0], [0, 0, -Math.PI / 2 - 0.3], [0.2, 0.08, 0.2], PANEL],\n ball([0.25, 0.085, 0.0], 0.04, NEON),\n ], METAL_LOOK, 0.01),\n \"Ear Tip L\": null,\n }, \"machine\");\n\nconst GILLS = earVariant(\"gills\", \"Gill frills\", \"\uD83E\uDD8E\", \"Three feathery gill stalks on each side, as an axolotl's.\",\n [[\"Ear Base\", [0.12, 0.06, -0.06]], [\"Ear Tip\", [0.28, 0.2, -0.16]]], {\n \"Ear Base L\": corePart(([[0.28, 0.22, -0.14], [0.31, 0.1, -0.16], [0.27, -0.02, -0.14]] as V3[]).flatMap((t): BakeStamp[] => [\n limb([0.12, 0.06, -0.06], t, 0.035, \"@inner\"),\n ...[0.35, 0.6, 0.85].map((u): BakeStamp => ball(lerp3([0.12, 0.06, -0.06], t, u), 0.05, \"@inner\")),\n ]), SKIN, 0.02),\n \"Ear Tip L\": null,\n }, \"aquatic\");\n\n// ===== tails =====\n\nconst VINE = tailVariant(\"vine\", \"Vine tail\", \"\uD83C\uDF3F\", \"A long curling vine sprouting leaves.\",\n [[0, 0.04, -0.29], [0, 0.0, -0.46], [0.06, -0.08, -0.6], [0.02, -0.06, -0.76], [-0.06, 0.06, -0.82]],\n (j) => [0, 1, 2, 3].map((i) => [limb(j[i]!, j[i + 1]!, 0.06 - i * 0.008, STEM), blade(j[i + 1]!, [j[i + 1]![0] + (i % 2 ? -0.1 : 0.1), j[i + 1]![1] + 0.08, j[i + 1]![2]], 0.08, 0.055, LEAF)]),\n BARK_LOOK, 0.03, \"plant\");\n\nconst CRYSTAL_TAIL = tailVariant(\"crystal\", \"Crystal tail\", \"\uD83D\uDC8E\", \"A tail of stacked glowing crystal shards, ending in a point.\",\n [[0, 0.06, -0.29], [0, 0.04, -0.44], [0, 0.0, -0.58], [0, -0.04, -0.7], [0, -0.06, -0.8]],\n (j) => [0, 1, 2, 3].map((i) => [cone(j[i]!, j[i + 1]!, 0.12 - i * 0.022, CRYSTAL, 0.01), cone(lerp3(j[i]!, j[i + 1]!, 0.4), [j[i]![0], j[i]![1] + 0.1, j[i]![2] - 0.06], 0.05, CRYSTAL, 0.008)]),\n CRYSTAL_LOOK, 0.02, \"mineral\");\n\nconst CABLE = tailVariant(\"cable\", \"Cable tail\", \"\uD83D\uDD0C\", \"A segmented metal cable ending in a glowing plug.\",\n [[0, 0.05, -0.29], [0, 0.0, -0.44], [0, -0.06, -0.58], [0, -0.1, -0.72], [0, -0.12, -0.84]],\n (j) => [0, 1, 2, 3].map((i) => [\n limb(j[i]!, j[i + 1]!, 0.05, METAL), [\"cylinder\", \"add\", j[i + 1]!, eulerUp(sub3(j[i + 1]!, j[i]!)), [0.09, 0.03, 0.09], PANEL] as BakeStamp,\n ...(i === 3 ? [[\"cube\", \"add\", j[4]!, eulerUp(sub3(j[4]!, j[3]!)), [0.1, 0.08, 0.08], PANEL] as BakeStamp, ball([j[4]![0], j[4]![1] - 0.01, j[4]![2] - 0.05], 0.05, NEON)] : []),\n ]),\n NEON_LOOK, 0.02, \"machine\");\n\nconst FLAME_TAIL = tailVariant(\"flame\", \"Flame tail\", \"\uD83D\uDD25\", \"A tail that flares into flickering flames at the end.\",\n [[0, 0.06, -0.29], [0, 0.1, -0.44], [0, 0.18, -0.56], [0, 0.3, -0.62], [0, 0.44, -0.62]],\n (j) => [[limb(j[0]!, j[1]!, 0.08, FIRE)], [limb(j[1]!, j[2]!, 0.09, FIRE)], [cone(j[2]!, j[4]!, 0.18, FIRE, 0.03)], [cone(j[3]!, [0.06, 0.5, -0.66], 0.1, EMBER, 0.03), cone(j[3]!, [-0.06, 0.48, -0.58], 0.09, EMBER, 0.03)]],\n FIRE_LOOK, 0.04, \"elemental\");\n\nconst SHELF = tailVariant(\"shelf\", \"Fungus tail\", \"\uD83C\uDF44\", \"A stalk of a tail lined with shelf fungi.\",\n [[0, 0.04, -0.29], [0, -0.02, -0.44], [0, -0.1, -0.58], [0, -0.16, -0.72], [0, -0.2, -0.82]],\n (j) => [0, 1, 2, 3].map((i) => [limb(j[i]!, j[i + 1]!, 0.07 - i * 0.008, PALE), [\"dome\", \"add\", [j[i + 1]![0] + (i % 2 ? -0.06 : 0.06), j[i + 1]![1] + 0.05, j[i + 1]![2]], [0, 0, i % 2 ? 0.3 : -0.3], [0.14, 0.08, 0.12], CAP] as BakeStamp]),\n SHROOM_LOOK, 0.03, \"fungus\");\n\n// ===== legs =====\n\nconst x = LEG_JOINTS[0]![0];\nconst at = (y: number, z = 0): V3 => [x, y, z];\nconst MECH = legVariant(\"mech\", \"Mech legs\", \"\uD83E\uDDBF\", \"machine\", \"Robot legs: metal struts, piston joints and flat foot plates.\", [\n [ball(at(-0.02), 0.13, PANEL), limb(LEG_JOINTS[0]!, LEG_JOINTS[1]!, 0.08, METAL), [\"cylinder\", \"add\", at(-0.13, 0.05), [0, 0, 0], [0.05, 0.18, 0.05], PANEL] as BakeStamp],\n [ball(LEG_JOINTS[1]!, 0.11, PANEL), limb(LEG_JOINTS[1]!, LEG_JOINTS[2]!, 0.07, METAL)],\n [ball(LEG_JOINTS[2]!, 0.09, NEON), [\"cube\", \"add\", at(-0.56, 0.04), [0, 0, 0], [0.16, 0.05, 0.24], PANEL] as BakeStamp],\n], METAL_LOOK);\n\nconst BOULDER = legVariant(\"boulder\", \"Boulder legs\", \"\uD83E\uDEA8\", \"mineral\", \"Legs of stacked stone chunks on flat boulder feet.\", [\n [[\"cube\", \"add\", at(-0.1), [0.2, 0.3, 0.1], [0.16, 0.2, 0.16], ROCK] as BakeStamp, [\"cube\", \"add\", at(-0.22, 0.01), [-0.1, 0.5, 0], [0.14, 0.12, 0.14], ROCK] as BakeStamp],\n [[\"cube\", \"add\", at(-0.33, 0.01), [0.1, -0.2, 0.15], [0.13, 0.16, 0.13], ROCK] as BakeStamp],\n [[\"cube\", \"add\", at(-0.53, 0.03), [0, 0.3, 0], [0.2, 0.1, 0.24], ROCK] as BakeStamp, [\"cube\", \"add\", at(-0.44), [0.3, 0.1, 0.2], [0.11, 0.1, 0.11], ROCK] as BakeStamp],\n], ROCK_LOOK);\n\nconst ROOTS = legVariant(\"roots\", \"Root legs\", \"\uD83C\uDF33\", \"plant\", \"Woody trunk legs that spread into roots at the ground.\", [\n [limb(LEG_JOINTS[0]!, LEG_JOINTS[1]!, 0.13, STEM)],\n [limb(LEG_JOINTS[1]!, LEG_JOINTS[2]!, 0.12, STEM)],\n [limb(LEG_JOINTS[2]!, at(-0.55), 0.13, STEM), ...[0, 1.6, 3.2, 4.6].map((a): BakeStamp => cone(at(-0.53), [x + 0.14 * Math.sin(a), -0.58, 0.14 * Math.cos(a)], 0.05, STEM, 0.02)), blade(at(-0.4, 0.06), at(-0.32, 0.14), 0.06, 0.055, LEAF)],\n], BARK_LOOK);\n\nconst STALKS = legVariant(\"stalks\", \"Stalk legs\", \"\uD83C\uDF44\", \"fungus\", \"Pale mushroom-stalk legs ending in bulbous bases, with a little cap at each knee.\", [\n [limb(LEG_JOINTS[0]!, LEG_JOINTS[1]!, 0.13, PALE)],\n [limb(LEG_JOINTS[1]!, LEG_JOINTS[2]!, 0.11, PALE), [\"dome\", \"add\", [x, -0.2, 0.0], [0, 0, 0], [0.2, 0.12, 0.2], CAP] as BakeStamp],\n [sphere(at(-0.52, 0.01), [0.18, 0.14, 0.18], PALE), mark(at(-0.5, 0.09), [0.05, 0.05, 0.05], SPOT)],\n], SHROOM_LOOK);\n\nconst GOO = legVariant(\"slime\", \"Slime legs\", \"\uD83E\uDEE7\", \"elemental\", \"Wobbly see-through legs of slime, pooling into puddles at the ground.\", [\n [limb(LEG_JOINTS[0]!, LEG_JOINTS[1]!, 0.13, SLIME)],\n [limb(LEG_JOINTS[1]!, LEG_JOINTS[2]!, 0.12, SLIME), ball(lerp3(LEG_JOINTS[1]!, LEG_JOINTS[2]!, 0.5), 0.15, SLIME)],\n [[\"sphere\", \"add\", at(-0.55, 0.02), [0, 0, 0], [0.24, 0.07, 0.26], SLIME] as BakeStamp, limb(LEG_JOINTS[2]!, at(-0.53), 0.12, SLIME)],\n], SLIME_LOOK);\n\n// ===== wings (sculpted, grafted on the back) =====\n\nconst TORSO: BakePart = corePart([sphere([0, 0, 0], [0.4, 0.36, 0.6])], FUR);\nconst W: readonly V3[] = [[0.12, 0.14, 0.04], [0.42, 0.42, -0.04], [0.74, 0.62, -0.16]];\nconst wingVariant = (id: string, name: string, icon: string, family: PartVariant[\"family\"], desc: string, inner: readonly BakeStamp[], outer: readonly BakeStamp[], look: BakeLook): PartVariant =>\n variant(\"wings\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n bones: pair(\"wing\", \"Hips\", [[\"Wing\", W[0]!], [\"Wing Mid\", W[1]!], [\"Wing Tip\", W[2]!]]),\n parts: { Hips: TORSO, \"Wing L\": corePart(inner, look, 0.03), \"Wing Mid L\": corePart(outer, look, 0.03), \"Wing Tip L\": null },\n decals: [],\n });\nconst LEAF_WINGS = wingVariant(\"leaf\", \"Leaf wings\", \"\uD83C\uDF43\", \"plant\", \"Two great leaves on each side, veined and pointed.\",\n [limb(W[0]!, W[1]!, 0.06, STEM), blade(W[0]!, [0.42, 0.26, -0.24], 0.24, 0.055, LEAF), blade(W[0]!, W[1]!, 0.18, 0.055, LEAF)],\n [blade(W[1]!, W[2]!, 0.26, 0.055, LEAF), mark(lerp3(W[1]!, W[2]!, 0.5), [0.03, 0.34, 0.03], PALE, eulerUp(sub3(W[2]!, W[1]!)))], LEAF_LOOK);\nconst JET_WINGS = wingVariant(\"jet\", \"Jet wings\", \"\uD83D\uDE80\", \"machine\", \"Swept metal wing panels with glowing thrusters underneath.\",\n [blade(W[0]!, W[1]!, 0.3, 0.06, PANEL), [\"cylinder\", \"add\", lerp3(W[0]!, W[1]!, 0.6), [Math.PI / 2, 0, 0], [0.08, 0.2, 0.08], METAL] as BakeStamp, ball([0.3, 0.31, -0.16], 0.07, NEON)],\n [blade(W[1]!, W[2]!, 0.18, 0.055, PANEL), cone(W[1]!, [0.66, 0.5, -0.36], 0.08, METAL, 0.01)], NEON_LOOK);\nconst CRYSTAL_WINGS = wingVariant(\"crystal\", \"Crystal wings\", \"\uD83D\uDC8E\", \"mineral\", \"Wings of long glowing crystal shards fanning out.\",\n [cone(W[0]!, W[1]!, 0.08, CRYSTAL, 0.01), cone(W[0]!, [0.4, 0.2, -0.22], 0.08, CRYSTAL, 0.01)],\n [cone(W[1]!, W[2]!, 0.08, CRYSTAL, 0.01), cone(W[1]!, [0.66, 0.36, -0.34], 0.07, CRYSTAL, 0.01), cone(W[1]!, [0.56, 0.7, 0.04], 0.06, CRYSTAL, 0.01)], CRYSTAL_LOOK);\nconst FLAME_WINGS = wingVariant(\"flame\", \"Flame wings\", \"\uD83D\uDD25\", \"elemental\", \"Wings of streaming fire, flaring out behind.\",\n [cone(W[0]!, W[1]!, 0.16, FIRE, 0.03), cone(W[0]!, [0.44, 0.2, -0.3], 0.14, EMBER, 0.03)],\n [cone(W[1]!, W[2]!, 0.14, FIRE, 0.03), cone(W[1]!, [0.7, 0.36, -0.4], 0.12, EMBER, 0.03)], FIRE_LOOK);\n\n// ===== coats =====\n\nconst MOSS_COAT = coatVariant(\"moss\", \"Mossy coat\", \"\uD83C\uDF3F\", \"Soft moss growing in patches over the skin.\", patterned({ ...FUR, shape: \"grass\", coverage: 1 }, 8, 1.4, [0, 0, 0], 0.9, MOSS), \"plant\");\nconst BARK_COAT = coatVariant(\"bark\", \"Bark coat\", \"\uD83C\uDF33\", \"Rough ridged bark.\", patterned({ ...BARK_LOOK, foundationColor: \"@core\" }, 1, 2.6, [0, 0, 90], 0.5, \"s:black\"), \"plant\");\nconst STONE_COAT = coatVariant(\"stone\", \"Stone coat\", \"\uD83E\uDEA8\", \"Rough gravelly stone with darker cracks.\", patterned({ ...ROCK_LOOK, foundationColor: \"@core\" }, 5, 1.6, [0, 0, 0], 0.6, \"s:black\"), \"mineral\");\nconst CRYSTAL_COAT = coatVariant(\"crystal\", \"Crystal coat\", \"\uD83D\uDC8E\", \"Faceted sparkling skin that glows a little.\", { ...FUR, shape: \"diamond\", size: 0.3, coverage: 0.8, glow: 0.4, roughness: 0.1, metalness: 0.4 }, \"mineral\");\nconst PLATING = coatVariant(\"plating\", \"Metal plating\", \"\uD83D\uDEE1\uFE0F\", \"Riveted metal plates.\", { ...FUR, shape: \"plates\", size: 0.4, coverage: 0.9, metalness: 0.9, roughness: 0.3, normalStrength: 0.8 }, \"machine\");\nconst CIRCUITS = coatVariant(\"circuits\", \"Circuit coat\", \"\uD83D\uDCBE\", \"Glowing circuit traces over chrome.\", patterned({ ...SKIN, metalness: 0.8, roughness: 0.25, glow: 0.5 }, 5, 1.8, [0, 0, 0], 1, NEON), \"machine\");\nconst SPORES = coatVariant(\"spores\", \"Fungal spots\", \"\uD83C\uDF44\", \"Pale fungal spots and a powdery surface.\", patterned({ ...SHROOM_LOOK, foundationColor: \"@core\" }, 6, 1.3, [0, 0, 0], 1, SPOT), \"fungus\");\nconst LAVA = coatVariant(\"lava\", \"Lava coat\", \"\uD83C\uDF0B\", \"Dark crust split by glowing lava cracks.\", patterned({ ...ROCK_LOOK, foundationColor: \"@core\", glow: 0.6 }, 5, 1.4, [0, 0, 0], 1, FIRE), \"elemental\");\nconst SLIME_COAT = coatVariant(\"slime\", \"Slime coat\", \"\uD83E\uDEE7\", \"Glossy see-through slime.\", { ...SLIME_LOOK, foundationColor: \"@core\" }, \"elemental\");\n\n/** Made-up variants: fungus, plant, mineral, machine and elemental parts. */\nexport const FANTASY_VARIANTS: readonly PartVariant[] = [\n MUSHROOM, FLOWER, GOLEM, CRYSTAL_HEAD, ROBOT, CYBER, FLAME_HEAD, SLIME_HEAD,\n CRYSTAL_HORNS, MUSHROOM_HORNS, BRANCHES, ANTENNAS, FLAME_HORNS,\n LEAF_EARS, SATELLITE, GILLS,\n VINE, CRYSTAL_TAIL, CABLE, FLAME_TAIL, SHELF,\n MECH, BOULDER, ROOTS, STALKS, GOO,\n LEAF_WINGS, JET_WINGS, CRYSTAL_WINGS, FLAME_WINGS,\n MOSS_COAT, BARK_COAT, STONE_COAT, CRYSTAL_COAT, PLATING, CIRCUITS, SPORES, LAVA, SLIME_COAT,\n];\n", "/*\n * More made-up part variants, authored for the app: a second option for most slots of each made-up kind, and the\n * slots the first batch left out (arms, antennae, tentacles, fins). Same frames as the other variants: heads put the\n * cranium on the `Head` bone; ears, horns and antennae sit on a reference head; arms, tails, legs and wings hang from\n * a reference torso; fins and tentacles use the Fish's and the Octopus's names.\n */\nimport type { BakeLook, BakePart, BakeStamp } from \"../bake-types.js\";\nimport { ball, cone, eulerUp, limb, pair, sphere, sub3, type V3 } from \"../bake-authoring.js\";\nimport { FISH, finBones, finVariant, TAIL_BASE, tentacleVariant } from \"./aquatic-variants.js\";\nimport { coatVariant, patterned } from \"./coat-variants.js\";\nimport { earVariant } from \"./ear-variants.js\";\nimport {\n BARK_LOOK, blade, CRYSTAL_LOOK, FIRE_LOOK, LEAF_LOOK, lerp3, METAL_LOOK, NEON_LOOK, ROCK_LOOK, SHROOM_LOOK, SLIME_LOOK,\n} from \"./fantasy-variants.js\";\nimport { eyes, headVariant, mouth } from \"./head-variants.js\";\nimport { hornVariant } from \"./horn-variants.js\";\nimport { LEG_JOINTS, legVariant } from \"./leg-variants.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { tailVariant } from \"./tail-variants.js\";\nimport {\n both, CAP, corePart, CRYSTAL, EMBER, FIRE, FUR, HIPS_BONE, ICE, INNER, LEAF, mark, METAL, NEON, PALE, PANEL, PETAL, ROCK, SKIN, SLIME, SPOT, STEM, variant, WHITE,\n} from \"./variant-authoring.js\";\n\ntype Family = PartVariant[\"family\"];\n\n// ---- looks ----\n\nconst ICE_LOOK: BakeLook = { ...SKIN, foundationColor: ICE, glow: 0.35, opacity: 0.8, roughness: 0.05, metalness: 0.2 };\nconst CLOUD_LOOK: BakeLook = { ...SKIN, foundationColor: WHITE, shape: \"circle\", size: 0.5, coverage: 0.4, roughness: 0.9, glow: 0.15 };\nconst GHOST_LOOK: BakeLook = { ...SKIN, foundationColor: WHITE, opacity: 0.6, glow: 0.4, roughness: 0.3 };\nconst CACTUS_LOOK: BakeLook = { ...SKIN, foundationColor: LEAF, shape: \"star\", size: 0.12, coverage: 0.4, roughness: 0.6 };\nconst OBSIDIAN: BakeLook = { ...SKIN, roughness: 0.08, metalness: 0.5, normalStrength: 0.2 };\n\n// ---- slot helpers ----\n\n/** The reference head that ears, horns and antennae sit on (not given to rigs). */\nconst HEAD: BakePart = corePart([sphere([0, 0, 0], [0.3, 0.28, 0.3])], FUR);\n/** The reference torso that arms, tails, legs and wings hang from (not given to rigs). */\nconst TORSO: BakePart = corePart([sphere([0, 0, 0], [0.4, 0.36, 0.6])], FUR);\n\n/** An arm's joints: shoulder, elbow, wrist, hand (side L), hanging down the side of the torso. */\nconst A: readonly V3[] = [[0.14, 0.18, 0.02], [0.26, 0.14, 0.04], [0.32, -0.08, 0.06], [0.33, -0.3, 0.08]];\nconst armVariant = (id: string, name: string, icon: string, family: Family, desc: string, segs: readonly (readonly BakeStamp[])[], look: BakeLook): PartVariant =>\n variant(\"arms\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n bones: pair(\"arm\", \"Hips\", [[\"Shoulder\", A[0]!], [\"Upper Arm\", A[1]!], [\"Forearm\", A[2]!], [\"Hand\", A[3]!]]),\n parts: { Hips: TORSO, \"Shoulder L\": corePart(segs[0]!, look, 0.04), \"Upper Arm L\": corePart(segs[1]!, look, 0.04), \"Forearm L\": corePart(segs[2]!, look, 0.04), \"Hand L\": corePart(segs[3]!, look, 0.03) },\n decals: [],\n });\n\n/** An antenna's joints: from the top of the head, out and up. */\nconst N: readonly V3[] = [[0.06, 0.13, 0.04], [0.16, 0.36, 0.14]];\nconst antennaVariant = (id: string, name: string, icon: string, family: Family, desc: string, stamps: readonly BakeStamp[], look: BakeLook): PartVariant =>\n variant(\"antennae\", id, name, icon, family, desc, {\n bones: pair(\"antenna\", \"Head\", [[\"Antenna Base\", N[0]!], [\"Antenna Tip\", N[1]!]]),\n parts: { Head: HEAD, \"Antenna Base L\": corePart(stamps, look, 0.02), \"Antenna Tip L\": null },\n decals: [],\n });\n\n/** A wing hanging from the back: root, middle, tip (side L). */\nconst W: readonly V3[] = [[0.12, 0.14, 0.04], [0.42, 0.42, -0.04], [0.74, 0.62, -0.16]];\nconst wingVariant = (id: string, name: string, icon: string, family: Family, desc: string, inner: readonly BakeStamp[], outer: readonly BakeStamp[], look: BakeLook): PartVariant =>\n variant(\"wings\", id, name, icon, family, desc, {\n root: HIPS_BONE,\n bones: pair(\"wing\", \"Hips\", [[\"Wing\", W[0]!], [\"Wing Mid\", W[1]!], [\"Wing Tip\", W[2]!]]),\n parts: { Hips: TORSO, \"Wing L\": corePart(inner, look, 0.03), \"Wing Mid L\": corePart(outer, look, 0.03), \"Wing Tip L\": null },\n decals: [],\n });\n\nconst x = LEG_JOINTS[0]![0];\nconst at = (y: number, z = 0): V3 => [x, y, z];\nconst J = LEG_JOINTS;\nconst between = (a: V3, b: V3, n: number): V3[] => Array.from({ length: n }, (_, i) => lerp3(a, b, (i + 0.5) / n));\n/** A paddle-ish fin from a to b (thin across x), `w` wide. */\nconst fin = (a: V3, b: V3, w: number, color = PANEL, t = 0.05): BakeStamp => [\"sphere\", \"add\", lerp3(a, b, 0.5), eulerUp(sub3(b, a)), [t, Math.hypot(...sub3(b, a)) * 1.15, w], color];\n\n// ===================== robot (machine) =====================\n\nconst TV_C: V3 = [0, 0.02, 0];\nconst TV = headVariant(\"tv\", \"TV head\", \"\uD83D\uDCFA\", \"machine\", \"An old TV set for a head: a boxy cabinet, a glowing screen with a face on it, and rabbit-ear antennas.\", {\n parts: { Head: corePart([\n [\"cube\", \"add\", TV_C, [0, 0, 0], [0.4, 0.32, 0.3], PANEL],\n [\"cube\", \"add\", [0, 0.02, 0.13], [0, 0, 0], [0.3, 0.22, 0.06], NEON],\n ...both((s) => [\"cylinder\", \"add\", [0.17 * s, -0.08, 0.15], [Math.PI / 2, 0, 0], [0.04, 0.03, 0.04], METAL] as BakeStamp),\n ...both((s) => limb([0.05 * s, 0.16, -0.02], [0.17 * s, 0.34, -0.06], 0.035, METAL)),\n ...both((s) => ball([0.17 * s, 0.34, -0.06], 0.055, NEON)),\n ], { ...METAL_LOOK, glow: 0.4 }, 0.02) },\n decals: [...eyes([0, 0.02, 0.16], [0.3, 0.22, 0.02], \"Happy\", 0.07, [0.5, 0.3, 0.8]), mouth([0, 0.02, 0.16], [0.3, 0.22, 0.02], \"Smile\", 0.08, [0, -0.5, 0.86], \"s:black\")],\n}, { ears: \"ears:headphones\" });\n\nconst HEADPHONES = earVariant(\"headphones\", \"Headphone ears\", \"\uD83C\uDFA7\", \"Chunky headphone cups on each side, with glowing rims.\",\n [[\"Ear Base\", [0.14, 0.02, 0.0]], [\"Ear Tip\", [0.2, 0.02, 0.0]]], {\n \"Ear Base L\": corePart([[\"cylinder\", \"add\", [0.18, 0.02, 0.0], [0, 0, Math.PI / 2], [0.17, 0.08, 0.17], PANEL], [\"torus\", \"add\", [0.22, 0.02, 0.0], [0, 0, Math.PI / 2], [0.17, 0.05, 0.17], NEON]], NEON_LOOK, 0.01),\n \"Ear Tip L\": null,\n }, \"machine\");\n\nconst CLAW_ARMS = armVariant(\"claws\", \"Claw arms\", \"\uD83E\uDDBE\", \"machine\", \"Robot arms: piston joints, metal struts and pincer claws.\", [\n [ball(A[0]!, 0.14, PANEL)],\n [limb(A[1]!, A[2]!, 0.07, METAL), ball(A[1]!, 0.1, PANEL), [\"cylinder\", \"add\", lerp3(A[1]!, A[2]!, 0.5), eulerUp(sub3(A[2]!, A[1]!)), [0.1, 0.1, 0.1], PANEL] as BakeStamp],\n [limb(A[2]!, A[3]!, 0.06, METAL), ball(A[2]!, 0.09, NEON)],\n [cone(A[3]!, [0.38, -0.44, 0.14], 0.05, PANEL, 0.008), cone(A[3]!, [0.28, -0.44, 0.14], 0.05, PANEL, 0.008)],\n], METAL_LOOK);\n\nconst RODS = antennaVariant(\"rods\", \"Antenna rods\", \"\uD83D\uDCE1\", \"machine\", \"Segmented metal rods with glowing bulbs at the tips.\",\n [limb(N[0]!, N[1]!, 0.025, METAL), ...between(N[0]!, N[1]!, 3).map((p): BakeStamp => [\"cylinder\", \"add\", p, eulerUp(sub3(N[1]!, N[0]!)), [0.05, 0.02, 0.05], PANEL]), ball(N[1]!, 0.06, NEON)], NEON_LOOK);\n\nconst CABLES = tentacleVariant(\"cables\", \"Cable tentacles\", \"\uD83D\uDD0C\", \"Segmented power cables ending in glowing plugs.\",\n (_k, j, a, b) => [limb(a, b, 0.09 - j * 0.012, METAL), [\"cylinder\", \"add\", b, eulerUp(sub3(b, a)), [0.12 - j * 0.012, 0.04, 0.12 - j * 0.012], PANEL] as BakeStamp, ...(j === 3 ? [ball(b, 0.08, NEON)] : [])],\n NEON_LOOK, 1, 1, \"machine\");\n\nconst SUB_FINS = finVariant(\"sub\", \"Submarine fins\", \"\uD83D\uDEA2\", \"Riveted metal rudders and dive planes, with a glowing propeller hub at the tail.\",\n finBones([0, 0.32, -0.74], [0, -0.32, -0.74], [0, 0.46, -0.12], [0.36, -0.1, 0.06], [0.08, -0.36, -0.1]), {\n \"Tail Fin Upper\": corePart([fin(TAIL_BASE, [0, 0.32, -0.74], 0.22), ball([0, 0, -0.5], 0.12, NEON)], NEON_LOOK, 0.02),\n \"Tail Fin Lower\": corePart([fin(TAIL_BASE, [0, -0.32, -0.74], 0.22)], METAL_LOOK, 0.02),\n \"Dorsal Fin\": corePart([[\"cube\", \"add\", [0, 0.36, -0.1], [0, 0, 0], [0.06, 0.22, 0.28], PANEL], [\"cylinder\", \"add\", [0, 0.52, -0.06], [0, 0, 0], [0.03, 0.12, 0.03], METAL]], METAL_LOOK, 0.02),\n \"Pectoral Fin Base L\": corePart([[\"cube\", \"add\", [0.26, -0.08, 0.12], [0, 0, -0.2], [0.24, 0.03, 0.14], PANEL]], METAL_LOOK, 0.02),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": corePart([fin([0.06, -0.2, -0.04], [0.08, -0.36, -0.1], 0.1)], METAL_LOOK, 0.02),\n }, \"machine\");\n\nconst DRILL = tailVariant(\"drill\", \"Drill tail\", \"\uD83D\uDD29\", \"A tail ending in a spiral drill bit.\",\n [[0, 0.05, -0.29], [0, 0.03, -0.42], [0, 0.0, -0.54], [0, -0.02, -0.66], [0, -0.04, -0.86]],\n (j) => [[limb(j[0]!, j[1]!, 0.08, METAL)], [limb(j[1]!, j[2]!, 0.07, METAL), ball(j[2]!, 0.1, PANEL)],\n [limb(j[2]!, j[3]!, 0.06, METAL)],\n [cone(j[3]!, j[4]!, 0.16, PANEL, 0.01), ...[0.2, 0.45, 0.7].map((t): BakeStamp => mark(lerp3(j[3]!, j[4]!, t), [0.17 - t * 0.15, 0.02, 0.17 - t * 0.15], \"s:black\", [0.6, 0, 0.3]))]],\n METAL_LOOK, 0.02, \"machine\");\n\nconst PROP_HUB: V3 = [0.32, 0.36, -0.04];\nconst PROPELLERS = wingVariant(\"propellers\", \"Propeller wings\", \"\uD83D\uDE81\", \"machine\", \"Short metal struts holding spinning propellers.\",\n [limb(W[0]!, PROP_HUB, 0.06, METAL), [\"cylinder\", \"add\", PROP_HUB, [0, 0, 0], [0.1, 0.08, 0.1], PANEL] as BakeStamp],\n [...[0, 2.1, 4.2].map((a): BakeStamp => [\"sphere\", \"add\", [PROP_HUB[0] + 0.17 * Math.cos(a), PROP_HUB[1] + 0.05, PROP_HUB[2] + 0.17 * Math.sin(a)], [0, -a, 0.15], [0.32, 0.03, 0.08], PANEL]), ball([PROP_HUB[0], PROP_HUB[1] + 0.06, PROP_HUB[2]], 0.06, NEON)],\n METAL_LOOK);\n\nconst RUSTY = coatVariant(\"rusty\", \"Rusty metal\", \"\u2699\uFE0F\", \"Worn metal with blotches of rust.\", patterned({ ...SKIN, metalness: 0.7, roughness: 0.55, shape: \"plates\", size: 0.4, coverage: 0.6 }, 8, 1.3, [0, 0, 0], 0.8, \"s:1\"), \"machine\");\n\n// ===================== plant =====================\n\nconst TRAP_C: V3 = [0, 0, 0];\nconst FLYTRAP = headVariant(\"flytrap\", \"Flytrap head\", \"\uD83E\uDEB4\", \"plant\", \"A Venus flytrap of a head: two jaw lobes edged with soft spikes, pink inside.\", {\n parts: { Head: corePart([\n sphere([0, 0, -0.04], [0.26, 0.24, 0.26], LEAF),\n [\"sphere\", \"add\", [0, 0.08, 0.12], [-0.35, 0, 0], [0.34, 0.1, 0.32], LEAF],\n [\"sphere\", \"add\", [0, -0.1, 0.12], [0.3, 0, 0], [0.34, 0.1, 0.32], LEAF],\n mark([0, 0.0, 0.2], [0.3, 0.1, 0.12], INNER),\n ...[-0.12, -0.04, 0.04, 0.12].flatMap((xx): BakeStamp[] => [cone([xx, 0.07, 0.26], [xx * 1.1, -0.0, 0.32], 0.025, PALE, 0.004), cone([xx, -0.08, 0.26], [xx * 1.1, -0.01, 0.32], 0.025, PALE, 0.004)]),\n ], LEAF_LOOK, 0.04) },\n decals: eyes([0, 0.1, 0.06], [0.3, 0.16, 0.3], \"Cute\", 0.08, [0.4, 0.6, 0.7]),\n}, { ears: \"ears:petals\" });\n\nconst CAC_C: V3 = [0, 0.04, 0], CAC_S: V3 = [0.28, 0.36, 0.28];\nconst CACTUS = headVariant(\"cactus\", \"Cactus head\", \"\uD83C\uDF35\", \"plant\", \"A ribbed cactus head bristling with little spines, with a flower on top.\", {\n parts: { Head: corePart([\n sphere(CAC_C, CAC_S, LEAF),\n ...[0, 1, 2, 3, 4, 5].map((i): BakeStamp => { const a = (i / 6) * Math.PI * 2; return mark([0.135 * Math.sin(a), 0.04, 0.135 * Math.cos(a)], [0.02, 0.34, 0.02], \"s:black\", [0, a, 0]); }),\n ...Array.from({ length: 14 }, (_, i): BakeStamp[] => {\n const y = 1 - (2 * (i + 0.5)) / 14, r = Math.sqrt(1 - y * y), t = i * 2.4, n: V3 = [r * Math.cos(t), y, r * Math.sin(t)];\n if (n[2] > 0.5 && Math.abs(n[1]) < 0.6) return [];\n return [cone([n[0] * 0.13, 0.04 + n[1] * 0.17, n[2] * 0.13], [n[0] * 0.18, 0.04 + n[1] * 0.22, n[2] * 0.18], 0.015, PALE, 0.003)];\n }).flat(),\n ...[0, 1.25, 2.5, 3.75, 5].map((a): BakeStamp => [\"sphere\", \"add\", [0.05 * Math.cos(a), 0.24, 0.05 * Math.sin(a)], [0, -a, 0.6], [0.08, 0.03, 0.05], PETAL]),\n ball([0, 0.25, 0], 0.04, \"@spot\"),\n ], CACTUS_LOOK, 0.04) },\n decals: [...eyes(CAC_C, CAC_S, \"Cute\", 0.08, [0.35, 0.1, 0.93]), mouth(CAC_C, CAC_S, \"Smile\", 0.06, [0, -0.2, 0.98], \"s:black\")],\n});\n\nconst PETALS = earVariant(\"petals\", \"Petal ears\", \"\uD83C\uDF38\", \"Big soft flower petals for ears.\",\n [[\"Ear Base\", [0.09, 0.12, 0.0]], [\"Ear Tip\", [0.2, 0.32, -0.02]]], {\n \"Ear Base L\": corePart([blade([0.09, 0.12, 0.0], [0.2, 0.32, -0.02], 0.16, 0.05, PETAL), mark([0.13, 0.19, 0.02], [0.05, 0.08, 0.03], PALE)], SKIN, 0.02),\n \"Ear Tip L\": null,\n }, \"plant\");\n\nconst BLOSSOMS = hornVariant(\"blossoms\", \"Blossom crown\", \"\uD83C\uDF3C\", \"Little flowers on curly stems, like a crown.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.06, 0.13, 0.02]], [\"Horn Tip\", [0.12, 0.3, 0.04]]]), {\n \"Horn Base L\": corePart([\n limb([0.06, 0.13, 0.02], [0.12, 0.3, 0.04], 0.03, STEM),\n ...[0, 1.25, 2.5, 3.75, 5].map((a): BakeStamp => [\"sphere\", \"add\", [0.12 + 0.05 * Math.cos(a), 0.32, 0.04 + 0.05 * Math.sin(a)], [0, -a, 0.5], [0.08, 0.04, 0.05], PETAL]),\n ball([0.12, 0.33, 0.04], 0.045, \"@spot\"),\n blade([0.08, 0.19, 0.03], [0.17, 0.21, 0.06], 0.05, 0.03, LEAF),\n ], SKIN, 0.02),\n \"Horn Tip L\": null,\n }, undefined, \"plant\");\n\nconst VINE_ARMS = armVariant(\"vines\", \"Vine arms\", \"\uD83C\uDF3F\", \"plant\", \"Twisting vine arms that end in a spray of leaves.\", [\n [ball(A[0]!, 0.1, STEM)],\n [limb(A[1]!, A[2]!, 0.07, STEM), blade(lerp3(A[1]!, A[2]!, 0.5), [0.4, 0.06, 0.1], 0.07, 0.04, LEAF)],\n [limb(A[2]!, A[3]!, 0.06, STEM)],\n [...[-0.5, 0, 0.5].map((a): BakeStamp => blade(A[3]!, [A[3]![0] + 0.12 * Math.sin(a), -0.44, A[3]![2] + 0.1 * Math.cos(a)], 0.08, 0.04, LEAF))],\n], BARK_LOOK);\n\nconst TENDRILS = antennaVariant(\"tendrils\", \"Tendrils\", \"\uD83C\uDF31\", \"plant\", \"Thin curly plant tendrils with a bud at the end.\",\n [limb(N[0]!, N[1]!, 0.03, STEM), ...Array.from({ length: 5 }, (_, i): BakeStamp => { const t = (i / 5) * Math.PI * 1.6; return ball([N[1]![0] + 0.05 * Math.cos(t), N[1]![1] + 0.05 * Math.sin(t), N[1]![2]], 0.035, STEM); }), ball([N[1]![0] + 0.05, N[1]![1], N[1]![2]], 0.06, LEAF)], BARK_LOOK);\n\nconst THORNS = tentacleVariant(\"thorns\", \"Thorny vines\", \"\uD83E\uDD40\", \"Thick green vines studded with thorns, sprouting leaves.\",\n (k, j, a, b) => [limb(a, b, 0.14 - j * 0.025, STEM), cone(lerp3(a, b, 0.5), [lerp3(a, b, 0.5)[0] * 1.15, lerp3(a, b, 0.5)[1] + 0.05, lerp3(a, b, 0.5)[2] * 1.15], 0.04, PALE, 0.004), ...(j === 1 && k % 2 ? [blade(b, [b[0] * 1.2, b[1] + 0.1, b[2] * 1.2], 0.1, 0.04, LEAF)] : [])],\n BARK_LOOK, 1, 1, \"plant\");\n\nconst CATTAIL = tailVariant(\"cattail\", \"Cattail\", \"\uD83C\uDF3E\", \"A tall reed of a tail topped with a brown velvety spike.\",\n [[0, 0.06, -0.29], [0, 0.18, -0.4], [0, 0.36, -0.46], [0, 0.56, -0.46], [0, 0.72, -0.42]],\n (j) => [[limb(j[0]!, j[1]!, 0.05, STEM)], [limb(j[1]!, j[2]!, 0.045, STEM), blade(j[1]!, [0.06, 0.42, -0.5], 0.05, 0.03, LEAF)], [limb(j[2]!, j[3]!, 0.04, STEM)], [limb(j[3]!, j[4]!, 0.11, \"s:2\"), ball(j[4]!, 0.04, STEM)]],\n BARK_LOOK, 0.03, \"plant\");\n\nconst CACTUS_COAT = coatVariant(\"cactus\", \"Cactus skin\", \"\uD83C\uDF35\", \"Ribbed skin with tiny star-shaped spines.\", patterned({ ...CACTUS_LOOK, foundationColor: \"@core\" }, 1, 2.2, [0, 0, 90], 0.4, \"s:black\"), \"plant\");\nconst FLORAL = coatVariant(\"floral\", \"Floral coat\", \"\uD83C\uDF38\", \"Little flowers scattered over the skin.\", patterned({ ...SKIN, shape: \"star\", size: 0.25, coverage: 0.3 }, 6, 1.5, [0, 0, 0], 1, PETAL), \"plant\");\n\n// ===================== mushroom (fungus) =====================\n\nconst MOREL = headVariant(\"morel\", \"Morel head\", \"\uD83C\uDF44\u200D\uD83D\uDFEB\", \"fungus\", \"A tall honeycombed morel cap on a pale face.\", {\n parts: { Head: corePart([\n sphere([0, -0.02, 0.02], [0.28, 0.24, 0.28], PALE),\n [\"sphere\", \"add\", [0, 0.2, -0.02], [0, 0, 0], [0.3, 0.42, 0.3], CAP],\n ...Array.from({ length: 16 }, (_, i): BakeStamp => { const y = 0.06 + (i % 4) * 0.08, a = i * 1.7; return mark([0.15 * Math.cos(a), y + 0.04, 0.15 * Math.sin(a)], [0.06, 0.05, 0.06], \"s:black\"); }),\n ], SHROOM_LOOK, 0.04) },\n decals: [...eyes([0, -0.02, 0.02], [0.28, 0.24, 0.28], \"Round\", 0.08, [0.35, 0, 0.94]), mouth([0, -0.02, 0.02], [0.28, 0.24, 0.28], \"Small\", 0.06, [0, -0.45, 0.9], \"s:black\")],\n});\n\nconst PUFF_C: V3 = [0, 0.02, 0], PUFF_S: V3 = [0.36, 0.32, 0.34];\nconst PUFFBALL = headVariant(\"puffball\", \"Puffball head\", \"\u26AA\", \"fungus\", \"A round soft puffball dusted with spores, with a little hole on top.\", {\n parts: { Head: corePart([\n sphere(PUFF_C, PUFF_S, PALE),\n [\"sphere\", \"subtract\", [0, 0.18, 0], [0, 0, 0], [0.06, 0.06, 0.06], PALE],\n ...Array.from({ length: 12 }, (_, i): BakeStamp => { const a = i * 2.4, y = -0.1 + (i / 12) * 0.24; return mark([0.17 * Math.cos(a), y, 0.17 * Math.sin(a)], [0.03, 0.03, 0.03], SPOT); }),\n ], { ...SHROOM_LOOK, shape: \"sand\", coverage: 0.6 }, 0.04) },\n decals: [...eyes(PUFF_C, PUFF_S, \"Cute\", 0.1, [0.35, 0.05, 0.93]), mouth(PUFF_C, PUFF_S, \"Open\", 0.06, [0, -0.35, 0.94], \"s:black\")],\n});\n\nconst SHELF_EARS = earVariant(\"shelf\", \"Shelf ears\", \"\uD83C\uDF44\", \"Bracket fungi stacked on each side of the head.\",\n [[\"Ear Base\", [0.14, 0.04, -0.02]], [\"Ear Tip\", [0.24, 0.06, -0.02]]], {\n \"Ear Base L\": corePart([0.1, 0.0, -0.08].map((y, i): BakeStamp => [\"dome\", \"add\", [0.2 - i * 0.02, y + 0.08, -0.02 - i * 0.02], [0, 0, -0.25], [0.2 - i * 0.03, 0.08, 0.16 - i * 0.02], CAP])\n .concat([mark([0.22, 0.12, -0.02], [0.03, 0.03, 0.03], SPOT)]), SHROOM_LOOK, 0.02),\n \"Ear Tip L\": null,\n }, \"fungus\");\n\nconst GILL_WINGS = wingVariant(\"gills\", \"Gill wings\", \"\uD83C\uDF44\", \"fungus\", \"Fans of mushroom gills spreading like wings, with spotted caps along the top edge.\",\n [...[0, 1, 2, 3].map((i): BakeStamp => fin(W[0]!, [0.42, 0.2 + i * 0.07, -0.2 + i * 0.06], 0.07, PALE, 0.04)), [\"dome\", \"add\", W[1]!, [0, 0, -0.6], [0.22, 0.08, 0.18], CAP] as BakeStamp],\n [...[0, 1, 2].map((i): BakeStamp => fin(W[1]!, [0.72, 0.5 + i * 0.07, -0.24 + i * 0.06], 0.06, PALE, 0.04)), [\"dome\", \"add\", W[2]!, [0, 0, -0.8], [0.18, 0.07, 0.14], CAP] as BakeStamp, mark(W[2]!, [0.04, 0.04, 0.04], SPOT)],\n SHROOM_LOOK);\n\nconst SPORES = antennaVariant(\"spores\", \"Spore stalks\", \"\uD83C\uDF44\", \"fungus\", \"Thin pale stalks carrying puffs of spores.\",\n [limb(N[0]!, N[1]!, 0.03, PALE), ball(N[1]!, 0.09, CAP), ...[0, 2, 4].map((a): BakeStamp => ball([N[1]![0] + 0.05 * Math.cos(a), N[1]![1] + 0.04, N[1]![2] + 0.05 * Math.sin(a)], 0.035, SPOT))], SHROOM_LOOK);\n\nconst MYCELIUM = tentacleVariant(\"mycelium\", \"Mycelium tentacles\", \"\uD83D\uDD78\uFE0F\", \"Pale threadlike tentacles that branch and bead.\",\n (_k, j, a, b) => [limb(a, b, 0.07 - j * 0.012, PALE), ball(b, 0.09 - j * 0.012, PALE), cone(lerp3(a, b, 0.5), [lerp3(a, b, 0.5)[0] * 1.25, lerp3(a, b, 0.5)[1] - 0.05, lerp3(a, b, 0.5)[2] * 1.25], 0.025, PALE, 0.004)],\n SHROOM_LOOK, 1, 1, \"fungus\");\n\nconst MUSHROOM_ARMS = armVariant(\"stalks\", \"Stalk arms\", \"\uD83C\uDF44\", \"fungus\", \"Pale stalk arms with little caps at the shoulders and puffball fists.\", [\n [[\"dome\", \"add\", [A[0]![0], A[0]![1] + 0.08, A[0]![2]], [0, 0, -0.3], [0.2, 0.1, 0.2], CAP] as BakeStamp, ball(A[0]!, 0.1, PALE)],\n [limb(A[1]!, A[2]!, 0.07, PALE)],\n [limb(A[2]!, A[3]!, 0.065, PALE)],\n [ball([A[3]![0], A[3]![1] - 0.04, A[3]![2]], 0.11, PALE), mark([A[3]![0] + 0.03, A[3]![1] - 0.03, A[3]![2] + 0.04], [0.03, 0.03, 0.03], SPOT)],\n], SHROOM_LOOK);\n\nconst LICHEN = coatVariant(\"lichen\", \"Lichen coat\", \"\uD83E\uDEA8\", \"Crusty patches of pale lichen.\", patterned({ ...SHROOM_LOOK, foundationColor: \"@core\", shape: \"sand\", coverage: 0.7 }, 8, 1.8, [0, 0, 0], 0.9, PALE), \"fungus\");\n\n// ===================== crystal & stone (mineral) =====================\n\nconst GEODE_C: V3 = [0, 0.02, 0], GEODE_S: V3 = [0.34, 0.3, 0.32];\nconst GEODE = headVariant(\"geode\", \"Geode head\", \"\uD83D\uDD2E\", \"mineral\", \"A rough rock head cracked open on top to show a nest of glowing crystals.\", {\n parts: { Head: corePart([\n sphere(GEODE_C, GEODE_S, ROCK),\n [\"sphere\", \"subtract\", [0, 0.2, -0.02], [0, 0, 0], [0.24, 0.16, 0.22], ROCK],\n ...[[0, 0.1, 0, 0, 0.24, -0.02], [0.06, 0.1, 0.03, 0.1, 0.22, 0.05], [-0.06, 0.1, -0.02, -0.1, 0.21, -0.05], [0.03, 0.1, -0.06, 0.05, 0.2, -0.12]].map((c): BakeStamp => cone([c[0]!, c[1]!, c[2]!], [c[3]!, c[4]!, c[5]!], 0.06, CRYSTAL, 0.006)),\n ], ROCK_LOOK, 0.03) },\n decals: [...eyes(GEODE_C, GEODE_S, \"Sparkle\", 0.08, [0.36, 0.0, 0.93]), mouth(GEODE_C, GEODE_S, \"Flat\", 0.07, [0, -0.4, 0.92], \"s:black\")],\n});\n\nconst CRYSTAL_EARS = earVariant(\"crystals\", \"Crystal ears\", \"\uD83D\uDC8E\", \"Tall glowing crystal shards in place of ears.\",\n [[\"Ear Base\", [0.1, 0.11, 0.0]], [\"Ear Tip\", [0.18, 0.34, -0.03]]], {\n \"Ear Base L\": corePart([cone([0.1, 0.11, 0.0], [0.18, 0.34, -0.03], 0.09, CRYSTAL, 0.006), cone([0.11, 0.12, 0.0], [0.24, 0.24, 0.0], 0.05, CRYSTAL, 0.006)], CRYSTAL_LOOK, 0.01),\n \"Ear Tip L\": null,\n }, \"mineral\");\n\nconst BOULDER_ARMS = armVariant(\"boulders\", \"Boulder arms\", \"\uD83E\uDEA8\", \"mineral\", \"Arms of stacked stones ending in huge rock fists.\", [\n [[\"cube\", \"add\", A[0]!, [0.3, 0.2, 0.1], [0.18, 0.16, 0.18], ROCK] as BakeStamp],\n [[\"cube\", \"add\", lerp3(A[1]!, A[2]!, 0.4), [0.2, 0.4, 0.3], [0.14, 0.18, 0.14], ROCK] as BakeStamp],\n [[\"cube\", \"add\", lerp3(A[2]!, A[3]!, 0.4), [0.1, -0.3, 0.2], [0.13, 0.16, 0.13], ROCK] as BakeStamp],\n [[\"cube\", \"add\", [A[3]![0], A[3]![1] - 0.06, A[3]![2]], [0.3, 0.5, 0.2], [0.2, 0.18, 0.2], ROCK] as BakeStamp],\n], ROCK_LOOK);\n\nconst CRYSTAL_ANTENNAE = antennaVariant(\"crystals\", \"Crystal antennae\", \"\uD83D\uDC8E\", \"mineral\", \"Thin crystal spires with a glowing gem at the end.\",\n [cone(N[0]!, N[1]!, 0.05, CRYSTAL, 0.006), [\"cube\", \"add\", N[1]!, [0.6, 0.78, 0], [0.06, 0.06, 0.06], CRYSTAL] as BakeStamp], CRYSTAL_LOOK);\n\nconst STALACTITES = tentacleVariant(\"stalactites\", \"Stalactite tentacles\", \"\uD83E\uDDCA\", \"Tapering stone tentacles ringed with crystal.\",\n (_k, j, a, b) => [cone(a, b, 0.16 - j * 0.03, ROCK, 0.02), ...(j % 2 ? [cone(lerp3(a, b, 0.4), [lerp3(a, b, 0.4)[0] * 1.2, lerp3(a, b, 0.4)[1] + 0.06, lerp3(a, b, 0.4)[2] * 1.2], 0.05, CRYSTAL, 0.005)] : [])],\n ROCK_LOOK, 1, 1, \"mineral\");\n\nconst SHARD_FINS = finVariant(\"shards\", \"Shard fins\", \"\uD83D\uDC8E\", \"Fins of flat glowing crystal shards.\",\n finBones([0, 0.36, -0.8], [0, -0.36, -0.8], [0, 0.6, -0.14], [0.36, -0.22, -0.04], [0.08, -0.38, 0]), {\n \"Tail Fin Upper\": corePart([cone(TAIL_BASE, [0, 0.36, -0.8], 0.14, CRYSTAL, 0.005), cone(TAIL_BASE, [0, 0.18, -0.86], 0.09, CRYSTAL, 0.005)], CRYSTAL_LOOK, 0.01),\n \"Tail Fin Lower\": corePart([cone(TAIL_BASE, [0, -0.36, -0.8], 0.14, CRYSTAL, 0.005), cone(TAIL_BASE, [0, -0.18, -0.86], 0.09, CRYSTAL, 0.005)], CRYSTAL_LOOK, 0.01),\n \"Dorsal Fin\": corePart([cone([0, 0.2, 0.05], [0, 0.6, -0.14], 0.12, CRYSTAL, 0.005), cone([0, 0.2, -0.05], [0, 0.48, -0.26], 0.09, CRYSTAL, 0.005)], CRYSTAL_LOOK, 0.01),\n \"Pectoral Fin Base L\": corePart([cone(FISH.pecBase, [0.36, -0.22, -0.04], 0.09, CRYSTAL, 0.005)], CRYSTAL_LOOK, 0.01),\n \"Pectoral Fin Tip L\": null,\n \"Pelvic Fin L\": corePart([cone([0.06, -0.22, 0.04], [0.08, -0.38, 0], 0.06, CRYSTAL, 0.005)], CRYSTAL_LOOK, 0.01),\n }, \"mineral\");\n\nconst CRYSTAL_LEGS = legVariant(\"crystals\", \"Crystal legs\", \"\uD83D\uDC8E\", \"mineral\", \"Faceted glowing crystal legs on flat gem feet.\", [\n [cone(J[1]!, J[0]!, 0.15, CRYSTAL, 0.01)],\n [cone(J[2]!, J[1]!, 0.12, CRYSTAL, 0.01), cone(J[1]!, J[2]!, 0.12, CRYSTAL, 0.01)],\n [[\"cube\", \"add\", at(-0.54, 0.03), [0, 0.78, 0], [0.16, 0.08, 0.16], CRYSTAL] as BakeStamp, limb(J[2]!, at(-0.52), 0.08, CRYSTAL)],\n], CRYSTAL_LOOK);\n\nconst CLUB = tailVariant(\"club\", \"Rock club tail\", \"\uD83E\uDEA8\", \"A heavy stone tail ending in a spiked boulder club.\",\n [[0, 0.04, -0.29], [0, 0.02, -0.44], [0, -0.02, -0.58], [0, -0.06, -0.72], [0, -0.08, -0.84]],\n (j) => [[limb(j[0]!, j[1]!, 0.12, ROCK)], [limb(j[1]!, j[2]!, 0.1, ROCK)], [limb(j[2]!, j[3]!, 0.08, ROCK)],\n [[\"cube\", \"add\", j[4]!, [0.4, 0.6, 0.3], [0.22, 0.18, 0.22], ROCK] as BakeStamp, ...both((s) => cone(j[4]!, [0.18 * s, -0.08, -0.84], 0.07, CRYSTAL, 0.006))]],\n ROCK_LOOK, 0.03, \"mineral\");\n\nconst OBSIDIAN_COAT = coatVariant(\"obsidian\", \"Obsidian coat\", \"\u26AB\", \"Glassy black volcanic stone, glossy and sharp.\", OBSIDIAN, \"mineral\");\nconst MARBLE = coatVariant(\"marble\", \"Marble coat\", \"\uD83C\uDFDB\uFE0F\", \"Polished stone with fine dark veins.\", patterned({ ...SKIN, roughness: 0.2 }, 5, 1.1, [0, 0, 0], 0.5, \"s:black\"), \"mineral\");\n\n// ===================== elemental (fire, ice, storm, slime, spirit) =====================\n\nconst ICE_C: V3 = [0, 0.02, 0], ICE_S: V3 = [0.32, 0.3, 0.3];\nconst ICE_HEAD = headVariant(\"ice\", \"Ice head\", \"\u2744\uFE0F\", \"elemental\", \"A clear frozen head crowned with icicles.\", {\n parts: { Head: corePart([\n sphere(ICE_C, ICE_S, ICE),\n ...[[0, 0.14, -0.02, 0, 0.34, -0.06], [0.08, 0.13, 0, 0.13, 0.3, -0.03], [-0.08, 0.13, 0, -0.13, 0.3, -0.03], [0.04, 0.13, -0.08, 0.07, 0.27, -0.18], [-0.04, 0.13, -0.08, -0.07, 0.27, -0.18]].map((c): BakeStamp => cone([c[0]!, c[1]!, c[2]!], [c[3]!, c[4]!, c[5]!], 0.06, ICE, 0.006)),\n ], ICE_LOOK, 0.04) },\n decals: [...eyes(ICE_C, ICE_S, \"Narrow\", 0.08, [0.36, 0.08, 0.93]), mouth(ICE_C, ICE_S, \"Flat\", 0.06, [0, -0.4, 0.92], \"s:black\")],\n}, { horns: \"horns:icicles\" });\n\nconst STORM_C: V3 = [0, 0.02, 0], STORM_S: V3 = [0.3, 0.28, 0.3];\nconst STORM = headVariant(\"storm\", \"Storm cloud head\", \"\u26C8\uFE0F\", \"elemental\", \"A puffy storm cloud for a head, with lightning bolts crackling from it.\", {\n parts: { Head: corePart([\n sphere(STORM_C, STORM_S, WHITE),\n ...[[0.14, 0.06, 0, 0.2], [-0.14, 0.06, 0, 0.2], [0, 0.16, -0.04, 0.24], [0.08, 0.1, -0.12, 0.2], [-0.08, 0.1, -0.12, 0.2], [0.18, -0.04, -0.06, 0.16], [-0.18, -0.04, -0.06, 0.16]].map((p): BakeStamp => ball([p[0]!, p[1]!, p[2]!], p[3]!, WHITE)),\n ...both((s) => cone([0.12 * s, -0.12, 0.02], [0.2 * s, -0.3, 0.06], 0.05, FIRE, 0.004)),\n ], CLOUD_LOOK, 0.06) },\n decals: [...eyes(STORM_C, STORM_S, \"Angry\", 0.08, [0.36, 0.05, 0.93]), mouth(STORM_C, STORM_S, \"Zigzag\", 0.1, [0, -0.35, 0.94], \"s:black\")],\n});\n\nconst GHOST_C: V3 = [0, 0.04, 0], GHOST_S: V3 = [0.32, 0.34, 0.3];\nconst GHOST = headVariant(\"ghost\", \"Ghost head\", \"\uD83D\uDC7B\", \"elemental\", \"A see-through glowing ghost head trailing a wisp behind.\", {\n parts: { Head: corePart([\n sphere(GHOST_C, GHOST_S, WHITE),\n cone([0, 0.0, -0.08], [0.04, -0.06, -0.36], 0.18, WHITE, 0.06),\n ], GHOST_LOOK, 0.08) },\n decals: [...eyes(GHOST_C, GHOST_S, \"Wide\", 0.09, [0.35, 0.1, 0.93]), mouth(GHOST_C, GHOST_S, \"Open\", 0.09, [0, -0.35, 0.94], \"s:black\")],\n});\n\nconst FLAME_EARS = earVariant(\"flames\", \"Flame ears\", \"\uD83D\uDD25\", \"Licks of fire flickering up where ears would be.\",\n [[\"Ear Base\", [0.09, 0.12, 0.0]], [\"Ear Tip\", [0.16, 0.34, -0.04]]], {\n \"Ear Base L\": corePart([cone([0.09, 0.12, 0.0], [0.16, 0.34, -0.04], 0.13, FIRE, 0.03), cone([0.1, 0.12, 0.0], [0.22, 0.26, -0.06], 0.08, EMBER, 0.03)], FIRE_LOOK, 0.03),\n \"Ear Tip L\": null,\n }, \"elemental\");\n\nconst FROST_EARS = earVariant(\"frost\", \"Frost ears\", \"\u2744\uFE0F\", \"Pointed ears of clear ice, frosted at the tips.\",\n [[\"Ear Base\", [0.1, 0.11, 0.0]], [\"Ear Tip\", [0.15, 0.3, -0.02]]], {\n \"Ear Base L\": corePart([[\"cone\", \"add\", [0.125, 0.205, -0.01], [0, 0, -0.25], [0.14, 0.2, 0.05], ICE, { blend: 0.02 }], mark([0.15, 0.28, -0.02], [0.05, 0.05, 0.05], WHITE)], ICE_LOOK, 0.02),\n \"Ear Tip L\": null,\n }, \"elemental\");\n\nconst ICICLES = hornVariant(\"icicles\", \"Icicle horns\", \"\uD83E\uDDCA\", \"Long clear icicles sweeping back from the head.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.08, 0.12, 0.0]], [\"Horn Tip\", [0.16, 0.32, -0.16]]]), {\n \"Horn Base L\": corePart([cone([0.08, 0.12, 0.0], [0.16, 0.32, -0.16], 0.08, ICE, 0.006), cone([0.09, 0.13, -0.02], [0.2, 0.22, -0.18], 0.05, ICE, 0.006)], ICE_LOOK, 0.01),\n \"Horn Tip L\": null,\n }, undefined, \"elemental\");\n\nconst BOLTS = hornVariant(\"bolts\", \"Lightning horns\", \"\u26A1\", \"Zigzag lightning bolts sparking from the head.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.07, 0.13, 0.0]], [\"Horn Mid\", [0.14, 0.24, -0.02]], [\"Horn Tip\", [0.12, 0.38, -0.04]]]), {\n \"Horn Base L\": corePart([cone([0.07, 0.13, 0.0], [0.17, 0.25, -0.02], 0.05, FIRE, 0.004)], { ...FIRE_LOOK, glow: 2 }, 0.01),\n \"Horn Mid L\": corePart([cone([0.17, 0.25, -0.02], [0.1, 0.27, -0.03], 0.045, FIRE, 0.004), cone([0.1, 0.27, -0.03], [0.14, 0.4, -0.05], 0.04, FIRE, 0.004)], { ...FIRE_LOOK, glow: 2 }, 0.01),\n \"Horn Tip L\": null,\n }, undefined, \"elemental\");\n\nconst FLAME_ARMS = armVariant(\"flames\", \"Flame arms\", \"\uD83D\uDD25\", \"elemental\", \"Arms of living fire that flare into flames at the hands.\", [\n [ball(A[0]!, 0.12, FIRE)],\n [limb(A[1]!, A[2]!, 0.09, FIRE)],\n [limb(A[2]!, A[3]!, 0.08, EMBER)],\n [cone(A[3]!, [0.36, -0.5, 0.1], 0.14, FIRE, 0.03), cone(A[3]!, [0.28, -0.46, 0.12], 0.08, EMBER, 0.03)],\n], FIRE_LOOK);\n\nconst WISPS = antennaVariant(\"wisps\", \"Wisps\", \"\u2728\", \"elemental\", \"Glowing wisps of spirit-light curling up from the head.\",\n [cone(N[0]!, N[1]!, 0.06, WHITE, 0.03), ball(N[1]!, 0.07, NEON)], { ...GHOST_LOOK, glow: 1 });\n\nconst FLAME_TENTACLES = tentacleVariant(\"flames\", \"Flame tentacles\", \"\uD83D\uDD25\", \"Streamers of fire, flickering to points.\",\n (_k, j, a, b) => [j < 3 ? limb(a, b, 0.12 - j * 0.025, j % 2 ? EMBER : FIRE) : cone(a, b, 0.07, FIRE, 0.02)],\n FIRE_LOOK, 1, 1, \"elemental\");\n\nconst ICE_TAIL = tailVariant(\"ice\", \"Ice tail\", \"\uD83E\uDDCA\", \"A tail of clear ice segments ending in a long icicle.\",\n [[0, 0.05, -0.29], [0, 0.02, -0.44], [0, -0.02, -0.58], [0, -0.06, -0.7], [0, -0.1, -0.86]],\n (j) => [[limb(j[0]!, j[1]!, 0.1, ICE)], [limb(j[1]!, j[2]!, 0.09, ICE)], [limb(j[2]!, j[3]!, 0.08, ICE)], [cone(j[3]!, j[4]!, 0.09, ICE, 0.006)]],\n ICE_LOOK, 0.03, \"elemental\");\n\nconst STORM_TAIL = tailVariant(\"storm\", \"Storm tail\", \"\u26C8\uFE0F\", \"Puffs of cloud trailing off with a lightning bolt.\",\n [[0, 0.06, -0.29], [0, 0.08, -0.44], [0, 0.04, -0.58], [0, -0.04, -0.68], [0, -0.16, -0.72]],\n (j) => [[ball(j[1]!, 0.18, WHITE)], [ball(j[2]!, 0.15, WHITE)], [ball(j[3]!, 0.12, WHITE)], [cone(j[3]!, [0.04, -0.2, -0.7], 0.05, FIRE, 0.004), cone([0.04, -0.2, -0.7], [-0.02, -0.3, -0.76], 0.04, FIRE, 0.004)]],\n CLOUD_LOOK, 0.05, \"elemental\");\n\nconst WISP_TAIL = tailVariant(\"wisp\", \"Wisp tail\", \"\uD83D\uDC7B\", \"A ghostly tail that fades to a glowing point.\",\n [[0, 0.06, -0.29], [0, 0.04, -0.46], [0.04, 0.08, -0.62], [0, 0.16, -0.74], [-0.04, 0.26, -0.8]],\n (j) => [[cone(j[1]!, j[0]!, 0.2, WHITE, 0.05)], [cone(j[2]!, j[1]!, 0.15, WHITE, 0.05)], [cone(j[3]!, j[2]!, 0.1, WHITE, 0.05)], [cone(j[3]!, j[4]!, 0.06, WHITE, 0.03), ball(j[4]!, 0.05, NEON)]],\n GHOST_LOOK, 0.06, \"elemental\");\n\nconst ICE_LEGS = legVariant(\"ice\", \"Ice legs\", \"\uD83E\uDDCA\", \"elemental\", \"Clear ice legs with frosted joints and icy feet.\", [\n [limb(J[0]!, J[1]!, 0.11, ICE)],\n [ball(J[1]!, 0.12, WHITE), limb(J[1]!, J[2]!, 0.09, ICE)],\n [ball(J[2]!, 0.1, WHITE), [\"cube\", \"add\", at(-0.55, 0.03), [0, 0.6, 0], [0.14, 0.06, 0.18], ICE] as BakeStamp, limb(J[2]!, at(-0.53), 0.08, ICE)],\n], ICE_LOOK);\n\nconst CLOUD_LEGS = legVariant(\"clouds\", \"Cloud legs\", \"\u2601\uFE0F\", \"elemental\", \"Puffy cloud legs, like walking on little storm clouds.\", [\n [ball(lerp3(J[0]!, J[1]!, 0.5), 0.16, WHITE)],\n [ball(lerp3(J[1]!, J[2]!, 0.5), 0.15, WHITE)],\n [ball(at(-0.5, 0.02), 0.2, WHITE), ball(at(-0.5, 0.12), 0.12, WHITE), ball([x + 0.07, -0.5, -0.06], 0.12, WHITE)],\n], CLOUD_LOOK);\n\nconst FROST_WINGS = wingVariant(\"frost\", \"Frost wings\", \"\u2744\uFE0F\", \"elemental\", \"Wings of clear ice, fanning into icicle feathers.\",\n [cone(W[0]!, W[1]!, 0.09, ICE, 0.008), ...[0, 1, 2].map((i): BakeStamp => cone(lerp3(W[0]!, W[1]!, 0.4 + i * 0.2), [0.3 + i * 0.1, 0.1 + i * 0.1, -0.3], 0.06, ICE, 0.006))],\n [cone(W[1]!, W[2]!, 0.08, ICE, 0.008), ...[0, 1].map((i): BakeStamp => cone(lerp3(W[1]!, W[2]!, 0.4 + i * 0.3), [0.58 + i * 0.12, 0.36 + i * 0.1, -0.44], 0.05, ICE, 0.006))],\n ICE_LOOK);\n\nconst STORM_WINGS = wingVariant(\"storm\", \"Storm wings\", \"\u26C8\uFE0F\", \"elemental\", \"Billowing cloud wings with lightning flickering underneath.\",\n [ball(lerp3(W[0]!, W[1]!, 0.4), 0.2, WHITE), ball(lerp3(W[0]!, W[1]!, 0.8), 0.22, WHITE)],\n [ball(lerp3(W[1]!, W[2]!, 0.3), 0.2, WHITE), ball(lerp3(W[1]!, W[2]!, 0.75), 0.16, WHITE), cone(W[1]!, [0.56, 0.22, -0.12], 0.05, FIRE, 0.004)],\n CLOUD_LOOK);\n\nconst FROST_COAT = coatVariant(\"frost\", \"Frost coat\", \"\u2744\uFE0F\", \"A sparkle of frost crystals over pale skin.\", patterned({ ...SKIN, shape: \"star\", size: 0.2, coverage: 0.5, glow: 0.3 }, 6, 2, [0, 0, 0], 0.8, ICE), \"elemental\");\nconst STORM_COAT = coatVariant(\"storm\", \"Storm coat\", \"\u26A1\", \"Crackling bolts of lightning over dark storm clouds.\", patterned({ ...SKIN, glow: 0.5, roughness: 0.7 }, 5, 1.6, [0, 0, 0], 1, FIRE), \"elemental\");\nconst SLIME_DRIPS = coatVariant(\"goo\", \"Goo coat\", \"\uD83E\uDEE7\", \"Drippy translucent goo in blobs.\", patterned({ ...SLIME_LOOK, foundationColor: \"@core\" }, 6, 1.2, [0, 0, 0], 0.8, SLIME), \"elemental\");\n\n/** The second batch of made-up variants. */\nexport const FANTASY_MORE_VARIANTS: readonly PartVariant[] = [\n // robot\n TV, HEADPHONES, CLAW_ARMS, RODS, CABLES, SUB_FINS, DRILL, PROPELLERS, RUSTY,\n // plant\n FLYTRAP, CACTUS, PETALS, BLOSSOMS, VINE_ARMS, TENDRILS, THORNS, CATTAIL, CACTUS_COAT, FLORAL,\n // mushroom\n MOREL, PUFFBALL, SHELF_EARS, GILL_WINGS, SPORES, MYCELIUM, MUSHROOM_ARMS, LICHEN,\n // crystal & stone\n GEODE, CRYSTAL_EARS, BOULDER_ARMS, CRYSTAL_ANTENNAE, STALACTITES, SHARD_FINS, CRYSTAL_LEGS, CLUB, OBSIDIAN_COAT, MARBLE,\n // elemental\n ICE_HEAD, STORM, GHOST, FLAME_EARS, FROST_EARS, ICICLES, BOLTS, FLAME_ARMS, WISPS, FLAME_TENTACLES, ICE_TAIL, STORM_TAIL, WISP_TAIL, ICE_LEGS, CLOUD_LEGS, FROST_WINGS, STORM_WINGS, FROST_COAT, STORM_COAT, SLIME_DRIPS,\n];\n", "/*\n * More land-animal variants, authored for the app: heads (cranium on the `Head` bone, as the first batch), horns and\n * ears on the reference head, and coats.\n */\nimport type { BakeDecal, BakeStamp } from \"../bake-types.js\";\nimport { ball, cone, limb, onEllipsoid, pair, sphere, type V3 } from \"../bake-authoring.js\";\nimport { coatVariant, patterned } from \"./coat-variants.js\";\nimport { earVariant } from \"./ear-variants.js\";\nimport { eyes, headVariant, mouth } from \"./head-variants.js\";\nimport { hornVariant } from \"./horn-variants.js\";\nimport type { PartVariant } from \"./part-variant.js\";\nimport { both, CORE, corePart, FUR, HORNY, INNER, mark, NOSE, PALE, SKIN, STRIPE, TUSK, WHITE } from \"./variant-authoring.js\";\n\n// ---- heads ----\n\nconst DEER_C: V3 = [0, 0.03, 0], DEER_S: V3 = [0.28, 0.28, 0.28];\nconst DEER = headVariant(\"deer\", \"Deer head\", \"\uD83E\uDD8C\", \"mammal\", \"A gentle deer head: a slim tapered snout, a black nose and big eyes.\", {\n parts: { Head: corePart([\n sphere(DEER_C, DEER_S),\n limb([0, 0.0, 0.06], [0, -0.07, 0.24], 0.14),\n mark([0, -0.09, 0.2], [0.13, 0.08, 0.16], PALE),\n ball([0, -0.065, 0.285], 0.06, NOSE),\n ]) },\n decals: [...eyes(DEER_C, DEER_S, \"Cute\", 0.1, [0.6, 0.25, 0.75]), mouth([0, -0.07, 0.2], [0.14, 0.12, 0.2], \"Small\", 0.06, [0, -0.7, 0.7], \"s:black\")],\n}, { horns: \"horns:antlers\", ears: \"ears:horse\" });\n\nconst GIR_C: V3 = [0, 0.04, -0.02], GIR_S: V3 = [0.24, 0.26, 0.26];\nconst GIRAFFE = headVariant(\"giraffe\", \"Giraffe head\", \"\uD83E\uDD92\", \"mammal\", \"A long giraffe head with a soft muzzle and dark patches.\", {\n parts: { Head: corePart([\n sphere(GIR_C, GIR_S),\n limb([0, 0.0, 0.04], [0, -0.1, 0.3], 0.17),\n sphere([0, -0.11, 0.32], [0.18, 0.15, 0.16]),\n mark([0, -0.12, 0.35], [0.19, 0.13, 0.12], PALE),\n ...([[0.08, 0.08, 0.02], [-0.07, 0.1, -0.04], [0.06, -0.02, 0.16], [-0.06, -0.03, 0.14]] as V3[]).map((p): BakeStamp => mark(p, [0.08, 0.07, 0.08], STRIPE)),\n ], SKIN) },\n decals: [...eyes(GIR_C, GIR_S, \"Glossy Eye\", 0.08, [0.65, 0.3, 0.6]), mouth([0, -0.11, 0.32], [0.18, 0.15, 0.16], \"Smile\", 0.07, [0, -0.7, 0.7], \"s:black\")],\n}, { horns: \"horns:ossicones\", ears: \"ears:horse\" });\n\nconst HIPPO = headVariant(\"hippo\", \"Hippo head\", \"\uD83E\uDD9B\", \"mammal\", \"A hippo head: a huge wide muzzle with nostril bumps, little eyes on top and two tusks.\", {\n parts: { Head: corePart([\n sphere([0, 0.06, -0.04], [0.32, 0.28, 0.28]),\n sphere([0, -0.07, 0.15], [0.46, 0.3, 0.36]),\n ...both((s) => ball([0.08 * s, 0.07, 0.28], 0.07)),\n ...both((s) => ball([0.09 * s, 0.15, 0.02], 0.09)),\n ...both((s) => cone([0.14 * s, -0.14, 0.24], [0.15 * s, -0.04, 0.27], 0.035, TUSK, 0.005)),\n ], SKIN) },\n decals: [\n // the eyes on the bumps on top of the head\n ...([1, -1] as const).map((side): BakeDecal => ({ bone: \"Head\", cat: \"eye\", name: \"Round\", size: 0.06, ...(side < 0 ? { flip: true } : {}), ...onEllipsoid([0.09 * side, 0.15, 0.02], [0.09, 0.09, 0.09], [0.3 * side, 0.4, 0.85]) })),\n mouth([0, -0.07, 0.15], [0.46, 0.3, 0.36], \"Grin\", 0.2, [0, -0.35, 0.95], \"s:black\"),\n ],\n}, { ears: \"ears:mouse\" });\n\nconst RAC_C: V3 = [0, 0.03, 0], RAC_S: V3 = [0.32, 0.28, 0.3];\nconst RACCOON = headVariant(\"raccoon\", \"Raccoon head\", \"\uD83E\uDD9D\", \"mammal\", \"A raccoon: a pointed snout, white brows and a black bandit mask.\", {\n parts: { Head: corePart([\n sphere(RAC_C, RAC_S),\n ...both((s) => sphere([0.1 * s, -0.04, 0.04], [0.15, 0.14, 0.15])),\n limb([0, -0.03, 0.1], [0, -0.06, 0.24], 0.11),\n mark([0, -0.06, 0.18], [0.12, 0.08, 0.14], WHITE),\n ball([0, -0.05, 0.28], 0.055, NOSE),\n mark([0, 0.04, 0.13], [0.34, 0.08, 0.12], STRIPE), // the mask\n ...both((s) => mark([0.07 * s, 0.1, 0.12], [0.08, 0.035, 0.1], WHITE)),\n ]) },\n decals: [...eyes(RAC_C, RAC_S, \"Glossy Eye\", 0.08, [0.42, 0.25, 0.87]), mouth([0, -0.04, 0.17], [0.12, 0.1, 0.16], \"Cat Mouth\", 0.07, [0, -0.5, 1])],\n}, { ears: \"ears:cat\" });\n\nconst KOALA_C: V3 = [0, 0.02, 0], KOALA_S: V3 = [0.36, 0.32, 0.3];\nconst KOALA = headVariant(\"koala\", \"Koala head\", \"\uD83D\uDC28\", \"mammal\", \"A koala: a wide round head with a big black oval nose.\", {\n parts: { Head: corePart([\n sphere(KOALA_C, KOALA_S),\n [\"sphere\", \"add\", [0, -0.01, 0.15], [0, 0, 0], [0.09, 0.13, 0.08], NOSE],\n mark([0, -0.11, 0.1], [0.16, 0.08, 0.12], PALE),\n ]) },\n decals: [...eyes(KOALA_C, KOALA_S, \"Dot\", 0.06, [0.42, 0.3, 0.86]), mouth(KOALA_C, KOALA_S, \"Small\", 0.06, [0, -0.5, 0.86], \"s:black\")],\n}, { ears: \"ears:fluffy\" });\n\nconst RHINO_C: V3 = [0, 0.04, -0.02], RHINO_S: V3 = [0.3, 0.28, 0.3];\nconst RHINO = headVariant(\"rhino\", \"Rhino head\", \"\uD83E\uDD8F\", \"mammal\", \"A heavy rhino head with a long snout and folds of thick skin.\", {\n parts: { Head: corePart([\n sphere(RHINO_C, RHINO_S),\n sphere([0, -0.05, 0.2], [0.26, 0.22, 0.36]),\n mark([0, 0.0, 0.06], [0.3, 0.03, 0.04], STRIPE), // a skin fold\n ], { ...SKIN, shape: \"cement\", coverage: 0.5, normalStrength: 0.6 }) },\n decals: [...eyes(RHINO_C, RHINO_S, \"Dot\", 0.05, [0.7, 0.25, 0.6]), mouth([0, -0.05, 0.2], [0.26, 0.22, 0.36], \"Flat\", 0.1, [0, -0.6, 0.8], \"s:black\")],\n}, { horns: \"horns:rhino\", ears: \"ears:horse\" });\n\n// ---- horns ----\n\nconst OSSICONES = hornVariant(\"ossicones\", \"Ossicones\", \"\uD83E\uDD92\", \"Two short furry knobs on top of the head, as a giraffe's.\",\n pair(\"horn\", \"Head\", [[\"Horn Base\", [0.06, 0.13, -0.02]], [\"Horn Tip\", [0.08, 0.27, -0.06]]]), {\n \"Horn Base L\": corePart([limb([0.06, 0.13, -0.02], [0.08, 0.27, -0.06], 0.05), ball([0.08, 0.28, -0.06], 0.075, STRIPE)], FUR, 0.02),\n \"Horn Tip L\": null,\n });\n\nconst MOOSE_PALM: V3 = [0.36, 0.24, -0.02];\nconst MOOSE = hornVariant(\"moose\", \"Moose antlers\", \"\uD83E\uDECE\", \"Wide palmate antlers spreading flat out to the sides, edged with points.\",\n pair(\"horn\", \"Head\", [[\"Antler Base\", [0.1, 0.12, -0.02]], [\"Antler Beam\", [0.2, 0.17, -0.04]], [\"Antler Palm\", MOOSE_PALM]]), {\n \"Antler Base L\": corePart([limb([0.1, 0.12, -0.02], [0.2, 0.17, -0.04], 0.06, PALE)], HORNY, 0.02),\n \"Antler Beam L\": corePart([\n [\"sphere\", \"add\", [0.32, 0.25, -0.02], [0, 0, 0.5], [0.05, 0.36, 0.3], PALE],\n ...([[0.4, 0.44, 0.06], [0.48, 0.38, 0.02], [0.52, 0.28, -0.04], [0.36, 0.44, -0.12]] as V3[]).map((t): BakeStamp => cone(MOOSE_PALM, t, 0.04, PALE, 0.01)),\n ], HORNY, 0.02),\n \"Antler Palm L\": null,\n });\n\n// ---- ears ----\n\nconst HORSE_EARS = earVariant(\"horse\", \"Horse ears\", \"\uD83D\uDC34\", \"Tall, narrow ears standing up and turned a little forward.\",\n [[\"Ear Base\", [0.08, 0.12, 0.0]], [\"Ear Tip\", [0.12, 0.32, 0.05]]], {\n \"Ear Base L\": corePart([[\"cone\", \"add\", [0.1, 0.22, 0.025], [-0.25, 0, -0.2], [0.11, 0.21, 0.05], CORE, { blend: 0.02 }], mark([0.1, 0.2, 0.04], [0.05, 0.12, 0.03], INNER)], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst FENNEC = earVariant(\"fennec\", \"Fennec ears\", \"\uD83E\uDD8A\", \"Enormous triangular ears, pale inside, as a desert fox's.\",\n [[\"Ear Base\", [0.09, 0.12, -0.01]], [\"Ear Tip\", [0.24, 0.5, -0.05]]], {\n \"Ear Base L\": corePart([[\"cone\", \"add\", [0.165, 0.31, -0.03], [0, 0, -0.38], [0.28, 0.42, 0.05], CORE, { blend: 0.02 }], mark([0.16, 0.27, -0.01], [0.15, 0.28, 0.03], PALE, [0, 0, -0.38])], FUR, 0.03),\n \"Ear Tip L\": null,\n });\n\nconst FLUFFY = earVariant(\"fluffy\", \"Fluffy ears\", \"\uD83D\uDC28\", \"Big round fluffy ears with tufted edges, as a koala's.\",\n [[\"Ear Base\", [0.12, 0.1, -0.02]], [\"Ear Tip\", [0.24, 0.18, -0.02]]], {\n \"Ear Base L\": corePart([\n [\"sphere\", \"add\", [0.2, 0.17, -0.02], [0, 0, -0.6], [0.26, 0.26, 0.07], CORE],\n mark([0.2, 0.17, 0.0], [0.17, 0.17, 0.04], PALE, [0, 0, -0.6]),\n ...Array.from({ length: 7 }, (_, i): BakeStamp => { const a = -0.6 + (i / 6) * 3.1; return ball([0.2 + 0.13 * Math.cos(a), 0.17 + 0.13 * Math.sin(a), -0.02], 0.07); }),\n ], FUR, 0.04),\n \"Ear Tip L\": null,\n });\n\n// ---- coats ----\n\nconst GIRAFFE_COAT = coatVariant(\"giraffe\", \"Giraffe patches\", \"\uD83E\uDD92\", \"Big dark patches in a net of pale lines.\", patterned(SKIN, 4, 2.4, [0, 0, 0], 1));\nconst TABBY = coatVariant(\"tabby\", \"Tabby stripes\", \"\uD83D\uDC08\", \"Soft tabby stripes over the fur.\", patterned(FUR, 1, 1.3, [90, 0, 0], 0.7));\n\n/** Land-animal variants: more heads, horns, ears and coats. */\nexport const LAND_VARIANTS: readonly PartVariant[] = [DEER, GIRAFFE, HIPPO, RACCOON, KOALA, RHINO, OSSICONES, MOOSE, HORSE_EARS, FENNEC, FLUFFY, GIRAFFE_COAT, TABBY];\n", "import type { PartVariantInfo } from \"@dreamy/api\";\nimport { findTemplate, type SkeletonTemplate } from \"../template-catalog.js\";\nimport { AQUATIC_VARIANTS } from \"./aquatic-variants.js\";\nimport { COAT_VARIANTS } from \"./coat-variants.js\";\nimport { EAR_VARIANTS } from \"./ear-variants.js\";\nimport { FANTASY_MORE_VARIANTS } from \"./fantasy-more-variants.js\";\nimport { FANTASY_VARIANTS } from \"./fantasy-variants.js\";\nimport { HEAD_VARIANTS } from \"./head-variants.js\";\nimport { HORN_VARIANTS } from \"./horn-variants.js\";\nimport { LAND_VARIANTS } from \"./land-variants.js\";\nimport { LEG_VARIANTS } from \"./leg-variants.js\";\nimport { TAIL_VARIANTS } from \"./tail-variants.js\";\nimport type { PartVariant } from \"./part-variant.js\";\n\nexport type { PartVariant } from \"./part-variant.js\";\n\n/** Every part variant, by slot then picker order. */\nexport const PART_VARIANTS: readonly PartVariant[] = [...HEAD_VARIANTS, ...EAR_VARIANTS, ...HORN_VARIANTS, ...TAIL_VARIANTS, ...LEG_VARIANTS, ...COAT_VARIANTS, ...LAND_VARIANTS, ...AQUATIC_VARIANTS, ...FANTASY_VARIANTS, ...FANTASY_MORE_VARIANTS];\n\nexport const PART_VARIANT_INFOS: readonly PartVariantInfo[] = PART_VARIANTS.map(({ id, slot, name, icon, family }) => ({ id, slot, name, icon, family }));\n\nexport const findVariant = (id: string): PartVariant | undefined => PART_VARIANTS.find((v) => v.id === id);\n\n/** A kit's source: a premade template or a part variant. */\nexport const findKitTemplate = (id: string): SkeletonTemplate | undefined => findTemplate(id) ?? findVariant(id);\n", "import type { BodyPart, Decal, FlatWing, Material, PartSlot, Rig, SculptLook, Stamp, Vec3 } from \"@dreamy/api\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { DEFAULT_REGION_BLENDS } from \"../atoms/rig/bone-region.js\";\nimport { buildPremadeRig } from \"./build-premade-rig.js\";\nimport { premadeFit } from \"./premade-fit.js\";\nimport { COAT_ROLES, slotChains, type SlotChain } from \"./part-slots.js\";\nimport { findKitTemplate } from \"./variants/index.js\";\n\n/** A stamp of a kit with the look of the part it came from. */\nexport type KitStamp = { readonly stamp: Stamp; readonly look: SculptLook };\n\n/** One chain of a kit, in its premade's rig space at the template's default fit. */\nexport type KitChain = {\n /** Its first bone's name (to match a rig's chain of the same name). */\n readonly name?: string;\n readonly start: Vec3;\n readonly end: Vec3;\n /** Its joints in order, when the chain is a single path (no branches): parts are fitted segment by segment. */\n readonly path?: readonly Vec3[];\n readonly side: 1 | -1 | 0;\n readonly front: boolean;\n readonly stamps: readonly KitStamp[];\n readonly decals: readonly Decal[];\n /** The chain's flat wing, when its parts are a flat membrane. */\n readonly wing?: { readonly wing: Omit<FlatWing, \"frame\">; readonly material: Material };\n};\n\n/** A premade's parts for one slot (chains), or its coat (the look of its torso). */\nexport type PartKit = { readonly chains: readonly KitChain[]; readonly coat?: SculptLook };\n\nconst rigs = new Map<string, Rig>();\n\n/** The premade's (or part variant's) rig as built for a new rig (cached; ids are local to the kit). */\nexport function kitRig(templateId: string): Rig | undefined {\n const cached = rigs.get(templateId);\n if (cached) return cached;\n const tpl = findKitTemplate(templateId);\n if (!tpl) return undefined;\n let n = 0;\n const rig = buildPremadeRig(tpl, { fit: premadeFit(tpl), withBody: true, mirror: false, regionBlends: DEFAULT_REGION_BLENDS }, { next: () => `kit${++n}` });\n rigs.set(templateId, rig);\n return rig;\n}\n\n/** The farthest head of a chain from its start: where the chain points and how long it is. */\nconst farthest = (heads: readonly Vec3[]): Vec3 =>\n heads.reduce((a, h) => (Math.hypot(h.x - heads[0]!.x, h.y - heads[0]!.y, h.z - heads[0]!.z) > Math.hypot(a.x - heads[0]!.x, a.y - heads[0]!.y, a.z - heads[0]!.z) ? h : a), heads[0]!);\n\n/** True when a chain is a single path: each of its bones has at most one child in it. */\nexport const isPath = (c: SlotChain): boolean =>\n c.bones.length > 1 && c.bones.every((b) => c.bones.filter((x) => x.parentId === b.id).length <= 1);\n\n/** A premade's kit for a slot; undefined for an unknown premade. */\nexport function partKit(templateId: string, slot: PartSlot): PartKit | undefined {\n const rig = kitRig(templateId);\n if (!rig) return undefined;\n const partOf = (id: string): BodyPart | undefined => rig.parts.find((p) => p.boneId === id);\n if (slot === \"coat\") {\n const torso = rig.parts.find((p) => p.kind === \"sculpt\" && resolveBoneRole(rig.bones.find((b) => b.id === p.boneId)!) === \"core\");\n const any = rig.parts.find((p) => p.kind === \"sculpt\" && COAT_ROLES.has(resolveBoneRole(rig.bones.find((b) => b.id === p.boneId)!)));\n const look = (torso ?? any)?.kind === \"sculpt\" ? ((torso ?? any) as Extract<BodyPart, { kind: \"sculpt\" }>).sculpt.look : undefined;\n return { chains: [], ...(look ? { coat: look } : {}) };\n }\n const chains = slotChains(rig.bones, slot).map((c): KitChain => {\n const parts = c.bones.map((b) => partOf(b.id)).filter((p): p is BodyPart => p !== undefined);\n const flat = parts.find((p) => p.kind === \"wing\");\n const sculpts = parts.filter((p): p is Extract<BodyPart, { kind: \"sculpt\" }> => p.kind === \"sculpt\");\n return {\n name: c.bones[0]!.name,\n start: c.heads[0]!,\n end: farthest(c.heads),\n ...(isPath(c) ? { path: c.heads } : {}),\n side: c.side,\n front: c.front,\n stamps: sculpts.flatMap((p) => p.sculpt.stamps.map((stamp) => ({ stamp, look: p.sculpt.look }))),\n decals: sculpts.flatMap((p) => p.sculpt.decals),\n ...(flat?.kind === \"wing\" ? { wing: { wing: (({ frame: _f, ...rest }) => rest)(flat.wing), material: flat.material } } : {}),\n };\n });\n return { chains };\n}\n", "import type { Bone, BodyPart, Decal, Id, IdGenerator, PartSlot, Quaternion, Rig, SculptLook, Stamp, Vec3 } from \"@dreamy/api\";\nimport { fromUnitVectors, IDENTITY_Q, multiplyQ, normalizeQ, rotate } from \"../atoms/math/quat.js\";\nimport { add, dot, length, normalize, scale, sub, vec3 } from \"../atoms/math/vec3.js\";\nimport { DEFAULT_PIVOT } from \"../atoms/look/default-look.js\";\nimport { bindHeads } from \"../atoms/rig/bone-matrices.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { mirrorRotation } from \"../atoms/rig/mirror-transform.js\";\nimport { rigExtent } from \"../atoms/rig/rig-extent.js\";\nimport { sizePoint } from \"../atoms/rig/size-frame.js\";\nimport { boneTree } from \"./bone-tree.js\";\nimport { isPath, partKit, type KitChain } from \"./part-kits.js\";\nimport { COAT_ROLES, slotChains, type SlotChain } from \"./part-slots.js\";\nimport { stampsBox } from \"./stamps-box.js\";\nimport { findKitTemplate } from \"./variants/index.js\";\nimport { wingFrameFor } from \"./wing-frame.js\";\n\nexport type FittedSlot = { readonly parts: BodyPart[]; readonly removed: Id[] };\n\ntype Sculpted = Extract<BodyPart, { kind: \"sculpt\" }>;\n/**\n * A head's size: its largest additive stamp (the cranium), by the mean of its half-sizes, so a mane, a long snout\n * or a trunk doesn't shrink the face, and a long head doesn't blow up what's fitted to it.\n */\nconst radius = (stamps: readonly Stamp[]): number => {\n const adds = stamps.filter((st) => st.mode === \"add\");\n if (adds.length === 0) return 0;\n const cranium = adds.reduce((a, st) => (st.scale.x * st.scale.y * st.scale.z > a.scale.x * a.scale.y * a.scale.z ? st : a));\n return Math.cbrt(cranium.scale.x * cranium.scale.y * cranium.scale.z) / 2;\n};\n\n/** A chain's name without its side: \"Pectoral Fin Base L\" \u2192 \"Pectoral Fin Base\". */\nconst stem = (name: string): string => name.replace(/ [LR]$/, \"\");\n\n/**\n * The source chain that suits a target chain best: the same name (a fish's Dorsal Fin for its Dorsal Fin, an arm for\n * the same arm), then the same side, then the same front / hind place.\n */\nfunction pick(chains: readonly KitChain[], t: SlotChain): KitChain {\n const score = (c: KitChain) => (c.name !== undefined && stem(c.name) === stem(t.bones[0]!.name) ? 4 : 0) + (c.side === t.side ? 2 : c.side === 0 || t.side === 0 ? 1 : 0) + (c.front === t.front ? 1 : 0);\n return [...chains].sort((a, b) => score(b) - score(a))[0]!;\n}\n\n/** A polyline: its points and the length up to each. */\ntype Polyline = { readonly pts: readonly Vec3[]; readonly cum: readonly number[]; readonly total: number };\nfunction polyline(pts: readonly Vec3[]): Polyline {\n const cum = [0];\n for (let i = 1; i < pts.length; i++) cum.push(cum[i - 1]! + length(sub(pts[i]!, pts[i - 1]!)));\n return { pts, cum, total: cum[cum.length - 1]! };\n}\nconst segDir = (P: Polyline, k: number): Vec3 => {\n const d = sub(P.pts[k + 1]!, P.pts[k]!);\n return length(d) > 1e-9 ? normalize(d) : vec3(0, 1, 0);\n};\n/** Where a point sits along a polyline: its fraction of the length (beyond 0\u20131 past the ends), segment and offset. */\nfunction locate(P: Polyline, p: Vec3): { u: number; k: number; off: Vec3 } {\n let best = { u: 0, k: 0, off: sub(p, P.pts[0]!), d: Infinity };\n for (let k = 0; k + 1 < P.pts.length; k++) {\n const a = P.pts[k]!, ab = sub(P.pts[k + 1]!, a), L2 = dot(ab, ab);\n if (L2 < 1e-12) continue;\n let t = dot(sub(p, a), ab) / L2;\n // the ends extend past the first and last joints (a foot below the ankle, a shoulder above the hip)\n t = Math.min(k + 2 === P.pts.length ? Infinity : 1, Math.max(k === 0 ? -Infinity : 0, t));\n const q = add(a, scale(ab, t)), off = sub(p, q), d = length(off);\n if (d < best.d) best = { u: (P.cum[k]! + t * Math.sqrt(L2)) / P.total, k, off, d };\n }\n return best;\n}\n/** The point at a fraction of a polyline's length (extended past the ends) and its direction there. */\nfunction along(P: Polyline, u: number): { pos: Vec3; dir: Vec3 } {\n const L = u * P.total;\n let k = 0;\n while (k + 2 < P.pts.length && L > P.cum[k + 1]!) k++;\n const dir = segDir(P, k);\n return { pos: add(P.pts[k]!, scale(dir, L - P.cum[k]!)), dir };\n}\n\nconst distanceToSegment = (p: Vec3, a: Vec3, b: Vec3): number => {\n const ab = sub(b, a), L2 = dot(ab, ab);\n const t = L2 > 1e-12 ? Math.max(0, Math.min(1, dot(sub(p, a), ab) / L2)) : 0;\n return length(sub(p, add(a, scale(ab, t))));\n};\n\n/**\n * The size a bone's part is drawn with is applied by the viewport on top of its stamps (phase A), so a stamp fitted\n * to a sized bone is stored un-sized: back along the bone by its length, back across it by its thickness.\n */\nconst unsize = (bone: Bone, bones: readonly Bone[], heads: Map<Id, Vec3>, p: Vec3, s: Vec3) => sizePoint(bone, bones, heads, p, s, true);\n\n/** A premade rig's coat: the kit's fleck, pattern and material on every skin part (colors stay the rig's). */\nfunction fitCoat(rig: Rig, coat: SculptLook): FittedSlot {\n const parts = rig.parts.filter((p): p is Sculpted => {\n const bone = rig.bones.find((b) => b.id === p.boneId);\n return p.kind === \"sculpt\" && bone !== undefined && COAT_ROLES.has(resolveBoneRole(bone));\n });\n return {\n parts: parts.map((p) => ({ ...p, sculpt: { ...p.sculpt, look: { ...p.sculpt.look, fleck: coat.fleck, material: coat.material, pattern: coat.pattern } } })),\n removed: [],\n };\n}\n\n/**\n * How a kit's head maps onto a rig's head: the kit's head joint goes to the rig's, scaled by the heads' size (the\n * same as the head stamps are fitted with); facing is kept.\n */\nexport function headSimilarity(rig: Rig, kitId: string): { readonly from: Vec3; readonly to: Vec3; readonly s: number } | undefined {\n const src = partKit(kitId, \"head\")?.chains[0];\n const t = slotChains(rig.bones, \"head\")[0];\n if (!src || !t) return undefined;\n const current = t.bones.flatMap((b) => {\n const p = rig.parts.find((x) => x.boneId === b.id);\n return p?.kind === \"sculpt\" ? p.sculpt.stamps : [];\n });\n const rs = radius(src.stamps.map((k) => k.stamp)), rt = radius(current);\n return { from: src.start, to: t.heads[0]!, s: rs > 1e-6 && rt > 1e-6 ? rt / rs : 1 };\n}\n\n/**\n * Fits another premade's parts for `slot` onto a rig's chains. Each target chain takes the source chain that suits it\n * (same side, front / hind; mirrored across when only the other side exists) through a similarity transform: aligned\n * to the chain's direction and scaled by its length (a head keeps its facing and is scaled to the rig's current head).\n * Each stamp goes to the nearest bone of the chain, so poses still bend it. Flat wings get a frame from the new bones.\n */\nexport function fitPartSlot(rig: Rig, slot: PartSlot, kitId: string, ids: IdGenerator): FittedSlot | string {\n const tpl = findKitTemplate(kitId);\n if (!tpl) return `There is no premade \"${kitId}\".`;\n const kit = partKit(kitId, slot);\n if (!kit) return `There is no premade \"${kitId}\".`;\n if (slot === \"coat\") return kit.coat ? fitCoat(rig, kit.coat) : `The ${tpl.name} has no coat to give.`;\n const targets = slotChains(rig.bones, slot);\n if (targets.length === 0) return `This creature has no ${slot}.`;\n if (kit.chains.length === 0) return `The ${tpl.name} has no ${slot} to give.`;\n\n const heads = bindHeads(rig.bones);\n const tree = boneTree(rig.bones);\n const extent = rigExtent([...heads.values()]);\n const parts: BodyPart[] = [];\n const removed: Id[] = [];\n const own = (id: Id) => rig.parts.find((p) => p.boneId === id);\n\n for (const t of targets) {\n const src = pick(kit.chains, t);\n const mirror = src.side !== 0 && t.side !== 0 && src.side !== t.side;\n const flip = (v: Vec3): Vec3 => (mirror ? vec3(-v.x, v.y, v.z) : v);\n let R: Quaternion = IDENTITY_Q, s = 1;\n if (slot === \"head\") {\n const current = t.bones.flatMap((b) => {\n const p = own(b.id);\n return p?.kind === \"sculpt\" ? p.sculpt.stamps : [];\n });\n const rs = radius(src.stamps.map((k) => k.stamp)), rt = radius(current);\n s = rs > 1e-6 && rt > 1e-6 ? rt / rs : 1;\n } else {\n const ds = flip(sub(src.end, src.start)), dt = sub(t.heads.reduce((a, h) => (length(sub(h, t.heads[0]!)) > length(sub(a, t.heads[0]!)) ? h : a), t.heads[0]!), t.heads[0]!);\n if (length(ds) > 1e-6 && length(dt) > 1e-6) {\n s = length(dt) / length(ds);\n R = fromUnitVectors(normalize(ds), normalize(dt));\n }\n }\n let place = (p: Vec3) => add(t.heads[0]!, scale(rotate(flip(sub(p, src.start)), R), s));\n let turn = (q: Quaternion, _p: Vec3) => normalizeQ(multiplyQ(R, mirror ? mirrorRotation(q) : q));\n let sizeOf = (st: Stamp): Vec3 => scale(st.scale, s);\n // a single-path chain onto a single-path chain: each part follows its own segment, so a knee or a hock bends\n // the borrowed leg as the rig's leg bends\n if (slot !== \"head\" && src.path && isPath(t)) {\n const S = polyline(src.path.map(flip)), T = polyline(t.heads);\n if (S.total > 1e-6 && T.total > 1e-6) {\n // across the bone, by the smaller of the path and the straight top-to-end ratios: a folded leg (a rabbit's\n // hind leg) has a long path in a short reach, and shouldn't thicken by it\n const reach = (P: Polyline) => length(sub(P.pts[P.pts.length - 1]!, P.pts[0]!));\n const k = Math.min(T.total / S.total, reach(S) > 1e-6 ? reach(T) / reach(S) : Infinity);\n const warp = (p: Vec3) => {\n const at = locate(S, flip(p)), to = along(T, at.u);\n return { at, to, R: fromUnitVectors(segDir(S, at.k), to.dir) };\n };\n s = k;\n // a stamp lying along its bone (a capsule) also stretches along it by the path ratio, so it still reaches\n // the next joint; across, it keeps the thickness ratio\n const kAlong = T.total / S.total;\n sizeOf = (st) => {\n const dir = flip(segDir(S, locate(S, flip(st.position)).k));\n const axes = [vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1)].map((e) => Math.abs(dot(rotate(e, st.rotation), dir)));\n const i = axes.indexOf(Math.max(...axes));\n const f = (j: number) => (j === i && axes[i]! > 0.7 ? kAlong : k);\n return vec3(st.scale.x * f(0), st.scale.y * f(1), st.scale.z * f(2));\n };\n place = (p) => {\n const w = warp(p);\n return add(w.to.pos, scale(rotate(w.at.off, w.R), k));\n };\n turn = (q, p) => normalizeQ(multiplyQ(warp(p).R, mirror ? mirrorRotation(q) : q));\n }\n }\n\n // a flat membrane: the chain's first bone gets the kit's wing with a frame from the new bones\n if (src.wing) {\n const node = tree.nodes.get(t.bones[0]!.id)!;\n const fr = wingFrameFor(node, node.parent ? node.parent.children : tree.roots, extent);\n parts.push({ boneId: node.id, kind: \"wing\", wing: { ...src.wing.wing, part: fr.part, frame: fr.frame }, material: src.wing.material });\n for (const b of t.bones.slice(1)) if (own(b.id)) removed.push(b.id);\n continue;\n }\n\n // each stamp to the nearest bone segment of the chain\n const segment = (i: number) => [t.heads[i]!, t.bones.findIndex((b) => b.parentId === t.bones[i]!.id) >= 0 ? t.heads[t.bones.findIndex((b) => b.parentId === t.bones[i]!.id)]! : t.heads[i]!] as const;\n const nearest = (p: Vec3) => {\n let best = 0, bestD = Infinity;\n t.bones.forEach((_, i) => {\n const [a, b] = segment(i);\n const d = distanceToSegment(p, a, b);\n if (d < bestD) { bestD = d; best = i; }\n });\n return best;\n };\n const buckets = t.bones.map(() => ({ stamps: [] as Stamp[], look: undefined as SculptLook | undefined, decals: [] as Omit<Decal, \"id\">[] }));\n for (const { stamp, look } of src.stamps) {\n const p = place(stamp.position);\n const i = nearest(p);\n const fitted = unsize(t.bones[i]!, rig.bones, heads, p, sizeOf(stamp));\n buckets[i]!.stamps.push({ ...stamp, id: ids.next(), position: fitted.p, rotation: turn(stamp.rotation, stamp.position), scale: fitted.s });\n buckets[i]!.look ??= look;\n }\n for (const { id: _id, ...decal } of src.decals) {\n const p = place(decal.position);\n // on the bone whose part carries the stamp nearest to the decal\n let best = 0, bestD = Infinity;\n buckets.forEach((bk, i) => bk.stamps.forEach((st) => {\n const d = length(sub(st.position, p));\n if (d < bestD) { bestD = d; best = i; }\n }));\n buckets[best]!.decals.push({ ...decal, position: unsize(t.bones[best]!, rig.bones, heads, p, vec3(1, 1, 1)).p, rotation: turn(decal.rotation, decal.position), size: decal.size * s, flip: mirror ? !decal.flip : decal.flip });\n }\n t.bones.forEach((bone, i) => {\n const bk = buckets[i]!;\n if (bk.stamps.length === 0 || !bk.look) {\n if (own(bone.id)) removed.push(bone.id);\n return;\n }\n parts.push({\n boneId: bone.id,\n kind: \"sculpt\",\n sculpt: { stamps: bk.stamps, smearGroups: [], look: bk.look, pivot: DEFAULT_PIVOT, decals: bk.decals.map((d) => ({ ...d, id: ids.next() })) },\n });\n });\n }\n return { parts, removed };\n}\n", "import type { BodyPart, Bone, Id, Quaternion, Rig, Transform, Vec3 } from \"@dreamy/api\";\nimport { IDENTITY_Q, invertQ, multiplyQ, rotate } from \"../atoms/math/quat.js\";\nimport { add, length, normalize, scale, sub, vec3 } from \"../atoms/math/vec3.js\";\nimport { bindHeads, isBoneInSubtree } from \"../atoms/rig/bone-matrices.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { rebasePose } from \"../atoms/rig/rebase-pose.js\";\nimport { translatePart } from \"../atoms/rig/resize-bones.js\";\nimport { sizePoint } from \"../atoms/rig/size-frame.js\";\nimport { slotOfBone } from \"./part-slots.js\";\nimport { stampsBox } from \"./stamps-box.js\";\n\n/** Roles of the chains that sit on a head's surface. */\nconst ATTACHMENT_ROLES = new Set([\"ear\", \"horn\", \"antenna\", \"mandible\", \"beak\"]);\n\ntype Ellipsoid = { readonly c: Vec3; readonly q: Quaternion; readonly r: Vec3 };\ntype Head = { readonly ellipsoids: readonly Ellipsoid[]; readonly center: Vec3; readonly reach: number; readonly cranium: number };\n\n/** A head as drawn: its parts' additive stamps as ellipsoids, sized as the viewport sizes them. */\n/** Where a seated chain sits: on the head, or on the torso (core / abdomen bones). */\nexport type SeatRegion = \"head\" | \"torso\" | ReadonlySet<Id>;\nconst TORSO_ROLES = new Set([\"core\", \"abdomen\"]);\nconst inRegion = (bone: Bone, region: SeatRegion): boolean =>\n typeof region !== \"string\" ? region.has(bone.id) : region === \"head\" ? slotOfBone(bone) === \"head\" : TORSO_ROLES.has(resolveBoneRole(bone));\n\nfunction headShape(rig: Rig, region: SeatRegion = \"head\"): Head | undefined {\n const heads = bindHeads(rig.bones);\n const ellipsoids: Ellipsoid[] = [];\n for (const bone of rig.bones) {\n if (!inRegion(bone, region)) continue;\n const part = rig.parts.find((p) => p.boneId === bone.id);\n if (part?.kind !== \"sculpt\") continue;\n for (const st of part.sculpt.stamps) {\n if (st.mode !== \"add\") continue;\n const { p, s } = sizePoint(bone, rig.bones, heads, st.position, st.scale);\n // a dome fills only the lower half of its box: a flattened ellipsoid there\n const dome = st.shape === \"dome\";\n const c = dome ? add(p, rotate(vec3(0, -s.y / 4, 0), st.rotation)) : p;\n ellipsoids.push({ c, q: st.rotation, r: vec3(Math.max(s.x / 2, 1e-3), Math.max(dome ? s.y / 4 : s.y / 2, 1e-3), Math.max(s.z / 2, 1e-3)) });\n }\n }\n const box = stampsBox(ellipsoids.map((e) => ({ mode: \"add\" as const, position: e.c, rotation: e.q, scale: scale(e.r, 2) })));\n if (!box) return undefined;\n const center = scale(add(box.min, box.max), 0.5);\n const big = ellipsoids.reduce((a, e) => (e.r.x * e.r.y * e.r.z > a.r.x * a.r.y * a.r.z ? e : a));\n // the largest stamp's size, as the mean of its half-axes: a long snout or a long body segment doesn't inflate it\n return { ellipsoids, center, reach: length(sub(box.max, box.min)), cranium: Math.cbrt(big.r.x * big.r.y * big.r.z) };\n}\n\nconst inside = (head: Head, p: Vec3): boolean =>\n head.ellipsoids.some((e) => {\n const l = rotate(sub(p, e.c), invertQ(e.q));\n return (l.x / e.r.x) ** 2 + (l.y / e.r.y) ** 2 + (l.z / e.r.z) ** 2 <= 1;\n });\n\n/** How far the head's surface is from its center along `d` (the farthest inside point, refined). */\nfunction surface(head: Head, d: Vec3): number {\n const steps = 200;\n for (let i = steps; i >= 0; i--) {\n const t = (head.reach * i) / steps;\n if (!inside(head, add(head.center, scale(d, t)))) continue;\n let lo = t, hi = t + head.reach / steps;\n for (let k = 0; k < 20; k++) {\n const mid = (lo + hi) / 2;\n if (inside(head, add(head.center, scale(d, mid)))) lo = mid;\n else hi = mid;\n }\n return lo;\n }\n return 0;\n}\n\n/** A bone's rotation in the rig's space, through its ancestors' binds. */\nfunction bindRotation(bones: readonly Bone[], id: Id | undefined): Quaternion {\n let q = IDENTITY_Q;\n for (let b = bones.find((x) => x.id === id); b; b = bones.find((x) => x.id === b!.parentId)) q = multiplyQ(b.bind.rotation, q);\n return q;\n}\n\nexport type Reseated = {\n readonly moved: readonly { readonly boneId: Id; readonly bind: Transform; readonly pose: Transform }[];\n readonly parts: readonly BodyPart[];\n};\n\n/**\n * Where a point near one rig's head (or torso) goes on another's: the same direction from the head's center, at the same\n * fraction of the way to its surface. Undefined when either rig has no head shape.\n */\nexport function seatPoint(from: Rig, to: Rig, p: Vec3, region: SeatRegion = \"head\", toRegion: SeatRegion = region): Vec3 | undefined {\n const a = headShape(from, region), b = headShape(to, toRegion);\n if (!a || !b) return undefined;\n const off = sub(p, a.center);\n if (length(off) < 1e-6) return b.center;\n const d = normalize(off), ta = surface(a, d), tb = surface(b, d);\n if (ta < 1e-6 || tb < 1e-6) return undefined;\n return add(b.center, scale(d, (length(off) / ta) * tb));\n}\n\n/** The heads' size ratio (`to` over `from`), by their craniums (largest stamps); 1 without a head shape. */\nexport function headRatio(from: Rig, to: Rig, region: SeatRegion = \"head\", toRegion: SeatRegion = region): number {\n const a = headShape(from, region), b = headShape(to, toRegion);\n return a && b && a.cranium > 1e-6 ? b.cranium / a.cranium : 1;\n}\n\n/** Resolved joint moves and parts with re-seated ones laid over them (by bone). */\nexport function withReseated<T extends Reseated>(resolved: T, re: Reseated): T {\n const moved = new Map([...resolved.moved, ...re.moved].map((m) => [m.boneId, m]));\n const parts = new Map([...resolved.parts, ...re.parts].map((p) => [p.boneId, p]));\n return { ...resolved, moved: [...moved.values()], parts: [...parts.values()] };\n}\n\n/** True when a change touches the head (its parts or its size), so the chains on it may need re-seating. */\nexport const touchesHead = (rig: Rig, boneIds: Iterable<Id>): boolean => {\n const ids = new Set(boneIds);\n return rig.bones.some((b) => ids.has(b.id) && slotOfBone(b) === \"head\");\n};\n\n/**\n * Keeps the chains on a head (ears, horns, antennae, mandibles, a beak) on its surface when the head changes (a\n * swapped head, a resized one). Each chain's root sat some fraction of the way to the `before` head's surface along\n * its direction from the head's center; it's put at the same fraction of the `after` head's. An unchanged head moves\n * nothing, and swapping a head back restores the roots. The chain and its parts move with the root. Bones only\n * `after` has (a fresh graft) stay where they are.\n */\nexport function reseatAttachments(before: Rig, after: Rig): Reseated {\n const old = headShape(before);\n if (!old) return { moved: [], parts: [] };\n const oldHeads = bindHeads(before.bones), afterHeads = bindHeads(after.bones);\n const head = new Set(after.bones.filter((b) => slotOfBone(b) === \"head\").map((b) => b.id));\n const roots = after.bones.filter((b) => ATTACHMENT_ROLES.has(resolveBoneRole(b)) && b.parentId !== undefined && head.has(b.parentId) && oldHeads.has(b.id));\n // where each root sat: its direction from the old head's center and its fraction of the way to the surface\n const seats = roots.flatMap((root) => {\n const off = sub(oldHeads.get(root.id)!, old.center);\n if (length(off) < 1e-6) return [];\n const d = normalize(off), t0 = surface(old, d);\n return t0 < 1e-6 ? [] : [{ root, d, k: length(off) / t0 }];\n });\n // A sized head is stretched along its longest child, which may be one of these roots, so its shape depends on\n // where they sit: place them, measure again with them in place, until they stay put.\n const at = new Map<Id, Vec3>();\n let cur = after;\n for (let pass = 0; pass < 6; pass++) {\n const now = headShape(cur);\n if (!now) break;\n let change = 0;\n for (const { root, d, k } of seats) {\n const t1 = surface(now, d);\n if (t1 < 1e-6) continue;\n const target = add(now.center, scale(d, k * t1));\n change = Math.max(change, length(sub(target, at.get(root.id) ?? afterHeads.get(root.id)!)));\n at.set(root.id, target);\n }\n if (change < 1e-7) break;\n cur = { ...after, bones: after.bones.map((b) => (at.has(b.id) ? { ...b, bind: shifted(after, b, sub(at.get(b.id)!, afterHeads.get(b.id)!)) } : b)) };\n }\n\n const moved: { boneId: Id; bind: Transform; pose: Transform }[] = [];\n const parts: BodyPart[] = [];\n for (const [id, target] of at) {\n const root = after.bones.find((b) => b.id === id)!;\n const delta = sub(target, afterHeads.get(id)!);\n if (length(delta) < 1e-6) continue;\n const bind = shifted(after, root, delta);\n moved.push({ boneId: id, bind, pose: rebasePose(root.bind, root.pose, bind) });\n for (const p of after.parts) if (isBoneInSubtree(after.bones, p.boneId, id)) parts.push(translatePart(p, delta));\n }\n return { moved, parts };\n}\n\n/** A bone's bind moved by `delta` in the rig's space (taken into its parent's frame). */\nconst shifted = (rig: Rig, bone: Bone, delta: Vec3): Transform => ({\n ...bone.bind,\n position: add(bone.bind.position, rotate(delta, invertQ(bindRotation(rig.bones, bone.parentId)))),\n});\n", "import type { Bone, BodyPart, GraftSlot, Id, IdGenerator, PartSlot, Rig, Stamp, Vec3 } from \"@dreamy/api\";\nimport { translation } from \"../atoms/math/transform.js\";\nimport { add, length, scale, sub, vec3 } from \"../atoms/math/vec3.js\";\nimport { bindHeads, isBoneInSubtree } from \"../atoms/rig/bone-matrices.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { rigExtent } from \"../atoms/rig/rig-extent.js\";\nimport { fitPartSlot } from \"./fit-part-slot.js\";\nimport { headRatio, seatPoint } from \"./reseat-attachments.js\";\nimport { kitRig } from \"./part-kits.js\";\nimport { slotChains, slotOfBone } from \"./part-slots.js\";\nimport { stampsBox } from \"./stamps-box.js\";\nimport { findKitTemplate } from \"./variants/index.js\";\n\n/** How much larger grafted wings are than the torso ratio alone. */\nconst WING_GROWTH = 1.25;\n/** The farthest a grafted wing reaches, in the creature's half-sizes. */\nconst WING_REACH = 1.3;\n\nexport const GRAFT_SLOTS: readonly GraftSlot[] = [\"wings\", \"horns\", \"tail\"];\n\n/** The tag on grafted bones: they can be replaced or removed with their slot. */\nexport const GRAFT_TAG = \"graft\";\n\ntype Box = { readonly min: Vec3; readonly max: Vec3 };\ntype Anchor = \"head\" | \"torso\";\n\nconst TORSO_ROLES = new Set([\"core\", \"abdomen\"]);\n\n/**\n * The bones a chain hangs from: the torso (core / abdomen), or the head chain. A body without a head bone (a snake,\n * a worm) uses the bone that wears its face, else its frontmost torso bone.\n */\nfunction anchorBones(rig: Rig, anchor: Anchor, heads: Map<Id, Vec3>): Bone[] {\n const torso = rig.bones.filter((b) => TORSO_ROLES.has(resolveBoneRole(b)));\n if (anchor === \"torso\") return torso;\n const head = rig.bones.filter((b) => slotOfBone(b) === \"head\");\n if (head.length) return head;\n const face = rig.parts.find((p) => p.kind === \"sculpt\" && p.sculpt.decals.some((d) => d.art.kind === \"builtin\" && d.art.category === \"eye\"));\n const faceBone = face && rig.bones.find((b) => b.id === face.boneId);\n if (faceBone) return [faceBone];\n const front = [...torso].sort((x, y) => heads.get(y.id)!.z - heads.get(x.id)!.z)[0];\n return front ? [front] : [];\n}\n\n/**\n * The box of an anchor: its parts' stamps (for a head, its largest stamp, the cranium, so a jaw or jowls don't\n * stretch it), else its joints (padded).\n */\nfunction anchorBox(rig: Rig, bones: readonly Bone[], heads: Map<Id, Vec3>, anchor: Anchor): Box | undefined {\n const ids = new Set(bones.map((b) => b.id));\n const all = rig.parts.flatMap((p) => (p.kind === \"sculpt\" && ids.has(p.boneId) ? p.sculpt.stamps : [])).filter((st) => st.mode === \"add\");\n const volume = (st: Stamp) => st.scale.x * st.scale.y * st.scale.z;\n const stamps = anchor === \"head\" && all.length ? [all.reduce((a, st) => (volume(st) > volume(a) ? st : a))] : all;\n const box = stampsBox(stamps);\n if (box) return box;\n const hs = bones.map((b) => heads.get(b.id)!);\n if (hs.length === 0) return undefined;\n const lo = (k: \"x\" | \"y\" | \"z\") => Math.min(...hs.map((h) => h[k])) - 0.1, hi = (k: \"x\" | \"y\" | \"z\") => Math.max(...hs.map((h) => h[k])) + 0.1;\n return { min: vec3(lo(\"x\"), lo(\"y\"), lo(\"z\")), max: vec3(hi(\"x\"), hi(\"y\"), hi(\"z\")) };\n}\n\nconst sizeOf = (b: Box): Vec3 => vec3(Math.max(b.max.x - b.min.x, 1e-3), Math.max(b.max.y - b.min.y, 1e-3), Math.max(b.max.z - b.min.z, 1e-3));\n\n/** True when the rig's own skeleton (not a graft) has the slot. */\nexport const hasOwnSlot = (rig: Rig, slot: GraftSlot): boolean =>\n slotChains(rig.bones, slot).some((c) => !c.bones[0]!.tags.includes(GRAFT_TAG));\n\n/** The rig's grafted bones for a slot, with anything hanging from them. */\nexport function graftedBones(rig: Rig, slot: GraftSlot): Id[] {\n const starts = rig.bones.filter((b) => b.tags.includes(GRAFT_TAG) && slotOfBone(b) === slot).map((b) => b.id);\n return rig.bones.filter((b) => starts.some((s) => isBoneInSubtree(rig.bones, b.id, s))).map((b) => b.id);\n}\n\nexport type Grafted = { readonly bones: Bone[]; readonly parts: BodyPart[]; readonly removed: Id[] };\n\n/** A rig without some bones and their parts. */\nexport const withoutBones = (rig: Rig, removed: readonly Id[]): Rig => {\n const gone = new Set(removed);\n return { ...rig, bones: rig.bones.filter((b) => !gone.has(b.id)), parts: rig.parts.filter((p) => !gone.has(p.boneId)) };\n};\n\n/**\n * Grafts `kit`'s chains for a slot the rig lacks. Each chain starts where it sits on its premade, measured in the box\n * of what it hangs from (the torso or the head) and placed at the same spot of this rig's box; its joints keep their\n * shape, scaled by the boxes' size ratio. It hangs from this rig's nearest torso / head bone. The kit's parts are then\n * fitted as a slot swap. An earlier graft of the slot is removed first; no kit only removes it.\n */\nexport function graftSlot(rig: Rig, slot: GraftSlot, kitId: string | undefined, ids: IdGenerator): Grafted | string {\n if (hasOwnSlot(rig, slot)) return `This creature has its own ${slot}: swap them instead.`;\n const removed = graftedBones(rig, slot);\n if (kitId === undefined) return { bones: [], parts: [], removed };\n const base = withoutBones(rig, removed);\n const bones = placeChains(base, slot, kitId, GRAFT_TAG, ids);\n if (typeof bones === \"string\") return bones;\n const fitted = fitPartSlot({ ...base, bones: [...base.bones, ...bones] }, slot, kitId, ids);\n if (typeof fitted === \"string\") return fitted;\n return { bones, parts: fitted.parts, removed };\n}\n\n/**\n * The rig's body bone that matches the donor's: at the same fraction of the body front to back (by joint z), and with a\n * part to seat on. Undefined when either has no part there.\n */\nfunction bodyBone(donor: Rig, dBones: readonly Bone[], dHeads: Map<Id, Vec3>, parent: Bone, base: Rig, tBones: readonly Bone[], tHeads: Map<Id, Vec3>): { from: ReadonlySet<Id>; to: ReadonlySet<Id> } | undefined {\n const withPart = (rig: Rig, bones: readonly Bone[]) => bones.filter((b) => rig.parts.some((p) => p.kind === \"sculpt\" && p.boneId === b.id));\n const dParts = withPart(donor, dBones), tParts = withPart(base, tBones);\n if (!dParts.some((b) => b.id === parent.id) || tParts.length === 0) return undefined;\n const fraction = (bones: readonly Bone[], heads: Map<Id, Vec3>) => {\n const zs = bones.map((b) => heads.get(b.id)!.z), lo = Math.min(...zs), hi = Math.max(...zs);\n return (b: Bone) => (hi - lo > 1e-6 ? (heads.get(b.id)!.z - lo) / (hi - lo) : 0.5);\n };\n const f = fraction(dParts, dHeads)(parent), tf = fraction(tParts, tHeads);\n const host = [...tParts].sort((a, b) => Math.abs(tf(a) - f) - Math.abs(tf(b) - f))[0]!;\n return { from: new Set([parent.id]), to: new Set([host.id]) };\n}\n\n/**\n * A kit's chains for a slot as new bones on a rig (tagged `tag`): each chain starts where it sits on its kit, measured\n * in the box of what it hangs from (the torso or the head) and placed at the same spot of this rig's box; its joints\n * keep their shape, scaled by the boxes' size ratio. It hangs from this rig's nearest torso / head bone.\n */\nexport function placeChains(base: Rig, slot: PartSlot, kitId: string, tag: string, ids: IdGenerator): Bone[] | string {\n const tpl = findKitTemplate(kitId);\n const donor = kitRig(kitId);\n if (!tpl || !donor) return `There is no premade \"${kitId}\".`;\n const chains = slotChains(donor.bones, slot);\n if (chains.length === 0) return `The ${tpl.name} has no ${slot} to give.`;\n const dHeads = bindHeads(donor.bones), tHeads = bindHeads(base.bones);\n const names = new Set(base.bones.map((b) => b.name));\n const unique = (name: string) => {\n let n = name, i = 2;\n while (names.has(n)) n = `${name} ${i++}`;\n names.add(n);\n return n;\n };\n\n const bones: Bone[] = [];\n for (const chain of chains) {\n const parentId = chain.bones[0]!.parentId;\n const parent = parentId !== undefined ? donor.bones.find((b) => b.id === parentId) : undefined;\n const headBone = donor.bones.find((b) => slotOfBone(b) === \"head\");\n const anchor: Anchor = parent && headBone && isBoneInSubtree(donor.bones, parent.id, headBone.id) ? \"head\" : \"torso\";\n const dBones = anchorBones(donor, anchor, dHeads), tBones = anchorBones(base, anchor, tHeads);\n const dBox = anchorBox(donor, dBones, dHeads, anchor), tBox = anchorBox(base, tBones, tHeads, anchor);\n if (!dBox || !tBox || tBones.length === 0) return `This creature has no ${anchor} to put ${slot} on.`;\n const dSize = sizeOf(dBox), tSize = sizeOf(tBox);\n // wings a little larger than the torso ratio: at that size they read as too small to carry the body\n const s = Math.cbrt((tSize.x / dSize.x) * (tSize.y / dSize.y) * (tSize.z / dSize.z)) * (slot === \"wings\" ? WING_GROWTH : 1);\n const start = chain.heads[0]!;\n // on the surface of what it hangs from where it sits on the kit's (its box spot when that can't be measured):\n // a box corner can be far off a round shell or a narrow back\n // on a long or many-boned body (a worm, a centipede), the whole torso is a poor guide: the chain goes on the one\n // body bone at the same place front to back as its own (an insect's thorax), seated on and sized by that bone\n const one = anchor === \"torso\" && parent ? bodyBone(donor, dBones, dHeads, parent, base, tBones, tHeads) : undefined;\n const sOne = one ? headRatio(donor, base, one.from, one.to) * (slot === \"wings\" ? WING_GROWTH : 1) : undefined;\n const placed = (one && seatPoint(donor, base, start, one.from, one.to)) ?? seatPoint(donor, base, start, anchor) ?? vec3(\n tBox.min.x + ((start.x - dBox.min.x) / dSize.x) * tSize.x,\n tBox.min.y + ((start.y - dBox.min.y) / dSize.y) * tSize.y,\n tBox.min.z + ((start.z - dBox.min.z) / dSize.z) * tSize.z,\n );\n let k = one && sOne && sOne !== 1 ? sOne : s;\n // a wing reaches at most 1.3 of the creature's half-size (a big shell on short legs shouldn't carry a glider)\n if (slot === \"wings\") {\n const reach = Math.max(...chain.heads.map((h) => length(sub(h, start))));\n const cap = (WING_REACH * rigExtent([...tHeads.values()])) / Math.max(reach, 1e-6);\n k = Math.min(k, cap);\n }\n const host = [...tBones].sort((a, b) => length(sub(tHeads.get(a.id)!, placed)) - length(sub(tHeads.get(b.id)!, placed)))[0]!;\n // the chain's joints in this rig's space, then each bone relative to its parent\n const world = new Map<Id, Vec3>();\n const newId = new Map<Id, Id>();\n for (const b of chain.bones) {\n const w = add(placed, scale(sub(dHeads.get(b.id)!, start), k));\n const id = ids.next();\n world.set(id, w);\n newId.set(b.id, id);\n const inChain = b.parentId !== undefined && newId.has(b.parentId);\n const pid = inChain ? newId.get(b.parentId!)! : host.id;\n const pw = inChain ? world.get(pid)! : tHeads.get(host.id)!;\n const bind = translation(sub(w, pw));\n bones.push({ id, name: unique(b.name), parentId: pid, tags: [...b.tags.filter((t) => t !== GRAFT_TAG && !t.startsWith(\"kit:\")), tag], bind, pose: bind });\n }\n }\n return bones;\n}\n\n/** A rig with a graft applied: its earlier graft gone, the new bones and parts added, the slot's kit recorded. */\nexport function withGraft(rig: Rig, slot: GraftSlot, kit: string | undefined, g: { readonly bones: readonly Bone[]; readonly parts: readonly BodyPart[]; readonly removed: readonly Id[] }): Rig {\n const r = withoutBones(rig, g.removed);\n const added = new Set(g.parts.map((p) => p.boneId));\n const kits = (k: { readonly [s: string]: string | undefined } | undefined) => {\n const { [slot]: _old, ...rest } = k ?? {};\n return kit !== undefined ? { ...rest, [slot]: kit } : rest;\n };\n return {\n ...r,\n bones: [...r.bones, ...g.bones],\n parts: [...r.parts.filter((p) => !added.has(p.boneId)), ...g.parts],\n slotKits: kits(r.slotKits),\n ...(r.recipe ? { recipe: { ...r.recipe, kits: kits(r.recipe.kits) } } : {}),\n };\n}\n", "import type { BodyPart, Bone, Id, IdGenerator, PartSlot, PartSlotSwapped, Rig, Vec3 } from \"@dreamy/api\";\nimport { DEFAULT_PIVOT } from \"../atoms/look/default-look.js\";\nimport { translation } from \"../atoms/math/transform.js\";\nimport { add, length, scale, sub } from \"../atoms/math/vec3.js\";\nimport { bindHeads, isBoneInSubtree } from \"../atoms/rig/bone-matrices.js\";\nimport { applyBoneSizes } from \"../atoms/rig/resize-bones.js\";\nimport { withSlotParts } from \"../atoms/rig/with-slot-parts.js\";\nimport { fitPartSlot, headSimilarity } from \"./fit-part-slot.js\";\nimport { placeChains, withoutBones } from \"./graft-slot.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { kitRig, partKit } from \"./part-kits.js\";\nimport { COAT_ROLES, slotChains, slotOfBone } from \"./part-slots.js\";\nimport { headRatio, reseatAttachments, seatPoint, withReseated } from \"./reseat-attachments.js\";\nimport { findVariant } from \"./variants/index.js\";\n\nexport type ResolvedSwap = Omit<PartSlotSwapped[\"payload\"], \"rigId\">;\n\n/** The tag on bones a kit brought for a slot (a variant's trunk, ear chains): the slot's next swap removes them. */\nexport const kitTag = (slot: PartSlot): string => `kit:${slot}`;\n\n/** A bone and everything below it. */\nconst subtree = (bones: readonly Bone[], roots: readonly Id[]): Id[] =>\n bones.filter((b) => roots.some((r) => isBoneInSubtree(bones, b.id, r))).map((b) => b.id);\n\n/** A part moved by a point map and scaled by `s` (stamps and decals get fresh ids). */\nfunction mapPart(part: BodyPart, boneId: Id, map: (p: Vec3) => Vec3, s: number, ids: IdGenerator): BodyPart | undefined {\n if (part.kind !== \"sculpt\") return undefined;\n const sc = part.sculpt;\n return {\n boneId,\n kind: \"sculpt\",\n sculpt: {\n ...sc,\n stamps: sc.stamps.map((st) => ({ ...st, id: ids.next(), position: map(st.position), scale: scale(st.scale, s) })),\n decals: sc.decals.map((d) => ({ ...d, id: ids.next(), position: map(d.position), size: d.size * s })),\n pivot: { ...DEFAULT_PIVOT, position: map(sc.pivot.position) },\n },\n };\n}\n\n/**\n * Copies chains of a kit rig onto a rig: each chain's joints and parts go through `map` (scaled by `s`), its root\n * hangs from `host(root)`, names stay unique, and every bone is tagged for the slot.\n */\nfunction copyChains(rig: Rig, kit: Rig, roots: readonly Bone[], slot: PartSlot, map: (root: Bone) => ((p: Vec3) => Vec3) | undefined, s: number, host: (p: Vec3) => Id, ids: IdGenerator) {\n const kitHeads = bindHeads(kit.bones);\n const names = new Set(rig.bones.map((b) => b.name));\n const unique = (name: string) => {\n let n = name, i = 2;\n while (names.has(n)) n = `${name} ${i++}`;\n names.add(n);\n return n;\n };\n const bones: Bone[] = [], parts: BodyPart[] = [];\n for (const root of roots) {\n const f = map(root);\n if (!f) continue;\n const newId = new Map<Id, Id>(), world = new Map<Id, Vec3>();\n for (const b of kit.bones.filter((x) => isBoneInSubtree(kit.bones, x.id, root.id))) {\n const id = ids.next(), w = f(kitHeads.get(b.id)!);\n newId.set(b.id, id);\n world.set(id, w);\n const inChain = b.parentId !== undefined && newId.has(b.parentId);\n const parentId = inChain ? newId.get(b.parentId!)! : host(w);\n const pw = inChain ? world.get(parentId)! : bindHeads(rig.bones).get(parentId)!;\n const bind = translation(sub(w, pw));\n bones.push({ id, name: unique(b.name), parentId, tags: [...b.tags.filter((t) => !t.startsWith(\"kit:\")), kitTag(slot)], bind, pose: bind });\n const part = kit.parts.find((p) => p.boneId === b.id);\n const mapped = part && mapPart(part, id, f, s, ids);\n if (mapped) parts.push(mapped);\n }\n }\n return { bones, parts };\n}\n\n/** The rig's head bone nearest a point (what a copied chain hangs from). */\nconst nearestHead = (rig: Rig) => {\n const heads = bindHeads(rig.bones);\n const head = rig.bones.filter((b) => slotOfBone(b) === \"head\");\n return (p: Vec3): Id => [...head].sort((a, b) => length(sub(heads.get(a.id)!, p)) - length(sub(heads.get(b.id)!, p)))[0]!.id;\n};\n\n/** Slots whose kits can bring their own bones: chains on the head (seated on it) and the tail (on the torso). */\nconst SEATED: ReadonlySet<PartSlot> = new Set([\"ears\", \"horns\"]);\nconst BONE_SLOTS: ReadonlySet<PartSlot> = new Set([\"ears\", \"horns\", \"tail\"]);\n\n/** True when a slot's swap carries bones: a variant's chains, or replacing chains a variant brought. */\nconst carriesBones = (rig: Rig, slot: PartSlot, kit: string): boolean =>\n BONE_SLOTS.has(slot) && (findVariant(kit) !== undefined || rig.bones.some((b) => b.tags.includes(kitTag(slot))));\n\n/**\n * New parts wear the rig's coat (a coat swapped in earlier): its fleck, pattern and material on skin parts, so a\n * tiger coat covers a head or legs swapped in after it.\n */\nfunction wearCoat(rig: Rig, slot: PartSlot, swap: ResolvedSwap): ResolvedSwap {\n const coatKit = rig.slotKits?.coat;\n if (slot === \"coat\" || coatKit === undefined || coatKit === rig.templateId) return swap;\n const coat = partKit(coatKit, \"coat\")?.coat;\n if (!coat) return swap;\n const bones = [...rig.bones, ...(swap.bones ?? [])];\n const skin = (id: Id) => {\n const b = bones.find((x) => x.id === id);\n return b !== undefined && COAT_ROLES.has(resolveBoneRole(b));\n };\n return {\n ...swap,\n parts: swap.parts.map((p) =>\n p.kind === \"sculpt\" && skin(p.boneId) ? { ...p, sculpt: { ...p.sculpt, look: { ...p.sculpt.look, fleck: coat.fleck, material: coat.material, pattern: coat.pattern } } } : p),\n };\n}\n\n/**\n * What giving a slot `kit`'s parts does to a rig. A head takes the kit's head parts; the chains a head variant carries\n * (a trunk) come as bones, and an earlier kit's are removed; the chains on the head re-seat on it. Ears or horns from\n * a variant (or replacing a variant's) come as their own bones seated on this head, a variant's tail as its own bones\n * on the torso. Anything else is fitted to the rig's own chains.\n */\nexport function resolveSwap(rig: Rig, slot: PartSlot, kit: string, ids: IdGenerator): ResolvedSwap | string {\n const swap = resolveSwapParts(rig, slot, kit, ids);\n return typeof swap === \"string\" ? swap : wearCoat(rig, slot, swap);\n}\n\nfunction resolveSwapParts(rig: Rig, slot: PartSlot, kit: string, ids: IdGenerator): ResolvedSwap | string {\n if (slot === \"head\") {\n const removedBones = subtree(rig.bones, rig.bones.filter((b) => b.tags.includes(kitTag(\"head\"))).map((b) => b.id));\n const base = withoutBones(rig, removedBones);\n const fitted = fitPartSlot(base, slot, kit, ids);\n if (typeof fitted === \"string\") return fitted;\n // a variant's chains beyond its head (a trunk), mapped as its head stamps are\n let bones: Bone[] = [], extra: BodyPart[] = [];\n const donor = findVariant(kit) ? kitRig(kit) : undefined;\n const sim = donor ? headSimilarity(base, kit) : undefined;\n if (donor && sim) {\n const isHead = (b: Bone) => slotOfBone(b) === \"head\";\n const roots = donor.bones.filter((b) => !isHead(b) && b.parentId !== undefined && isHead(donor.bones.find((x) => x.id === b.parentId)!));\n const f = (p: Vec3) => add(sim.to, scale(sub(p, sim.from), sim.s));\n ({ bones, parts: extra } = copyChains(base, donor, roots, slot, () => f, sim.s, nearestHead(base), ids));\n }\n const after = withSlotParts({ ...base, bones: [...base.bones, ...bones] }, slot, kit, { parts: [...fitted.parts, ...extra], removed: fitted.removed });\n const re = reseatAttachments(rig, after);\n return {\n slot,\n kit,\n ...withReseated({ parts: [...fitted.parts, ...extra], removed: fitted.removed, moved: [] }, re),\n ...(bones.length ? { bones } : {}),\n ...(removedBones.length ? { removedBones } : {}),\n };\n }\n if (carriesBones(rig, slot, kit) && !SEATED.has(slot)) {\n // a tail: the old chains go, the kit's are placed on the torso where they sit on the kit's, then fitted\n const removedBones = subtree(rig.bones, slotChains(rig.bones, slot).map((c) => c.bones[0]!.id));\n const base = withoutBones(rig, removedBones);\n const bones = placeChains(base, slot, kit, kitTag(slot), ids);\n if (typeof bones === \"string\") return bones;\n const fitted = fitPartSlot({ ...base, bones: [...base.bones, ...bones] }, slot, kit, ids);\n if (typeof fitted === \"string\") return fitted;\n return { slot, kit, parts: fitted.parts, removed: [], bones, removedBones };\n }\n if (carriesBones(rig, slot, kit)) {\n const donor = kitRig(kit);\n if (!donor) return `There is no part \"${kit}\".`;\n const sources = slotChains(donor.bones, slot).map((c) => c.bones[0]!);\n if (sources.length === 0) return `That kit has no ${slot} to give.`;\n const removedBones = subtree(rig.bones, slotChains(rig.bones, slot).map((c) => c.bones[0]!.id));\n const base = withoutBones(rig, removedBones);\n if (!base.bones.some((b) => slotOfBone(b) === \"head\")) return `This creature has no head to put ${slot} on.`;\n const s = headRatio(donor, base), donorHeads = bindHeads(donor.bones);\n // each chain's root seated on this head where it sat on the kit's; the chain keeps its shape, scaled\n const { bones, parts } = copyChains(base, donor, sources, slot, (root) => {\n const r0 = donorHeads.get(root.id)!, r1 = seatPoint(donor, base, r0);\n return r1 && ((p: Vec3) => add(r1, scale(sub(p, r0), s)));\n }, s, nearestHead(base), ids);\n if (bones.length === 0) return `The ${slot} can't be seated on this head.`;\n return { slot, kit, parts, removed: [], bones, removedBones };\n }\n const fitted = fitPartSlot(rig, slot, kit, ids);\n return typeof fitted === \"string\" ? fitted : { slot, kit, ...fitted };\n}\n\n/** A rig with a resolved swap applied (the fold's and the generator's one way of doing it). */\nexport function withSwap(r: Rig, e: ResolvedSwap): Rig {\n let next = e.removedBones?.length ? withoutBones(r, e.removedBones) : r;\n if (e.bones?.length) next = { ...next, bones: [...next.bones, ...e.bones] };\n next = withSlotParts(next, e.slot, e.kit, e);\n return e.moved?.length ? applyBoneSizes(next, { sizes: [], moved: e.moved, parts: [] }) : next;\n}\n", "import type { Creation, PartSlotSwapped } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\nimport { withSwap } from \"../premades/swap-slot.js\";\n\n/** Replaces the slot's parts (and the bones a kit brought), moves re-seated joints and records the slot's kit. */\nexport const applyPartSlotSwapped = (c: Creation, e: PartSlotSwapped): Creation => mapRig(c, e.payload.rigId, (r) => withSwap(r, e.payload));\n", "import type { Creation, CreatureGenerated } from \"@dreamy/api\";\n\n/** A new creature object, or the object's rig (and ground-standing transform) regenerated. */\nexport function applyCreatureGenerated(c: Creation, e: CreatureGenerated): Creation {\n const p = e.payload;\n if (p.kind === \"new\") return { ...c, objects: [...c.objects, p.object] };\n return { ...c, objects: c.objects.map((o) => (o.id === p.objectId && o.kind === \"rig\" ? { ...o, rig: p.rig, transform: p.transform } : o)) };\n}\n", "import type { Creation, PartGrafted } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\nimport { withGraft } from \"../premades/graft-slot.js\";\n\n/** Removes the slot's earlier graft, adds the new bones and parts, and records the kit. */\nexport const applyPartGrafted = (c: Creation, e: PartGrafted): Creation =>\n mapRig(c, e.payload.rigId, (r) => withGraft(r, e.payload.slot, e.payload.kit, e.payload));\n", "import type { Creation, PosePresetApplied } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/** Sets every listed bone's pose and remembers the preset choice. */\nexport function applyPosePresetApplied(c: Creation, e: PosePresetApplied): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.boneId, ch.transform]));\n return mapRig(c, e.payload.rigId, (r) => ({\n ...r,\n posePreset: e.payload.preset,\n bones: r.bones.map((b) => {\n const t = next.get(b.id);\n return t ? { ...b, pose: t } : b;\n }),\n }));\n}\n", "import type { Creation, PremadeApplied, RigObject } from \"@dreamy/api\";\n\n/** A new rig object, or the object turned into a rig with the premade skeleton (its old sculpt is the body). */\nexport function applyPremadeApplied(c: Creation, e: PremadeApplied): Creation {\n const p = e.payload;\n if (p.kind === \"new\") return { ...c, objects: [...c.objects, p.object] };\n return {\n ...c,\n objects: c.objects.map((o): typeof o => {\n if (o.id !== p.objectId) return o;\n const { id, name, transform } = o;\n const rig: RigObject = { id, name, transform, kind: \"rig\", rig: p.rig, ...(o.parentId !== undefined ? { parentId: o.parentId } : {}) };\n return rig;\n }),\n };\n}\n", "import type { Creation, RegionBlendSet } from \"@dreamy/api\";\nimport { boneRegion } from \"../atoms/rig/bone-region.js\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\n/** POC setSkeletonRegionBlend: the region's blend, and the blend of every sculpt part in it. */\nexport function applyRegionBlendSet(c: Creation, e: RegionBlendSet): Creation {\n const { region, blend } = e.payload;\n return mapRig(c, e.payload.rigId, (r) => {\n const inRegion = new Set(r.bones.filter((b) => boneRegion(b) === region).map((b) => b.id));\n return {\n ...r,\n regionBlends: { ...r.regionBlends, [region]: blend },\n parts: r.parts.map((p) =>\n p.kind === \"sculpt\" && inRegion.has(p.boneId) ? { ...p, sculpt: { ...p.sculpt, look: { ...p.sculpt.look, blend } } } : p,\n ),\n };\n });\n}\n", "import type { Creation, RigCreated } from \"@dreamy/api\";\n\nexport const applyRigCreated = (c: Creation, e: RigCreated): Creation => ({\n ...c,\n objects: [...c.objects, e.payload.object],\n});\n", "import type { Creation, RigMirrorSet } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyRigMirrorSet = (c: Creation, e: RigMirrorSet): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({ ...r, mirror: e.payload.mirror }));\n", "import type { Creation, RigModeSet } from \"@dreamy/api\";\nimport { mapRig } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyRigModeSet = (c: Creation, e: RigModeSet): Creation =>\n mapRig(c, e.payload.rigId, (r) => ({ ...r, mode: e.payload.mode }));\n", "import type { Creation, SculptCreated } from \"@dreamy/api\";\n\nexport const applySculptCreated = (c: Creation, e: SculptCreated): Creation => ({\n ...c,\n objects: [...c.objects, e.payload.object],\n});\n", "import type { SculptLook, SculptLookPatch } from \"@dreamy/api\";\n\n/** A look with a patch applied (nested groups merge field by field). */\nexport function mergeLook(look: SculptLook, patch: SculptLookPatch): SculptLook {\n return {\n color: patch.color ?? look.color,\n foundationColor: patch.foundationColor ?? look.foundationColor,\n fleck: { ...look.fleck, ...stripUndefined(patch.fleck) },\n material: { ...look.material, ...stripUndefined(patch.material) },\n blend: patch.blend ?? look.blend,\n pattern: {\n ...look.pattern,\n ...stripUndefined(patch.pattern),\n rotation: { ...look.pattern.rotation, ...stripUndefined(patch.pattern?.rotation) },\n },\n };\n}\n\nfunction stripUndefined<T extends object>(value: T | undefined): Partial<T> {\n if (!value) return {};\n return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as Partial<T>;\n}\n", "import type { Creation, SculptLookSet } from \"@dreamy/api\";\nimport { mergeLook } from \"../atoms/look/merge-look.js\";\nimport { mapRig, updateTarget } from \"../atoms/sculpt/update-target.js\";\n\n/** Sculpt targets merge the patch into their look; flat wing parts take its material. */\nexport function applySculptLookSet(c: Creation, e: SculptLookSet): Creation {\n const { look } = e.payload;\n return e.payload.targets.reduce((acc, target) => {\n if (\"boneId\" in target) {\n const o = acc.objects.find((x) => x.id === target.objectId);\n const part = o?.kind === \"rig\" ? o.rig.parts.find((p) => p.boneId === target.boneId) : undefined;\n if (part?.kind === \"wing\") {\n if (!look.material) return acc;\n return mapRig(acc, target.objectId, (r) => ({\n ...r,\n parts: r.parts.map((p) => (p === part ? { ...part, material: { ...part.material, ...look.material } } : p)),\n }));\n }\n }\n return updateTarget(acc, target, (s) => ({ ...s, look: mergeLook(s.look, look) }), false);\n }, c);\n}\n", "import type { SmearGroup, Stamp, StampPropsPatch } from \"@dreamy/api\";\nimport { clampSymmetry } from \"./clamp-symmetry.js\";\n\ntype Optional = \"color\" | \"foundationColor\" | \"blend\" | \"material\" | \"symmetry\";\n\n/** A copy without the key (exactOptionalPropertyTypes: absent, never undefined). */\nfunction without<T extends object, K extends keyof T>(value: T, key: K): T {\n const copy = { ...value };\n delete copy[key];\n return copy;\n}\n\n/** A stamp with the patch applied: `null` clears an override, absent keeps it. */\nexport function applyStampProps(stamp: Stamp, patch: StampPropsPatch): Stamp {\n let out: Stamp = patch.mode ? { ...stamp, mode: patch.mode } : stamp;\n const keys: readonly Optional[] = [\"color\", \"foundationColor\", \"blend\", \"material\", \"symmetry\"];\n for (const key of keys) {\n const v = patch[key];\n if (v === undefined) continue;\n if (v === null) out = without(out, key);\n else if (key === \"symmetry\") out = { ...out, symmetry: clampSymmetry(v as NonNullable<StampPropsPatch[\"symmetry\"]>) };\n else out = { ...out, [key]: v };\n }\n return out;\n}\n\n/**\n * A smear group with the patch applied. A group always has a mode, color and blend, so clearing those\n * keeps them; the foundation and symmetry can be cleared.\n */\nexport function applyGroupProps(\n group: SmearGroup,\n patch: StampPropsPatch & { readonly unlocked?: boolean; readonly name?: string },\n): SmearGroup {\n let out: SmearGroup = {\n ...group,\n ...(patch.mode ? { mode: patch.mode } : {}),\n ...(patch.color ? { color: patch.color } : {}),\n ...(typeof patch.blend === \"number\" ? { blend: patch.blend } : {}),\n ...(patch.unlocked !== undefined ? { unlocked: patch.unlocked } : {}),\n ...(patch.name !== undefined ? { name: patch.name.trim() } : {}),\n };\n if (patch.foundationColor === null) out = without(out, \"foundationColor\");\n else if (patch.foundationColor) out = { ...out, foundationColor: patch.foundationColor };\n if (patch.symmetry === null) out = without(out, \"symmetry\");\n else if (patch.symmetry) out = { ...out, symmetry: clampSymmetry(patch.symmetry) };\n return out;\n}\n", "import type { Sculpt } from \"@dreamy/api\";\n\n/** POC normalizeBase: the first stamp (or the smear group it belongs to) is always additive. */\nexport function normalizeBase(sculpt: Sculpt): Sculpt {\n const base = sculpt.stamps[0];\n if (!base) return sculpt;\n const group = base.smearGroupId !== undefined ? sculpt.smearGroups.find((g) => g.id === base.smearGroupId) : undefined;\n if (group) {\n if (group.mode === \"add\") return sculpt;\n return { ...sculpt, smearGroups: sculpt.smearGroups.map((g) => (g === group ? { ...g, mode: \"add\" } : g)) };\n }\n if (base.mode === \"add\") return sculpt;\n return { ...sculpt, stamps: [{ ...base, mode: \"add\" }, ...sculpt.stamps.slice(1)] };\n}\n\n/** True when the stamp or group is the base: its mode cannot leave \"add\". */\nexport function isBaseStamp(sculpt: Sculpt, stampId: string): boolean {\n return sculpt.stamps[0]?.id === stampId;\n}\n\nexport function isBaseGroup(sculpt: Sculpt, groupId: string): boolean {\n return sculpt.stamps[0]?.smearGroupId === groupId;\n}\n", "import type { Creation, SmearGroupSet } from \"@dreamy/api\";\nimport { applyGroupProps } from \"../atoms/stamp/apply-stamp-props.js\";\nimport { normalizeBase } from \"../atoms/stamp/normalize-base.js\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport const applySmearGroupSet = (c: Creation, e: SmearGroupSet): Creation =>\n updateTarget(c, e.payload.target, (s) =>\n normalizeBase({\n ...s,\n smearGroups: s.smearGroups.map((g) => (g.id === e.payload.groupId ? applyGroupProps(g, e.payload.props) : g)),\n }),\n );\n", "import type { Creation, StampPlacementsSet } from \"@dreamy/api\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport function applyStampPlacementsSet(c: Creation, e: StampPlacementsSet): Creation {\n const next = new Map(e.payload.changes.map((ch) => [ch.stampId, ch]));\n return updateTarget(c, e.payload.target, (s) => ({\n ...s,\n stamps: s.stamps.map((st) => {\n const ch = next.get(st.id);\n return ch ? { ...st, position: ch.position, rotation: ch.rotation, scale: ch.scale } : st;\n }),\n }));\n}\n", "import type { Creation, StampPropsSet } from \"@dreamy/api\";\nimport { applyStampProps } from \"../atoms/stamp/apply-stamp-props.js\";\nimport { normalizeBase } from \"../atoms/stamp/normalize-base.js\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport function applyStampPropsSet(c: Creation, e: StampPropsSet): Creation {\n const ids = new Set(e.payload.stampIds);\n return updateTarget(c, e.payload.target, (s) =>\n normalizeBase({ ...s, stamps: s.stamps.map((st) => (ids.has(st.id) ? applyStampProps(st, e.payload.props) : st)) }),\n );\n}\n", "import type { Creation, StampsAdded } from \"@dreamy/api\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport const applyStampsAdded = (c: Creation, e: StampsAdded): Creation =>\n updateTarget(c, e.payload.target, (s) => ({\n ...s,\n stamps: [...s.stamps, ...e.payload.stamps],\n smearGroups: e.payload.smearGroup ? [...s.smearGroups, e.payload.smearGroup] : s.smearGroups,\n }));\n", "import type { Creation, StampsRemoved } from \"@dreamy/api\";\nimport { normalizeBase } from \"../atoms/stamp/normalize-base.js\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport function applyStampsRemoved(c: Creation, e: StampsRemoved): Creation {\n const stamps = new Set(e.payload.stampIds), groups = new Set(e.payload.smearGroupIds);\n return updateTarget(c, e.payload.target, (s) => {\n const kept = s.stamps.filter((st) => !stamps.has(st.id));\n if (kept.length === 0) return s;\n return normalizeBase({ ...s, stamps: kept, smearGroups: s.smearGroups.filter((g) => !groups.has(g.id)) });\n });\n}\n", "import type { Creation, SymmetrySetForAll } from \"@dreamy/api\";\nimport { applyGroupProps, applyStampProps } from \"../atoms/stamp/apply-stamp-props.js\";\nimport { updateTarget } from \"../atoms/sculpt/update-target.js\";\n\nexport function applySymmetrySetForAll(c: Creation, e: SymmetrySetForAll): Creation {\n const patch = { symmetry: e.payload.symmetry };\n return updateTarget(c, e.payload.target, (s) => ({\n ...s,\n stamps: s.stamps.map((st) => applyStampProps(st, patch)),\n smearGroups: s.smearGroups.map((g) => applyGroupProps(g, patch)),\n }));\n}\n", "import type { Creation, CreationEvent, CreationLog } from \"@dreamy/api\";\nimport { applyBodyPartAdded } from \"./apply/body-part-added.js\";\nimport { applyBodyPartRemoved } from \"./apply/body-part-removed.js\";\nimport { applyBoneRemoved } from \"./apply/bone-removed.js\";\nimport { applyBoneRenamed } from \"./apply/bone-renamed.js\";\nimport { applyBoneReparented } from \"./apply/bone-reparented.js\";\nimport { applyBoneTagsSet } from \"./apply/bone-tags-set.js\";\nimport { applyBoneTransformsSet } from \"./apply/bone-transforms-set.js\";\nimport { applyBonesAdded } from \"./apply/bones-added.js\";\nimport { applyDecalRemoved } from \"./apply/decal-removed.js\";\nimport { applyDecalsAdded } from \"./apply/decals-added.js\";\nimport { applyDesignDeleted } from \"./apply/design-deleted.js\";\nimport { applyDesignSaved } from \"./apply/design-saved.js\";\nimport { applyFlatWingsSet } from \"./apply/flat-wings-set.js\";\nimport { applyObjectRenamed } from \"./apply/object-renamed.js\";\nimport { applyObjectReparented } from \"./apply/object-reparented.js\";\nimport { applyObjectTransformsSet } from \"./apply/object-transforms-set.js\";\nimport { applyObjectsDeleted } from \"./apply/objects-deleted.js\";\nimport { applyObjectsDuplicated } from \"./apply/objects-duplicated.js\";\nimport { applyPaletteColorSet } from \"./apply/palette-color-set.js\";\nimport { applyPaletteReset } from \"./apply/palette-reset.js\";\nimport { applyPivotSet } from \"./apply/pivot-set.js\";\nimport { applyPoseReset } from \"./apply/pose-reset.js\";\nimport { applyBoneSizesSet } from \"./apply/bone-sizes-set.js\";\nimport { applyPartSlotSwapped } from \"./apply/part-slot-swapped.js\";\nimport { applyCreatureGenerated } from \"./apply/creature-generated.js\";\nimport { applyPartGrafted } from \"./apply/part-grafted.js\";\nimport { applyPosePresetApplied } from \"./apply/pose-preset-applied.js\";\nimport { applyPremadeApplied } from \"./apply/premade-applied.js\";\nimport { applyRegionBlendSet } from \"./apply/region-blend-set.js\";\nimport { applyRigCreated } from \"./apply/rig-created.js\";\nimport { applyRigMirrorSet } from \"./apply/rig-mirror-set.js\";\nimport { applyRigModeSet } from \"./apply/rig-mode-set.js\";\nimport { applySculptCreated } from \"./apply/sculpt-created.js\";\nimport { applySculptLookSet } from \"./apply/sculpt-look-set.js\";\nimport { applySmearGroupSet } from \"./apply/smear-group-set.js\";\nimport { applyStampPlacementsSet } from \"./apply/stamp-placements-set.js\";\nimport { applyStampPropsSet } from \"./apply/stamp-props-set.js\";\nimport { applyStampsAdded } from \"./apply/stamps-added.js\";\nimport { applyStampsRemoved } from \"./apply/stamps-removed.js\";\nimport { applySymmetrySetForAll } from \"./apply/symmetry-set-for-all.js\";\nimport { EMPTY_CREATION } from \"./empty-creation.js\";\n\n/** One event folded into the creation. Events naming things that no longer exist change nothing. */\nexport function applyEvent(c: Creation, e: CreationEvent): Creation {\n switch (e.type) {\n case \"SculptCreated\": return applySculptCreated(c, e);\n case \"ObjectsDeleted\": return applyObjectsDeleted(c, e);\n case \"ObjectRenamed\": return applyObjectRenamed(c, e);\n case \"ObjectReparented\": return applyObjectReparented(c, e);\n case \"ObjectTransformsSet\": return applyObjectTransformsSet(c, e);\n case \"ObjectsDuplicated\": return applyObjectsDuplicated(c, e);\n case \"StampsAdded\": return applyStampsAdded(c, e);\n case \"StampsRemoved\": return applyStampsRemoved(c, e);\n case \"StampPlacementsSet\": return applyStampPlacementsSet(c, e);\n case \"StampPropsSet\": return applyStampPropsSet(c, e);\n case \"SmearGroupSet\": return applySmearGroupSet(c, e);\n case \"SculptLookSet\": return applySculptLookSet(c, e);\n case \"PivotSet\": return applyPivotSet(c, e);\n case \"SymmetrySetForAll\": return applySymmetrySetForAll(c, e);\n case \"DecalsAdded\": return applyDecalsAdded(c, e);\n case \"DecalRemoved\": return applyDecalRemoved(c, e);\n case \"DesignSaved\": return applyDesignSaved(c, e);\n case \"DesignDeleted\": return applyDesignDeleted(c, e);\n case \"PaletteColorSet\": return applyPaletteColorSet(c, e);\n case \"PaletteReset\": return applyPaletteReset(c, e);\n case \"RigCreated\": return applyRigCreated(c, e);\n case \"PremadeApplied\": return applyPremadeApplied(c, e);\n case \"BonesAdded\": return applyBonesAdded(c, e);\n case \"BoneRemoved\": return applyBoneRemoved(c, e);\n case \"BoneReparented\": return applyBoneReparented(c, e);\n case \"BoneRenamed\": return applyBoneRenamed(c, e);\n case \"BoneTagsSet\": return applyBoneTagsSet(c, e);\n case \"BoneTransformsSet\": return applyBoneTransformsSet(c, e);\n case \"PoseReset\": return applyPoseReset(c, e);\n case \"PosePresetApplied\": return applyPosePresetApplied(c, e);\n case \"BoneSizesSet\": return applyBoneSizesSet(c, e);\n case \"PartSlotSwapped\": return applyPartSlotSwapped(c, e);\n case \"PartGrafted\": return applyPartGrafted(c, e);\n case \"CreatureGenerated\": return applyCreatureGenerated(c, e);\n case \"RigModeSet\": return applyRigModeSet(c, e);\n case \"RigMirrorSet\": return applyRigMirrorSet(c, e);\n case \"RegionBlendSet\": return applyRegionBlendSet(c, e);\n case \"BodyPartAdded\": return applyBodyPartAdded(c, e);\n case \"BodyPartRemoved\": return applyBodyPartRemoved(c, e);\n case \"FlatWingsSet\": return applyFlatWingsSet(c, e);\n }\n}\n\n/** The creation a list of events describes. */\nexport const foldEvents = (events: readonly CreationEvent[]): Creation => events.reduce(applyEvent, EMPTY_CREATION);\n\nexport const fold = (log: CreationLog): Creation => foldEvents(log.events);\n", "import type { Bone, Creation, Id, RigObject } from \"@dreamy/api\";\n\nexport type RigLookup = { readonly ok: true; readonly object: RigObject } | { readonly ok: false; readonly reason: string };\n\nexport function findRig(creation: Creation, rigId: Id): RigLookup {\n const o = creation.objects.find((x) => x.id === rigId);\n if (!o) return { ok: false, reason: `There is no object ${rigId}.` };\n if (o.kind !== \"rig\") return { ok: false, reason: `${o.name} has no skeleton.` };\n return { ok: true, object: o };\n}\n\nexport const findBone = (object: RigObject, boneId: Id): Bone | undefined => object.rig.bones.find((b) => b.id === boneId);\n\nexport const MAX_BONES = 64;\n", "import type { Creation, CreationEvent, IdGenerator } from \"@dreamy/api\";\n\n/** What a molecule may use besides the creation: ids for new things and the time of acceptance. */\nexport type MoleculeContext = { readonly ids: IdGenerator; readonly at: number };\n\n/** A command's outcome: exactly one event (one undo step), or a readable reason. */\nexport type Decision = { readonly ok: true; readonly event: CreationEvent } | { readonly ok: false; readonly reason: string };\n\nexport type Molecule<C> = (creation: Creation, command: C, ctx: MoleculeContext) => Decision;\n\nexport const accept = (event: CreationEvent): Decision => ({ ok: true, event });\n\nexport const reject = (reason: string): Decision => ({ ok: false, reason });\n", "import type { AddBodyPart } from \"@dreamy/api\";\nimport { bindHeads } from \"../atoms/rig/bone-matrices.js\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { rigExtent } from \"../atoms/rig/rig-extent.js\";\nimport { ZERO } from \"../atoms/math/vec3.js\";\nimport { boneTree } from \"../premades/bone-tree.js\";\nimport { buildTemplate } from \"../premades/build-template.js\";\nimport { makeBodyPart } from \"../premades/make-body-part.js\";\nimport { findTemplate } from \"../premades/template-catalog.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * POC sculptBonePart: a generated part for the bone (styled and colored by the rig's template when it has\n * one), a flat wing for a wing chain's first bone, else a knob to sculpt from. Baked parts are not\n * regenerated: the bake's fit is not stored on the rig.\n */\nexport const addBodyPart: Molecule<AddBodyPart> = (creation, { payload }, { ids, at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n const bone = findBone(lookup.object, payload.boneId);\n if (!bone) return reject(`There is no bone ${payload.boneId}.`);\n if (rig.parts.some((p) => p.boneId === bone.id)) return reject(`${bone.name} already has a body part.`);\n const tpl = rig.templateId !== undefined ? findTemplate(rig.templateId) : undefined;\n const { nodes, roots } = boneTree(rig.bones);\n const part = makeBodyPart(\n nodes.get(bone.id)!,\n {\n colors: tpl?.colors ?? {},\n styles: tpl ? buildTemplate(tpl).styles : {},\n c: ZERO,\n h: ZERO,\n regionBlends: rig.regionBlends,\n extent: rigExtent([...bindHeads(rig.bones).values()]),\n roots,\n },\n ids,\n true,\n );\n if (!part) return reject(`${bone.name} cannot get a body part.`);\n return accept({ type: \"BodyPartAdded\", at, payload: { rigId: payload.rigId, part } });\n};\n", "/** `base`, or `base 2`, `base 3`\u2026 when the name is taken (POC rig builder naming). */\nexport function uniqueName(base: string, taken: readonly string[]): string {\n const used = new Set(taken);\n let name = base, k = 2;\n while (used.has(name)) name = `${base} ${k++}`;\n return name;\n}\n\n/** `Prefix N` with N one past the highest number already used by that prefix. */\nexport function nextNumberedName(prefix: string, taken: readonly string[]): string {\n const re = new RegExp(`^${prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")} (\\\\d+)$`);\n const used = taken.map((n) => Number(re.exec(n)?.[1])).filter(Number.isFinite);\n return `${prefix} ${Math.max(0, ...used) + 1}`;\n}\n", "import type { AddBone, Bone, Vec3 } from \"@dreamy/api\";\nimport { IDENTITY_M, invertM, transformPoint } from \"../atoms/math/mat4.js\";\nimport { translation } from \"../atoms/math/transform.js\";\nimport { isFiniteVec } from \"../atoms/math/vec3.js\";\nimport { boneMatrices } from \"../atoms/rig/bone-matrices.js\";\nimport { findBone, findRig, MAX_BONES } from \"../atoms/rig/find-rig.js\";\nimport { mirrorPartner } from \"../atoms/rig/mirror-partner.js\";\nimport { mirrorPoint } from \"../atoms/rig/mirror-transform.js\";\nimport { nextNumberedName, uniqueName } from \"../atoms/scene/unique-name.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Joints closer than this to the mirror plane are central: no partner. */\nconst CENTER_EPS = 1e-4;\n\n/**\n * POC addBone (rig mode only): a bone whose head sits at `head` in rig space. With mirror on and the head\n * off the mirror plane, the partner is added too at the reflected head (under the parent's partner, if\n * any), the pair tagged side:L (+x) / side:R and sharing a mirror key.\n */\nexport const addBone: Molecule<AddBone> = (creation, { payload }, { ids, at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (rig.mode !== \"rig\") return reject(\"Switch to Rig mode to add bones.\");\n if (!isFiniteVec(payload.head)) return reject(\"A bone head needs finite numbers.\");\n const parent = payload.parentId !== undefined ? findBone(lookup.object, payload.parentId) : undefined;\n if (payload.parentId !== undefined && !parent) return reject(`There is no bone ${payload.parentId}.`);\n\n const worlds = boneMatrices(rig.bones, \"bind\");\n const local = (head: Vec3, parentId: string | undefined): Bone[\"bind\"] =>\n translation(transformPoint(invertM(parentId !== undefined ? (worlds.get(parentId) ?? IDENTITY_M) : IDENTITY_M), head));\n const names = rig.bones.map((b) => b.name);\n const stem = payload.name?.trim() || nextNumberedName(\"Bone\", names);\n const mirrored = rig.mirror && Math.abs(payload.head.x - rig.mirrorX) > CENTER_EPS;\n if (rig.bones.length + (mirrored ? 2 : 1) > MAX_BONES) return reject(`Bone limit reached (${MAX_BONES}).`);\n\n const make = (name: string, head: Vec3, parentId: string | undefined, tags: string[]): Bone => {\n const bind = local(head, parentId);\n return { id: ids.next(), name, ...(parentId !== undefined ? { parentId } : {}), tags, bind, pose: bind };\n };\n if (!mirrored) {\n return accept({ type: \"BonesAdded\", at, payload: { rigId: payload.rigId, bones: [make(uniqueName(stem, names), payload.head, parent?.id, [])] } });\n }\n const side = payload.head.x > rig.mirrorX ? \"L\" : \"R\";\n const other = side === \"L\" ? \"R\" : \"L\";\n const twinParent = parent ? (mirrorPartner(rig.bones, parent) ?? parent) : undefined;\n const first = make(uniqueName(`${stem} ${side}`, names), payload.head, parent?.id, [`side:${side}`, `mirror:${stem}`]);\n const second = make(\n uniqueName(`${stem} ${other}`, [...names, first.name]),\n mirrorPoint(payload.head, rig.mirrorX),\n twinParent?.id,\n [`side:${other}`, `mirror:${stem}`],\n );\n return accept({ type: \"BonesAdded\", at, payload: { rigId: payload.rigId, bones: [first, second] } });\n};\n", "/** A readable reason a value is not accepted, or undefined. */\nexport type Problem = string | undefined;\n\nexport function inRange(label: string, value: number | undefined, min: number, max: number): Problem {\n if (value === undefined) return undefined;\n if (!Number.isFinite(value)) return `${label} must be a number.`;\n if (value < min || value > max) return `${label} must be between ${min} and ${max}.`;\n return undefined;\n}\n\nexport function positive(label: string, value: number | undefined): Problem {\n if (value === undefined) return undefined;\n if (!Number.isFinite(value) || value <= 0) return `${label} must be greater than 0.`;\n return undefined;\n}\n\nexport function oneOf<T extends string>(label: string, value: T | undefined, allowed: readonly T[]): Problem {\n if (value === undefined) return undefined;\n return allowed.includes(value) ? undefined : `${label} \"${String(value)}\" is not one of ${allowed.join(\", \")}.`;\n}\n\n/** The first problem of a list. */\nexport const firstProblem = (...problems: readonly Problem[]): Problem => problems.find((p) => p !== undefined);\n", "import type { ColorRef, FixedColor } from \"@dreamy/api\";\nimport { PALETTE_SLOTS } from \"./default-palette.js\";\n\nconst FIXED: readonly FixedColor[] = [\"tongue\", \"teeth\", \"black\"];\n\nexport const isColorRef = (value: unknown): value is ColorRef =>\n typeof value === \"string\" && ((PALETTE_SLOTS as readonly string[]).includes(value) || (FIXED as readonly string[]).includes(value));\n", "import type { Material, SculptLookPatch } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf, type Problem } from \"../check/check.js\";\nimport { isColorRef } from \"../palette/is-color-ref.js\";\nimport { FLECK_SHAPES, PATTERN_KINDS } from \"./catalogs.js\";\n\nexport function colorProblem(label: string, value: unknown): Problem {\n if (value === undefined) return undefined;\n return isColorRef(value) ? undefined : `${label} must be a palette slot or a fixed color.`;\n}\n\nexport function materialProblem(m: Partial<Material> | undefined): Problem {\n if (!m) return undefined;\n return firstProblem(\n inRange(\"Roughness\", m.roughness, 0, 1),\n inRange(\"Metalness\", m.metalness, 0, 1),\n inRange(\"Glow\", m.glow, 0, 3),\n inRange(\"Opacity\", m.opacity, 0, 1),\n );\n}\n\nexport const blendProblem = (value: number | undefined): Problem => inRange(\"Blend\", value, 0, 0.8);\n\n/** Why a look (or a patch of one) breaks the model's ranges. */\nexport function lookProblem(look: SculptLookPatch): Problem {\n const f = look.fleck, p = look.pattern;\n return firstProblem(\n colorProblem(\"Color\", look.color),\n colorProblem(\"Foundation color\", look.foundationColor),\n blendProblem(look.blend),\n f &&\n firstProblem(\n oneOf(\"Fleck shape\", f.shape, FLECK_SHAPES),\n inRange(\"Fleck size\", f.size, 0.2, 3),\n inRange(\"Variation\", f.variation, 0, 1),\n inRange(\"Coverage\", f.coverage, 0.1, 1),\n inRange(\"Regularity\", f.regularity, 0, 1),\n inRange(\"Boil\", f.boil, 0, 3),\n inRange(\"Foundation darkness\", f.foundationDarkness, 0, 0.6),\n inRange(\"Normal strength\", f.normalStrength, 0, 3),\n ),\n materialProblem(look.material),\n p &&\n firstProblem(\n oneOf(\"Pattern\", p.kind, PATTERN_KINDS),\n inRange(\"Pattern scale\", p.scale, 0.2, 5),\n inRange(\"Pattern strength\", p.strength, 0, 1),\n colorProblem(\"Pattern color\", p.color),\n colorProblem(\"Second pattern color\", p.color2),\n p.rotation &&\n firstProblem(\n inRange(\"Pattern rotation\", p.rotation.x, -Infinity, Infinity),\n inRange(\"Pattern rotation\", p.rotation.y, -Infinity, Infinity),\n inRange(\"Pattern rotation\", p.rotation.z, -Infinity, Infinity),\n ),\n ),\n );\n}\n", "import type { BuiltinDecalCategory, Creation, Decal } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf, positive, type Problem } from \"../check/check.js\";\nimport { colorProblem } from \"../look/look-problem.js\";\nimport { isFiniteQ } from \"../math/quat.js\";\nimport { isFiniteVec } from \"../math/vec3.js\";\n\nconst CATEGORIES: readonly BuiltinDecalCategory[] = [\"eye\", \"mouth\", \"mark\", \"door\", \"emoji\", \"interior\"];\n\n/** Why a decal cannot be placed, if it cannot. */\nexport function decalProblem(creation: Creation, d: Omit<Decal, \"id\">): Problem {\n const a = d.art;\n const art =\n a.kind === \"builtin\"\n ? firstProblem(oneOf(\"Decal category\", a.category, CATEGORIES), a.name ? undefined : \"A decal needs a name.\")\n : creation.designs.some((x) => x.id === a.designId)\n ? undefined\n : `There is no design ${a.designId}.`;\n return firstProblem(\n art,\n isFiniteVec(d.position) && isFiniteQ(d.rotation) ? undefined : \"A decal placement needs finite numbers.\",\n positive(\"Decal size\", d.size),\n inRange(\"Decal opacity\", d.opacity, 0, 1),\n colorProblem(\"Decal tint\", d.tint),\n inRange(\"Room depth\", d.depth, 0.5, 2),\n d.seed === undefined || Number.isFinite(d.seed) ? undefined : \"A room seed must be a number.\",\n );\n}\n", "import type { Creation, Sculpt, SculptTarget } from \"@dreamy/api\";\n\nexport type TargetLookup = { readonly ok: true; readonly sculpt: Sculpt } | { readonly ok: false; readonly reason: string };\n\n/** The sculpt a target names: a sculpt object, a rig's skinned body, or the sculpt part of a rig's bone. */\nexport function targetSculpt(creation: Creation, target: SculptTarget): TargetLookup {\n const object = creation.objects.find((o) => o.id === target.objectId);\n if (!object) return { ok: false, reason: `There is no object ${target.objectId}.` };\n if (\"boneId\" in target) {\n if (object.kind !== \"rig\") return { ok: false, reason: `${object.name} is not a rig.` };\n const bone = object.rig.bones.find((b) => b.id === target.boneId);\n if (!bone) return { ok: false, reason: `${object.name} has no bone ${target.boneId}.` };\n const part = object.rig.parts.find((p) => p.boneId === target.boneId);\n if (!part) return { ok: false, reason: `${bone.name} has no body part.` };\n if (part.kind !== \"sculpt\") return { ok: false, reason: `${bone.name}'s part is a flat wing, not a sculpt.` };\n return { ok: true, sculpt: part.sculpt };\n }\n if (object.kind === \"sculpt\") return { ok: true, sculpt: object.sculpt };\n if (object.rig.body) return { ok: true, sculpt: object.rig.body };\n return { ok: false, reason: `${object.name} has no body to sculpt: pick one of its bones' parts.` };\n}\n", "import type { AddDecals, Decal } from \"@dreamy/api\";\nimport { decalLimitProblem } from \"../atoms/decal/decal-limits.js\";\nimport { decalProblem } from \"../atoms/decal/decal-problem.js\";\nimport { normalizeQ } from \"../atoms/math/quat.js\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Places decals on a sculpt (at most 64, of which 8 interior rooms). */\nexport const addDecals: Molecule<AddDecals> = (creation, { payload }, { ids, at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (payload.decals.length === 0) return reject(\"No decals to add.\");\n for (const d of payload.decals) {\n const problem = decalProblem(creation, d);\n if (problem) return reject(problem);\n }\n const limit = decalLimitProblem(lookup.sculpt.decals, payload.decals);\n if (limit) return reject(limit);\n const decals: Decal[] = payload.decals.map((d) => ({ ...d, id: ids.next(), rotation: normalizeQ(d.rotation) }));\n return accept({ type: \"DecalsAdded\", at, payload: { target: payload.target, decals } });\n};\n", "import type { MaterialOverrides, StampPropsPatch, StampSpec, Symmetry } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf, positive, type Problem } from \"../check/check.js\";\nimport { STAMP_MODES, STAMP_SHAPES } from \"../look/catalogs.js\";\nimport { blendProblem, colorProblem } from \"../look/look-problem.js\";\nimport { isFiniteQ } from \"../math/quat.js\";\nimport { isFiniteVec } from \"../math/vec3.js\";\n\nexport function symmetryProblem(s: Symmetry | null | undefined): Problem {\n if (!s) return undefined;\n if (!Number.isFinite(s.count)) return \"Symmetry count must be a number.\";\n return s.axes.every((a) => a === \"x\" || a === \"y\" || a === \"z\") ? undefined : \"Symmetry axes are x, y and z.\";\n}\n\nexport function overridesProblem(m: MaterialOverrides | null | undefined): Problem {\n if (!m) return undefined;\n return firstProblem(\n inRange(\"Roughness\", m.roughness, 0, 1),\n inRange(\"Metalness\", m.metalness, 0, 1),\n inRange(\"Glow\", m.glow, 0, 3),\n );\n}\n\nexport function placementProblem(p: StampSpec[\"position\"], r: StampSpec[\"rotation\"], s: StampSpec[\"scale\"]): Problem {\n if (!isFiniteVec(p) || !isFiniteQ(r) || !isFiniteVec(s)) return \"A stamp placement needs finite numbers.\";\n if (Math.hypot(r.x, r.y, r.z, r.w) < 1e-9) return \"A rotation cannot be zero.\";\n return firstProblem(positive(\"Stamp size\", s.x), positive(\"Stamp size\", s.y), positive(\"Stamp size\", s.z));\n}\n\nexport function propsProblem(p: StampPropsPatch): Problem {\n return firstProblem(\n oneOf(\"Mode\", p.mode, STAMP_MODES),\n colorProblem(\"Color\", p.color ?? undefined),\n colorProblem(\"Foundation color\", p.foundationColor ?? undefined),\n blendProblem(p.blend ?? undefined),\n overridesProblem(p.material),\n symmetryProblem(p.symmetry),\n );\n}\n\nexport function stampSpecProblem(s: StampSpec): Problem {\n return firstProblem(\n oneOf(\"Shape\", s.shape, STAMP_SHAPES),\n placementProblem(s.position, s.rotation, s.scale),\n propsProblem(s),\n );\n}\n", "import type { AddStamps, SmearGroup, Stamp } from \"@dreamy/api\";\nimport { firstProblem, oneOf } from \"../atoms/check/check.js\";\nimport { STAMP_MODES } from \"../atoms/look/catalogs.js\";\nimport { blendProblem, colorProblem } from \"../atoms/look/look-problem.js\";\nimport { normalizeQ } from \"../atoms/math/quat.js\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { clampSymmetry } from \"../atoms/stamp/clamp-symmetry.js\";\nimport { nextSmearName, smearGroupBlend } from \"../atoms/stamp/smear.js\";\nimport { stampSpecProblem, symmetryProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * One click adds one stamp; a smear stroke adds all its dabs as a new smear group (POC stampCurrentShape).\n * The group carries the stroke's mode, color, symmetry and a blend no larger than half the dab size. A\n * stroke of a single dab is no group: the dab takes the stroke's settings itself (POC finalizeSmearGroup).\n */\nexport const addStamps: Molecule<AddStamps> = (creation, { payload }, { ids, at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (payload.stamps.length === 0) return reject(\"No stamps to add.\");\n const { smear } = payload;\n const problem = firstProblem(\n ...payload.stamps.map(stampSpecProblem),\n smear && firstProblem(oneOf(\"Mode\", smear.mode, STAMP_MODES), colorProblem(\"Color\", smear.color), blendProblem(smear.blend), symmetryProblem(smear.symmetry)),\n );\n if (problem) return reject(problem);\n\n const stamps: Stamp[] = payload.stamps.map((spec) => ({\n ...spec,\n id: ids.next(),\n rotation: normalizeQ(spec.rotation),\n ...(spec.symmetry ? { symmetry: clampSymmetry(spec.symmetry) } : {}),\n }));\n if (!smear) return accept({ type: \"StampsAdded\", at, payload: { target: payload.target, stamps } });\n\n const blend = smearGroupBlend(smear.blend, stamps[0]!.scale);\n const symmetry = smear.symmetry ? clampSymmetry(smear.symmetry) : undefined;\n if (stamps.length === 1) {\n const { symmetry: _own, ...dab } = stamps[0]!;\n const single: Stamp = { ...dab, mode: smear.mode, color: smear.color, blend, ...(symmetry ? { symmetry } : {}) };\n return accept({ type: \"StampsAdded\", at, payload: { target: payload.target, stamps: [single] } });\n }\n const smearGroup: SmearGroup = {\n id: ids.next(),\n name: nextSmearName(lookup.sculpt),\n mode: smear.mode,\n color: smear.color,\n blend,\n ...(symmetry ? { symmetry } : {}),\n unlocked: false,\n };\n const grouped = stamps.map((s) => ({ ...s, smearGroupId: smearGroup.id }));\n return accept({ type: \"StampsAdded\", at, payload: { target: payload.target, stamps: grouped, smearGroup } });\n};\n", "import type { Creation, Id, SceneObject } from \"@dreamy/api\";\n\nexport const findObject = (creation: Creation, id: Id): SceneObject | undefined =>\n creation.objects.find((o) => o.id === id);\n\n/** The object's children, in scene order. */\nexport const childrenOf = (objects: readonly SceneObject[], parentId: Id | undefined): SceneObject[] =>\n objects.filter((o) => o.parentId === parentId);\n\n/** The object and every object below it, in scene order. */\nexport function subtreeIds(objects: readonly SceneObject[], rootId: Id): Id[] {\n const ids = new Set<Id>([rootId]);\n let grew = true;\n while (grew) {\n grew = false;\n for (const o of objects) {\n if (o.parentId !== undefined && ids.has(o.parentId) && !ids.has(o.id)) {\n ids.add(o.id);\n grew = true;\n }\n }\n }\n return objects.filter((o) => ids.has(o.id)).map((o) => o.id);\n}\n\n/** True when `id` is `ancestorId` or sits somewhere below it. */\nexport function isInSubtree(objects: readonly SceneObject[], id: Id, ancestorId: Id): boolean {\n let cur: Id | undefined = id;\n const seen = new Set<Id>();\n while (cur !== undefined && !seen.has(cur)) {\n if (cur === ancestorId) return true;\n seen.add(cur);\n cur = objects.find((o) => o.id === cur)?.parentId;\n }\n return false;\n}\n", "import type { ApplyPremade, RigObject } from \"@dreamy/api\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { add, isFiniteVec, vec3 } from \"../atoms/math/vec3.js\";\nimport { DEFAULT_REGION_BLENDS } from \"../atoms/rig/bone-region.js\";\nimport { MAX_BONES } from \"../atoms/rig/find-rig.js\";\nimport { findObject } from \"../atoms/scene/object-tree.js\";\nimport { buildPremadeRig, premadeLift } from \"../premades/build-premade-rig.js\";\nimport { buildTemplate } from \"../premades/build-template.js\";\nimport { premadeFit } from \"../premades/premade-fit.js\";\nimport { findTemplate } from \"../premades/template-catalog.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * POC applyPremadeSkeleton. A new rig is named after the template and raised so its feet stand on the\n * transform's ground height. On an object, the skeleton replaces the old one, fitted to the given bounds:\n * a sculpt (or a rig with a skinned body) keeps its stamps as the rig's body and gets no parts, as in the\n * POC; a body-less rig gets the template's parts when `withBody` is set.\n */\nexport const applyPremade: Molecule<ApplyPremade> = (creation, { payload }, { ids, at }) => {\n const tpl = findTemplate(payload.templateId);\n if (!tpl) return reject(`There is no premade skeleton \"${payload.templateId}\".`);\n if (buildTemplate(tpl).bones.length > MAX_BONES) return reject(`Template has too many bones (max ${MAX_BONES}).`);\n const { target, withBody } = payload;\n\n if (target.kind === \"new\") {\n const problem = transformProblem(target.transform);\n if (problem) return reject(problem);\n const fit = premadeFit(tpl);\n const rig = buildPremadeRig(tpl, { fit, withBody, mirror: false, regionBlends: DEFAULT_REGION_BLENDS }, ids);\n const transform = cleanTransform(target.transform);\n const object: RigObject = {\n id: ids.next(),\n name: tpl.name,\n // the lift is in the rig's space: scaled with the object\n transform: { ...transform, position: add(transform.position, vec3(0, premadeLift(tpl, fit, withBody) * transform.scale.y, 0)) },\n kind: \"rig\",\n rig,\n };\n return accept({ type: \"PremadeApplied\", at, payload: { kind: \"new\", object } });\n }\n\n const object = findObject(creation, target.objectId);\n if (!object) return reject(`There is no object ${target.objectId}.`);\n if (!isFiniteVec(target.fit.center) || !isFiniteVec(target.fit.halfSize)) return reject(\"The fit needs finite numbers.\");\n const fit = premadeFit(tpl, target.fit);\n const body = object.kind === \"sculpt\" ? object.sculpt : object.rig.body;\n const mirror = object.kind === \"rig\" ? object.rig.mirror : false;\n const regionBlends = object.kind === \"rig\" ? object.rig.regionBlends : DEFAULT_REGION_BLENDS;\n const rig = buildPremadeRig(tpl, { fit, withBody: withBody && !body, mirror, regionBlends }, ids);\n return accept({\n type: \"PremadeApplied\",\n at,\n payload: { kind: \"object\", objectId: object.id, rig: body ? { ...rig, body } : rig },\n });\n};\n", "/** POC autoTagSides: \"Arm L\", \"Arm_R\", \"Left Arm\" \u2192 the side letter and the shared stem. */\nexport function sideFromName(name: string): { readonly side: \"L\" | \"R\"; readonly stem: string } | undefined {\n let m = /^(.+)[ _.-](L|R|Left|Right)$/.exec(name);\n if (m?.[1] && m[2]) return { stem: m[1], side: m[2][0] as \"L\" | \"R\" };\n m = /^(L|R|Left|Right)[ _.-](.+)$/.exec(name);\n if (m?.[1] && m[2]) return { stem: m[2], side: m[1][0] as \"L\" | \"R\" };\n return undefined;\n}\n\n/** The tags with the side and mirror tags replaced. */\nexport const withSideTags = (tags: readonly string[], side: \"L\" | \"R\", stem: string): string[] => [\n ...tags.filter((t) => !t.startsWith(\"side:\") && !t.startsWith(\"mirror:\")),\n `side:${side}`,\n `mirror:${stem}`,\n];\n", "import type { AutoTagSides } from \"@dreamy/api\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { sideFromName, withSideTags } from \"../atoms/rig/side-from-name.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC autoTagSides: names like \"Arm L\" or \"Left Arm\" become side + mirror tags. */\nexport const autoTagSides: Molecule<AutoTagSides> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const changes = lookup.object.rig.bones.flatMap((b) => {\n const found = sideFromName(b.name);\n return found ? [{ boneId: b.id, tags: withSideTags(b.tags, found.side, found.stem) }] : [];\n });\n if (changes.length === 0) return reject(\"No L / R names found.\");\n return accept({ type: \"BoneTagsSet\", at, payload: { rigId: payload.rigId, changes } });\n};\n", "import type { CreateRig, RigObject } from \"@dreamy/api\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { DEFAULT_REGION_BLENDS } from \"../atoms/rig/bone-region.js\";\nimport { nextNumberedName } from \"../atoms/scene/unique-name.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** An empty rig in rig mode, ready for bones. */\nexport const createRig: Molecule<CreateRig> = (creation, { payload }, { ids, at }) => {\n const problem = transformProblem(payload.transform);\n if (problem) return reject(problem);\n const object: RigObject = {\n id: ids.next(),\n name: payload.name?.trim() || nextNumberedName(\"Rig\", creation.objects.map((o) => o.name)),\n transform: cleanTransform(payload.transform),\n kind: \"rig\",\n rig: { bones: [], mode: \"rig\", mirror: false, mirrorX: 0, regionBlends: DEFAULT_REGION_BLENDS, parts: [] },\n };\n return accept({ type: \"RigCreated\", at, payload: { object } });\n};\n", "import type { CreateSculpt, SculptObject } from \"@dreamy/api\";\nimport { firstProblem } from \"../atoms/check/check.js\";\nimport { DEFAULT_PIVOT, defaultLook } from \"../atoms/look/default-look.js\";\nimport { lookProblem } from \"../atoms/look/look-problem.js\";\nimport { mergeLook } from \"../atoms/look/merge-look.js\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { normalizeQ } from \"../atoms/math/quat.js\";\nimport { findObject } from \"../atoms/scene/object-tree.js\";\nimport { nextNumberedName } from \"../atoms/scene/unique-name.js\";\nimport { clampSymmetry } from \"../atoms/stamp/clamp-symmetry.js\";\nimport { stampSpecProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** A new sculpt whose base solid is one stamp. The base is always additive; the look starts in its color. */\nexport const createSculpt: Molecule<CreateSculpt> = (creation, { payload }, { ids, at }) => {\n const { parentId, stamp, look } = payload;\n if (parentId !== undefined && !findObject(creation, parentId)) return reject(`There is no object ${parentId}.`);\n const problem = firstProblem(transformProblem(payload.transform), stampSpecProblem(stamp), look && lookProblem(look));\n if (problem) return reject(problem);\n const color = stamp.color ?? look?.color ?? \"secondary\";\n const name = payload.name?.trim() || nextNumberedName(\"Sculpt\", creation.objects.map((o) => o.name));\n const object: SculptObject = {\n id: ids.next(),\n name,\n ...(parentId !== undefined ? { parentId } : {}),\n transform: cleanTransform(payload.transform),\n kind: \"sculpt\",\n sculpt: {\n stamps: [\n {\n ...stamp,\n id: ids.next(),\n mode: \"add\",\n rotation: normalizeQ(stamp.rotation),\n ...(stamp.symmetry ? { symmetry: clampSymmetry(stamp.symmetry) } : {}),\n },\n ],\n smearGroups: [],\n look: mergeLook(defaultLook(color), look ?? {}),\n pivot: DEFAULT_PIVOT,\n decals: [],\n },\n };\n return accept({ type: \"SculptCreated\", at, payload: { object } });\n};\n", "import type { Creation, Sculpt } from \"@dreamy/api\";\n\n/** Every sculpt in the creation: sculpt objects, rig bodies and rig sculpt parts. */\nexport function allSculpts(creation: Creation): Sculpt[] {\n return creation.objects.flatMap((o) => {\n if (o.kind === \"sculpt\") return [o.sculpt];\n const parts = o.rig.parts.flatMap((p) => (p.kind === \"sculpt\" ? [p.sculpt] : []));\n return o.rig.body ? [o.rig.body, ...parts] : parts;\n });\n}\n", "import type { DeleteDesign } from \"@dreamy/api\";\nimport { allSculpts } from \"../atoms/sculpt/all-sculpts.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** A design in use by any decal cannot be deleted. */\nexport const deleteDesign: Molecule<DeleteDesign> = (creation, { payload }, { at }) => {\n const design = creation.designs.find((d) => d.id === payload.designId);\n if (!design) return reject(`There is no design ${payload.designId}.`);\n const uses = allSculpts(creation).reduce(\n (n, s) => n + s.decals.filter((d) => d.art.kind === \"design\" && d.art.designId === design.id).length,\n 0,\n );\n if (uses > 0) return reject(`${design.name} is used by ${uses} decal${uses === 1 ? \"\" : \"s\"}: remove them first.`);\n return accept({ type: \"DesignDeleted\", at, payload });\n};\n", "import type { DeleteObjects, Id } from \"@dreamy/api\";\nimport { findObject, subtreeIds } from \"../atoms/scene/object-tree.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Each listed object goes with its whole subtree. */\nexport const deleteObjects: Molecule<DeleteObjects> = (creation, { payload }, { at }) => {\n if (payload.objectIds.length === 0) return reject(\"Nothing to delete.\");\n const missing = payload.objectIds.find((id) => !findObject(creation, id));\n if (missing !== undefined) return reject(`There is no object ${missing}.`);\n const all = new Set<Id>(payload.objectIds.flatMap((id) => subtreeIds(creation.objects, id)));\n const objectIds = creation.objects.filter((o) => all.has(o.id)).map((o) => o.id);\n return accept({ type: \"ObjectsDeleted\", at, payload: { objectIds } });\n};\n", "import type { Id, IdGenerator, Rig, SceneObject, Sculpt } from \"@dreamy/api\";\n\n/** A sculpt with fresh stamp, smear group and decal ids (references between them kept). */\nexport function copySculpt(s: Sculpt, ids: IdGenerator): Sculpt {\n const groups = new Map(s.smearGroups.map((g) => [g.id, ids.next()]));\n return {\n ...s,\n stamps: s.stamps.map((st) => {\n const smearGroupId = st.smearGroupId !== undefined ? groups.get(st.smearGroupId) : undefined;\n return { ...st, id: ids.next(), ...(smearGroupId !== undefined ? { smearGroupId } : {}) };\n }),\n smearGroups: s.smearGroups.map((g) => ({ ...g, id: groups.get(g.id) ?? ids.next() })),\n decals: s.decals.map((d) => ({ ...d, id: ids.next() })),\n };\n}\n\n/** A rig with fresh bone ids; parents and parts follow their bones. */\nexport function copyRig(r: Rig, ids: IdGenerator): Rig {\n const bones = new Map(r.bones.map((b) => [b.id, ids.next()]));\n const map = (id: Id): Id => bones.get(id) ?? id;\n return {\n ...r,\n bones: r.bones.map((b) => ({ ...b, id: map(b.id), ...(b.parentId !== undefined ? { parentId: map(b.parentId) } : {}) })),\n parts: r.parts.map((p) => (p.kind === \"sculpt\" ? { ...p, boneId: map(p.boneId), sculpt: copySculpt(p.sculpt, ids) } : { ...p, boneId: map(p.boneId) })),\n ...(r.body ? { body: copySculpt(r.body, ids) } : {}),\n };\n}\n\n/** An object's copy with a new id (its parent is set by the caller). */\nexport function copyObject(o: SceneObject, id: Id, ids: IdGenerator): SceneObject {\n return o.kind === \"sculpt\" ? { ...o, id, sculpt: copySculpt(o.sculpt, ids) } : { ...o, id, rig: copyRig(o.rig, ids) };\n}\n", "import type { DuplicateObjects, Id, SceneObject } from \"@dreamy/api\";\nimport { add, vec3 } from \"../atoms/math/vec3.js\";\nimport { copyObject } from \"../atoms/scene/copy-with-new-ids.js\";\nimport { findObject, isInSubtree, subtreeIds } from \"../atoms/scene/object-tree.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC duplicateSelected: the copy sits 1.5 to the side (x and z) of the original. */\nexport const DUPLICATE_OFFSET = vec3(1.5, 0, 1.5);\n\n/** Copies the objects with their subtrees (new ids throughout), named \"\u2026 (Copy)\", beside the originals. */\nexport const duplicateObjects: Molecule<DuplicateObjects> = (creation, { payload }, { ids, at }) => {\n if (payload.objectIds.length === 0) return reject(\"Nothing to duplicate.\");\n const missing = payload.objectIds.find((id) => !findObject(creation, id));\n if (missing !== undefined) return reject(`There is no object ${missing}.`);\n const listed = [...new Set(payload.objectIds)];\n const tops = listed.filter((id) => !listed.some((other) => other !== id && isInSubtree(creation.objects, id, other)));\n const objects: SceneObject[] = [];\n for (const top of tops) {\n const members = subtreeIds(creation.objects, top);\n const newIds = new Map<Id, Id>(members.map((id) => [id, ids.next()]));\n for (const id of members) {\n const original = findObject(creation, id)!;\n const copy = copyObject(original, newIds.get(id)!, ids);\n if (id === top) {\n objects.push({\n ...copy,\n name: `${original.name} (Copy)`,\n transform: { ...copy.transform, position: add(copy.transform.position, DUPLICATE_OFFSET) },\n });\n } else {\n objects.push({ ...copy, parentId: newIds.get(original.parentId!)! });\n }\n }\n }\n return accept({ type: \"ObjectsDuplicated\", at, payload: { objects } });\n};\n", "import type { MirrorObjects } from \"@dreamy/api\";\nimport { findObject, isInSubtree } from \"../atoms/scene/object-tree.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * Flips each object across its own center on one axis: the object's scale on that local axis is negated\n * (one ObjectTransformsSet, so it undoes in one step). Objects inside another listed object flip with it.\n */\nexport const mirrorObjects: Molecule<MirrorObjects> = (creation, { payload }, { at }) => {\n if (payload.axis !== \"x\" && payload.axis !== \"z\") return reject(\"Objects mirror on x or z.\");\n if (payload.objectIds.length === 0) return reject(\"Nothing to mirror.\");\n const missing = payload.objectIds.find((id) => !findObject(creation, id));\n if (missing !== undefined) return reject(`There is no object ${missing}.`);\n const ids = [...new Set(payload.objectIds)];\n const tops = ids.filter((id) => !ids.some((other) => other !== id && isInSubtree(creation.objects, id, other)));\n const changes = tops.map((objectId) => {\n const { transform } = findObject(creation, objectId)!;\n const s = transform.scale;\n const scale = payload.axis === \"x\" ? { ...s, x: -s.x } : { ...s, z: -s.z };\n return { objectId, transform: { ...transform, scale } };\n });\n return accept({ type: \"ObjectTransformsSet\", at, payload: { changes } });\n};\n", "import type { RemoveBodyPart } from \"@dreamy/api\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const removeBodyPart: Molecule<RemoveBodyPart> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const bone = findBone(lookup.object, payload.boneId);\n if (!bone) return reject(`There is no bone ${payload.boneId}.`);\n if (!lookup.object.rig.parts.some((p) => p.boneId === bone.id)) return reject(\"This bone has no body part.\");\n return accept({ type: \"BodyPartRemoved\", at, payload });\n};\n", "import type { RemoveBone } from \"@dreamy/api\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC deleteBone (rig mode only): children move to its parent keeping their placement; its part goes. */\nexport const removeBone: Molecule<RemoveBone> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n if (lookup.object.rig.mode !== \"rig\") return reject(\"Switch to Rig mode to delete bones.\");\n if (!findBone(lookup.object, payload.boneId)) return reject(`There is no bone ${payload.boneId}.`);\n return accept({ type: \"BoneRemoved\", at, payload });\n};\n", "import type { RemoveDecal } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const removeDecal: Molecule<RemoveDecal> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (!lookup.sculpt.decals.some((d) => d.id === payload.decalId)) return reject(`There is no decal ${payload.decalId}.`);\n return accept({ type: \"DecalRemoved\", at, payload });\n};\n", "import type { RemoveSmearGroup } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC deleteGroup: the group goes with its stamps, unless they are all the sculpt has. */\nexport const removeSmearGroup: Molecule<RemoveSmearGroup> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n const { sculpt } = lookup;\n if (!sculpt.smearGroups.some((g) => g.id === payload.groupId)) return reject(`There is no smear group ${payload.groupId}.`);\n const members = sculpt.stamps.filter((s) => s.smearGroupId === payload.groupId).map((s) => s.id);\n if (members.length === sculpt.stamps.length) return reject(\"Cannot delete the only shapes: a sculpt keeps at least one stamp.\");\n return accept({\n type: \"StampsRemoved\",\n at,\n payload: { target: payload.target, stampIds: members, smearGroupIds: [payload.groupId] },\n });\n};\n", "import type { Id, Sculpt } from \"@dreamy/api\";\n\n/** The smear groups that have no stamps left once `removed` are gone (POC cleanupGroups). */\nexport function emptiedGroups(sculpt: Sculpt, removed: ReadonlySet<Id>): Id[] {\n return sculpt.smearGroups\n .filter((g) => !sculpt.stamps.some((s) => s.smearGroupId === g.id && !removed.has(s.id)))\n .map((g) => g.id);\n}\n", "import type { RemoveStamps } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { emptiedGroups } from \"../atoms/stamp/emptied-groups.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Removes stamps and the smear groups they leave empty; a sculpt always keeps at least one stamp. */\nexport const removeStamps: Molecule<RemoveStamps> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n const { sculpt } = lookup;\n if (payload.stampIds.length === 0) return reject(\"No stamps to remove.\");\n const missing = payload.stampIds.find((id) => !sculpt.stamps.some((s) => s.id === id));\n if (missing !== undefined) return reject(`There is no stamp ${missing}.`);\n const removed = new Set(payload.stampIds);\n if (sculpt.stamps.every((s) => removed.has(s.id))) return reject(\"Cannot delete the only shape: a sculpt keeps at least one stamp.\");\n const stampIds = sculpt.stamps.filter((s) => removed.has(s.id)).map((s) => s.id);\n return accept({\n type: \"StampsRemoved\",\n at,\n payload: { target: payload.target, stampIds, smearGroupIds: emptiedGroups(sculpt, removed) },\n });\n};\n", "import type { RenameBone } from \"@dreamy/api\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const renameBone: Molecule<RenameBone> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n if (!findBone(lookup.object, payload.boneId)) return reject(`There is no bone ${payload.boneId}.`);\n const name = payload.name.trim();\n if (!name) return reject(\"A name cannot be empty.\");\n return accept({ type: \"BoneRenamed\", at, payload: { ...payload, name } });\n};\n", "import type { RenameObject } from \"@dreamy/api\";\nimport { findObject } from \"../atoms/scene/object-tree.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const renameObject: Molecule<RenameObject> = (creation, { payload }, { at }) => {\n if (!findObject(creation, payload.objectId)) return reject(`There is no object ${payload.objectId}.`);\n const name = payload.name.trim();\n if (!name) return reject(\"A name cannot be empty.\");\n return accept({ type: \"ObjectRenamed\", at, payload: { objectId: payload.objectId, name } });\n};\n", "import type { ReparentBone } from \"@dreamy/api\";\nimport { IDENTITY_M } from \"../atoms/math/mat4.js\";\nimport { boneMatrices, isBoneInSubtree } from \"../atoms/rig/bone-matrices.js\";\nimport { relativeTo } from \"../atoms/rig/compose-local.js\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC reparentBone (rig mode only): keeps the bone's bind and pose placement. A cycle is rejected. */\nexport const reparentBone: Molecule<ReparentBone> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (rig.mode !== \"rig\") return reject(\"Switch to Rig mode to re-parent bones.\");\n const bone = findBone(lookup.object, payload.boneId);\n if (!bone) return reject(`There is no bone ${payload.boneId}.`);\n const { parentId } = payload;\n if (parentId !== null) {\n const parent = findBone(lookup.object, parentId);\n if (!parent) return reject(`There is no bone ${parentId}.`);\n if (isBoneInSubtree(rig.bones, parentId, bone.id)) return reject(`${bone.name} cannot go under ${parent.name}: that would make a loop.`);\n }\n const keep = (channel: \"bind\" | \"pose\") => {\n const m = boneMatrices(rig.bones, channel);\n return relativeTo(parentId !== null ? (m.get(parentId) ?? IDENTITY_M) : IDENTITY_M, m.get(bone.id) ?? IDENTITY_M);\n };\n return accept({\n type: \"BoneReparented\",\n at,\n payload: { rigId: payload.rigId, boneId: bone.id, parentId, bind: keep(\"bind\"), pose: keep(\"pose\") },\n });\n};\n", "import type { Id, SceneObject } from \"@dreamy/api\";\nimport { composeTransform, IDENTITY_M, multiplyM, type Mat4 } from \"../math/mat4.js\";\n\n/** An object's world matrix: its parents' transforms composed down to it (identity for the scene root). */\nexport function worldMatrix(objects: readonly SceneObject[], id: Id | undefined): Mat4 {\n const chain: SceneObject[] = [];\n const seen = new Set<Id>();\n let cur = id;\n while (cur !== undefined && !seen.has(cur)) {\n seen.add(cur);\n const o = objects.find((x) => x.id === cur);\n if (!o) break;\n chain.unshift(o);\n cur = o.parentId;\n }\n return chain.reduce<Mat4>((m, o) => multiplyM(m, composeTransform(o.transform)), IDENTITY_M);\n}\n", "import type { ReparentObject } from \"@dreamy/api\";\nimport { composeTransform, multiplyM } from \"../atoms/math/mat4.js\";\nimport { relativeTo } from \"../atoms/rig/compose-local.js\";\nimport { findObject, isInSubtree } from \"../atoms/scene/object-tree.js\";\nimport { worldMatrix } from \"../atoms/scene/world-matrix.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Moves an object under another (or to the root) keeping its world placement. A cycle is rejected. */\nexport const reparentObject: Molecule<ReparentObject> = (creation, { payload }, { at }) => {\n const { objectId, parentId } = payload;\n const object = findObject(creation, objectId);\n if (!object) return reject(`There is no object ${objectId}.`);\n if (parentId !== null) {\n const parent = findObject(creation, parentId);\n if (!parent) return reject(`There is no object ${parentId}.`);\n if (isInSubtree(creation.objects, parentId, objectId)) {\n return reject(`${object.name} cannot go under ${parent.name}: that would make a loop.`);\n }\n }\n const world = multiplyM(worldMatrix(creation.objects, object.parentId), composeTransform(object.transform));\n const transform = relativeTo(worldMatrix(creation.objects, parentId ?? undefined), world);\n const siblings = creation.objects.filter((o) => o.id !== objectId && o.parentId === (parentId ?? undefined)).length;\n const wanted = payload.index ?? siblings;\n const index = Math.max(0, Math.min(siblings, Math.round(Number.isFinite(wanted) ? wanted : siblings)));\n return accept({ type: \"ObjectReparented\", at, payload: { objectId, parentId, index, transform } });\n};\n", "import type { ResetPalette } from \"@dreamy/api\";\nimport { accept, type Molecule } from \"./molecule.js\";\n\nexport const resetPalette: Molecule<ResetPalette> = (_creation, _command, { at }) =>\n accept({ type: \"PaletteReset\", at, payload: {} });\n", "import type { ResetPose } from \"@dreamy/api\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const resetPose: Molecule<ResetPose> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n return accept({ type: \"PoseReset\", at, payload });\n};\n", "import type { Vec3 } from \"@dreamy/api\";\n\n/** What a pose rule knows about one bone. */\nexport type BoneInfo = {\n readonly name: string;\n /** The numbers in its name (\"Arm 3 Seg 2\" \u2192 [3, 2]); premade rules address chains by them. */\n readonly nums: readonly number[];\n readonly role: string;\n /** +1 side L (+x), -1 side R, 0 on the middle. */\n readonly side: 1 | -1 | 0;\n /** Index in its run of same-role bones, and that run's length. */\n readonly depth: number;\n readonly n: number;\n readonly isRoot: boolean;\n /** Legs: the chain's first bone is in the front half of the legs. */\n readonly front: boolean;\n readonly winged: boolean;\n /** Wing chains: the chain's rest elevation above level (radians), in the side-L frame. */\n readonly elevation: number;\n /** Level unit direction from the root to the start of its chain (radial limbs such as tentacles). */\n readonly radial: Vec3;\n};\n\n/** Euler XYZ (radians) in the side-L frame, mirrored for side R. */\nexport type Euler = readonly [number, number, number];\n\n/**\n * A radial limb's turn: `curl` about the level axis across its radial direction (positive lifts the tip up and out),\n * then `swirl` about the vertical. For limbs with no side, such as an octopus's arms.\n */\nexport type Turn = { readonly curl: number; readonly swirl?: number };\n\nexport type Rule = {\n /** Root move as a fraction of the skeleton's height (y) and length (z). */\n readonly lift?: number;\n readonly ahead?: number;\n readonly bone: (b: BoneInfo) => Euler | Turn | undefined;\n};\n\nexport const WING_ROLES = new Set([\"wing\", \"insect-wing\"]);\nexport const LEG_ROLES = new Set([\"leg\", \"insect-leg\", \"spider-leg\", \"tentacle\"]);\n\n/** A chain's total angle spread over its bones. */\nexport const per = (b: BoneInfo, total: number): number => total / Math.max(1, b.n);\nexport const isLeg = (b: BoneInfo): boolean => LEG_ROLES.has(b.role);\nexport const isWing = (b: BoneInfo): boolean => WING_ROLES.has(b.role);\nexport const chainStart = (b: BoneInfo): boolean => b.depth === 0;\n/** Roll a wing chain from its rest elevation to `target` (radians above level): wings rest at different angles. */\nexport const wingTo = (b: BoneInfo, target: number, sweep = 0): Euler => [0, sweep, target - b.elevation];\n/** A bone named \"<stem> <k>\" (the body chains of the premades). */\nexport const isNamed = (b: BoneInfo, stem: string, k?: number): boolean =>\n b.name.startsWith(`${stem} `) && (k === undefined || b.nums[0] === k);\n", "import type { PosePresetId } from \"@dreamy/api\";\nimport { isNamed, per, type BoneInfo, type Euler, type Rule, type Turn } from \"./pose-rule.js\";\n\ntype PresetRules = Partial<Record<Exclude<PosePresetId, \"front\" | \"custom\">, Rule>>;\n\n/** By bone name: \"Spine 3\" \u2192 its rule. A bone not listed keeps its rest pose. */\nconst byName = (stem: string, table: { readonly [k: number]: Euler }) => (b: BoneInfo): Euler | undefined =>\n isNamed(b, stem) ? table[b.nums[0]!] : undefined;\nconst wiggle = (b: BoneInfo, amount: number): Euler => [0, b.nums[0]! % 2 ? amount : -amount, 0];\n\n/**\n * Snake (rooted at the tail tip, Spine 16; Spine 1 is the head). A bone turns the body from its joint toward the\n * head, so the neck (Spine 2\u20136) poses while the coil stays on the ground. Spine 6 is where the neck leaves the coil.\n */\nconst SNAKE: PresetRules = {\n howl: { bone: byName(\"Spine\", { 6: [-0.2, 0.35, 0], 3: [-0.3, 0, 0], 2: [-0.55, 0, 0] }) },\n menace: { bone: byName(\"Spine\", { 6: [-0.1, 0, 0], 4: [0.4, 0, 0], 3: [-0.45, 0, 0], 2: [0.2, 0, 0] }) },\n shy: { bone: byName(\"Spine\", { 6: [0.55, 0.3, 0], 4: [0.35, 0, 0], 2: [0.25, 0.8, 0] }) },\n hover: { lift: 0.25, bone: byName(\"Spine\", { 6: [0.35, 0, 0], 3: [-0.2, 0, 0], 10: [0, 0.25, 0] }) },\n dive: { ahead: 0.05, bone: byName(\"Spine\", { 6: [0.75, 0, 0], 4: [-0.35, 0, 0], 3: [-0.25, 0, 0], 2: [-0.15, 0, 0] }) },\n funny: { bone: byName(\"Spine\", { 6: [0, 0, 0.2], 5: [0, 0.45, 0], 4: [0, -0.45, 0], 3: [0, 0.45, 0], 2: [0, 0, 0.7] }) },\n};\n\n/** Worm (rooted at the tail, Segment 10; Segment 1 is the head, raised over Segments 2\u20133). */\nconst WORM: PresetRules = {\n howl: { bone: byName(\"Segment\", { 5: [0, 0.25, 0], 3: [-0.15, 0, -0.35], 2: [-0.4, 0, 0] }) },\n menace: { bone: byName(\"Segment\", { 3: [0, 0, -0.5], 2: [0.45, 0, 0] }) },\n shy: { bone: byName(\"Segment\", { 4: [0.3, 0.5, 0.35], 2: [0.3, 0.5, 0] }) },\n hover: { lift: 0.3, bone: byName(\"Segment\", { 7: [0, -0.35, 0], 5: [0, 0.35, 0], 3: [0, 0, 0.2] }) },\n dive: { bone: byName(\"Segment\", { 4: [0.4, 0, 0.3], 2: [-0.3, 0, 0] }) },\n funny: {\n bone: (b) => {\n if (isNamed(b, \"Segment\", 2)) return [0, 0.3, 0.6];\n if (isNamed(b, \"Segment\") && b.nums[0]! >= 3 && b.nums[0]! <= 9) return wiggle(b, 0.3);\n return undefined;\n },\n },\n};\n\n/** Fish (rooted at the head: the root turns the whole fish; Spine 1\u20135 bend the body toward the tail). */\nconst FISH: PresetRules = {\n howl: { bone: (b) => (b.isRoot ? [-0.45, 0.35, 0] : byName(\"Spine\", { 2: [0.15, 0, 0], 4: [0.2, 0, 0] })(b)) },\n menace: {\n bone: (b) => {\n if (b.isRoot) return [0.15, 0, 0];\n if (b.name === \"Dorsal Fin\") return [-0.3, 0, 0];\n if (isNamed(b, \"Pectoral\")) return b.depth === 0 ? [0, 0, 0.5] : undefined;\n return byName(\"Spine\", { 1: [0, 0.25, 0], 3: [0, 0.35, 0] })(b);\n },\n },\n shy: {\n bone: (b) => {\n if (b.isRoot) return [0, -0.6, 0.25];\n if (isNamed(b, \"Pectoral\")) return b.depth === 0 ? [0, 0, -0.4] : undefined;\n return byName(\"Spine\", { 1: [0, 0.35, 0], 3: [0, 0.45, 0] })(b);\n },\n },\n // a leap out of the water: nose up, body arched\n hover: { lift: 0.7, bone: (b) => (b.isRoot ? [-0.6, 0, 0] : byName(\"Spine\", { 2: [0.3, 0, 0], 4: [0.4, 0, 0] })(b)) },\n // a pounce: nose down, body bent the other way\n dive: { lift: 0.15, bone: (b) => (b.isRoot ? [0.45, 0, 0] : byName(\"Spine\", { 2: [-0.25, 0, 0], 4: [-0.3, 0, 0] })(b)) },\n funny: {\n bone: (b) => {\n if (b.isRoot) return [0, 0.3, 0.7];\n if (isNamed(b, \"Pectoral\") && b.depth === 0) return b.side === -1 ? [0, 0, -0.2] : [0, 0, 0.9];\n return byName(\"Spine\", { 1: [0, 0.4, 0], 2: [0, -0.4, 0], 3: [0, 0.4, 0] })(b);\n },\n },\n};\n\n/** Octopus (the Mantle is the root; eight radial arms, Arm k Seg 1\u20134, curl about their own radial axis). */\nconst arm = (b: BoneInfo): number | undefined => (isNamed(b, \"Arm\") && b.role === \"tentacle\" ? b.nums[0] : undefined);\nconst reaching = (b: BoneInfo): boolean => b.radial.z > 0.3;\nconst OCTOPUS: PresetRules = {\n howl: {\n bone: (b): Euler | Turn | undefined => {\n if (b.isRoot) return [-0.35, 0.3, 0];\n if (arm(b) !== undefined && reaching(b)) return { curl: per(b, 0.6) };\n return undefined;\n },\n },\n menace: {\n bone: (b): Euler | Turn | undefined => {\n if (b.isRoot) return [0.15, 0, 0];\n if (arm(b) !== undefined) return { curl: per(b, reaching(b) ? 1.2 : 0.8) };\n return undefined;\n },\n },\n shy: {\n bone: (b): Euler | Turn | undefined => {\n if (b.isRoot) return [0, -0.5, 0];\n if (b.name === \"Mantle Tip\") return [0.3, 0, 0];\n if (arm(b) !== undefined) return { curl: per(b, -0.9) };\n return undefined;\n },\n },\n // swimming: the mantle leads, the arms trail together\n hover: {\n lift: 0.3,\n bone: (b): Euler | Turn | undefined => {\n if (b.isRoot) return [0.9, 0, 0];\n if (arm(b) !== undefined) return { curl: per(b, -0.5) };\n return undefined;\n },\n },\n dive: {\n lift: 0.15,\n ahead: 0.08,\n bone: (b): Euler | Turn | undefined => {\n if (b.isRoot) return [0.35, 0, 0];\n if (arm(b) !== undefined) return { curl: per(b, reaching(b) ? 1.4 : -0.4) };\n return undefined;\n },\n },\n funny: {\n bone: (b): Euler | Turn | undefined => {\n if (b.name === \"Mantle Tip\") return [0, 0, 0.45];\n const k = arm(b);\n if (k !== undefined) return { curl: per(b, k % 2 ? -0.4 : 1.2), swirl: per(b, 0.6) };\n return undefined;\n },\n },\n};\n\n/** Centipede (rooted at the back, Body 6; Body 1 and the Head lead; a Hip / Leg chain per segment). */\nconst CENTIPEDE: PresetRules = {\n howl: {\n bone: (b) => {\n if (b.name === \"Head\") return [-0.3, 0, 0];\n if (b.role === \"antenna\" && b.depth === 0) return [-0.4, 0, 0];\n return byName(\"Body\", { 3: [-0.25, 0, 0], 2: [-0.3, 0, 0] })(b);\n },\n },\n menace: {\n bone: (b) => {\n if (b.name === \"Head\") return [0.15, 0, 0];\n if (b.role === \"antenna\" && b.depth === 0) return [-0.2, 0.4, 0];\n if (isNamed(b, \"Hip\", 1)) return [0, -0.4, 0];\n return byName(\"Body\", { 2: [-0.35, 0, 0], 1: [0.2, 0, 0] })(b);\n },\n },\n // curled into a C\n shy: {\n bone: (b) => {\n if (b.name === \"Head\") return [0.3, 0.3, 0];\n if (b.role === \"antenna\" && b.depth === 0) return [0.5, 0, 0];\n if (isNamed(b, \"Body\") && b.nums[0]! <= 5) return [0, 0.45, 0];\n return undefined;\n },\n },\n hover: {\n lift: 0.25,\n bone: (b) => {\n if (isNamed(b, \"Body\") && b.nums[0]! <= 5) return wiggle(b, 0.3);\n if (isNamed(b, \"Hip\")) return [0, 0, -0.3];\n return undefined;\n },\n },\n dive: {\n ahead: 0.05,\n bone: (b) => {\n if (isNamed(b, \"Hip\") && b.nums[0]! <= 2) return [0, -0.5, 0];\n return byName(\"Body\", { 3: [-0.25, 0, 0], 2: [0.3, 0, 0] })(b);\n },\n },\n funny: {\n bone: (b) => {\n if (b.name === \"Head\") return [0, 0, 0.5];\n if (b.role === \"antenna\" && b.depth === 0) return b.side === -1 ? [0.5, 0, 0] : [-0.6, 0, 0];\n if (isNamed(b, \"Hip\", 1) && b.side === 1) return [0, 0, 0.9];\n if (isNamed(b, \"Body\") && b.nums[0]! <= 5) return wiggle(b, 0.35);\n return undefined;\n },\n },\n};\n\n/** Premades whose body plan the role rules don't cover: their own rules replace the generic ones per preset. */\nexport const TEMPLATE_RULES: { readonly [templateId: string]: PresetRules } = {\n snake: SNAKE,\n worm: WORM,\n fish: FISH,\n shark: FISH,\n whale: FISH,\n octopus: OCTOPUS,\n jellyfish: OCTOPUS,\n centipede: CENTIPEDE,\n};\n", "import type { Bone, Id, PosePreset, PosePresetId, Quaternion, Rig, Transform, Vec3 } from \"@dreamy/api\";\nimport { fromEulerXYZ, IDENTITY_Q, multiplyQ, normalizeQ, quat } from \"../math/quat.js\";\nimport { add, lerp, vec3 } from \"../math/vec3.js\";\nimport { bindHeads } from \"./bone-matrices.js\";\nimport { resolveBoneRole } from \"./bone-role.js\";\nimport { mirrorRotation } from \"./mirror-transform.js\";\nimport { chainStart, isLeg, isWing, LEG_ROLES, per, WING_ROLES, wingTo, type BoneInfo, type Euler, type Rule, type Turn } from \"./pose-rule.js\";\nimport { TEMPLATE_RULES } from \"./pose-template-rules.js\";\n\n/** Every preset, in picker order (Custom is offered only once a rig has a hand-posed pose). */\nexport const POSE_PRESETS: readonly PosePresetId[] = [\"front\", \"howl\", \"menace\", \"shy\", \"hover\", \"dive\", \"funny\", \"custom\"];\n\n/** Picker names; a wingless rig flies by leaping. */\nexport function posePresetName(id: PosePresetId, winged: boolean): string {\n switch (id) {\n case \"front\": return \"Front\";\n case \"howl\": return \"Howling\";\n case \"menace\": return \"Menacing\";\n case \"shy\": return \"Shy\";\n case \"hover\": return winged ? \"Static flying\" : \"Leap\";\n case \"dive\": return winged ? \"Attacking flying\" : \"Pounce\";\n case \"funny\": return \"Funny\";\n case \"custom\": return \"Custom\";\n }\n}\n\n/** Whether a skeleton has wings (its flying presets fly; without wings they leap and pounce). */\nexport const isWinged = (bones: readonly Pick<Bone, \"name\" | \"tags\">[]): boolean => bones.some((b) => WING_ROLES.has(resolveBoneRole(b)));\n\nconst RULES: Record<Exclude<PosePresetId, \"front\" | \"custom\">, Rule> = {\n // head raised to the sky, body turned a little to one side\n howl: {\n bone: (b) => {\n if (b.isRoot) return [0, 0.45, 0];\n if (b.role === \"neck\") return [per(b, -0.55), 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [-0.45, 0, 0];\n if (b.role === \"ear\") return [-0.25, 0, 0];\n if (b.role === \"tail\") return [per(b, 0.25), 0, 0];\n if (isLeg(b) && chainStart(b) && b.front) return [-0.12, 0, 0];\n if (b.role === \"arm\" && chainStart(b)) return [-0.3, 0, 0.2];\n if (isWing(b) && chainStart(b)) return wingTo(b, 0.7);\n return undefined;\n },\n },\n // crouched, head low and forward, ears flat, tail and wings up, claws and jaws open\n menace: {\n bone: (b) => {\n if (b.role === \"neck\") return [per(b, 0.2), 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [-0.3, 0, 0];\n if (b.role === \"ear\") return [-0.55, 0, 0];\n if (b.role === \"tail\") return [per(b, 0.55), 0, 0];\n if (isLeg(b) && chainStart(b)) return b.front ? [-0.15, 0, 0.18] : [0.12, 0, 0.1];\n if (b.role === \"arm\" && chainStart(b)) return [-0.9, 0, 0.35];\n if (isWing(b) && chainStart(b)) return wingTo(b, 1.0, -0.2);\n if ([\"mandible\", \"claw\"].includes(b.role) && chainStart(b)) return [-0.3, 0.35, 0];\n if (b.role === \"stinger\") return [0.3, 0, 0];\n return undefined;\n },\n },\n // turned away and a little down, looking back, ears low, tail wrapped round, wings folded\n shy: {\n bone: (b) => {\n if (b.isRoot) return [0, -0.55, 0];\n if (b.role === \"neck\") return [per(b, 0.45), 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [0.25, 0.5, 0.3];\n if (b.role === \"ear\") return [-0.7, 0, -0.25];\n if (b.role === \"tail\") return [per(b, -0.45), per(b, 1.2), 0];\n if (b.role === \"arm\" && chainStart(b)) return [-0.7, 0, -0.3];\n if (isLeg(b) && chainStart(b) && b.front) return [-0.1, 0, -0.08];\n if (isWing(b) && chainStart(b)) return wingTo(b, -0.35, 0.5);\n if ([\"mandible\", \"claw\"].includes(b.role) && chainStart(b)) return [0.2, -0.2, 0];\n return undefined;\n },\n },\n // flying in place with wings spread and legs hanging; without wings, a leap\n hover: {\n lift: 0.35,\n bone: (b) => {\n if (b.winged) {\n if (b.isRoot) return [-0.08, 0, 0];\n // flesh wings spread level; flat insect wings stay raised (level, they would show edge-on)\n if (isWing(b) && chainStart(b)) return wingTo(b, b.role === \"insect-wing\" ? 0.55 : 0.15, -0.05);\n if (isLeg(b) && chainStart(b)) return [0.35, 0, -0.05];\n if (b.role === \"tail\") return [per(b, -0.3), 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [-0.1, 0, 0];\n if (b.role === \"arm\" && chainStart(b)) return [-0.3, 0, 0.6];\n return undefined;\n }\n if (b.isRoot) return [-0.15, 0, 0];\n if (isLeg(b) && chainStart(b)) return b.front ? [-0.8, 0, 0] : [0.8, 0, 0];\n if (b.role === \"arm\" && chainStart(b)) return [0, 0, 1.6];\n if (b.role === \"tail\") return [per(b, 0.4), 0, 0];\n if (b.role === \"ear\") return [-0.3, 0, 0];\n return undefined;\n },\n },\n // flying at a target: pitched down, wings swept back, legs tucked; without wings, a pounce\n dive: {\n lift: 0.3,\n ahead: 0.08,\n bone: (b) => {\n if (b.winged) {\n if (b.isRoot) return [0.3, 0, 0];\n if (b.role === \"neck\") return [per(b, -0.35), 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [-0.15, 0, 0];\n if (isWing(b) && chainStart(b)) return wingTo(b, 0.35, 0.6);\n if (isLeg(b) && chainStart(b)) return b.front ? [-0.6, 0, 0] : [0.9, 0, 0];\n if (b.role === \"tail\") return [per(b, -0.3), 0, 0];\n if (b.role === \"arm\" && chainStart(b)) return [-1.2, 0, 0];\n if ([\"mandible\", \"claw\"].includes(b.role) && chainStart(b)) return [-0.2, 0.35, 0];\n return undefined;\n }\n if (b.isRoot) return [0.15, 0, 0];\n if (b.role === \"head\" && chainStart(b)) return [-0.2, 0, 0];\n if (b.role === \"ear\") return [-0.5, 0, 0];\n if (isLeg(b) && chainStart(b)) return b.front ? [-1.1, 0, 0] : [0.9, 0, 0];\n if (b.role === \"arm\" && chainStart(b)) return [-1.4, 0, 0];\n if (b.role === \"tail\") return [per(b, 0.3), 0, 0];\n if ([\"mandible\", \"claw\"].includes(b.role) && chainStart(b)) return [-0.2, 0.35, 0];\n return undefined;\n },\n },\n // leaning and tilted, one paw / arm waving, ears and wings lopsided, tail wiggling\n funny: {\n bone: (b) => {\n if (b.isRoot) return [0, 0.25, 0.15];\n if (b.role === \"head\" && chainStart(b)) return [-0.15, 0, 0.5];\n if (b.role === \"ear\") return b.side === -1 ? [0.4, 0, 0] : [-0.6, 0, 0];\n if (b.role === \"antenna\") return b.side === -1 ? [0.5, 0, 0] : [-0.5, 0, 0];\n if (b.role === \"tail\") return [0, b.depth % 2 ? -0.5 : 0.5, 0];\n if (b.role === \"arm\" && chainStart(b)) return b.side === -1 ? [0, 0, 0.2] : [0, 0, 2.3];\n if (isLeg(b) && chainStart(b) && b.front && b.side !== -1) return [-1.3, 0, 0.3];\n if (isWing(b) && chainStart(b)) return b.side === -1 ? wingTo(b, -0.2) : wingTo(b, 1.1);\n return undefined;\n },\n },\n};\n\n/** Per-bone facts for the rules: role, side, place in its chain, front / hind legs. */\nfunction boneInfos(bones: readonly Bone[]): Map<Id, BoneInfo> {\n const byId = new Map(bones.map((b) => [b.id, b]));\n const heads = bindHeads(bones);\n const role = new Map(bones.map((b) => [b.id, resolveBoneRole(b)]));\n const depth = new Map<Id, number>();\n for (const b of bones) {\n let d = 0;\n for (let p = b.parentId; p !== undefined && role.get(p) === role.get(b.id); p = byId.get(p)?.parentId) d++;\n depth.set(b.id, d);\n }\n // a chain's length: its deepest same-role descendant run from the start\n const runLength = (id: Id): number => {\n const kids = bones.filter((c) => c.parentId === id && role.get(c.id) === role.get(id));\n return 1 + Math.max(0, ...kids.map((k) => runLength(k.id)));\n };\n const startOf = (b: Bone): Bone => {\n let cur = b;\n while (cur.parentId !== undefined && role.get(cur.parentId) === role.get(cur.id)) cur = byId.get(cur.parentId)!;\n return cur;\n };\n const legStarts = bones.filter((b) => LEG_ROLES.has(role.get(b.id)!) && depth.get(b.id) === 0);\n const zs = legStarts.map((b) => heads.get(b.id)!.z).sort((a, b) => a - b);\n const midZ = zs.length ? (zs[0]! + zs[zs.length - 1]!) / 2 : 0;\n const winged = isWinged(bones);\n const rootHead = heads.get(bones.find((b) => b.parentId === undefined)?.id ?? \"\") ?? vec3(0, 0, 0);\n /** A chain's rest direction: from its start to the next bone of the chain (or from its parent to it). */\n const chainDir = (start: Bone): Vec3 => {\n const next = bones.find((c) => c.parentId === start.id && role.get(c.id) === role.get(start.id));\n const from = next ? heads.get(start.id)! : start.parentId !== undefined ? heads.get(start.parentId)! : heads.get(start.id)!;\n const to = next ? heads.get(next.id)! : heads.get(start.id)!;\n return vec3(to.x - from.x, to.y - from.y, to.z - from.z);\n };\n return new Map(bones.map((b) => {\n const start = startOf(b);\n const dir = chainDir(start);\n const sideTag = b.tags.find((t) => t.startsWith(\"side:\"));\n const side: 1 | -1 | 0 = sideTag === \"side:L\" ? 1 : sideTag === \"side:R\" ? -1 : 0;\n const out = heads.get(start.id)!;\n const flat = Math.hypot(out.x - rootHead.x, out.z - rootHead.z);\n return [b.id, {\n name: b.name,\n nums: (b.name.match(/\\d+/g) ?? []).map(Number),\n radial: flat > 1e-6 ? vec3((out.x - rootHead.x) / flat, 0, (out.z - rootHead.z) / flat) : vec3(0, 0, 1),\n role: role.get(b.id)!,\n side,\n depth: depth.get(b.id)!,\n n: runLength(start.id),\n isRoot: b.parentId === undefined,\n front: zs.length > 1 ? heads.get(start.id)!.z > midZ : true,\n winged,\n elevation: Math.atan2(dir.y, Math.abs(dir.x)),\n }];\n }));\n}\n\nconst isTurn = (e: Euler | Turn): e is Turn => !Array.isArray(e);\nconst axisAngle = (a: Vec3, angle: number): Quaternion => {\n const s = Math.sin(angle / 2);\n return quat(a.x * s, a.y * s, a.z * s, Math.cos(angle / 2));\n};\n/** A radial limb's curl (about the level axis across its radial direction) and swirl (about the vertical). */\nconst turnQ = (radial: Vec3, t: Turn): Quaternion =>\n normalizeQ(multiplyQ(axisAngle(vec3(0, 1, 0), t.swirl ?? 0), axisAngle(vec3(-radial.z, 0, radial.x), t.curl)));\n\nconst posed = (bind: Transform, q: Quaternion, move: Vec3): Transform => ({\n position: add(bind.position, move),\n rotation: normalizeQ(multiplyQ(bind.rotation, q)),\n scale: bind.scale,\n});\n\n/** One preset's pose for every bone (bone id \u2192 pose transform). Custom falls back to the bind for unknown bones. */\nexport function presetPose(rig: Rig, id: PosePresetId): Map<Id, Transform> {\n if (id === \"front\") return new Map(rig.bones.map((b) => [b.id, b.bind]));\n if (id === \"custom\") return new Map(rig.bones.map((b) => [b.id, rig.customPose?.[b.id] ?? b.bind]));\n const rule = TEMPLATE_RULES[rig.templateId ?? \"\"]?.[id] ?? RULES[id];\n const infos = boneInfos(rig.bones);\n const heads = [...bindHeads(rig.bones).values()];\n const ys = heads.map((h) => h.y), zs = heads.map((h) => h.z);\n const height = Math.max(...ys) - Math.min(...ys), length = Math.max(...zs) - Math.min(...zs);\n const move = vec3(0, (rule.lift ?? 0) * height, (rule.ahead ?? 0) * length);\n return new Map(rig.bones.map((b) => {\n const info = infos.get(b.id)!;\n const e = rule.bone(info);\n let q = !e ? IDENTITY_Q : isTurn(e) ? turnQ(info.radial, e) : fromEulerXYZ(e[0], e[1], e[2]);\n if (info.side === -1 && e && !isTurn(e)) q = mirrorRotation(q);\n return [b.id, posed(b.bind, q, info.isRoot ? move : vec3(0, 0, 0))];\n }));\n}\n\nfunction slerp(a: Quaternion, b: Quaternion, t: number): Quaternion {\n let d = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;\n const s = d < 0 ? -1 : 1;\n d *= s;\n if (d > 0.9995) return normalizeQ(quat(a.x + (s * b.x - a.x) * t, a.y + (s * b.y - a.y) * t, a.z + (s * b.z - a.z) * t, a.w + (s * b.w - a.w) * t));\n const th = Math.acos(d), k0 = Math.sin((1 - t) * th) / Math.sin(th), k1 = (s * Math.sin(t * th)) / Math.sin(th);\n return quat(a.x * k0 + b.x * k1, a.y * k0 + b.y * k1, a.z * k0 + b.z * k1, a.w * k0 + b.w * k1);\n}\n\n/** The pose a preset choice gives: `a`, or `a` blended toward `b` by `t`. */\nexport function blendedPose(rig: Rig, preset: PosePreset): Map<Id, Transform> {\n const a = presetPose(rig, preset.a);\n if (!preset.b || preset.t <= 0) return a;\n const b = presetPose(rig, preset.b);\n return new Map([...a].map(([id, ta]) => {\n const tb = b.get(id) ?? ta;\n return [id, { position: lerp(ta.position, tb.position, preset.t), rotation: slerp(ta.rotation, tb.rotation, preset.t), scale: lerp(ta.scale, tb.scale, preset.t) }];\n }));\n}\n", "import type { ApplyPosePreset } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf } from \"../atoms/check/check.js\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { blendedPose, POSE_PRESETS } from \"../atoms/rig/pose-presets.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Poses a premade rig from its presets (one, or two blended by `t`); the event carries the resolved poses. */\nexport const applyPosePreset: Molecule<ApplyPosePreset> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (rig.templateId === undefined) return reject(\"Pose presets are only on premade skeletons.\");\n const problem = firstProblem(\n oneOf(\"Pose\", payload.a, POSE_PRESETS),\n payload.b === undefined ? undefined : oneOf(\"Second pose\", payload.b, POSE_PRESETS),\n inRange(\"Blend\", payload.t, 0, 1),\n );\n if (problem) return reject(problem);\n if ((payload.a === \"custom\" || payload.b === \"custom\") && !rig.customPose) return reject(\"This rig has no custom pose yet; pose it by hand first.\");\n const preset = payload.b === undefined ? { a: payload.a, t: 0 } : { a: payload.a, b: payload.b, t: payload.t };\n const changes = [...blendedPose(rig, preset)].map(([boneId, transform]) => ({ boneId, transform }));\n return accept({ type: \"PosePresetApplied\", at, payload: { rigId: payload.rigId, preset, changes } });\n};\n", "import type { BoneSize, Id, SetBoneSizes } from \"@dreamy/api\";\nimport { firstProblem, inRange } from \"../atoms/check/check.js\";\nimport { boneSize, MAX_BONE_SIZE, minBoneSize } from \"../atoms/rig/bone-size.js\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { mirrorPartner } from \"../atoms/rig/mirror-partner.js\";\nimport { applyBoneSizes, resolveBoneSizes } from \"../atoms/rig/resize-bones.js\";\nimport { reseatAttachments, touchesHead, withReseated } from \"../premades/reseat-attachments.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * Bone proportions. A length change moves the bone's child joints and the parts below them (`resolveBoneSizes`); a\n * resized head re-seats the chains on its surface (`reseatAttachments`).\n * With mirror on, each partner not in the change gets the same size.\n */\nexport const setBoneSizes: Molecule<SetBoneSizes> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (payload.changes.length === 0) return reject(\"Nothing to resize.\");\n const sizes = new Map<Id, BoneSize>();\n for (const ch of payload.changes) {\n const bone = findBone(lookup.object, ch.boneId);\n if (!bone) return reject(`There is no bone ${ch.boneId}.`);\n const min = minBoneSize(bone);\n const head = min === 1 ? \" (a head is never smaller than it was made)\" : \"\";\n const problem = firstProblem(\n ch.length === undefined ? undefined : inRange(`Length${head}`, ch.length, min, MAX_BONE_SIZE),\n ch.thickness === undefined ? undefined : inRange(`Thickness${head}`, ch.thickness, min, MAX_BONE_SIZE),\n );\n if (problem) return reject(problem);\n const was = boneSize(bone);\n sizes.set(bone.id, { length: ch.length ?? was.length, thickness: ch.thickness ?? was.thickness });\n }\n if (rig.mirror) {\n for (const [id, size] of [...sizes]) {\n const partner = mirrorPartner(rig.bones, findBone(lookup.object, id)!);\n if (partner && !sizes.has(partner.id)) sizes.set(partner.id, size);\n }\n }\n let resolved = resolveBoneSizes(rig, sizes);\n // a resized head keeps the ears, horns and antennae on its surface\n if (touchesHead(rig, sizes.keys())) resolved = withReseated(resolved, reseatAttachments(rig, applyBoneSizes(rig, resolved)));\n return accept({ type: \"BoneSizesSet\", at, payload: { rigId: payload.rigId, ...resolved } });\n};\n", "import type { SwapPartSlot } from \"@dreamy/api\";\nimport { oneOf } from \"../atoms/check/check.js\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { PART_SLOTS } from \"../premades/part-slots.js\";\nimport { resolveSwap } from \"../premades/swap-slot.js\";\nimport { findVariant } from \"../premades/variants/index.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * Gives a premade rig's slot another premade's (or a part variant's) parts, fitted to its bones; a new head re-seats\n * the chains on it, and a variant's chains come as bones. The event carries the resolved parts, bones and moves.\n */\nexport const swapPartSlot: Molecule<SwapPartSlot> = (creation, { payload }, { ids, at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (rig.templateId === undefined) return reject(\"Part swapping is only on premade skeletons.\");\n const problem = oneOf(\"Slot\", payload.slot, PART_SLOTS);\n if (problem) return reject(problem);\n const variant = findVariant(payload.kit);\n if (variant && variant.slot !== payload.slot) return reject(`${variant.name} doesn't fit the ${payload.slot}.`);\n const resolved = resolveSwap(rig, payload.slot, payload.kit, ids);\n if (typeof resolved === \"string\") return reject(resolved);\n return accept({ type: \"PartSlotSwapped\", at, payload: { rigId: payload.rigId, ...resolved } });\n};\n", "import type { Bone, PremadeInfo } from \"@dreamy/api\";\nimport { IDENTITY_Q } from \"../atoms/math/quat.js\";\nimport { vec3 } from \"../atoms/math/vec3.js\";\nimport { isWinged, POSE_PRESETS, posePresetName } from \"../atoms/rig/pose-presets.js\";\nimport { buildTemplate } from \"./build-template.js\";\nimport { slotsOf } from \"./part-slots.js\";\nimport { SKELETON_TEMPLATES } from \"./template-catalog.js\";\n\n/** The picker's list, in the POC's order. */\nexport const PREMADE_INFOS: readonly PremadeInfo[] = SKELETON_TEMPLATES.map((t) => ({\n id: t.id,\n name: t.name,\n icon: t.icon,\n description: t.desc,\n family: t.family,\n slots: slotsOf(templateBones(t)),\n boneCount: buildTemplate(t).bones.length,\n poses: POSE_PRESETS.filter((id) => id !== \"custom\").map((id) => ({ id, name: posePresetName(id, isWinged(buildTemplate(t).bones)) })),\n}));\n\n/** A template's bones as `Bone`s (roles, sides and heads are all the slot rules read). */\nfunction templateBones(t: (typeof SKELETON_TEMPLATES)[number]): Bone[] {\n const built = buildTemplate(t);\n return built.ordered.map((d) => ({\n id: d.name,\n name: d.name,\n ...(d.parent !== null ? { parentId: d.parent } : {}),\n tags: d.tags.slice(),\n bind: { position: vec3(d.p[0], d.p[1], d.p[2]), rotation: IDENTITY_Q, scale: vec3(1, 1, 1) },\n pose: { position: vec3(d.p[0], d.p[1], d.p[2]), rotation: IDENTITY_Q, scale: vec3(1, 1, 1) },\n }));\n}\n", "import type { BoneSize, CreatureRecipe, CreatureTheme, Id, IdGenerator, PartSlot, Rig, SizeGroup } from \"@dreamy/api\";\nimport { DEFAULT_REGION_BLENDS } from \"../atoms/rig/bone-region.js\";\nimport { resolveBoneRole } from \"../atoms/rig/bone-role.js\";\nimport { bindHeads } from \"../atoms/rig/bone-matrices.js\";\nimport { MAX_BONE_SIZE } from \"../atoms/rig/bone-size.js\";\nimport { applyBoneSizes, resolveBoneSizes } from \"../atoms/rig/resize-bones.js\";\nimport { buildPremadeRig } from \"./build-premade-rig.js\";\nimport { GRAFT_SLOTS, graftSlot, hasOwnSlot, withGraft } from \"./graft-slot.js\";\nimport { reseatAttachments } from \"./reseat-attachments.js\";\nimport { resolveSwap, withSwap } from \"./swap-slot.js\";\nimport { findVariant, PART_VARIANTS } from \"./variants/index.js\";\nimport { slotChains, slotOfBone, slotsOf } from \"./part-slots.js\";\nimport { premadeFit } from \"./premade-fit.js\";\nimport { PREMADE_INFOS } from \"./premade-infos.js\";\nimport { stampsBox } from \"./stamps-box.js\";\nimport { findTemplate, SKELETON_TEMPLATES } from \"./template-catalog.js\";\n\n/** Eye and mouth art a creature of each family may get (a chimera may get any). Names are built-in decals. */\nconst EYES: Record<string, readonly string[]> = {\n mammal: [\"Cat Eye\", \"Glossy Eye\", \"Round\", \"Cute\", \"Dot\", \"Sparkle\", \"Narrow\"],\n reptile: [\"Dragon Eye\", \"Slit\", \"Glossy Eye\", \"Narrow\"],\n bird: [\"Glossy Eye\", \"Dot\", \"Round\"],\n bug: [\"Bug Eye\", \"Fly Eye\", \"Beetle Eye\", \"Mantis Eye\"],\n aquatic: [\"Glossy Eye\", \"Round\", \"Dot\", \"Octopus Eye\"],\n // themes (made-up kinds)\n plant: [\"Cute\", \"Sparkle\", \"Round\"],\n fungus: [\"Cute\", \"Round\", \"Dot\"],\n mineral: [\"Angry\", \"Narrow\", \"Sparkle\"],\n machine: [\"Dot\", \"Narrow\", \"Angry\"],\n elemental: [\"Angry\", \"Sparkle\", \"Cute\"],\n};\nconst MOUTHS: Record<string, readonly string[]> = {\n mammal: [\"Cat Mouth\", \"Cat\", \"Smile\", \"Small\"],\n reptile: [\"Snake Mouth\", \"Fangs\", \"Flat\", \"Smile\"],\n bird: [],\n bug: [\"Insect Mouth\", \"Small\"],\n aquatic: [\"Small\", \"Open\", \"Smile\"],\n plant: [\"Smile\", \"Small\"],\n fungus: [\"Smile\", \"Open\"],\n mineral: [\"Flat\", \"Grin\"],\n machine: [\"Flat\", \"Zigzag\"],\n elemental: [\"Grin\", \"Fangs\"],\n};\n/** How likely a themed creature grows its theme's wings, horns or tail when its skeleton lacks them. */\nconst THEMED_GRAFT_CHANCE = 0.7;\n\n/** The part variants of a theme for a slot (none without a theme). */\nconst themedKits = (slot: PartSlot, theme: CreatureTheme | undefined): string[] =>\n theme ? PART_VARIANTS.filter((v) => v.slot === slot && v.family === theme).map((v) => v.id) : [];\n\n/** How likely a head variant's companion parts (its ears) come with it. */\nconst COMPANION_CHANCE = 0.75;\n\n/** How likely a missing wings / horns / tail slot is grafted, at full variety. */\nconst GRAFT_CHANCE = 0.5;\nconst SYLLABLES = [\"ba\", \"zu\", \"mo\", \"ki\", \"ra\", \"lo\", \"fen\", \"dra\", \"pi\", \"tor\", \"gu\", \"vex\", \"nu\", \"sha\", \"bo\", \"li\", \"grim\", \"wix\", \"pom\", \"zel\"];\n\n/** Seeded PRNG (mulberry32): the same seed always rolls the same creature. */\nfunction rng(seed: number): () => number {\n // the seed is mixed first, so neighbouring seeds don't start alike\n let a = Math.imul((seed >>> 0) ^ 0x9e3779b9, 0x85ebca6b);\n a = Math.imul(a ^ (a >>> 13), 0xc2b2ae35) ^ (a >>> 16);\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** Which proportion group a bone belongs to (undefined: it keeps its size). */\nfunction groupOf(rig: Rig, boneId: Id, frontLegs: ReadonlySet<Id>): SizeGroup | undefined {\n const bone = rig.bones.find((b) => b.id === boneId)!;\n const role = resolveBoneRole(bone);\n if (role === \"neck\") return \"neck\";\n if (role === \"core\" || role === \"abdomen\") return \"torso\";\n const slot = slotOfBone(bone);\n if (slot === \"legs\") return frontLegs.has(boneId) ? \"front-legs\" : \"hind-legs\";\n if (slot === \"head\" || slot === \"ears\" || slot === \"horns\" || slot === \"tail\" || slot === \"wings\" || slot === \"arms\" || slot === \"antennae\" || slot === \"fins\" || slot === \"tentacles\") return slot;\n return undefined;\n}\n\nconst round = (x: number) => Math.round(x * 100) / 100;\nconst clamp = (x: number, min: number) => round(Math.min(MAX_BONE_SIZE, Math.max(min, x)));\n\n/** A group's roll: a head only grows, evenly; a torso varies little; limbs and appendages vary most. */\nfunction rollSize(group: SizeGroup, v: number, r: () => number): BoneSize {\n if (group === \"head\") {\n const k = clamp(1 + v * r() * 0.6, 1);\n return { length: k, thickness: k };\n }\n if (group === \"torso\") return { length: clamp(1 + v * (r() * 0.4 - 0.2), 0.4), thickness: clamp(1 + v * (r() * 0.6 - 0.2), 0.4) };\n return { length: clamp(1 + v * (r() * 0.9 - 0.35), 0.4), thickness: clamp(1 + v * (r() * 0.8 - 0.3), 0.4) };\n}\n\n/** The rig's lowest point in its own space: joints and the boxes of its parts' stamps. */\nexport function rigLowest(rig: Rig): number {\n let low = Math.min(...[...bindHeads(rig.bones).values()].map((h) => h.y));\n for (const p of rig.parts) {\n if (p.kind !== \"sculpt\") continue;\n const box = stampsBox(p.sculpt.stamps);\n if (box) low = Math.min(low, box.min.y);\n }\n return low;\n}\n\nexport type Generated = { readonly rig: Rig; readonly name: string };\n\nexport type GenerateInput = {\n readonly seed: number;\n readonly chimera: boolean;\n readonly variety: number;\n readonly theme?: CreatureTheme;\n readonly keep?: Partial<Pick<CreatureRecipe, \"base\" | \"kits\" | \"sizes\" | \"eyes\" | \"mouth\">>;\n};\n\n/**\n * A creature from the premades: a base skeleton with its own parts, each slot's parts swapped for another premade's\n * (its family's, or any with chimera), maybe wings, horns or a tail it lacks grafted on, proportions varied per\n * group, and eye / mouth art picked. Whatever `keep` holds\n * stays as given; the rest is rolled from the seed.\n */\nexport function generateCreature(input: GenerateInput, ids: IdGenerator): Generated | string {\n const r = rng(input.seed);\n const keep = input.keep ?? {};\n // a themed creature is built on a skeleton with a head, so it can take its theme's head\n const bases = input.theme ? SKELETON_TEMPLATES.filter((t) => PREMADE_INFOS.find((p) => p.id === t.id)?.slots.includes(\"head\")) : SKELETON_TEMPLATES;\n const base = keep.base ?? bases[Math.floor(r() * bases.length)]!.id;\n const tpl = findTemplate(base);\n if (!tpl) return `There is no premade \"${base}\".`;\n let rig: Rig = buildPremadeRig(tpl, { fit: premadeFit(tpl), withBody: true, mirror: false, regionBlends: DEFAULT_REGION_BLENDS }, ids);\n\n const reseat = (before: Rig) => {\n const re = reseatAttachments(before, rig);\n if (re.moved.length) rig = applyBoneSizes(rig, { sizes: [], ...re });\n };\n\n // parts: each slot from a premade that has it or a part variant for it (the base's family, or any); a head\n // variant usually brings the parts that suit it (an elephant head, elephant ears)\n const built = rig;\n const kits: { [Slot in PartSlot]?: string } = {};\n const suits: { [Slot in PartSlot]?: string } = {};\n for (const slot of slotsOf(rig.bones)) {\n const fits = (family: string) => input.chimera || family === tpl.family;\n // a theme takes its own part wherever it has one for the slot\n const themed = themedKits(slot, input.theme);\n const donors = themed.length ? themed : [\n ...PREMADE_INFOS.filter((p) => p.slots.includes(slot) && fits(p.family)).map((p) => p.id),\n ...PART_VARIANTS.filter((v) => v.slot === slot && fits(v.family)).map((v) => v.id),\n ];\n const roll = donors[Math.floor(r() * donors.length)], suit = r() < COMPANION_CHANCE ? suits[slot] : undefined;\n const kit = keep.kits?.[slot] ?? suit ?? roll ?? base;\n kits[slot] = kit;\n Object.assign(suits, findVariant(kit)?.companions);\n if (kit === base) continue;\n const swapped = resolveSwap(rig, slot, kit, ids);\n if (typeof swapped === \"string\") kits[slot] = base;\n else rig = withSwap(rig, swapped);\n }\n\n // a new head carries the chains on it (ears, horns, antennae) to its surface\n reseat(built);\n\n // grafts: a slot the skeleton lacks may grow from a premade that has it (a kept kit always does)\n for (const slot of GRAFT_SLOTS) {\n if (hasOwnSlot(rig, slot)) continue;\n const themed = themedKits(slot, input.theme);\n const donors = themed.length ? themed : [\n ...PREMADE_INFOS.filter((p) => p.slots.includes(slot) && (input.chimera || p.family === tpl.family)).map((p) => p.id),\n ...PART_VARIANTS.filter((v) => v.slot === slot && (input.chimera || v.family === tpl.family)).map((v) => v.id),\n ];\n const roll = r(), pick = donors[Math.floor(r() * donors.length)];\n // a themed creature grows its theme's wings, horns or tail more often (a robot with jet wings)\n const chance = themed.length ? THEMED_GRAFT_CHANCE : GRAFT_CHANCE * input.variety;\n const kit = keep.kits?.[slot] ?? (roll < chance ? pick : undefined);\n if (kit === undefined) continue;\n const g = graftSlot(rig, slot, kit, ids);\n if (typeof g === \"string\") continue;\n rig = withGraft(rig, slot, kit, g);\n kits[slot] = kit;\n }\n\n // proportions: one size per group, the same on both sides\n const frontLegs = new Set(slotChains(rig.bones, \"legs\").filter((c) => c.front).flatMap((c) => c.bones.map((b) => b.id)));\n const groups = new Map<SizeGroup, Id[]>();\n for (const b of rig.bones) {\n const g = groupOf(rig, b.id, frontLegs);\n if (g) groups.set(g, [...(groups.get(g) ?? []), b.id]);\n }\n const sizes: { [Group in SizeGroup]?: BoneSize } = {};\n const perBone = new Map<Id, BoneSize>();\n for (const [g, bones] of [...groups].sort(([a], [b]) => a.localeCompare(b))) {\n const size = keep.sizes?.[g] ?? rollSize(g, input.variety, r);\n sizes[g] = size;\n if (size.length !== 1 || size.thickness !== 1) for (const id of bones) perBone.set(id, size);\n }\n if (perBone.size) {\n const unsized = rig;\n rig = applyBoneSizes(rig, resolveBoneSizes(rig, perBone));\n reseat(unsized);\n }\n\n // face: eye and mouth art for its family (any with chimera)\n const pool = (table: Record<string, readonly string[]>) =>\n input.theme ? table[input.theme] ?? [] : input.chimera ? [...new Set(Object.values(table).flat())] : table[tpl.family] ?? [];\n const eyesPool = pool(EYES), mouthPool = pool(MOUTHS);\n const eyes = keep.eyes ?? eyesPool[Math.floor(r() * eyesPool.length)];\n const mouth = keep.mouth ?? mouthPool[Math.floor(r() * mouthPool.length)];\n rig = {\n ...rig,\n parts: rig.parts.map((p) => {\n if (p.kind !== \"sculpt\" || p.sculpt.decals.length === 0) return p;\n const decals = p.sculpt.decals.map((d) => {\n if (d.art.kind !== \"builtin\") return d;\n if (d.art.category === \"eye\" && eyes) return { ...d, art: { ...d.art, name: eyes } };\n if (d.art.category === \"mouth\" && mouth) return { ...d, art: { ...d.art, name: mouth } };\n return d;\n });\n return { ...p, sculpt: { ...p.sculpt, decals } };\n }),\n };\n\n const recipe: CreatureRecipe = {\n seed: input.seed,\n base,\n ...(input.theme ? { theme: input.theme } : {}),\n chimera: input.chimera,\n variety: input.variety,\n kits,\n sizes,\n ...(eyes ? { eyes } : {}),\n ...(mouth ? { mouth } : {}),\n };\n const syllables = 2 + Math.floor(r() * 2);\n const name = Array.from({ length: syllables }, () => SYLLABLES[Math.floor(r() * SYLLABLES.length)]!).join(\"\");\n return { rig: { ...rig, recipe, slotKits: kits }, name: name.charAt(0).toUpperCase() + name.slice(1) };\n}\n", "import type { GenerateCreature, RigObject } from \"@dreamy/api\";\nimport { firstProblem, inRange } from \"../atoms/check/check.js\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { add, vec3 } from \"../atoms/math/vec3.js\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { generateCreature, rigLowest } from \"../premades/generate-creature.js\";\nimport { findTemplate } from \"../premades/template-catalog.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nconst THEMES: readonly string[] = [\"plant\", \"fungus\", \"mineral\", \"machine\", \"elemental\"];\n\n/**\n * Generates a creature (`generateCreature`): a new rig standing on the transform's ground height, or a generated /\n * premade rig remade in place, kept standing on the same ground.\n */\nexport const generateCreatureMolecule: Molecule<GenerateCreature> = (creation, { payload }, { ids, at }) => {\n const problem = firstProblem(\n Number.isInteger(payload.seed) && payload.seed >= 0 ? undefined : \"The seed is a whole number from 0.\",\n inRange(\"Variety\", payload.variety, 0, 1),\n payload.keep?.base === undefined || findTemplate(payload.keep.base) ? undefined : `There is no premade \"${payload.keep.base}\".`,\n payload.theme === undefined || THEMES.includes(payload.theme) ? undefined : `There is no theme \"${payload.theme}\".`,\n );\n if (problem) return reject(problem);\n const { target } = payload;\n if (target.kind === \"new\") {\n const tp = transformProblem(target.transform);\n if (tp) return reject(tp);\n const made = generateCreature(payload, ids);\n if (typeof made === \"string\") return reject(made);\n const transform = cleanTransform(target.transform);\n const object: RigObject = {\n id: ids.next(),\n name: made.name,\n transform: { ...transform, position: add(transform.position, vec3(0, -rigLowest(made.rig) * transform.scale.y, 0)) },\n kind: \"rig\",\n rig: { ...made.rig, mode: \"pose\" },\n };\n return accept({ type: \"CreatureGenerated\", at, payload: { kind: \"new\", object } });\n }\n const lookup = findRig(creation, target.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const old = lookup.object;\n if (old.rig.templateId === undefined) return reject(\"Only premade or generated creatures can be regenerated.\");\n const made = generateCreature(payload, ids);\n if (typeof made === \"string\") return reject(made);\n // stand on the same ground: the old lowest point and the new one at the object's scale\n const ground = old.transform.position.y + rigLowest(old.rig) * old.transform.scale.y;\n const transform = { ...old.transform, position: vec3(old.transform.position.x, ground - rigLowest(made.rig) * old.transform.scale.y, old.transform.position.z) };\n return accept({ type: \"CreatureGenerated\", at, payload: { kind: \"rig\", objectId: old.id, rig: { ...made.rig, mode: \"pose\", mirror: old.rig.mirror }, transform } });\n};\n", "import type { GraftPart } from \"@dreamy/api\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { GRAFT_SLOTS, graftSlot } from \"../premades/graft-slot.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Grafts (or removes) a slot's chains on a premade rig (`graftSlot`). */\nexport const graftPart: Molecule<GraftPart> = (creation, { payload }, { ids, at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const rig = lookup.object.rig;\n if (rig.templateId === undefined) return reject(\"Only premade or generated creatures can be grafted.\");\n if (!GRAFT_SLOTS.includes(payload.slot)) return reject(`A ${payload.slot} slot can't be grafted.`);\n const g = graftSlot(rig, payload.slot, payload.kit, ids);\n if (typeof g === \"string\") return reject(g);\n if (payload.kit === undefined && g.removed.length === 0) return reject(`This creature has no grafted ${payload.slot}.`);\n return accept({\n type: \"PartGrafted\",\n at,\n payload: { rigId: payload.rigId, slot: payload.slot, ...(payload.kit !== undefined ? { kit: payload.kit } : {}), bones: g.bones, parts: g.parts, removed: g.removed },\n });\n};\n", "import type { DesignPaint, DesignShape } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf, type Problem } from \"../check/check.js\";\nimport { isColorRef } from \"../palette/is-color-ref.js\";\n\nconst paintProblem = (p: DesignPaint): Problem =>\n p === \"light\" || p === \"shadow\" || p === \"none\" || isColorRef(p) ? undefined : `\"${String(p)}\" is not a design paint.`;\n\n/** Why a design shape cannot be stored, if it cannot. */\nexport const designShapeProblem = (s: DesignShape): Problem =>\n firstProblem(\n typeof s.d === \"string\" && s.d.trim() ? undefined : \"A design shape needs path data.\",\n paintProblem(s.fill),\n paintProblem(s.stroke),\n inRange(\"Stroke width\", s.width, 0, 128),\n oneOf(\"Line cap\", s.cap, [\"butt\", \"round\", \"square\"]),\n oneOf(\"Line join\", s.join, [\"miter\", \"round\", \"bevel\"]),\n oneOf(\"Fill rule\", s.rule, [\"nonzero\", \"evenodd\"]),\n );\n", "import type { SaveDesign } from \"@dreamy/api\";\nimport { designShapeProblem } from \"../atoms/decal/design-problem.js\";\nimport { firstProblem } from \"../atoms/check/check.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Creates a design (no id) or replaces one (with id), full content. */\nexport const saveDesign: Molecule<SaveDesign> = (creation, { payload }, { ids, at }) => {\n const { designId } = payload;\n if (designId !== undefined && !creation.designs.some((d) => d.id === designId)) return reject(`There is no design ${designId}.`);\n const name = payload.name.trim();\n if (!name) return reject(\"A design needs a name.\");\n const problem = firstProblem(...payload.shapes.map(designShapeProblem));\n if (problem) return reject(problem);\n return accept({ type: \"DesignSaved\", at, payload: { design: { id: designId ?? ids.next(), name, shapes: payload.shapes } } });\n};\n", "import type { SetBoneTags } from \"@dreamy/api\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC editBoneTags: trimmed, empty tags dropped. */\nexport const setBoneTags: Molecule<SetBoneTags> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n if (!findBone(lookup.object, payload.boneId)) return reject(`There is no bone ${payload.boneId}.`);\n const tags = payload.tags.map((t) => t.trim()).filter(Boolean);\n return accept({ type: \"BoneTagsSet\", at, payload: { rigId: payload.rigId, changes: [{ boneId: payload.boneId, tags }] } });\n};\n", "import type { Id, SetBoneTransforms, Transform } from \"@dreamy/api\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { mirrorPartner } from \"../atoms/rig/mirror-partner.js\";\nimport { mirrorBoneTransform } from \"../atoms/rig/mirror-transform.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/**\n * One bone drag. Rig mode writes the bind (the fold keeps the pose as a delta on top), pose mode the\n * pose. With mirror on, each partner not in the drag gets the reflected transform (POC mirrorChannel).\n */\nexport const setBoneTransforms: Molecule<SetBoneTransforms> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (payload.changes.length === 0) return reject(\"Nothing to move.\");\n const out = new Map<Id, Transform>();\n for (const ch of payload.changes) {\n if (!findBone(lookup.object, ch.boneId)) return reject(`There is no bone ${ch.boneId}.`);\n const problem = transformProblem(ch.transform);\n if (problem) return reject(problem);\n out.set(ch.boneId, cleanTransform(ch.transform));\n }\n if (rig.mirror) {\n for (const ch of payload.changes) {\n const bone = findBone(lookup.object, ch.boneId)!;\n const partner = mirrorPartner(rig.bones, bone);\n if (partner && !out.has(partner.id)) {\n out.set(partner.id, mirrorBoneTransform(out.get(bone.id)!, bone.parentId === undefined, rig.mirrorX));\n }\n }\n }\n const changes = [...out].map(([boneId, transform]) => ({ boneId, transform }));\n return accept({\n type: \"BoneTransformsSet\",\n at,\n payload: { rigId: payload.rigId, target: rig.mode === \"rig\" ? \"bind\" : \"pose\", changes },\n });\n};\n", "import type { FlatWing, WingOutline, WingPatternStyle } from \"@dreamy/api\";\nimport { firstProblem, inRange, oneOf, type Problem } from \"../check/check.js\";\nimport { colorProblem } from \"../look/look-problem.js\";\n\nexport const WING_OUTLINES: readonly WingOutline[] = [\"monarch\", \"swallowtail\", \"morpho\", \"moth\", \"dragonfly\", \"bee\", \"fly\", \"bat\"];\nexport const WING_STYLES: readonly WingPatternStyle[] = [\"veins\", \"dots\", \"bands\", \"eyespots\", \"morpho\", \"speckled\", \"clear\"];\n\n/** Why a wing tab edit breaks the model's ranges, if it does. */\nexport function wingProblem(w: Partial<Omit<FlatWing, \"frame\">>): Problem {\n return firstProblem(\n oneOf(\"Outline\", w.outline, WING_OUTLINES),\n oneOf(\"Wing part\", w.part, [\"fore\", \"hind\"]),\n inRange(\"Span\", w.span, 0.4, 1.6),\n inRange(\"Chord\", w.chord, 0.3, 2),\n inRange(\"Tail\", w.tail, 0, 1),\n oneOf(\"Wing pattern\", w.style, WING_STYLES),\n inRange(\"Density\", w.density, 0, 1),\n inRange(\"Spots\", w.spots, 0, 1),\n inRange(\"Border\", w.border, 0, 1),\n w.seed === undefined || (Number.isInteger(w.seed) && w.seed >= 1) ? undefined : \"A wing seed is a whole number from 1.\",\n colorProblem(\"Base color\", w.base),\n colorProblem(\"Outer base color\", w.base2),\n colorProblem(\"Marking color\", w.mark),\n colorProblem(\"Vein color\", w.ink),\n colorProblem(\"Spot color\", w.dot),\n );\n}\n", "import type { Id, SetFlatWings } from \"@dreamy/api\";\nimport { findBone, findRig } from \"../atoms/rig/find-rig.js\";\nimport { mirrorPartner } from \"../atoms/rig/mirror-partner.js\";\nimport { wingProblem } from \"../atoms/wing/wing-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Wing tab edits on every listed wing, and on their mirror twins when the rig's mirror is on. */\nexport const setFlatWings: Molecule<SetFlatWings> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const { rig } = lookup.object;\n if (payload.boneIds.length === 0) return reject(\"No wings selected.\");\n const problem = wingProblem(payload.wing);\n if (problem) return reject(problem);\n const hasWing = (id: Id) => rig.parts.some((p) => p.boneId === id && p.kind === \"wing\");\n const ids = new Set<Id>();\n for (const id of payload.boneIds) {\n const bone = findBone(lookup.object, id);\n if (!bone) return reject(`There is no bone ${id}.`);\n if (!hasWing(id)) return reject(`${bone.name} has no flat wing.`);\n ids.add(id);\n }\n if (rig.mirror) {\n for (const id of [...ids]) {\n const partner = mirrorPartner(rig.bones, findBone(lookup.object, id)!);\n if (partner && hasWing(partner.id)) ids.add(partner.id);\n }\n }\n const changes = [...ids].map((boneId) => ({ boneId, wing: payload.wing }));\n return accept({ type: \"FlatWingsSet\", at, payload: { rigId: payload.rigId, changes } });\n};\n", "import type { SetObjectTransforms } from \"@dreamy/api\";\nimport { cleanTransform, transformProblem } from \"../atoms/math/transform.js\";\nimport { findObject } from \"../atoms/scene/object-tree.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setObjectTransforms: Molecule<SetObjectTransforms> = (creation, { payload }, { at }) => {\n if (payload.changes.length === 0) return reject(\"Nothing to move.\");\n for (const ch of payload.changes) {\n if (!findObject(creation, ch.objectId)) return reject(`There is no object ${ch.objectId}.`);\n const problem = transformProblem(ch.transform);\n if (problem) return reject(problem);\n }\n const changes = payload.changes.map((ch) => ({ objectId: ch.objectId, transform: cleanTransform(ch.transform) }));\n return accept({ type: \"ObjectTransformsSet\", at, payload: { changes } });\n};\n", "import type { SetPaletteColor } from \"@dreamy/api\";\nimport { PALETTE_SLOTS } from \"../atoms/palette/default-palette.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setPaletteColor: Molecule<SetPaletteColor> = (_creation, { payload }, { at }) => {\n if (!PALETTE_SLOTS.includes(payload.slot)) return reject(`\"${String(payload.slot)}\" is not an editable palette slot.`);\n const { color } = payload;\n if (!Number.isInteger(color) || color < 0 || color > 0xffffff) return reject(\"A color is 0xRRGGBB (0 to 0xffffff).\");\n return accept({ type: \"PaletteColorSet\", at, payload: { slot: payload.slot, color } });\n};\n", "import type { SetPivot } from \"@dreamy/api\";\nimport { isFiniteQ, normalizeQ } from \"../atoms/math/quat.js\";\nimport { isFiniteVec } from \"../atoms/math/vec3.js\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setPivot: Molecule<SetPivot> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n const { position, rotation } = payload.pivot;\n if (!isFiniteVec(position) || !isFiniteQ(rotation) || Math.hypot(rotation.x, rotation.y, rotation.z, rotation.w) < 1e-9) {\n return reject(\"A pivot needs finite numbers.\");\n }\n return accept({ type: \"PivotSet\", at, payload: { target: payload.target, pivot: { position, rotation: normalizeQ(rotation) } } });\n};\n", "import type { SetRegionBlend } from \"@dreamy/api\";\nimport { oneOf } from \"../atoms/check/check.js\";\nimport { blendProblem } from \"../atoms/look/look-problem.js\";\nimport { BODY_REGIONS } from \"../atoms/rig/bone-region.js\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** A region's blend (0\u20130.8); the fold also sets it on every sculpt part in that region. */\nexport const setRegionBlend: Molecule<SetRegionBlend> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n const problem = oneOf(\"Region\", payload.region, BODY_REGIONS) ?? blendProblem(payload.blend);\n if (problem) return reject(problem);\n return accept({ type: \"RegionBlendSet\", at, payload });\n};\n", "import type { SetRigMirror } from \"@dreamy/api\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setRigMirror: Molecule<SetRigMirror> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n return accept({ type: \"RigMirrorSet\", at, payload: { rigId: payload.rigId, mirror: !!payload.mirror } });\n};\n", "import type { SetRigMode } from \"@dreamy/api\";\nimport { findRig } from \"../atoms/rig/find-rig.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setRigMode: Molecule<SetRigMode> = (creation, { payload }, { at }) => {\n const lookup = findRig(creation, payload.rigId);\n if (!lookup.ok) return reject(lookup.reason);\n if (payload.mode !== \"rig\" && payload.mode !== \"pose\") return reject(\"A rig is in rig or pose mode.\");\n return accept({ type: \"RigModeSet\", at, payload });\n};\n", "import type { Creation, SculptTarget } from \"@dreamy/api\";\nimport { mirrorPartner } from \"./mirror-partner.js\";\n\n/** With the rig's mirror on, the target of the bone's mirror partner (POC: part edits are mirrored). */\nexport function partnerTarget(creation: Creation, target: SculptTarget): SculptTarget | undefined {\n if (!(\"boneId\" in target)) return undefined;\n const o = creation.objects.find((x) => x.id === target.objectId);\n if (o?.kind !== \"rig\" || !o.rig.mirror) return undefined;\n const bone = o.rig.bones.find((b) => b.id === target.boneId);\n const partner = bone && mirrorPartner(o.rig.bones, bone);\n if (!partner || !o.rig.parts.some((p) => p.boneId === partner.id)) return undefined;\n return { objectId: o.id, boneId: partner.id };\n}\n", "import type { Creation, SculptTarget } from \"@dreamy/api\";\n\n/** True when the target names a rig bone whose part is a flat wing. */\nexport function isWingTarget(creation: Creation, target: SculptTarget): boolean {\n if (!(\"boneId\" in target)) return false;\n const o = creation.objects.find((x) => x.id === target.objectId);\n return o?.kind === \"rig\" && o.rig.parts.some((p) => p.boneId === target.boneId && p.kind === \"wing\");\n}\n", "import type { SculptTarget, SetSculptLook } from \"@dreamy/api\";\nimport { lookProblem } from \"../atoms/look/look-problem.js\";\nimport { partnerTarget } from \"../atoms/rig/partner-target.js\";\nimport { isWingTarget } from \"../atoms/sculpt/is-wing-target.js\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nconst key = (t: SculptTarget): string => (\"boneId\" in t ? `${t.objectId}/${t.boneId}` : t.objectId);\n\n/**\n * One Properties edit over every listed sculpt, plus the mirror partners of rig parts when the rig's\n * mirror is on. A flat wing part accepts the material only.\n */\nexport const setSculptLook: Molecule<SetSculptLook> = (creation, { payload }, { at }) => {\n if (payload.targets.length === 0) return reject(\"No sculpts selected.\");\n const problem = lookProblem(payload.look);\n if (problem) return reject(problem);\n const onlyMaterial = Object.keys(payload.look).every((k) => k === \"material\");\n for (const target of payload.targets) {\n if (isWingTarget(creation, target)) {\n if (onlyMaterial) continue;\n return reject(\"A flat wing takes only material edits: use the Wing tab for its look.\");\n }\n const lookup = targetSculpt(creation, target);\n if (!lookup.ok) return reject(lookup.reason);\n }\n const seen = new Map<string, SculptTarget>();\n for (const t of payload.targets) {\n seen.set(key(t), t);\n const partner = partnerTarget(creation, t);\n if (partner && !seen.has(key(partner)) && (onlyMaterial || !isWingTarget(creation, partner))) seen.set(key(partner), partner);\n }\n return accept({ type: \"SculptLookSet\", at, payload: { targets: [...seen.values()], look: payload.look } });\n};\n", "import type { StampPropsPatch } from \"@dreamy/api\";\nimport { clampSymmetry } from \"./clamp-symmetry.js\";\n\n/** A props patch with its symmetry clamped (POC symClampN). */\nexport const cleanProps = <P extends StampPropsPatch>(p: P): P =>\n p.symmetry ? { ...p, symmetry: clampSymmetry(p.symmetry) } : p;\n", "import type { SetSmearGroup } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { cleanProps } from \"../atoms/stamp/clean-props.js\";\nimport { isBaseGroup } from \"../atoms/stamp/normalize-base.js\";\nimport { propsProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** Group settings (mode, color, foundation, blend, symmetry), lock state and name. */\nexport const setSmearGroup: Molecule<SetSmearGroup> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (!lookup.sculpt.smearGroups.some((g) => g.id === payload.groupId)) return reject(`There is no smear group ${payload.groupId}.`);\n const { props } = payload;\n const problem = propsProblem(props);\n if (problem) return reject(problem);\n if (props.mode && props.mode !== \"add\" && isBaseGroup(lookup.sculpt, payload.groupId)) return reject(\"The base shape is always Add.\");\n if (props.name !== undefined && !props.name.trim()) return reject(\"A name cannot be empty.\");\n if (props.color === null || props.blend === null) return reject(\"A smear group always has a color and a blend.\");\n return accept({\n type: \"SmearGroupSet\",\n at,\n payload: { target: payload.target, groupId: payload.groupId, props: cleanProps(props.name !== undefined ? { ...props, name: props.name.trim() } : props) },\n });\n};\n", "import type { Id, Quaternion, Sculpt, Vec3 } from \"@dreamy/api\";\nimport { compose, decompose, invertM, multiplyM } from \"../math/mat4.js\";\n\nexport type PlacementChange = {\n readonly stampId: Id;\n readonly position: Vec3;\n readonly rotation: Quaternion;\n readonly scale: Vec3;\n};\n\n/**\n * A locked smear group moves as one: when a change touches a locked group but leaves some members out,\n * the moved stamp's change (new \u2218 old\u207B\u00B9) is applied to those members too.\n */\nexport function moveLockedGroups(sculpt: Sculpt, changes: readonly PlacementChange[]): PlacementChange[] {\n const out = new Map(changes.map((c) => [c.stampId, c]));\n for (const change of changes) {\n const stamp = sculpt.stamps.find((s) => s.id === change.stampId);\n const group = stamp?.smearGroupId !== undefined ? sculpt.smearGroups.find((g) => g.id === stamp.smearGroupId) : undefined;\n if (!stamp || !group || group.unlocked) continue;\n const delta = multiplyM(compose(change.position, change.rotation, change.scale), invertM(compose(stamp.position, stamp.rotation, stamp.scale)));\n for (const member of sculpt.stamps) {\n if (member.smearGroupId !== group.id || out.has(member.id)) continue;\n const t = decompose(multiplyM(delta, compose(member.position, member.rotation, member.scale)));\n out.set(member.id, { stampId: member.id, ...t });\n }\n }\n return [...out.values()];\n}\n", "import type { SetStampPlacements } from \"@dreamy/api\";\nimport { normalizeQ } from \"../atoms/math/quat.js\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { moveLockedGroups } from \"../atoms/stamp/move-locked-groups.js\";\nimport { placementProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** One gizmo drag over stamps; members of a locked smear group that were left out move with it. */\nexport const setStampPlacements: Molecule<SetStampPlacements> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (payload.changes.length === 0) return reject(\"Nothing to move.\");\n for (const ch of payload.changes) {\n if (!lookup.sculpt.stamps.some((s) => s.id === ch.stampId)) return reject(`There is no stamp ${ch.stampId}.`);\n const problem = placementProblem(ch.position, ch.rotation, ch.scale);\n if (problem) return reject(problem);\n }\n const clean = payload.changes.map((ch) => ({ ...ch, rotation: normalizeQ(ch.rotation) }));\n const changes = moveLockedGroups(lookup.sculpt, clean);\n for (const ch of changes) {\n const problem = placementProblem(ch.position, ch.rotation, ch.scale);\n if (problem) return reject(problem);\n }\n return accept({ type: \"StampPlacementsSet\", at, payload: { target: payload.target, changes } });\n};\n", "import type { SetStampProps } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { cleanProps } from \"../atoms/stamp/clean-props.js\";\nimport { isBaseStamp } from \"../atoms/stamp/normalize-base.js\";\nimport { propsProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\nexport const setStampProps: Molecule<SetStampProps> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n if (payload.stampIds.length === 0) return reject(\"No stamps selected.\");\n const missing = payload.stampIds.find((id) => !lookup.sculpt.stamps.some((s) => s.id === id));\n if (missing !== undefined) return reject(`There is no stamp ${missing}.`);\n const problem = propsProblem(payload.props);\n if (problem) return reject(problem);\n if (payload.props.mode && payload.props.mode !== \"add\" && payload.stampIds.some((id) => isBaseStamp(lookup.sculpt, id))) {\n return reject(\"The base shape is always Add.\");\n }\n return accept({\n type: \"StampPropsSet\",\n at,\n payload: { target: payload.target, stampIds: payload.stampIds, props: cleanProps(payload.props) },\n });\n};\n", "import type { SetSymmetryForAll } from \"@dreamy/api\";\nimport { targetSculpt } from \"../atoms/sculpt/target-sculpt.js\";\nimport { clampSymmetry } from \"../atoms/stamp/clamp-symmetry.js\";\nimport { symmetryProblem } from \"../atoms/stamp/stamp-problem.js\";\nimport { accept, reject, type Molecule } from \"./molecule.js\";\n\n/** POC applySymToAllShapes: every stamp and smear group of the sculpt gets this symmetry. */\nexport const setSymmetryForAll: Molecule<SetSymmetryForAll> = (creation, { payload }, { at }) => {\n const lookup = targetSculpt(creation, payload.target);\n if (!lookup.ok) return reject(lookup.reason);\n const problem = symmetryProblem(payload.symmetry);\n if (problem) return reject(problem);\n const symmetry = payload.symmetry ? clampSymmetry(payload.symmetry) : null;\n return accept({ type: \"SymmetrySetForAll\", at, payload: { target: payload.target, symmetry } });\n};\n", "import type { Command, Creation } from \"@dreamy/api\";\nimport { addBodyPart } from \"./molecules/add-body-part.js\";\nimport { addBone } from \"./molecules/add-bone.js\";\nimport { addDecals } from \"./molecules/add-decals.js\";\nimport { addStamps } from \"./molecules/add-stamps.js\";\nimport { applyPremade } from \"./molecules/apply-premade.js\";\nimport { autoTagSides } from \"./molecules/auto-tag-sides.js\";\nimport { createRig } from \"./molecules/create-rig.js\";\nimport { createSculpt } from \"./molecules/create-sculpt.js\";\nimport { deleteDesign } from \"./molecules/delete-design.js\";\nimport { deleteObjects } from \"./molecules/delete-objects.js\";\nimport { duplicateObjects } from \"./molecules/duplicate-objects.js\";\nimport { mirrorObjects } from \"./molecules/mirror-objects.js\";\nimport { reject, type Decision, type MoleculeContext } from \"./molecules/molecule.js\";\nimport { removeBodyPart } from \"./molecules/remove-body-part.js\";\nimport { removeBone } from \"./molecules/remove-bone.js\";\nimport { removeDecal } from \"./molecules/remove-decal.js\";\nimport { removeSmearGroup } from \"./molecules/remove-smear-group.js\";\nimport { removeStamps } from \"./molecules/remove-stamps.js\";\nimport { renameBone } from \"./molecules/rename-bone.js\";\nimport { renameObject } from \"./molecules/rename-object.js\";\nimport { reparentBone } from \"./molecules/reparent-bone.js\";\nimport { reparentObject } from \"./molecules/reparent-object.js\";\nimport { resetPalette } from \"./molecules/reset-palette.js\";\nimport { resetPose } from \"./molecules/reset-pose.js\";\nimport { applyPosePreset } from \"./molecules/apply-pose-preset.js\";\nimport { setBoneSizes } from \"./molecules/set-bone-sizes.js\";\nimport { swapPartSlot } from \"./molecules/swap-part-slot.js\";\nimport { generateCreatureMolecule } from \"./molecules/generate-creature.js\";\nimport { graftPart } from \"./molecules/graft-part.js\";\nimport { saveDesign } from \"./molecules/save-design.js\";\nimport { setBoneTags } from \"./molecules/set-bone-tags.js\";\nimport { setBoneTransforms } from \"./molecules/set-bone-transforms.js\";\nimport { setFlatWings } from \"./molecules/set-flat-wings.js\";\nimport { setObjectTransforms } from \"./molecules/set-object-transforms.js\";\nimport { setPaletteColor } from \"./molecules/set-palette-color.js\";\nimport { setPivot } from \"./molecules/set-pivot.js\";\nimport { setRegionBlend } from \"./molecules/set-region-blend.js\";\nimport { setRigMirror } from \"./molecules/set-rig-mirror.js\";\nimport { setRigMode } from \"./molecules/set-rig-mode.js\";\nimport { setSculptLook } from \"./molecules/set-sculpt-look.js\";\nimport { setSmearGroup } from \"./molecules/set-smear-group.js\";\nimport { setStampPlacements } from \"./molecules/set-stamp-placements.js\";\nimport { setStampProps } from \"./molecules/set-stamp-props.js\";\nimport { setSymmetryForAll } from \"./molecules/set-symmetry-for-all.js\";\n\n/** Routes a command to its molecule. */\nexport function decide(c: Creation, cmd: Command, ctx: MoleculeContext): Decision {\n switch (cmd.type) {\n case \"CreateSculpt\": return createSculpt(c, cmd, ctx);\n case \"DeleteObjects\": return deleteObjects(c, cmd, ctx);\n case \"RenameObject\": return renameObject(c, cmd, ctx);\n case \"ReparentObject\": return reparentObject(c, cmd, ctx);\n case \"SetObjectTransforms\": return setObjectTransforms(c, cmd, ctx);\n case \"DuplicateObjects\": return duplicateObjects(c, cmd, ctx);\n case \"MirrorObjects\": return mirrorObjects(c, cmd, ctx);\n case \"AddStamps\": return addStamps(c, cmd, ctx);\n case \"RemoveStamps\": return removeStamps(c, cmd, ctx);\n case \"SetStampPlacements\": return setStampPlacements(c, cmd, ctx);\n case \"SetStampProps\": return setStampProps(c, cmd, ctx);\n case \"SetSmearGroup\": return setSmearGroup(c, cmd, ctx);\n case \"RemoveSmearGroup\": return removeSmearGroup(c, cmd, ctx);\n case \"SetSculptLook\": return setSculptLook(c, cmd, ctx);\n case \"SetPivot\": return setPivot(c, cmd, ctx);\n case \"SetSymmetryForAll\": return setSymmetryForAll(c, cmd, ctx);\n case \"AddDecals\": return addDecals(c, cmd, ctx);\n case \"RemoveDecal\": return removeDecal(c, cmd, ctx);\n case \"SaveDesign\": return saveDesign(c, cmd, ctx);\n case \"DeleteDesign\": return deleteDesign(c, cmd, ctx);\n case \"SetPaletteColor\": return setPaletteColor(c, cmd, ctx);\n case \"ResetPalette\": return resetPalette(c, cmd, ctx);\n case \"CreateRig\": return createRig(c, cmd, ctx);\n case \"ApplyPremade\": return applyPremade(c, cmd, ctx);\n case \"AddBone\": return addBone(c, cmd, ctx);\n case \"RemoveBone\": return removeBone(c, cmd, ctx);\n case \"ReparentBone\": return reparentBone(c, cmd, ctx);\n case \"RenameBone\": return renameBone(c, cmd, ctx);\n case \"SetBoneTags\": return setBoneTags(c, cmd, ctx);\n case \"AutoTagSides\": return autoTagSides(c, cmd, ctx);\n case \"SetBoneTransforms\": return setBoneTransforms(c, cmd, ctx);\n case \"ResetPose\": return resetPose(c, cmd, ctx);\n case \"ApplyPosePreset\": return applyPosePreset(c, cmd, ctx);\n case \"SetBoneSizes\": return setBoneSizes(c, cmd, ctx);\n case \"SwapPartSlot\": return swapPartSlot(c, cmd, ctx);\n case \"GraftPart\": return graftPart(c, cmd, ctx);\n case \"GenerateCreature\": return generateCreatureMolecule(c, cmd, ctx);\n case \"SetRigMode\": return setRigMode(c, cmd, ctx);\n case \"SetRigMirror\": return setRigMirror(c, cmd, ctx);\n case \"SetRegionBlend\": return setRegionBlend(c, cmd, ctx);\n case \"AddBodyPart\": return addBodyPart(c, cmd, ctx);\n case \"RemoveBodyPart\": return removeBodyPart(c, cmd, ctx);\n case \"SetFlatWings\": return setFlatWings(c, cmd, ctx);\n default: return reject(`Unknown command \"${String((cmd as { type?: unknown }).type)}\".`);\n }\n}\n", "import type { Clock, Creation, CreationApi, CreationEvent, CreationLog, DispatchResult, IdGenerator } from \"@dreamy/api\";\nimport { decide } from \"./decide.js\";\nimport { applyEvent, foldEvents } from \"./fold.js\";\nimport { PREMADE_INFOS } from \"./premades/premade-infos.js\";\nimport { PART_VARIANT_INFOS } from \"./premades/variants/index.js\";\n\nexport type CreationApiDeps = {\n readonly ids: IdGenerator;\n readonly clock: Clock;\n /** The log to open; absent starts an empty creation. */\n readonly log?: CreationLog;\n};\n\n/** Throws when the log is not a \"dreamy-studio\" schema 1 log (old logs are rejected, not misread). */\nfunction checkLog(log: CreationLog): void {\n const format = (log as { format?: unknown }).format;\n if (format !== \"dreamy-studio\") throw new Error(`Not a Dreamy Studio log (format: ${JSON.stringify(format ?? null)}).`);\n if (log.schemaVersion !== 1) throw new Error(`Unsupported schema version ${String(log.schemaVersion)}.`);\n if (!Array.isArray(log.events)) throw new Error(\"The log has no event list.\");\n}\n\n/**\n * The core: validates commands, appends one event per accepted command and folds the log. Undo and redo\n * move a cursor over the events; the redo tail lives here, and the next accepted command drops it.\n */\nexport function createCreationApi({ ids, clock, log }: CreationApiDeps): CreationApi {\n if (log) checkLog(log);\n let events: CreationEvent[] = log ? [...log.events] : [];\n let cursor = events.length;\n let current: Creation = foldEvents(events);\n\n return {\n log: () => ({ format: \"dreamy-studio\", schemaVersion: 1, events: events.slice(0, cursor) }),\n creation: () => current,\n premades: () => PREMADE_INFOS,\n partVariants: () => PART_VARIANT_INFOS,\n dispatch(command): DispatchResult {\n const decision = decide(current, command, { ids, at: clock.now() });\n if (!decision.ok) return decision;\n events = [...events.slice(0, cursor), decision.event];\n cursor = events.length;\n current = applyEvent(current, decision.event);\n return { ok: true, creation: current };\n },\n canUndo: () => cursor > 0,\n canRedo: () => cursor < events.length,\n undo() {\n if (cursor === 0) return;\n cursor -= 1;\n current = foldEvents(events.slice(0, cursor));\n },\n redo() {\n const next = events[cursor];\n if (!next) return;\n cursor += 1;\n current = applyEvent(current, next);\n },\n };\n}\n", "import type { ColorRef, MaterialOverrides, Sculpt, Stamp, StampMode, Symmetry } from \"@dreamy/api\";\n\nexport type ResolvedStampProps = {\n readonly mode: StampMode;\n readonly color: ColorRef;\n readonly foundationColor: ColorRef;\n readonly blend: number;\n readonly material: MaterialOverrides;\n readonly symmetry?: Symmetry;\n};\n\n/**\n * What a stamp actually uses (POC resolveStampProps): its smear group's mode, color, foundation, blend and\n * symmetry win over its own; anything left unset falls back to the sculpt's look.\n */\nexport function resolveStampProps(stamp: Stamp, sculpt: Sculpt): ResolvedStampProps {\n const group = stamp.smearGroupId !== undefined ? sculpt.smearGroups.find((g) => g.id === stamp.smearGroupId) : undefined;\n const color = group?.color ?? stamp.color ?? sculpt.look.color;\n const symmetry = group ? group.symmetry : stamp.symmetry;\n return {\n mode: group?.mode ?? stamp.mode,\n color,\n foundationColor: group?.foundationColor ?? stamp.foundationColor ?? color,\n blend: group?.blend ?? stamp.blend ?? sculpt.look.blend,\n material: stamp.material ?? {},\n ...(symmetry ? { symmetry } : {}),\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["bones", "x", "x", "s", "mirrorX", "mirrorX", "part", "scale", "x", "x2", "bones", "bones", "at", "bones", "part", "parts", "bones", "along", "T", "bones", "bones", "key", "bake", "x", "key", "x", "parts", "part", "bake", "along", "sphere", "N", "part", "key", "body", "bones", "bake", "parts", "part", "bones", "x", "stem", "joints", "BODY", "part", "x", "BODY", "part", "P", "legJoints", "bones", "HEAD_S", "parts", "x", "eye", "BODY", "LEG", "SMOOTH", "part", "P", "bones", "HEAD_S", "parts", "eye", "BODY", "LEG", "GLOSSY", "part", "legJoints", "HEAD_S", "bones", "parts", "x", "eye", "PALE", "part", "P", "legJoints", "bones", "parts", "x", "eye", "PALE", "part", "P", "bones", "parts", "eye", "decals", "part", "P", "bones", "HEAD_S", "parts", "eye", "BODY", "ABDOMEN", "LEG", "GLOSSY", "part", "HEAD", "HEAD_S", "legJoints", "bones", "parts", "x", "eye", "BODY", "SHELL", "part", "P", "legJoints", "bones", "CAR_C", "CAR_S", "HAND", "parts", "x", "eye", "BODY", "foot", "SMOOTH", "part", "P", "bones", "T", "parts", "eye", "decals", "BODY", "BAND", "SMOOTH", "part", "lobe", "P", "bones", "HEAD_C", "HEAD_S", "parts", "eye", "decals", "part", "x", "bones", "J", "parts", "decals", "BODY", "FIN", "BELLY", "SKIN", "FIN_LOOK", "part", "finPart", "lobe", "sail", "P", "bones", "HEAD_C", "HEAD_S", "TAIL_BASE", "parts", "eye", "decals", "BODY", "FIN", "BELLY", "SKIN", "FIN_LOOK", "part", "finPart", "P", "bones", "HEAD_C", "HEAD_S", "TAIL_BASE", "x", "parts", "eye", "decals", "BODY", "FANG", "GLOSSY", "part", "HEAD", "HEAD_S", "ABDOMEN", "legJoints", "at", "bones", "foot", "parts", "decals", "SKIN", "PALE", "FOOT_Y", "part", "P", "bones", "foot", "HEAD_C", "HEAD_S", "T", "tailD", "parts", "eye", "decals", "FUR", "SOFT", "SKIN", "part", "P", "bones", "SKULL", "SKULL_S", "T", "parts", "eye", "decals", "PALE", "NOSE", "TIP", "P", "part", "T", "round", "bones", "SKULL", "SKULL_S", "MUZZLE_S", "ear", "parts", "eye", "decals", "SKIN", "BELLY", "SCALY", "part", "bones", "HEAD_C", "HEAD_S", "SNOUT_C", "SNOUT_S", "segment", "parts", "eye", "decals", "SKIN", "SHELL", "SHELL_LOOK", "part", "P", "bones", "HEAD_C", "HEAD_S", "SNOUT_C", "SNOUT_S", "parts", "eye", "decals", "COAT", "PALE", "NOSE", "FUR", "part", "P", "bones", "SKULL", "SKULL_S", "T", "parts", "eye", "decals", "SKIN", "SOFT", "part", "PATH", "THICK", "bones", "segment", "HEAD_C", "HEAD_S", "parts", "eye", "decals", "HORN", "PALE", "NOSE", "INNER", "BEAK", "FUR", "SKIN", "SCALES", "FEATHERS", "bake", "PALE", "NOSE", "INNER", "FUR", "SKIN", "fur", "SCALES", "BEAK", "FEATHERS", "FIN", "FIN_LOOK", "SKIN", "lobe", "sail", "TAIL_BASE", "BODY", "finPart", "bones", "parts", "PALE", "x", "segment", "J", "lerp3", "scale", "TIGER", "FUR", "COW", "SKIN", "HEAD", "FUR", "bones", "joints", "parts", "ELEPHANT", "INNER", "SKIN", "PIG", "HEAD", "FUR", "segment", "HORN", "bones", "parts", "PALE", "FUR", "bones", "at", "HORN", "SKIN", "INNER", "PALE", "SCALES", "TORSO", "FUR", "joints", "parts", "PIG", "SKIN", "LION", "SCALES", "HORSE", "SKIN", "FUR", "lerp3", "PALE", "ANT", "x", "lerp3", "PALE", "SKIN", "at", "TORSO", "FUR", "SKIN", "HEAD", "FUR", "TORSO", "W", "wingVariant", "x", "at", "J", "lerp3", "TAIL_BASE", "INNER", "PALE", "SKIN", "lerp3", "PUFF_C", "PUFF_S", "wingVariant", "W", "SPORES", "TAIL_BASE", "J", "at", "x", "PALE", "NOSE", "SKIN", "RHINO", "FUR", "INNER", "x", "parts", "P", "bones", "parts", "x", "sizeOf", "T", "at", "segment", "part", "bones", "x", "parts", "at", "TORSO_ROLES", "x", "bones", "chain", "bones", "part", "parts", "x", "fitted", "inRegion", "x", "part", "key", "x", "at", "part", "at", "stem", "CATEGORIES", "art", "x", "part", "at", "decals", "at", "at", "fit", "rig", "object", "body", "stem", "at", "at", "at", "parts", "at", "at", "bones", "at", "at", "scale", "at", "at", "at", "at", "at", "at", "at", "at", "chain", "x", "at", "at", "at", "stem", "stem", "FISH", "arm", "bones", "angle", "length", "at", "at", "at", "variant", "x", "pick", "bones", "eyes", "mouth", "decals", "at", "made", "transform", "at", "at", "at", "at", "at", "at", "at", "at", "at", "at", "at", "x", "x", "at", "at", "at", "at", "at"]
|
|
7
|
+
}
|