Skip to content

motion: a way acted from the clip keys on the clip's pose and hands back into it; a figure's capsule walks through its own ragdoll (#849, #851) - #852

Merged
nicolas-maman merged 3 commits into
mainfrom
feat/motion-cycle
Oct 22, 2026
Merged

nicolas-maman merged 3 commits into
mainfrom
feat/motion-cycle

Conversation

@nicolas-maman

Copy link
Copy Markdown
Collaborator

The first two defects the animation and physics cycle test (#850) turned up, both on the path from a figure's clip into a keyed way and back.

closes #849. A figure on its clip (ANIMATED) that sat, lay down or knelt had its way keyed on the ragdoll's animation pose. The ragdoll had only taken that pose while its bodies drew the figure, so a figure that sat from its clip stood up into a pose it had never been given: its drawn hips upside down, facing where it first stood. Then the way set it straight to ANIMATED, and the hips turned 3 rad and jumped 66 cm in one step.

  • physics.ragdoll_keep_animation takes the clip's pose as a figure on its clip begins a way, as ragdoll_release already did for a figure let go limp. sit, lie_down and kneel call it.
  • A way that ends in ANIMATED hands back into the clip over BLEND, from the pose last shown, as set_mode hands a POWERED figure back.

closes #851. A figure with a character controller and an active ragdoll had its capsule pushed out of its own bodies unless the game called character_ignore, which only the plaza did. Now the ragdoll is told the object it stands for (ragdoll_set_object, called by motion.on_skeleton), and a character on that object walks through its bodies, whichever was made first.

main this branch
sat from its clip and stood up onto it (tests/test_sit.ae): the drawn hips' worst turn / move in a step, off upright 180° / 100 cm, upside down; toes slid 579 mm 1.2° / 1.4 cm, 42° (the lean)
the sit cycle swept, 12 trials (seated 60/100/140 steps, walking off 0/90/180/270°): the drawn hips standing up / the step onto the clip 185.6 rad/s / 39.5 m/s 1.27 rad/s / 1.2 to 1.5 m/s
a walker on its clip with its own ragdoll, 2 s (tests/test_character_bodies.ae) 6.06 m backwards 1.58 m ahead, either order

Both new checks fail on main. The physics-driven sit (POWERED, handed back after standing) is unchanged: 0 of 12 down with the capsule set up as intended. #848 stays open for Siltreach's re-measure.

Left for the next step: on a walk-off that turns, the slerp blend into a turning clip adds about 2 rad/s to the hips over the clip's own 4.6 (6.3 against main's 4.45, which cut instead). Every hand-back to the clip has it, the POWERED one too. The fix is to inertialize the hand-back (Bollo, Gears of War 4, GDC 2018), so the offset at the switch decays over the live clip instead of being blended toward it.

Aether stays at 0.834.0 in this PR. The 0.839 move is on branch feat/aether-0839, and it waits on aephysics building on 0.839 (E0902 at broad_phase/module.ae:127) and on aether-ui#221.

…ack into the clip over BLEND (#849)

A figure on its clip (ANIMATED) that sat, lay down or knelt had its way
keyed on the ragdoll's animation pose, which the ragdoll only took while
its bodies drew the figure. Sat from its clip, the box man stood up into
a pose of what it had never been given: its drawn hips upside down and
facing where it first stood, turned 3 rad and thrown 66 cm in the step
the way set it straight back to ANIMATED.

- physics.ragdoll_keep_animation takes the clip's pose as a figure on
  its clip begins a way, as ragdoll_release already did for a figure let
  go limp; sit, lie_down and kneel call it.
- A way that ends in ANIMATED hands back into the clip over BLEND, from
  the pose last shown, as set_mode hands a POWERED figure back.

tests/test_sit.ae sits the box man from its Idle and stands it up onto
it: its drawn hips stay upright (42 degrees at most, the lean), turn
1.2 degrees and move 1.4 cm a step at the most. On main: 180 degrees,
100 cm, upside down, and the toes slid 579 mm standing up.
…owever the two were made (#851)

A figure with a character controller and an active ragdoll (motion.on_figure)
had its capsule pushed out of its own bodies unless the game called
character_ignore. Only the plaza and Siltreach did. The box man on its Walk,
its bodies following the clip, was carried 6 m backwards in 2 s against its
input.

The ragdoll is told the object it stands for (ragdoll_set_object, which
motion.on_skeleton calls), and a character on that object walks through its
bodies, whichever of the two was made first. Freeing the ragdoll lets go of
any character that walked through it. character_ignore stays, to pair a
character with a ragdoll made some other way.

tests/test_character_bodies.ae walks it 2 s on its clip: 1.58 m ahead with
the capsule made first or after (main: 6.06 m backwards, 7.46 m in all).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant