BodyLanguage

Plugins + Scripts BodyLanguage

Download [<1 MB]
This is a great suite of plugins especially when paired with a conditional plugin and timeline to allow imagination to run wild. Acid bubbles needs to find a lighter version of "cascadeur" to incorporate into Timeline to simplify animation so we only need to work with basic Keyframes and all together we have a powerful engine! As I mentioned, I see the potential of your plugins but I just started using them recently. I ran into some issues with the gaze function in pose however:
  • Gaze seems to only like un-rigged simple CUAs unless it is environment than it works fine.
  • Also, I cannot get the primary person atom to look at her own body parts which is useful for unexpected touch reactions.
  • The gaze head motion is also almost consistently slow. No matter what settings I try, her head turns slowly which is unnatural to me. I would at least like more control over the head turn speed.


    Screenshot 2026-10-16 161252.png







Otherwise great work!
 
Turns-out, all I had to do was click on "toggle" under the pose tab to activate the primary person atom - thanks to another user who pointed that out! So she is conceded after all :ROFLMAO:
 
Hi CheesyFX, thanks for BodyLanguage! A report about Freeze Motion/Sound in v71 (the latest on the Hub). The main paths (PoseMe → Gaze, PoseIdle, Magnet, the shakers, the force AddForce calls) already respect SuperController.singleton.freezeAnimation, but quite a few things keep running while frozen.

1. Ahegao head torque ignores freeze (operator precedence)
src/ReadMyLips/Ahegao.cs, FixedUpdate, line 219:
C#:
if(!Pose.isApplying || ahegaoHeadEnabled.val && !SuperController.singleton.freezeAnimation) head.AddRelativeTorque(headTorque);
&& binds tighter than ||, so whenever no pose is being applied the head is pushed even while frozen, and even with "Ahegao Head Enabled" off. Measured in game: during an orgasm, 200 AddRelativeTorque calls in 5 s of freeze; with all &&, 0. RelativeForce / RelativeTorque have the same pattern (they look unused, though).

2. Pose.GetPose() clears the user's freeze
Storing a pose freezes for 0.6 s and then always unfreezes, so if the scene was already frozen, saving a pose unfreezes it. Restoring the previous state at the end would fix it.

3. Things that keep running while frozen (found by reading the source, not each one tested):
  • Sounds: Orifice.FixedUpdate calls PlayMoan / PlayBurstMoan every step; the squish and slap sounds. AudioSources and ParticleSystems the plugin creates itself (orifice / throat / slap audio, cum and expression particles) keep playing. VaM only pauses its own head audio source.
  • Morphs and timers: FillMeUp.Update (belly / throat bulge), the Anus / Vagina / Throat / Hand / Cleavage FixedUpdates (gape, in-out, twink and relaxation timers), Ahegao.Update (eyes, tongue), LerpingMorph / LerpingFinger / BJHelper, NippleDriver, StimReceiver.Update (stim decay, load, Orgasm()).
  • Orgasm entry points: ReadMyLips.ForceOrgasm / ForceMaleOrgasm, StimReceiver.ForceOrgasm, the cum hotkey, and the orgasm action in Pose.Apply.
  • Coroutines: the Zero* coroutines (they fire user triggers and AddTorque), Gaze.LerpGazeStrength, Dialog, Slap.InvokeTargeted, the cumshot / clothing routines, Person.StiffenCo.
  • User triggers: BodyRegionTrigger / TouchTrigger / SlapTrigger / WatchTrigger / CustomFloatTrigger.Update, and touch / slap from OnCollisionEnter. Physics keeps stepping under freeze, so collisions still arrive.
  • Half-guarded: Force.FixedUpdate skips AddForce but keeps advancing its phase and random timers. CircularForce keeps advancing its angle. Person / Dildo FixedUpdate keep changing joint springs, collider radius and mass. All of these jump a little on unfreeze.
  • BreathingDriver does stop, but it calls Reset() every step while frozen, so the breathing morph snaps to zero at the moment of freezing.

How I handled it in a local patch, in case it's useful:
  • if (frozen) return; at the top of each per-frame entry, so timers don't advance and everything resumes where it was.
  • A small coroutine wrapper that doesn't call MoveNext() while frozen, instead of .Start(). Not for the pose apply / store / load coroutines: GetPose waits for those during its own 0.6 s freeze.
  • Pause the plugin's own AudioSources and ParticleSystems on freeze and resume them on unfreeze.
  • Block the effects, not the bookkeeping: penetration and touch enter / exit are still registered, so the state matches after unfreezing.
With that, in the same test nothing BodyLanguage writes moved during freeze: 0 morph changes, 0 AudioSource.Play, head rotation ≤ 0.05°. After unfreezing, the orgasm animation continued instead of restarting. Happy to share the diff if you want it.
 
Back
Top Bottom