decentraland / decentraland/godot-explorer
Locomotion Iteration #3: Movement Blend & Jump Variation Parity
- Dominant language
- Rust
- Stars
- 18
- Forks
- 19
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 43
Description
## **⚠️ Problem:**
Godot switches between `Walk`, `Jog` and `Run` as discrete states, so the avatar snaps between gaits instead of blending, and every jump plays the identical clip. Once acceleration curves land (#2850) the avatar spends real time between gait speeds with no animation to cover it. Drives **Playtime**.
## **🏁 Scope:**
Speed-driven blend across the locomotion clips and jump clip variation in `avatar.tscn` + `avatar.gd`. Jump timing, hard landing and spawn are Iteration 3.
## **📝 Deliverables:**
- [ ] Walk / jog / run blended by horizontal speed, replacing discrete state switches
- [ ] Blend behaves through acceleration and deceleration ramps, not only at steady speed
- [ ] Jump clip variation — random variation parameter so repeated jumps differ
- [ ] Remote avatars blend at custom speeds, not only the local player
- [ ] No trap states introduced — regression guard per #2699
- [ ] Accelerate 0 → run and decelerate to stop captured side-by-side vs desktop
## Metrics
Playtime. No instrumented baseline — verify by frame-matched side-by-side capture through a full acceleration ramp.
## Findings
| | Godot `main` | Unity |
|---|---|---|
| Gait transition | discrete `Walk` / `Jog` / `Run` states | speed-driven blend (`AnimationMovementBlendLogic.cs`) |
| Jump variation | none — one clip per jump type | random `JUMP_VARIATION` float into the animator |
Both are cosmetic today because Godot changes speed instantaneously. #2850 introduces 0.5 s acceleration curves, which is what makes the missing blend visible.
## Dependency
Sequenced after #2850. The blend has nothing to cover until acceleration curves ship.
## **🔗 References:**
- [`AnimationMovementBlendLogic.cs`](https://github.com/decentraland/unity-explorer/blob/dev/Explorer/Assets/DCL/Character/CharacterMotion/Animation/AnimationMovementBlendLogic.cs) — the speed→blend mapping to port; `AnimationStatesLogic.cs` beside it carries `JUMP_VARIATION`
- [#6475](https://github.com/decentraland/unity-explorer/issues/6475) — `[QA]` desktop remote-avatar walk animation froze at custom speeds (`2-medium`, closed); the blend has failure modes for remote avatars specifically
- [#2850](https://github.com/decentraland/godot-explorer/issues/2850) — acceleration curves; the change that makes this visible
- [#2699](https://github.com/decentraland/godot-explorer/pull/2699) — merged; grounded-gating on walk / jog / run. The blend must not reopen those traps.
- [#905](https://github.com/decentraland/godot-explorer/issues/905) — parent audit
Contributor guide
Assessment
This issue has not been assessed yet.