• v0.5.0 88748a071a

    v0.5.0 Stable

    joe released this 2026-08-16 14:11:52 +01:00 | 41 commits to main since this release

    0.5.0 — 2026-08-16

    Charts that play tricks with the format now play correctly. All of this came from one
    song — SHAPESHIFTER — which turned out to be wrong in four separate ways.

    Added

    • Branch switching. Charts change between the normal, expert and master paths mid-song,
      and the change is visible: the notes already on screen are replaced. Every path is now
      kept and the chart plays whichever it chooses, decided one bar ahead as the reference
      does. Charts use this as an effect rather than as difficulty — SHAPESHIFTER asks for 101%
      accuracy to leave the normal path, which cannot happen, and 0% to reach master, which
      always does — so playing only the normal path showed the wrong notes rather than a
      reduced chart. #SECTION and #LEVELHOLD come with it.
    • The path is named on screen, at a fixed place in the lane, with the branched section
      tinted from where it begins.
    • #JPOSSCROLL moves the judge position. Charts pair it with a reversed #SCROLL to
      mirror the lane, so honouring the scroll while ignoring the move sent notes in backwards
      past a hit zone that never moved.
    • Complex #SCROLL values. The real part is the horizontal speed as before; the
      imaginary part moves the note vertically, so 0+1i sends notes straight up.

    Fixed

    • Negative #MEASURE walks the time cursor backwards, which charts use deliberately —
      SHAPESHIFTER rewinds 35 beats, and elsewhere it appears as -1/64 nudges. Treating them
      as nonsense left the cursor moving forwards instead, running one difficulty ten seconds
      past the other four of the same song.
    • The button that opens calibration is no longer counted as the first tap. A gamepad's
      A button is both Confirm and don, so calibration was measuring a keypress made on a
      different screen.
    • Balloon counts are per path, so a balloon on a path not being played no longer consumes a
      count meant for the path that is.
    • A balloon the chart never sized needs five hits rather than being unpoppable.

    Changed

    • main.rs is 662 lines rather than 910, with startup and chart loading in their own
      modules and the audio, video and bindings screens sharing one implementation.
    • New autoplay gate: every chart in a library is played perfectly and anything that says
      it cannot — a note that will not resolve, or one a perfect player still missed — is a
      failure. 1907 courses and 1.3 million notes pass. It was written for a bug it now catches,
      where a branched chart could hang the game at 100% CPU.
    Downloads