• v0.9.0 e037d9c5d2

    v0.9.0 Stable

    joe released this 2026-08-21 16:47:37 +01:00 | 58 commits to main since this release

    The game looks like a Taiko game now. Every screen was drawn in flat primitives on near-black;
    they are bright, patterned and outlined, and the notes, the gauge and the lane carry colours
    measured out of OpenTaiko's own skin rather than guessed at.

    The one fault worth naming: an existing config never received a changed default. The file
    is written on first run with every value spelled out, so anyone who had run the game before
    kept the old note colours and the old volumes indefinitely, having chosen neither. That is
    fixed for the values it had already caught, and it is a trap worth remembering — in this
    project, changing a default reaches new installs only.

    Added

    • A drifting pattern behind every screen. Seigaiha — the fan of overlapping wave crests —
      behind the menus and the playfield's header, and a quieter lattice behind the lists. One tile
      is drawn once into a texture at startup and blitted, so a frame costs a handful of quads
      rather than the thousands of arcs it would take honestly. The main menu holds its pattern
      still; everything else drifts right to left.
    • The playfield has furniture. A patterned header band, a stage below the lane where there
      had been 44% of empty window, a red-and-white awning along the bottom, and the combo on a
      drum face rather than as a bare number floating on the lane.
    • The soul gauge is the arcade's. Fifty cells stepping in two-percent increments, short and
      red below the clear threshold and half again as tall and gold above it, with the word CLEAR in
      the space that step creates and a soul at the far end for the struck notes to fly into.
    • --windowed, so a test run cannot take over the display, and --debug-hud with F10
      to toggle it — frame times as median, 99th and worst, plus a count of every frame that missed
      its budget for the whole run. A stutter is a tail, not an average.
    • A wayland build feature, off by default. See below.

    Changed

    • The menus are bright. A warm wash with the pattern over it, black keylines on every bar
      as the cabinet draws them, and a stroke around every glyph — bright grounds break light text,
      so those three had to move together.
    • The difficulty picker is a row of cards rather than a list, which is the shape of the
      choice and what the cabinet draws. Left and Right walk it; Up and Down still work, because on
      a drum the rim is the only thing that navigates.
    • The results screen is a plaque whose colour is the verdict — red, green, orange or gold —
      so it has said how it went before a word is read.
    • Note and gauge colours are sampled, not invented. Don #F84828, ka #68C0C0, the rim a
      cream #F7EFE0; the gauge red-on-dark-red below its threshold and yellow-on-dark-yellow
      above. The ka is the surprise: a soft teal rather than the saturated blue convention suggests,
      which is what stops a lane of alternating notes vibrating.
    • The combo appears at ten, as nMinDisplayedCombo.Drums does. Counting 1, 2, 3 beside the
      notes it competes with is noise.
    • Development readouts are off the play screen, behind --debug-hud where they belong.
    • Volume changes apply immediately. Hit sounds and previews each held a private copy set
      once at startup, so changing either needed the process restarted.
    • render.rs was five things in one file — 1508 lines holding the theme, the position
      model and four unrelated screens. It is 773 lines of playfield, and the rest are their own
      modules.

    Fixed

    • Two Return rows could land next to each other. The arcade's spacing rule counts forwards
      and says nothing about the step from the last one back round to the first; our list is a
      wheel, so a root of twenty-nine categories put one at 32 of 34.
    • The settings wheel dropped its top row. An entry crossed from one end to the other part
      way through the turn, so it travelled half the screen and vanished mid-flight. It crosses on
      the frame the key is pressed now.
    • The category list had no way out. On a drum that mattered: Back is not bound to a drum
      key, so a player using nothing but the drum could enter the library and never leave it.
    • --screenshot wedged the game on a fullscreen window — the first buffer swap after a
      capture never returned, and took the audio with it.
    • A display that would not report its refresh rate silently became 60. On a 144 Hz screen
      that paces every frame against a rhythm the display is not keeping. It says so now.

    Investigated and not adopted

    • Native Wayland. It works, one binary serves both backends, and no second thing would need
      maintaining. But frame pacing is indistinguishable from XWayland, and GLFW's Wayland backend
      does not implement window position, so raylib cannot tell which monitor it is on and paces to
      the wrong refresh rate. Kept as an opt-in wayland feature. See step 16.
    • A stutter under variable refresh could not be reproduced from inside the game, and the
      measurement that would settle it needs presentation timestamps that GLFW does not expose.
      Turning VRR off is the known cure; V-Sync measured as not being one.
    Downloads