Skip to content

refactor: demote Partial Ragdoll to a comparison demo#78

Merged
blugart-dev merged 1 commit into
mainfrom
refactor/demote-partial-ragdoll
Jun 19, 2026
Merged

refactor: demote Partial Ragdoll to a comparison demo#78
blugart-dev merged 1 commit into
mainfrom
refactor/demote-partial-ragdoll

Conversation

@blugart-dev

Copy link
Copy Markdown
Owner

Per project direction: Partial Ragdoll is demoted from a co-equal plugin mode to the comparison demo. It was a thin wrapper over Godot's built-in PhysicalBoneSimulator3D — "what the engine already offers", not Kickback's value (the active spring ragdoll). Removing it as a mode makes the plugin's identity unambiguous and sheds the least-tested path + a chunk of surface area.

⚠️ The comparison demo's behaviour changed → wants an in-editor visual pass before merge.

Plugin — now active-ragdoll only

  • KickbackCharacter: dropped Mode.PARTIAL, the _simulator / _partial_controller detection, the partial configure, and the partial branch of receive_hit (now active-only).
  • kickback_plugin.gd (setup tool): a single Active-Ragdoll flow — removed the Partial preset, the auto-created PhysicalBoneSimulator3D, the partial node, and the partial report branches.
  • strength_debug_hud.gd / kickback_status_panel.gd: active-only (dropped partial discovery, _draw_partial_target, the legend key, _check_simulator).
  • KickbackRaycast.DEFAULT_MASK → active layer only. The active demos' shared ybot keeps an (inactive) baked simulator that KickbackCharacter no longer disables; targeting only layer 4 prevents those bones from intercepting active hits.

Demo — the new home

  • Moved partial_ragdoll_controller.gd + hit_event.gd to demo/ (DEMO-ONLY; @icon + the addon icon dropped).
  • demo.tscn/demo.gd reframed as "Godot's built-in ragdoll vs Kickback's active ragdoll": frees the active char's baked simulator, enables the Godot char's, and routes one both-layers raycast by collider type (RigidBody3D → Kickback facade; PhysicalBone3D → the demo controller).

Kept (general utilities the demo reuses)

SkeletonDetector.populate_physical_bones, the KickbackLayers partial-layer constant.

Docs

README, CLAUDE.md, INTEGRATION.md, issue templates updated; the "pick one mode" / "don't mix modes" guidance removed.

Validation

Clean headless import · 109/109 GUT · clean scene-smoke (0 errors) on all 8 demos incl. the rewritten demo.tscn. (The Joint3D::_body_exit_tree lines in the test run are pre-existing engine teardown noise, unrelated.)

🔬 Visual review (please)

Open demo.tscn: left = Kickback active ragdoll, right = "Godot built-in ragdoll". Shoot each (1–5 weapons) — the left staggers/ragdolls/recovers; the right does a raw PhysicalBoneSimulator3D ragdoll then blends back. Confirm both react and the contrast reads clearly.

🤖 Generated with Claude Code

Partial Ragdoll was a thin wrapper over Godot's built-in PhysicalBoneSimulator3D
— "what the engine already offers", not Kickback's value (the active spring
ragdoll). As a co-equal plugin mode it cost real surface area for little unique
value and was the least-tested path. Per project direction it becomes the
"what Godot offers vs what we build" comparison demo instead.

Plugin (now active-ragdoll only):
- KickbackCharacter: dropped Mode.PARTIAL, the _simulator / _partial_controller
  detection, the partial configure, and the partial branch of receive_hit.
- kickback_plugin.gd: single Active-Ragdoll setup (removed the Partial preset,
  the auto-created PhysicalBoneSimulator3D, the partial node, partial report lines).
- strength_debug_hud.gd: active-only (removed partial discovery + _draw_partial_target
  + legend key). kickback_status_panel.gd: active-only (removed _check_simulator).
- KickbackRaycast.DEFAULT_MASK is now the active layer only, so the (no-longer-
  disabled) baked simulator bones can't intercept active hits.

Demo (the new home):
- Moved partial_ragdoll_controller.gd + hit_event.gd to demo/ (DEMO-ONLY; @ICON and
  the addon icon dropped). demo.tscn/gd reframed as "Godot's built-in ragdoll vs
  Kickback's active ragdoll": frees the active char's baked simulator, enables the
  Godot char's, and routes one both-layers raycast by collider type (RigidBody3D ->
  Kickback facade, PhysicalBone3D -> the demo controller).

Kept as general utilities the demo reuses: SkeletonDetector.populate_physical_bones,
the KickbackLayers partial-layer constant.

Docs: README, CLAUDE.md, INTEGRATION.md, issue templates updated; "pick one mode" /
"don't mix modes" guidance removed.

Validated: clean headless import, 109/109 GUT, clean scene-smoke (0 errors) on all
8 demos incl. the rewritten demo.tscn. Comparison-demo feel pending visual review.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@blugart-dev blugart-dev merged commit 4764039 into main Jun 19, 2026
1 check passed
@blugart-dev blugart-dev deleted the refactor/demote-partial-ragdoll branch June 19, 2026 17:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant