Week 19: Dynamic slow-motion and animation-state prediction during navigation preselection!

An animated GIF of a recording from Squirrel Away showing the new slow-motion and animation-state prediction features.
Oooooooh, fancy slow-motion effects!

tl;dr: I added dynamic slow-motion and animation-state prediction during navigation preselection!

What happened last week?


  • I added dynamic slow-motion when pressing down while selecting a new navigation target.
    • This makes it a lot easier to accurately plan the player's movement.
    • Also, it looks really cool!
  • I added navigation-preselection animation-state prediction.
    • This consists of rendering a ghost of a player in their future position and in their future pose (animation frame) for a given future time.
    • This is useful during navigation-preselection, so you can see where the computer player will be when your human player gets to their destination.

Laundry list

  • Add support for scaling individual checkboxes.
  • Reduce inspector checkbox size.
  • Fix a couple ScaffolderTween issues.
  • Replace usages of the normal Tween with my new custom ScaffolderTween.
  • Update LevelSelectScreen to auto-expand the last level played.
  • Fix some issues with how focus is handled with the level-select-screen up/down support.
  • Add support for slowing-time while showing navigation pre-selection.
  • Add a desaturation effect when in slow-motion mode.
  • Fix a bug when ScaffolderTween objects are freed.
  • Update PlayerAnimator playback speed to match slow-motion speed.
  • Scale min-velocity-to-maintain-collision-hack values to account for velocity-scaling for current slow-motion rate.
  • Refactor where PlayerAnimator params get configured.
  • Add navigation-preselection animation-state prediction.
  • Create a new HTML build.
    • Spent some time debugging window-resize events in the HTML build.
    • :( Seeing some slow performance in the HTML build that I’ll need to take a look at.
  • Fix an issue with occasional negative edge durations.
  • Make predictions not desaturated.
  • Fix prediction animation position to account for animation speed.
  • Update predictions to face the player in the correct direction.
  • Fix a rare movement-calculation epsilon bug.
  • Fix squirrel prediction animations.
  • Fix a rare waypoint calculation epsilon edge-case bug.
  • Fix initial visibility of predictions.
  • Fix squirrel prediction directions when at rest.
  • Fix animation speeds to match movement speeds.
  • Fix an issue with the animation speed stacking on itself.
  • Render computer-player navigation trajectories during slow-motion; make this configurable.
  • Make nav-trajectory annotations configurable per-player.
  • Tween navigation prediction state as the preselect path changes.
  • Create a path-segment draw utility.
  • Start implementing a navigation trajectory pulse animation.
  • Finish implementing a navigation trajectory pulse animation.
    • Spent an embarrassing amount of time stuck on a simple bug where I was using modulus instead of division...
  • Fix a bug with invalid playback.get_elapsed_time_scaled when the instruction set is empty.
  • Fix an issue with the border width shrinking around the destination-marker cone-end-point.
  • Fix kinks in path annotations.
  • Add support for configuring whether the nav-pulse animation grows from start to finish, or remains as a small sub-segment that slides from start to finish.
  • Add a fade-in tween for new nav trajectory annotations.
  • Add a fade-out tween for nav trajectory annotations when toggling them on/off with slow-motion mode.
  • Add a fade-out tween for nav pulse animations.

What's next?

Next, I'll probably be doing a subset of the following:

  • Add support for in-air navigation destinations if the click position is far enough from any surface.
  • Add support for auto-zooming-out and panning the camera when the user is trying to navigate close to the edge of the game region (and back in if not).
  • Add support for lazy-loading platform graph files separately from the rest of the game file.
    • I suspect this might fix some memory issues I'm seeing in the HTML build...

I'll be doing a little less the next couple weeks, since I'll be spending time with family.

🎉 Cheers!

This is a simple icon representing my sabbatical.