fix(font): bundled font now actually renders, ship Inter Light, +CJK fallback
Security / scan (push) Successful in 19s
Build / Build (Release) (push) Successful in 29s
Forge Announce / Post changelog to Hellion Forge (push) Successful in 5s
Release / Build and attach release ZIP (push) Successful in 49s

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:
2026-05-19 17:24:17 +02:00
parent 38586db9d8
commit 35e8d3a7fe
68 changed files with 3435 additions and 293 deletions
@@ -385,10 +385,10 @@
<value>插件視窗的不透明程度。數值越低,遊戲畫面越能透出;表單欄位和對話框則保持完全不透明且清晰可讀。</value>
</data>
<data name="Theme_UseHellionFont_Name" xml:space="preserve">
<value>使用內建 Hellion 字型(Exo 2</value>
<value>使用內建 Inter Light</value>
</data>
<data name="Theme_UseHellionFont_Description" xml:space="preserve">
<value>以 Exo 2SIL Open Font License 1.1渲染聊天和介面,此字型隨插件一提供。停用後將退回至設定 → 字型選擇的字型。</value>
<value>以 Inter Light (SIL Open Font License 1.1) 渲染聊天和介面,隨插件一提供。停用以回退到設定 → 字型選擇的字型。</value>
</data>
<data name="About_Maintainer_Heading" xml:space="preserve">
@@ -1030,4 +1030,8 @@
<data name="DbViewer_FullTextToggle_Hint_PhraseMode" xml:space="preserve">
<value>搜尋完整的詞組。多字詞查詢只有在這些字詞依序相鄰出現時才會比對成功。若要使用原始 FTS5 MATCH 語法,請自行在搜尋詞外加上雙引號。</value>
</data>
<data name="Settings_Language_FFXIVCoverage_Warning" xml:space="preserve">
<value>HellionChat 顯示全部 24 種語言,但 FFXIV 的聊天輸入僅完全支援 EN、DE、FR 和 JA。其他文字在遊戲內聊天輸入或作為訊息傳送時可能顯示為亂碼。</value>
<comment>AI-assisted machine translation. Pending native-speaker review.</comment>
</data>
</root>