Built-in AO: seamless state changes (no default-animation flash, sit / transition guards, instant re-send on region change) #668

Closed
opened 2026-10-11 05:32:54 +00:00 by sky_line · 1 comment
Owner

Scope changed (2026-10-18): the server-side mode via llSetAnimationOverride is dropped.

Why it was dropped:

  • llSetAnimationOverride only takes animations stored inside the scripted object, never a UUID.
  • A worn object can only receive full-permission items, so almost all commercial AO sets couldn't use it.
  • The server-side mode would be strictly weaker than our viewer-side AO, which plays any animation by UUID with no permission barrier.

The goal stays the same: AO state changes with no flicker and no lag.

Problem

SLAOEngine reacts after the fact. It watches the signalled avatar state, then stops the default animation and starts the override. For one network round trip the stock animation can show: the stand to walk, landing and turning blips. On region change it un-confirms its channels and retries instead of restoring the current animation at once.

Work

  1. Synchronous intercept: for our own avatar, decide the override where the default motion would start or stop (LLVOAvatar::startMotion / stopMotion). Request the replacement animation and skip the stock motion locally, so the default never plays at all.
  2. Guards:
    • keep the current override when the AO is enabled or reloaded mid-state, instead of letting the resulting stop kill it;
    • ignore region-echoed stops caused by our own transitions, such as entering or leaving water;
    • clean up stray override animations left from other states;
    • use a base sit pose under sits, and step aside for foreign seat animations.
    • transient states (landing, standing up, pre-jump) keep the stock motion with the override layered on top where that looks right.
  3. Region change: re-send the current state's override immediately on arrival.
  4. Keep the existing deferral rules: scripted AOs (PAUSE_SERVER_AO, PAUSE_SCRIPTED_AO), Pose Studio, user pause and the /ao commands.

Done when

  • Stand / walk / run / fly / jump / land / sit transitions show no default-animation frames, for you and for observers.
  • A region crossing or teleport keeps the current override with no gap.
  • Scripted AOs, poseballs and Pose Studio still take precedence as today.
**Scope changed (2026-10-18):** the server-side mode via `llSetAnimationOverride` is dropped. Why it was dropped: - `llSetAnimationOverride` only takes animations stored inside the scripted object, never a UUID. - A worn object can only receive full-permission items, so almost all commercial AO sets couldn't use it. - The server-side mode would be strictly weaker than our viewer-side AO, which plays any animation by UUID with no permission barrier. The goal stays the same: AO state changes with no flicker and no lag. ## Problem `SLAOEngine` reacts after the fact. It watches the signalled avatar state, then stops the default animation and starts the override. For one network round trip the stock animation can show: the stand to walk, landing and turning blips. On region change it un-confirms its channels and retries instead of restoring the current animation at once. ## Work 1. **Synchronous intercept:** for our own avatar, decide the override where the default motion would start or stop (`LLVOAvatar::startMotion` / `stopMotion`). Request the replacement animation and skip the stock motion locally, so the default never plays at all. 2. **Guards:** - keep the current override when the AO is enabled or reloaded mid-state, instead of letting the resulting stop kill it; - ignore region-echoed stops caused by our own transitions, such as entering or leaving water; - clean up stray override animations left from other states; - use a base sit pose under sits, and step aside for foreign seat animations. - transient states (landing, standing up, pre-jump) keep the stock motion with the override layered on top where that looks right. 3. **Region change:** re-send the current state's override immediately on arrival. 4. Keep the existing deferral rules: scripted AOs (`PAUSE_SERVER_AO`, `PAUSE_SCRIPTED_AO`), Pose Studio, user pause and the `/ao` commands. ## Done when - [ ] Stand / walk / run / fly / jump / land / sit transitions show no default-animation frames, for you and for observers. - [ ] A region crossing or teleport keeps the current override with no gap. - [ ] Scripted AOs, poseballs and Pose Studio still take precedence as today.
sky_line added this to the Slipstream project 2026-10-11 05:32:54 +00:00
sky_line changed title from Built-in AO: server-side overrides through the Slipstream LSL bridge (llSetAnimationOverride), viewer-side fallback to Built-in AO: seamless state changes (no default-animation flash, sit / transition guards, instant re-send on region change) 2026-10-18 23:15:12 +00:00
Author
Owner

Shipped in 1.4.0 Beta 1. Closing; reopen if it misbehaves.

Shipped in 1.4.0 Beta 1. Closing; reopen if it misbehaves.
sky_line 2026-10-20 15:03:20 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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
sky_line/Slipstream#668
No description provided.