• v0.9.2 725bf54bbe

    v0.9.2 Stable

    joe released this 2026-08-21 23:18:59 +01:00 | 47 commits to main since this release

    Windows gets a build, and text across the game gets read against the colour behind it rather
    than assumed to be legible on it. A third of this library's categories were drawing labels
    their own bar could not carry.

    Added

    • A Windows build, shipped with the release. scripts/release.sh cross-compiles
      taiko.exe with mingw-w64 and attaches it unless told --no-windows; nothing ships
      beside it, because every DLL it imports is a Windows system one.
      scripts/make-pack.sh --windows builds a playable folder for carrying across.

      Two things had to be fixed for it to be worth shipping. Config and scores now go to
      %APPDATA% and %LOCALAPPDATA%.
      Windows does not set HOME, so the path resolver fell
      back to "." and wrote them into whatever directory the game was launched from — a game
      started from the desktop and one started from its own folder kept two different sets of
      scores, and neither was anywhere a player would look. XDG_CONFIG_HOME and
      XDG_DATA_HOME still win where they are set, which is what makes running the Windows
      build under Wine behave the way its user expects.

      And fonts are found on Windows, in C:\Windows\Fonts and the per-user directory
      beside it, rather than through a fontconfig that is not there. That needed font
      collections to work: Windows keeps its Japanese faces almost exclusively as .ttc —
      YuGothR.ttc, meiryo.ttc, msgothic.ttc — and a collection handed to a rasteriser
      whole silently renders nothing, so they had been excluded outright and every Japanese
      title would have been a box. The new sfnt module takes one face out of a collection and
      repacks it as a font that loads. Collections count on Linux too now, which is worth two
      more glyphs of coverage on this library and makes font.path accept a .ttc instead of
      refusing it.

      Confirmed booting and reaching charts on Windows, on someone else's machine — so
      everything up to starting a song is known to work. The two differences above were verified
      under Wine. What nobody has measured is audio latency, which for a rhythm game is the part
      that matters, so calibrate before believing the timing.

    • Songs whose every chart is a two-player one can be played. Aiai had four courses,
      all STYLE:Double, so the browser offered no difficulties and Enter on it did nothing at
      all — indistinguishable from a dead key. Five of this corpus's 3578 charts are like it.
      The P1 side of a Double course is now offered for any difficulty that has no Single chart
      of its own, which is what docs/v1-scope.md always said v1 would do. It never stands
      beside the Single chart it belongs to, because that would be the same difficulty offered
      twice. The card says P1 SIDE: the chart plays fine alone but was written to interlock
      with a part that is not there, and a player who knows that will read a sparse stretch as
      the chart rather than as the game dropping notes.

    Fixed

    • The difficulty cards' level star was a tofu box. The font atlas is built from the
      characters the library uses plus a short list of the ones the game draws itself, and ★
      was on neither. Every card on the picker showed a missing-glyph box beside its level.

    • Text on the difficulty cards, chosen by contrast rather than by habit. Every card drew
      cream over a dark outline whatever colour the card was, which suited two of the seven: on
      Normal's gold it measured 2.6:1 and on Hard's green 2.5:1, against the 4.5:1 small text
      wants and the 3:1 floor for large. Each card now takes whichever of cream and ink measures
      better against it — name, level and score together, so a card is never two schemes at once.
      The song title and subtitle on the plaque behind them go the same way, cream on that orange
      being 2.9:1 to ink's 5.3:1. The rule lives in theme::text_on and the results chips, which
      had their own approximation of it, now share it.

    • Bar text on the song wheel, measured the same way. A third of this library's
      categories were drawing text that could not be read on their own bar. Two causes. The
      automatic choice between white and near-black was a threshold on a weighted average of
      the raw bytes, set at 0.62 — which climbs far more slowly through the mid-tones than the
      eye does, so a whole band of colours got white when they could not carry it; Pop's
      #42C0D3 gave white 2.2:1 where near-black gives 8.3:1. And a box's stated FORECOLOR
      was used whatever it measured: twelve of the fourteen boxes that state one chose a colour
      that cannot be read on the colour they state beside it, Pop asking for #004D68 on
      #20A0BA at 3.0:1. A stated colour is now used when it clears 4.5:1 on its own box and
      replaced when it does not. All sixty coloured categories now clear 4.5:1, the lowest at
      4.53. The main menu's Play row flips to dark ink by the same measurement, which is what
      the Easy card beside it already does with the same red.

    • The outermost bars no longer have their text washed to grey. The wheel runs off the
      top and bottom of the screen, and the corner furniture was given ground by a wash across
      the outer 17% of it. That wash lay over the bars in the band as well: a dark title on a
      mint bar came out brown, which was worse than the problem it solved. The wash now goes
      behind the wheel, where it still softens the edges of the screen, and the breadcrumb,
      counter and prompts each get a plate the size of their own words — the same brown the
      Return bars wear, since they are the same kind of thing. Song select, the main menu and
      the settings menus all change; Bindings at the foot of the settings list was the worst
      of them.

    • Sub-lines on a bar are no longer permanently half-transparent. The description under a
      menu row, a category's explanation, a song's subtitle and credit, and the song count in a
      bar's corner each carried an alpha ceiling below 1 — focus * 0.75 and the like — so that
      they stayed subordinate to the title even with the bar fully open. Alpha is a blend
      towards whatever is behind, and behind a bar's text is the bar, so what that produced was
      ink a quarter of the way into a saturated colour: not a quieter version of the text, a
      grey one. The smaller size is what makes them subordinate; they now reach full opacity,
      and focus is left to fade them in as the bar opens.

    Downloads