fix(font): bundled font now actually renders, ship Inter Light, +CJK fallback
Plugin.cs:937 only pushed RegularFont when Config.FontsEnabled was true.
FontsAndColours.cs:50 forces FontsEnabled=false whenever UseHellionFont is
enabled (to hide the chooser UI), so the bundled-font path was silently
dead and the FFXIV Axis game-font took over. Exo 2 looked "almost right"
because it overlaps Axis on basic Latin, so the regression went unnoticed
for the entire v1.5.x series.
The fix routes RegularFont through draw whenever either FontsEnabled or
UseHellionFont is on. First-frame HITCH dropped from ~74 ms to ~20 ms
median (5-reload Linux/Wine sample 17.9-23.6 ms) as a side effect — the
v1.5.1 "too optimistic" defer-pattern hypothesis was actually a symptom
of this bug, not bad math.
Font-stack overhaul on top:
- Inter Light (Static 18pt-Light, 343 KB, SIL OFL 1.1) replaces Exo 2 as
the bundled font. Inter ships full Latin Extended-A/B, Greek polytonic
and Cyrillic Supplement coverage.
- NotoSansCjkRegular added as a third merge layer for Hangul,
Simplified-Chinese-specific Han glyphs, and CJK fallbacks the FFXIV
Japanese font does not ship.
- Two new ExtraGlyphRanges flags (LatinExtended, Greek) implemented via
AddChar pair lists in SetUpRanges.
- Settings.Apply auto-activates the matching ExtraGlyphRanges flag on
language change. Plugin.LoadAsync runs a one-shot migration that ORs
in the required flag for an already-selected language.
- ExtraGlyphRanges CollapsingHeader reachable regardless of
UseHellionFont (was hidden in the early-return branch).
- New WarningText below the language combo: FFXIV's chat engine only
fully supports EN/DE/FR/JA. Other scripts render in the HellionChat
UI but may garble in in-game chat input/send.
Localisation wave (originally a FR-only cycle):
- 24 selectable UI languages. LanguageOverride enum gains 10 new locales
plus 3 previously commented-out (Italian, Korean, Norwegian with ISO
code `nb` instead of `no`). All new values append to keep existing
user-config integer serialisation stable.
- Resource bundle split: HellionStrings.resx (24 locales, 328 keys) for
fork-added strings, Language.resx (24 locales, 456 keys) for the
ChatTwo-Crowdin-heritage. 4 post-sync Crowdin keys backfilled into
13 legacy locales with per-key AI-assisted comment marker.
- Em-dash sweep on EN source plus 18 translations. Russian and Ukrainian
keep their typographic norm.
Old HellionFont.ttf + HellionFont-OFL.txt removed; Inter-Light.ttf +
Inter-OFL.txt take their place. Configuration field UseHellionFont keeps
its name for backwards-compat. Migration v17 stays.
This commit is contained in:
@@ -11,6 +11,94 @@ releases as an overview and links to the release pages for details.
|
||||
|
||||
---
|
||||
|
||||
## Hellion Chat 1.5.3 — Localisation Wave + Bundled-Font Overhaul (2026-05-19)
|
||||
|
||||
Multi-language pass plus a long-standing first-frame HITCH lands as a side effect of a font-stack
|
||||
rewrite. The bundled UI font swaps from Exo 2 to Inter Light. HellionChat now ships strings and
|
||||
renderable glyph coverage for 24 languages.
|
||||
|
||||
### User-visible
|
||||
|
||||
- Twenty-four selectable UI languages: Catalan, Czech, Danish, Dutch, English, Finnish, French,
|
||||
German, Greek, Hungarian, Italian, Japanese, Korean, Norsk bokmål, Polish, Portuguese (Brazil),
|
||||
Portuguese (Portugal), Romanian, Russian, Spanish, Swedish, Turkish, Ukrainian, Simplified
|
||||
Chinese, Traditional Chinese. The dropdown sorts alphabetically by endonym, "None" pinned first.
|
||||
Non-native translations are AI-assisted and flagged for community native-speaker review via the
|
||||
Hellion Forge Discord.
|
||||
- Bundled **Inter Light** replaces Exo 2 as the in-plugin font. Wider European coverage (Latin
|
||||
Extended-A/B, Greek polytonic, Cyrillic Supplement) so Czech, Polish, Romanian, Turkish,
|
||||
Hungarian, Greek and Ukrainian render without manual font configuration. SIL OFL 1.1, 343 KB.
|
||||
- **NotoSansCjkRegular fallback** layer added as a merge-on-top so Hangul, Simplified-Chinese
|
||||
characters specific to the post-1956 reform, and other CJK glyphs the FFXIV Japanese game font
|
||||
does not ship now render correctly inside the HellionChat UI.
|
||||
- First-frame **HITCH dropped from ~74 ms** (the v1.5.2 baseline that has held since v1.4.x) to a
|
||||
**median of ~20 ms** (5-reload sample: 23.6 / 20.4 / 17.9 / 20.1 / 19.2 ms, Linux/Wine; Windows
|
||||
baseline pending Jin's verification per the cross-platform-pflicht). The bundled-font path
|
||||
silently fell back to the FFXIV Axis game font for the entire v1.5.x series because of an
|
||||
early-return in the draw loop. The fix that routes `RegularFont` through draw also lands the
|
||||
defer-pattern win the v1.5.1 cycle was reaching for.
|
||||
- **ExtraGlyphRanges activates automatically** when the user picks a language that needs a non-Latin
|
||||
script. Selecting Korean enables the Korean glyph range and rebuilds the atlas without a manual
|
||||
toggle in Fonts & Colours.
|
||||
- New **WarningText under the language dropdown** notes that FFXIV's own chat input only fully
|
||||
supports EN, DE, FR and JA character sets. Other languages render inside HellionChat but may
|
||||
garble when typed into in-game chat or sent as messages.
|
||||
|
||||
### Under the hood
|
||||
|
||||
- Three-layer font stack in `FontManager.BuildRegularFontHandle` and `BuildItalicFontHandle`:
|
||||
Inter Light (or the user-selected global font) as primary, FFXIV JapaneseFont as merge 1 for
|
||||
native FFXIV kana/kanji style, NotoSansCjkRegular as merge 2 for everything else CJK.
|
||||
- Two new `ExtraGlyphRanges` flags: `LatinExtended` (U+0100-U+024F) and `Greek` (U+0370-U+03FF +
|
||||
U+1F00-U+1FFF). Implemented as `builder.AddChar` pair lists in `SetUpRanges` (no managed-pointer
|
||||
pinning needed).
|
||||
- `LanguageOverride` enum gains ten locales (Catalan, Czech, Danish, Finnish, Hungarian,
|
||||
Norwegian, Polish, Portuguese (Portugal), Turkish, Ukrainian) plus three previously
|
||||
commented-out entries (Italian, Korean, Norwegian re-enabled with code `nb` instead of `no`).
|
||||
New values are appended to the enum to keep existing user-config integer serialisation stable.
|
||||
- **Crowdin gap closed:** four ChatTwo keys added after the last community sync
|
||||
(`Options_ColorSelectedInputChannelButton_Name` / `_Description`,
|
||||
`Options_HideInNewGamePlusMenu_Name` / `_Description`) are now backfilled into the thirteen
|
||||
legacy Crowdin locales with per-key AI-translated markers.
|
||||
- Plugin init runs a one-shot migration that ORs in the matching `ExtraGlyphRanges` flag based on
|
||||
the user's current `LanguageOverride`. An update from v1.5.2 picks up the new coverage without
|
||||
the user having to toggle the language twice.
|
||||
- `Plugin.cs:937` draw-path fixed: `RegularFont` is now pushed whenever **either** `FontsEnabled`
|
||||
**or** `UseHellionFont` is on. The previous `Config.FontsEnabled`-only check meant the bundled
|
||||
font path was silently dead whenever `FontsAndColours.cs:50` force-set `FontsEnabled = false` on
|
||||
the UseHellionFont-toggle. Source of the HITCH win.
|
||||
- `ExtraGlyphRanges` settings panel is now reachable in **all** UseHellionFont / FontsEnabled
|
||||
combinations. The bundled-font branch used to short-circuit past it.
|
||||
- **Resource bundle split:** fork-added strings live in `HellionStrings.resx` (24 locales, 328
|
||||
keys each) alongside the ChatTwo-Crowdin-heritage `Language.resx` (24 locales, 456 keys each).
|
||||
The `Language` siblings for the ten brand-new locales and Greek carry a Hellion Forge maintainer
|
||||
header that points reviewers at the Discord rather than the standalone-hosted Gitea.
|
||||
- **Em-dash sweep** across the EN source and 18 translations: in-prose em-dashes replaced with
|
||||
period or colon per the house style guide. Russian and Ukrainian keep their typographic norm
|
||||
where the em-dash is orthographically required (subject-predicate separator).
|
||||
- **Bundled font asset rotation:** `HellionFont.ttf` (Exo 2) plus its OFL notice removed from
|
||||
`Resources/`. `Inter-Light.ttf` plus `Inter-OFL.txt` take their place. `FontManager`
|
||||
references rename to `BundledFontBytes` / `TryGetBundledFontBytes()` for clarity (config field
|
||||
`UseHellionFont` keeps its name so existing user configs deserialize cleanly).
|
||||
|
||||
### Migration
|
||||
|
||||
- Migration v17 stays (no schema bump).
|
||||
- Existing `UseHellionFont = true` users transition transparently from Exo 2 to Inter Light on
|
||||
first reload.
|
||||
- Existing users with `LanguageOverride != None` get their matching `ExtraGlyphRanges` flag set
|
||||
on the first plugin init after the v1.5.3 update (Plugin.cs LoadAsync migration step).
|
||||
|
||||
### Reserved for follow-up cycles
|
||||
|
||||
- Native-speaker review pass for AI-assisted translations in the 13 legacy Crowdin locales (ca,
|
||||
es, fr, it, ja, ko, nl, pt-BR, ro, ru, sv, zh-Hans, zh-Hant) — corrections via the Hellion
|
||||
Forge Discord.
|
||||
|
||||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||||
|
||||
---
|
||||
|
||||
## Hellion Chat 1.5.2 — First-Run Wizard Rework (2026-05-18)
|
||||
|
||||
UX patch. The single-page first-run wizard becomes a four-step staged-commit flow, the privacy
|
||||
|
||||
+36
-6
@@ -10,13 +10,43 @@ be a poor fit for the plugin's privacy-first scope during brainstorming.
|
||||
|
||||
---
|
||||
|
||||
## Next Cycle (v1.5.3)
|
||||
## Next Cycle
|
||||
|
||||
**French localisation.** Strings from `Resources/HellionStrings.resx` get a FR translation pass
|
||||
(DeepL first draft), then Hezcal native-speaker review before release. After that, the Plugin
|
||||
Integrations Wave 2-6 (Context-Menu, NotificationMaster, Moodles, ExtraChat, XIVIM Quick-DM) and the
|
||||
UiBuilder first-frame HITCH investigation that v1.5.1 surfaced are queued behind it, alongside the
|
||||
Wine/Linux scroll-rubber-band spike at the tail.
|
||||
**Plugin Integrations Wave 2-6** (Context-Menu, NotificationMaster, Moodles, ExtraChat, XIVIM
|
||||
Quick-DM) is the next planned scope. The UiBuilder first-frame HITCH investigation that v1.5.1
|
||||
queued is now closed as a side effect of v1.5.3's font-stack fix — HITCH dropped from ~74 ms into
|
||||
the 15-25 ms range. The Wine/Linux scroll-rubber-band spike remains at the tail.
|
||||
|
||||
Native-speaker review of the AI-assisted v1.5.3 translations (13 legacy Crowdin locales) runs in
|
||||
parallel as a continuous correction pass, gathered via the Hellion Forge Discord.
|
||||
|
||||
---
|
||||
|
||||
## v1.5.3 — Localisation Wave + Bundled-Font Overhaul (released 2026-05-19)
|
||||
|
||||
Twenty-four selectable UI languages: from FR-only as the original plan scope, the cycle expanded to
|
||||
cover Catalan, Czech, Danish, Finnish, Greek, Hungarian, Italian, Korean, Norwegian, Polish,
|
||||
Portuguese (Portugal), Turkish and Ukrainian alongside the existing Crowdin-heritage locales, all
|
||||
AI-translated and flagged for community review. Bundled font swaps from Exo 2 to **Inter Light**
|
||||
for wider European glyph coverage (Latin Extended-A/B, Greek polytonic, Cyrillic Supplement);
|
||||
**NotoSansCjkRegular** joins as a third merge layer so Hangul and Simplified-Chinese-specific Han
|
||||
glyphs render correctly inside the HellionChat UI.
|
||||
|
||||
First-frame HITCH dropped from **~74 ms to a median of ~20 ms** (5-reload sample 17.9-23.6 ms,
|
||||
Linux/Wine) as a side effect: the bundled-font path was silently falling back to the FFXIV Axis
|
||||
game font for the entire v1.5.x series because of an early-return in `Plugin.cs:937`. The fix
|
||||
routes `RegularFont` through draw whenever either `FontsEnabled` or `UseHellionFont` is on, and
|
||||
lands the defer-pattern win v1.5.1 was reaching for.
|
||||
|
||||
`ExtraGlyphRanges` auto-activates the matching flag on language change. Two new flags
|
||||
(`LatinExtended`, `Greek`) join the existing set. Plugin init runs a one-shot migration that ORs
|
||||
the required flag into the saved config for users updating from v1.5.2 with a non-default language
|
||||
already selected. A WarningText under the language dropdown notes that FFXIV's own chat input only
|
||||
fully supports EN/DE/FR/JA — other languages may garble when typed into in-game chat.
|
||||
|
||||
Migration v17 stays. `LanguageOverride` enum grows by ten locales plus three previously
|
||||
commented-out (Italian, Korean, Norwegian with code `nb`); all new values append to keep existing
|
||||
user-config integer serialisation stable.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user