fix(engine): Home tile glyphs picked from FiraMono's actual coverage

The bundled face is FiraMono-Medium (assets/fonts/main.ttf), and its
glyph table covers card suits (U+2660-2666) plus basic Geometric
Shapes (U+25xx) but not Dingbats / Misc Symbols. The previous round
of "BMP fallbacks" still picked from blocks FiraMono doesn't cover,
so 4 of 5 tiles continued to render as tofu.

Re-picked from ranges FiraMono actually has:
- Daily: U+25C6 (BLACK DIAMOND)
- Zen:   U+25CB (WHITE CIRCLE) — Zen enso
- Challenge: U+25B2 (BLACK UP-POINTING TRIANGLE) — climbing
- TimeAttack: U+25B6 (BLACK RIGHT-POINTING TRIANGLE) — play / FF
- Classic keeps U+2663 (BLACK CLUB SUIT)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-06 17:00:26 +00:00
parent 40d6e0ab17
commit c30b04ec72
+17 -14
View File
@@ -126,23 +126,26 @@ impl HomeMode {
/// readability rather than visual fidelity. Swap to `Image` nodes /// readability rather than visual fidelity. Swap to `Image` nodes
/// when art lands; the rest of the tile layout doesn't change. /// when art lands; the rest of the tile layout doesn't change.
/// ///
/// Picks are deliberately constrained to BMP / Dingbats codepoints /// Picks are constrained to **card suits** (U+2660-2666) and basic
/// (Unicode 1.x) so the project's system-default font fallback /// **Geometric Shapes** (U+25xx) the two ranges the bundled
/// renders every glyph. Earlier emoji choices (📅 🌸 ⚡ ⏱) showed /// FiraMono-Medium face actually covers. Earlier choices in
/// up as missing-glyph rectangles on Linux desktops without an /// Dingbats (★ ❀ ✦) and Misc Symbols (⌚) rendered as
/// emoji font in the system font stack. /// missing-glyph rectangles because FiraMono's coverage there is
/// minimal.
fn glyph(self) -> &'static str { fn glyph(self) -> &'static str {
match self { match self {
// Black club — card suit, every font has it. // Black club — card suit, the obvious solitaire mark.
HomeMode::Classic => "\u{2663}", HomeMode::Classic => "\u{2663}",
// Black star — Dingbats; reads as "today's special". // Black diamond — Geometric Shapes; reads as the day's gem.
HomeMode::Daily => "\u{2605}", HomeMode::Daily => "\u{25C6}",
// White florette — Dingbats; reads as a calm bloom for Zen. // White circle — Geometric Shapes; reads as the Zen enso.
HomeMode::Zen => "\u{2740}", HomeMode::Zen => "\u{25CB}",
// Black four-pointed star — Dingbats; reads as a hard target. // Black up-pointing triangle — Geometric Shapes; reads as
HomeMode::Challenge => "\u{2726}", // a mountain / a step up in difficulty.
// Watch face — Misc Symbols (Unicode 1.1), pre-emoji vintage. HomeMode::Challenge => "\u{25B2}",
HomeMode::TimeAttack => "\u{231A}", // Black right-pointing triangle — Geometric Shapes; the
// standard "play / fast-forward" mark for a timed run.
HomeMode::TimeAttack => "\u{25B6}",
} }
} }