Week 36: Improvements to Surfacer navigation and surface-parsing

A screenshot of the Godot scene editor open to a level with some non-axially-aligned tile shapes.
Testing some oddly-shaped tiles, and oddly shaped surfaces.


tl;dr: Last week I added support in Surfacer for maintaining the jump-press when calculating a fall-from-air-position edge, and I started adding support in Surfacer for non-cell-border-aligned surface sides and single-vertex surfaces.


What happened last week?

Highlights

  • This was a short work-week for me.
  • I added support for maintaining the jump-press when calculating a fall-from-air-position edge.
  • I started adding support for non-cell-border-aligned surface sides and single-vertex surfaces.
  • And I added lots of other fixes.

      Laundry list

      • Documentation updates:
      • Add support for maintaining jump-press when calculating a fall-from-air-position edge.
        • Explanation:
          • The reason this is significant, is that there are two very different parts of a jump in Surfacer.
            • The start uses "slow-rise" gravity.
            • The end uses "fast-fall" gravity.
            • While holding the jump button from the initial press, or until the jump has reached it's peak, the character rises more slowly, which gives the player more time to move them around.
            • After the slow-rise portion of the jump ends, fast-fall gravity is applied, and the character moves more quickly downward to their destination.
          • Previously, I hadn't supported tracking whether or not slow-rise gravity could be maintained when calculating a fall-from-air-position edge.
          • These edges aren't part of the graph and are dynamically calculated as needed—usually when the character's movement has been interrupted by something.
      • Start adding support for non-cell-border-aligned surface sides and single-vertex surfaces.
        • Add support for validating TileSet collision shapes.
        • Add better support for predictably parsing surfaces that lie along the max-floor-angle threshold.
        • Make internal-surface-removal more efficient, by reducing the number of array removal calls.
        • Add support for parsing ceiling-to-floor neighbor references.
        • Add a new tile-set and level for testing non-axially-aligned surfaces.
        • Fix surface-parsing internal-surface-removal support for single-vertex surfaces.
        • Update jump-land-positions-utils to support single-vertex surfaces.
      • Annotation improvements:
        • Refactor annotation and draw parameters to be centralized, non-const, non-static, and configurable through my app-manifest pattern.
        • Adjust annotation parameters when running in emphasize-annotations mode.
        • Fix a bug preventing edge discrete trajectories from rendering.
      • Miscellaneous:
        • Fix jump-land-position false-negatives when initial horizontal velocity would cause the character to pass a wall before rising above the bottom edge.
        • Support better edge-weights for climb-to-adjacent-surface edges.
        • Update Squirrel Away character movement parameters.
        • Add support for tracking frame counts in my TimeTracker class.
        • Fix fall range calculation when can-hold-jump-button is true.
        • Update some character-position references to use surface_state value as the source of truth.
        • Update instruction-playback to never press face-right and face-left simultaneously.
        • Re-enable some navigation error-state checks.
        • Update navigation-state to also track the frame index that the path and edge navigation started on.
        • Update surface-state logic to allow wall-grabs when facing away from the wall.
        • Update surfacer-navigation check for whether the character is stuck.
        • Update character movement params.
        • Add support for gameplay with no player-controlled character.

      What's next?

      • Finish adding support for non-cell-border-aligned surface sides and single-vertex surfaces.
      • Add support for parsing surfaces from multiple TileMaps.
      • Add support for colinear neighbor surfaces that aren't merged together.
        • This will be important for things like marking parts of a surface that have a different friction, or that can't be navigated across.


      🎉 Cheers!


      This is a simple icon representing my sabbatical.

      Comments