WIP: Jiggle: the breasts move as a whole (skin zones), with panel controls #140
Draft
khyretos
wants to merge 1 commit from
khyretos/claude/jiggle-breasts into claude/jiggle-skeleton-base
AGit
pull from: khyretos/claude/jiggle-breasts
merge into: khyretos:claude/jiggle-skeleton-base
khyretos:main
khyretos:renovate-hold-imgui-rnnoise
khyretos:gh-pages
khyretos:windows-results
khyretos:renovate/font-awesome-7.x
khyretos:lint-fix/yaml_prettier
khyretos:renovate/https-code.forgejo.org-forgejo-upload-artifact-5.x
khyretos:renovate/https-code.forgejo.org-forgejo-download-artifact-7.x
khyretos:renovate/https-code.forgejo.org-actions-cache-6.x
khyretos:renovate/xiph-rnnoise-0.x
khyretos:renovate/cmake-mirrors-non-major
khyretos:lint-fix/json_prettier
khyretos:lint-fix/bash_shfmt
khyretos:ci/coverage-ccache
khyretos:ci/speed-ccache-jobs
khyretos:claude/integration
khyretos:claude/creator-vitruvian-wip
khyretos:claude/park-engine-foundations
khyretos:claude/park-parity
khyretos:claude/jiggle-skeleton-base
khyretos:claude/creator-polish-base
khyretos:claude/creator-polish
khyretos:claude/creator-wardrobe
khyretos:claude/creator-anime
khyretos:claude/creator-clothes
khyretos:pre-release
khyretos:release
khyretos:claude/mpm-water
khyretos:lint-fix/markdown_markdownlint
khyretos:claude/lua-nav
khyretos:claude/creator-hair
khyretos:claude/dynamic-navmesh
khyretos:claude/lua-audio
khyretos:claude/save-slots
khyretos:archive/2026-10-24/clothref
khyretos:archive/2026-10-24/f01aref
khyretos:archive/2026-10-24/f02aref
khyretos:archive/2026-10-24/f12ref
khyretos:archive/2026-10-24/g18eref
khyretos:archive/2026-10-24/g19aref
khyretos:archive/2026-10-24/g19b2
khyretos:archive/2026-10-24/g19bref
khyretos:archive/2026-10-24/g19cref
khyretos:archive/2026-10-24/g19dref
khyretos:archive/2026-10-24/reflA
khyretos:archive/2026-10-24/reflB
khyretos:khyretos/rhi-shaders
khyretos:claude/rhi-light-sets
khyretos:claude/rhi-pipeline-state
khyretos:archive/2026-10-24/r1gref
khyretos:archive/2026-10-24/ciref
khyretos:archive/2026-10-24/r1eref
khyretos:archive/2026-10-24/r1dref
khyretos:archive/2026-10-24/r1cref
khyretos:archive/2026-10-24/r1bref
khyretos:archive/2026-10-24/r1aref
khyretos:archive/2026-10-24/f13ref
khyretos:archive/2026-10-24/f11ref
khyretos:archive/2026-10-24/f10dref
khyretos:khyretos/ci-on-prs
khyretos:archive/2026-10-24/f10cref
khyretos:archive/2026-10-24/f10bref
khyretos:claude/bloom
khyretos:archive/2026-10-24/f10ref
khyretos:archive/2026-10-24/f08ref
khyretos:archive/2026-10-24/f07ref
khyretos:archive/2026-10-24/f05bref
khyretos:archive/2026-10-24/f05ref
khyretos:archive/2026-10-24/f03ref
khyretos:archive/2026-10-24/f02cref
khyretos:benchmark-data
khyretos:claude/cloth-passes
khyretos:archive/2026-10-24/f02bref
khyretos:archive/2026-10-24/refl-merge-base
khyretos:archive/2026-10-24/claude-b087-ref
khyretos:archive/2026-10-24/claude-macos-cross
khyretos:archive/2026-10-24/claude-macos-ref
khyretos:archive/2026-10-24/stash-macos-ref
khyretos:archive/2026-10-24/claude-win-probe
khyretos:patches/inbox
khyretos:tennis-feedback-wip
khyretos:archive/2026-10-24/runner-kit-check
No reviewers
Labels
No labels
deps
deps-major
hold
security
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
khyretos/kk-engine!140
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "khyretos/claude/jiggle-breasts"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The breast bones only swing the skin 6-9 mm; a skin zone on each breast carries it 1-3 cm and lets it lag. Panel group Breast skin. Tuned on the tour trace. Full description in the handoff file jiggle-breasts-pr.md.
Title
WIP: Jiggle: the breasts move as a whole (skin zones), with panel controls
User description
The breast bones only swing the skin 6-9 mm; a skin zone on each breast carries it 1-3 cm and lets it lag. Panel group Breast skin. Tuned on the tour trace. Full description in the handoff file jiggle-breasts-pr.md.
PR Type
Enhancement
Description
Adds breast skin zones for whole-breast jiggle
Introduces panel controls for breast skin settings
Includes tests verifying increased travel distance
Diagram Walkthrough
File Walkthrough
4 files
Adds breast skin zone creation logic to addHumanoidSoftTissueExposes zoneCount, settings, and zone accessors on JiggleSkinAdds breast zone tracking and panel controls for breast skinDeclares m_breastZones vector and jiggleSkin accessor1 files
Adds test verifying breast zones increase travel distance2 files
PR Reviewer Guide 🔍
📋 Focus areas: 🔴 2 open · ✅ 0 handled. Every push re-checks them; a handled area moves to Resolved findings at the bottom.
Missing Error Handling for Breast Zones
The code adds breast skin zones only if
chest >= 0ando.breastZonesis true, but it does not verify that thebreastCentresvector was actually populated. If theextreme()check fails for one or both sides (e.g., missing chest bone geometry),breastCentreswill be empty or incomplete. The subsequent loop inupdateBodiesand the panel logic might then access invalid indices or behave unexpectedly without a clear error signal. A guard to ensurebreastCentres.size() == 2before adding zones would prevent silent failures.Potential Null Pointer Dereference
In
jiggleSkin(), the function returnsnullptrifm_breastZones.empty(). However, inbuildPanel(), the lambdabreastSkinaccessesskin->settings(m_breastZones[0])without first checking ifm_breastZonesis non-empty inside the lambda's closure scope when called. AlthoughhasBreastZonesis used with.showIf(), there is a risk if the state changes between checks or ifhasBreastZoneslogic is flawed. Specifically, line 919 checksm_breastZones[0] >= skin->zoneCount(), but does not explicitly check!m_breastZones.empty()before accessing index 0. This could lead to undefined behavior ifm_breastZonesis empty buthasBreastZonessomehow evaluates to true due to a race condition or logic error.PR Code Suggestions ✨
Explore these optional code suggestions:
Use constants for test thresholds
The test assertions use hardcoded thresholds (e.g.,
0.004f,0.06f) that may notgeneralize across different hardware or configurations. Consider making these
thresholds configurable via constants or environment variables to improve test
robustness and maintainability.
tests/test_auto_rig.cpp [287-292]
Suggestion importance[1-10]: 4
__
Why: The suggestion recommends using constants for hardcoded thresholds to improve maintainability, which is a good practice. However, the impact is minor as the values are specific to the test scenario and not likely to change frequently.
Move breastCentres declaration into conditional block
The variable
breastCentresis declared but only used in a new block that executesconditionally on
o.breastZones. Ifo.breastZonesis false, the vector remains emptyand unused. While not a critical bug, it's better to move the declaration inside the
conditional block or initialize it there to avoid unnecessary allocation when the
feature is disabled. Alternatively, ensure the vector is only populated when needed.
engine/src/JigglePhysics.cpp [507-519]
Suggestion importance[1-10]: 3
__
Why: The suggestion proposes moving a variable declaration to avoid unnecessary allocation, but the existing code already handles the conditional logic correctly by checking
o.breastZoneslater. Moving the declaration inside would require restructuring and doesn't significantly improve performance or correctness.🧹 Lint report · ❌ 39 problems in 6 checks · 🧹 3 formatting checks to tidy
Nothing here blocks the merge (report only).
MARKDOWN · markdownlint: first lines of the output
CPP · cppcheck: first lines of the output
YAML · yamllint: first lines of the output
BASH · shellcheck: first lines of the output
DOCKERFILE · hadolint: first lines of the output
REPOSITORY · trivy: first lines of the output
🧹 Formatting only (layout, no behaviour; the nightly lint-fix job applies these as a PR): YAML · prettier (57 files checked), BASH · shfmt (11 files checked), JSON · prettier (147 files checked)
✅ Clean: actionlint, git_diff, gitleaks, grype, jsonlint, secretlint, stylelint, trufflehog, xmllint
MegaLinter on soucouyant · full logs in the Actions run · comment
/improvefor AI fix suggestionsView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.