Skip to content

Muscles: switches, level ankled feet (#777), a knockdown falls back not over (#822) - #824

Merged
nicolas-maman merged 5 commits into
mainfrom
feat/motion-muscles-2
Oct 20, 2026
Merged

nicolas-maman merged 5 commits into
mainfrom
feat/motion-muscles-2

Conversation

@nicolas-maman

@nicolas-maman nicolas-maman commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Toward muscles as the default (#790): two switches to run everything on them, and level feet for figures with ankles.

Switches (read once, as a figure or ragdoll is made):

  • AE3D_MUSCLES=1 starts every active ragdoll on muscles (motion.set_muscles).
  • AE3D_ANKLES=1 gives every ragdoll feet of its own (physics_set_ankles).

With both, any suite, the showcase or a game runs on muscles unchanged, which is how the suites still failing there are found.

Level feet for ankled figures (#777). Each foot was placed at its own toe's height along its shin. The box man's right toe sits 8 mm under its left, so it stood its whole weight on the right foot (844 N against 0): every step began from one loaded foot, and on muscles a figure tripped onto its front never got up. Both feet now sit at the lower toe's share of the shin:

  • test_get_up on muscles and ankles: 36 of 36 (3 failures before).
  • The figure keeps its height, and so its weight: ragdoll_set_mass weighs a figure by its height down to its lowest foot. Levelled at the mean of the two toes instead, the box man came out 4 mm shorter and 0.36 kg lighter than without ankles, which test_ankled_steps caught.
  • A figure without ankles keeps each foot at its own toe's until its protective fall is retuned.

A knockdown falls back, not over (#822). Siltreach's knock (2.9 m/s back and 0.25 up at the chest) sent its muscled figure over its shoulders with its legs over its head, and it rose turned half round. The protective fall was swept with the balance assist held against the fall until the figure is down (FALL_ASSIST), standing in for the legs and hips a person brakes a fall with. On muscles the knock's unpin let go of that brake too. A fall now keeps it until the figure lands (pin_held); the pin is still let go standing, lying and through the get-up. On Siltreach's own figure in its idle:

  • the hips rise 0.09 m over the neck at the most, against 0.42;
  • it rises turned 0.27 rad, against 2.71;
  • it stays clean up to 3.0 m/s (the servo up to 3.2).

A crash fixed. physics.ragdoll_balance_assist asked the parallel joint for its torque while the pelvis anchor was the motor joint that carries a figure following its clip (animated, getting up), and the program crashed. It answers 0 there now (aephysics#181 has the getter side).

docs/motion.md: a section on muscles: what a figure on them gets, how to switch them on, and what still fails there.

Tested locally (Windows, Aether 0.831.0): test_ankled_steps 3/3, test_muscles 11/11 (new: knocked down backwards, the brake holds and the hips stay under the neck; both fail without the fix), test_ragdoll_mass 9/9 (new: an animated figure's assist reads 0; a segfault without the fix), test_get_up 36/36 (and 36/36 with AE3D_MUSCLES=1 AE3D_ANKLES=1), test_get_up_kerb 24/24, test_feet 20/20.

Closes #822. Part of #790 and #777.

…ragdoll with feet, read once; docs/motion.md on muscles
…t along their shins (#777)

Each foot at its own toe's, the box man's right toe sat 8 mm under its left
and it stood its whole weight on its right foot (844 N against 0): every step
began from one loaded foot, and on muscles a figure tripped onto its front
never got up (test_get_up on muscles 3 failures, 36 of 36 now). At the lower
toe's share the figure keeps its height, so ragdoll_set_mass weighs it as
before: at the mean of the two it came out 4 mm shorter and 0.36 kg lighter
than without ankles (test_ankled_steps). A figure without ankles keeps each
foot at its own toe's until its protective fall is retuned.
…gure lands (#822); the balance assist read only from its own joint

The protective fall was swept with the balance assist held against the fall
until the figure is down (FALL_ASSIST): the stand-in for the legs and hips a
person brakes a fall with. On muscles the knock's unpin let go of it too, and
Siltreach's knock (2.9 m/s back and 0.25 up at the chest) sent its figure
over its shoulders, legs over its head, and up turned half round. Held
through the fall (pin_held), on Siltreach's own figure in its idle: the hips
0.09 m over the neck at the most against 0.42, turned 0.27 rad against 2.71;
clean to 3.0 m/s (the servo to 3.2). The pin is still let go standing, lying
and through the get-up, as before.

physics.ragdoll_balance_assist asked the pelvis anchor's parallel joint for
its torque while the anchor was the motor joint that carries a figure
following its clip (getting up, animated): aephysics' getter read a null and
the program crashed (aephysics#181). It answers 0 there now, and the setter
leaves such a figure alone, as aephysics' setter did.

test_muscles: knocked down backwards at 2.8 m/s, the brake holds until it
lands and the hips stay under the neck (both fail without the fix: the brake
went to 0, the hips 0.014 m over). test_ragdoll_mass: an animated figure's
assist reads 0 (a segmentation fault without the fix).
@nicolas-maman nicolas-maman changed the title Muscles: AE3D_MUSCLES and AE3D_ANKLES switches; an ankled figure's feet level (#777) Muscles: switches, level ankled feet (#777), a knockdown falls back not over (#822) Oct 19, 2026
@nicolas-maman
nicolas-maman merged commit 8ffcac3 into main Oct 20, 2026
10 checks passed
@nicolas-maman
nicolas-maman deleted the feat/motion-muscles-2 branch October 20, 2026 00:47
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.

Muscles: a knockdown from in front rolls the figure backwards, legs over its head, and it ends turned half round

1 participant