diff --git a/.github/forge-posts/v1.5.6.md b/.github/forge-posts/v1.5.6.md new file mode 100644 index 0000000..47d2348 --- /dev/null +++ b/.github/forge-posts/v1.5.6.md @@ -0,0 +1,10 @@ +--- +subtitle: "Backlog-Sync Filter und Notifications" +versionsnatur: "Bundle-Patch (Hälfte 2 von 2)" +--- +- **Regex-Filter pro Tab.** Ein Tab kann jetzt zusätzlich zum Kanal-Filter einen regulären Ausdruck tragen und damit gezielt nur Nachrichten mit einem bestimmten Schlüsselwort sammeln. Einstellbar in den Tab-Einstellungen. +- **Warnung vor Plugin-Zeichen.** Enthält eine zu sendende Nachricht Symbole, die nur mit HellionChat oder einem ähnlichen Plugin korrekt erscheinen, warnt das Plugin vorab. Ein zweites Enter sendet trotzdem. Abschaltbar in den Einstellungen unter Chat. +- **Namens-Darstellung.** Im Chat-Log lässt sich jetzt steuern, wann der Heimatwelt-Name an einen Spielernamen angehängt wird und ob der volle Name, nur der Vorname oder Initialen erscheinen. +- **Getrennte Deckkraft.** Das Haupt-Chat-Fenster hat jetzt einen eigenen Deckkraft-Wert für den nicht fokussierten Zustand und kann so beim Spielen dezent in den Hintergrund treten. +- **Lautstärke-Regler.** Die drei mitgelieferten Custom-Sounds haben einen Lautstärke-Schieberegler bekommen, in den Einstellungen unter Allgemein. +- Fünf Backlog-Items, Schema-Bump auf v19 (rein additiv). Zweite Hälfte des zweiteiligen Backlog-Cleanup-Pass. Drei Items wurden gestrichen (Details in den Cycle-Notes). diff --git a/HellionChat/HellionChat.csproj b/HellionChat/HellionChat.csproj index 4aede89..208b462 100644 --- a/HellionChat/HellionChat.csproj +++ b/HellionChat/HellionChat.csproj @@ -1,7 +1,7 @@ - 1.5.5 + 1.5.6 enable enable diff --git a/HellionChat/HellionChat.yaml b/HellionChat/HellionChat.yaml index d2d8834..6dbac6b 100755 --- a/HellionChat/HellionChat.yaml +++ b/HellionChat/HellionChat.yaml @@ -35,6 +35,34 @@ tags: - Replacement - Privacy changelog: |- + **v1.5.6 — Upstream-Sync Filter-Notification-Polish (2026-05-22)** + + A backlog-sync cycle: filter and notification items plus polish. + Half two of a two-part backlog cleanup pass. + + User-visible: + + - Tabs can carry an optional regular-expression filter applied on + top of the channel filter, so a tab can collect only messages + that contain a given keyword. Set it in the tab settings. + - Before sending a message that contains plugin-only symbols + (which other players may see as empty boxes), HellionChat now + shows a warning; press Enter again to send anyway. Toggle in + Settings -> Chat. + - Sender names can be reformatted in the chat log: choose when the + home world is appended and whether the full name, first name + only, or initials are shown. Settings -> Chat. + - The main chat window now has a separate opacity value for when + it is not focused, so it can fade back while you play. + - The three bundled custom notification sounds gained a volume + slider in Settings -> General. + + Schema bumped to v19 (additive fields only, no data migration). + + Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2). + + --- + **v1.5.5 — Upstream-Sync Tab-Features (2026-05-21)** A backlog-sync cycle: inherited tab-feature items plus a new fox @@ -163,54 +191,4 @@ changelog: |- --- - **v1.5.2 — First-Run Wizard Rework (2026-05-18)** - - UX patch. The first-run wizard becomes a four-step flow with a - new Roleplay privacy profile and a power-settings step that - surfaces previously-hidden defaults. Existing v1.5.1 users see - the new wizard once on first v1.5.2 boot. - - What changes user-visible: - - - Wizard navigation: Welcome → Privacy profile → Power settings - → Done. Forge-Bronze pagination dots, dedicated stage for the - power settings so they are no longer buried in Settings. - - Fourth privacy profile "Roleplay": Privacy-First plus Say and - both emote types, with a 30-day window for Say and a 90-day - window for emotes. Shout, Yell and Novice Network stay out. - - Privacy picker becomes a 2x2 grid. Casual stays the - recommended option with a ★ marker. - - Power-settings step covers Load Previous Session, Filter - Include Previous Sessions, Auto-Tell-Tabs History Preload, - Compact Density, Prettier Timestamps and a built-in theme - picker. All six map to existing Configuration fields — no new - settings introduced. - - Staged commit: the wizard only writes to Config on the Finish - step. Decide-later or X-close at any point leaves the existing - config untouched. - - Inline test hint on the done step: "type /tell - into chat" surfaces the auto-tell-tab spawn mechanism. - - Window starts at 720x480 (was 900x560) and can shrink to - 600x400; Step 1 keeps the fox banner in a folded TreeNode so - the onboarding copy stays primary. - - Existing users get the new wizard surfaced once on first boot - after the update via the new WizardLastShownVersion config - field. Future cycles bump the constant only when the wizard - itself changes shape. - - Under the hood: - - - WizardStateSmokeStep added to /xlperf alongside the FontManager - and ThemeSwitch self-tests. - - Twelve new pure-helper xUnit Facts in the Build Suite cover - all four privacy profile sets and their retention overrides. - - Migration v17 stays (no schema bump). The Configuration grows - one optional string field (WizardLastShownVersion) which - defaults to empty for legacy users. - - Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2). - - --- - Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases diff --git a/README.md b/README.md index 77b8b05..9f9f12c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml/badge.svg?branch=main)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml) [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](LICENSE) -[![Latest release](https://img.shields.io/badge/release-v1.5.5-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest) +[![Latest release](https://img.shields.io/badge/release-v1.5.6-brightgreen)](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest) [![Dalamud API](https://img.shields.io/badge/Dalamud-API_15-purple)](https://github.com/goatcorp/Dalamud) [![.NET](https://img.shields.io/badge/.NET-10.0-512BD4)](https://dotnet.microsoft.com/) [![FFXIV](https://img.shields.io/badge/FFXIV-Dawntrail-c3a37f)](https://www.finalfantasyxiv.com/) @@ -11,7 +11,7 @@ Hellion Forge

-**Version 1.5.5** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on +**Version 1.5.6** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2). Hellion Chat is a privacy-first plugin built on the Chat 2 foundation. The majority of the engine @@ -299,16 +299,16 @@ An optional submission to the Dalamud main plugin repo (in addition to the custo ## Project Status -**Version 1.5.5** — Upstream-Sync Tab-Features. Failed tells now raise a warning toast -when a message could not be delivered (recipient offline, in an instance, or blocking -you). Per-tab notification sounds let each tab play one of the 16 game chat sounds or -three bundled Hellion sounds when a message arrives on a background tab, with a -preview button. The tab rename field in the right-click menu auto-focuses on open and -accepts up to 512 characters. A jump-to-latest button appears in the chat log header -while scrolled up from the live end. Map-flag and item-link insertion is available from -the chat input right-click menu. The Hellion Forge fox banner in the first-run wizard -and the Information tab is now a real image. Schema bumped to v18, additive fields -only, no data migration. +**Version 1.5.6** — Upstream-Sync Filter-Notification-Polish. A backlog-sync cycle, +half two of a two-part cleanup pass. Tabs can carry an optional regular-expression +filter on top of the channel filter to collect only messages matching a keyword. A +pre-send warning fires when a message contains plugin-only symbols other players may +see as empty boxes. Sender names in the chat log are now configurable: choose when the +home world is appended and whether the full name, first name only, or initials are +shown. The main chat window has a separate opacity value for when it is not focused, so +it can fade back while you play. The three bundled custom notification sounds gained a +volume slider in Settings. Schema bumped to v19, additive fields only, no data +migration. --- diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 5f0b965..9596a5f 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -11,6 +11,18 @@ releases as an overview and links to the release pages for details. --- +## Hellion Chat 1.5.6 — Upstream-Sync Filter-Notification-Polish (2026-05-22) + +A backlog-sync cycle, half two of a two-part cleanup pass. Five inherited items: +an optional per-tab regex filter, a pre-send warning for plugin-only symbols, +sender name display options (world suffix and name form), a separate opacity +value for the unfocused chat window, and a volume slider for the bundled custom +sounds. Schema bumped to v19 — additive fields only, no data migration. Three +backlog items (Chat Clear on Name Change, Auto-Detect Duties, Kick from Novice +Network) were dropped — see the cycle notes. + +--- + ## Hellion Chat 1.5.5 — Upstream-Sync Tab-Features (2026-05-21) A backlog-sync cycle. Inherited tab items: a failed-tell warning toast, per-tab diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index fbd3e09..e4d7710 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -12,16 +12,25 @@ be a poor fit for the plugin's privacy-first scope during brainstorming. ## Next Cycle -**v1.5.5b — Upstream-Sync Filter/Notification/Polish** is the next planned scope: the second half -of the backlog-sync wave, covering filter improvements, notification refinements, and UI polish -items that did not fit the v1.5.5 bundle. Plugin Integrations Wave 2-6 (Context-Menu, -NotificationMaster, Moodles, ExtraChat, XIVIM Quick-DM) follows. +**v1.5.7 — Ad-Block / Spam-Filter** is the next planned scope: the hybrid ad-block and +spam-filter cycle, combining a lightweight built-in filter with optional `NoSoliciting` +IPC integration. Plugin Integrations Wave 2-6 (Context-Menu, NotificationMaster, Moodles, +ExtraChat, XIVIM Quick-DM) follows. 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.6 — Upstream-Sync Filter-Notification-Polish (released 2026-05-22) + +A backlog-sync cycle: an optional per-tab regex filter, a pre-send warning for +plugin-only symbols, sender name display options, a separate unfocused-window +opacity, and a custom-sound volume slider. Half two of a two-part backlog +cleanup pass. Schema bumped to v19, additive only. + +--- + ## v1.5.5 — Upstream-Sync Tab-Features (released 2026-05-21) A backlog-sync cycle of inherited tab-feature items. Failed tells now raise a warning toast when a @@ -391,7 +400,7 @@ deferred in favour of the theme engine — both items live on in the mid-term bl - **Regex Tab Routing** — route plugin output spam into dedicated tabs, auto-sort tells from specific people. Clearly scoped against ad-block: routing sorts into views, blocking hides globally. -- **Auto-Detect Duties** — tab switch on duty start via condition flag. +- ~~**Auto-Detect Duties**~~ — dropped in v1.5.6 cycle: the effort (a render-gate in the tab-bar / tab-sidebar draw plus resolving what happens to the active tab when it is hidden) outweighs the practical benefit. Removed from backlog. - **UX Bundle** — vertical tab bar as a layout option, Shift+Mousewheel to scroll tab headers without activating them, global hotkey to close the active tab. - **Configure Tab Title** — configurable tab title format (name / name + abbreviated world / full @@ -404,10 +413,9 @@ deferred in favour of the theme engine — both items live on in the mid-term bl with the current channel colour. - **Plugin-Disclosure Pre-Send Filter** — configurable word/regex list blocks sending with a pre-send confirmation. Protects against accidentally mentioning plugins in public channels. -- **Chat Clear on Name Change** — on character name change, migrate or wipe local history; default - is wipe for maximum privacy. +- ~~**Chat Clear on Name Change**~~ — dropped in v1.5.6 cycle: would require tracking the character against a stored prior state, which conflicts with the privacy-plugin identity; the desired effect already exists because HellionChat keeps history per character identity, so there is no functional gap. Removed from backlog. - **Hide Plugin Window on NG+ Screen** — extend hide logic to cover additional addon names. -- **Kick from Novice Network** — mentor niche; context menu entry with confirmation. +- ~~**Kick from Novice Network**~~ — dropped in v1.5.6 cycle: no accessible IPC surface found for Novice Network membership check or kick action; not feasible without a risky memory scan. Removed from backlog. - **Text-to-Speech for /tell** — incoming tells via TTS, optionally per sender, with channel filter and mute-in-combat. Low priority. diff --git a/repo.json b/repo.json index 68a6f5c..7583092 100644 --- a/repo.json +++ b/repo.json @@ -3,7 +3,7 @@ "Author": "Jon Kazama (Hellion Forge)", "Name": "Hellion Chat", "InternalName": "HellionChat", - "AssemblyVersion": "1.5.5.0", + "AssemblyVersion": "1.5.6.0", "Description": "A Hellion Forge plugin — privacy-focused chat replacement for FINAL FANTASY XIV, built for EU, US and JP data rules.\n\nBy default only your own conversations are stored. Public chat, NPC dialogue, system messages and battle logs are discarded at the storage layer unless you opt in. Retention windows are configurable per channel, history can be wiped retroactively, and everything can be exported on demand.\n\nFeatures:\n- Channel whitelist with a Privacy-First default\n- Per-channel retention with a daily background sweep\n- Retroactive cleanup with preview and Ctrl+Shift confirm\n- Export to Markdown, JSON or CSV\n- First-run wizard with four profiles: Privacy-First, Casual, Roleplay, Full History\n- Multi-language UI (24 locales) with live language switching\n- Own config and database — no shared state with other plugins\n\nBased on Chat 2 by Infi and Anna (EUPL-1.2).\nSupport: https://discord.gg/X9V7Kcv5gR", "ApplicableVersion": "any", "RepoUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat", @@ -20,12 +20,12 @@ "CanUnloadAsync": false, "LoadPriority": 0, "Punchline": "A Hellion Forge plugin. Privacy-first chat for FFXIV, built to stay out of your way.", - "Changelog": "**v1.5.5 — Upstream-Sync Tab-Features (2026-05-21)**\n\nA backlog-sync cycle: inherited tab-feature items plus a new fox\nbanner image and custom notification sounds.\n\nUser-visible:\n\n- Failed tells now raise a warning toast when a message you sent\n could not be delivered (recipient offline, in an instance, or\n blocking you). Toggle in Settings, Chat tab.\n- Per-tab notification sound: each tab can play a sound when a\n message arrives while you are looking at a different tab. Pick\n one of the 16 game chat sounds or one of three bundled Hellion\n sounds, with a preview button to hear it. Off by default,\n respects the global sound toggle.\n- The tab rename field in the right-click menu now focuses\n itself when the menu opens and accepts up to 512 characters,\n matching the settings-tab rename.\n- A jump-to-latest button appears in the chat log header while\n you are scrolled up from the live end.\n- Map flags and item links can be inserted into the chat input\n from its right-click menu.\n- The Hellion Forge fox banner in the first-run wizard and the\n Information tab is now a real image instead of ASCII art.\n\nSchema bumped to v18 (additive fields only, no data migration).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.4 — Polish and Motion (2026-05-20)**\n\nA polish cycle: smoother theme switching, faster theme and tab\naccess, and subtle hover motion. Three P3 items plus an\naccessibility toggle.\n\nUser-visible:\n\n- Theme switches now crossfade smoothly over ~300 ms across every\n Hellion-rendered surface — sidebar, title, buttons, tabs,\n scrollbar, separators. The window background snaps deliberately\n so the per-window opacity override from Dalamud's pinning menu\n stays untouched.\n- New header quick-picker: a palette button left of the cog opens\n a compact popup with two sections — every built-in and custom\n theme, and every tab. The active entry carries a check glyph;\n clicking another switches without closing the popup.\n- Sidebar icons ease their opacity on hover, and card-mode message\n borders highlight per tab while the cursor is over their rows.\n Framerate-independent, so a stalled Wine frame cannot overshoot\n the animation.\n- New \"Reduce motion\" toggle in Theme & Layout disables the\n crossfade, the hover animations and the unread-tab pulse for\n users who prefer a static UI.\n\nUnder the hood:\n\n- Two pure-helper lerp paths (ThemeAbgrCacheLerp, FrameLerp) with\n xUnit coverage in the Build Suite, plus a ColourUtil.ApplyAlpha\n alpha modulator. Two new /xlperf self-test steps pin the\n crossfade and quick-picker contracts.\n\nNo schema bump, no migration. Migration v17 stays.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.3 — Localisation Wave + Bundled-Font Overhaul (2026-05-19)**\n\nMulti-language pass plus a long-standing first-frame HITCH lands\nas a side effect of a font-stack rewrite.\n\nUser-visible:\n\n- 24 selectable UI languages (was 2). Catalan, Czech, Danish,\n Dutch, English, Finnish, French, German, Greek, Hungarian,\n Italian, Japanese, Korean, Norsk bokmål, Polish, Portuguese\n (BR + PT), Romanian, Russian, Spanish, Swedish, Turkish,\n Ukrainian, Simplified + Traditional Chinese. Sorted by endonym,\n \"None\" pinned first. Non-native locales are AI-assisted and\n flagged for native-speaker review via the Forge Discord.\n- Bundled Inter Light replaces Exo 2 (SIL OFL 1.1, 343 KB). The\n Inter font ships Latin Extended-A/B, Greek polytonic and\n Cyrillic Supplement coverage; NotoSansCjkRegular joins as a\n third merge layer for Hangul and Simplified-Han glyphs the\n FFXIV Japanese game font does not ship.\n- First-frame HITCH dropped from ~74 ms (v1.5.2 baseline that\n held since v1.4.x) to a median of ~20 ms (5-reload sample\n 17.9-23.6 ms, Linux/Wine). The bundled-font path silently\n fell back to the FFXIV Axis font for the entire v1.5.x series\n because of an early-return in the draw loop. The fix that\n routes RegularFont through draw also lands the defer-pattern\n win the v1.5.1 cycle was reaching for.\n- ExtraGlyphRanges auto-activates on language change. Korean,\n ChineseFull and the two new flags (LatinExtended, Greek) toggle\n on without a manual visit to Fonts and Colours.\n- New WarningText under the language dropdown notes FFXIV's\n chat input only fully supports EN/DE/FR/JA character sets.\n Other languages render in HellionChat but may garble when\n typed into in-game chat.\n\nUnder the hood:\n\n- Three-layer font stack: Inter Light primary, FFXIV\n JapaneseFont merge 1 for kana/kanji style, NotoSansCjkRegular\n merge 2 for everything else CJK.\n- LanguageOverride enum gains ten locales plus three previously\n commented out (Italian, Korean, Norwegian as `nb`). New\n values append to the enum so existing config integers stay\n stable across update.\n- Crowdin gap closed: four post-sync ChatTwo keys backfilled\n into 13 legacy locales with per-key AI markers.\n- Plugin.LoadAsync runs a one-shot migration that ORs in the\n matching ExtraGlyphRanges flag for users already on a\n non-default language. Settings.Apply auto-activates on\n change going forward.\n- Em-dash sweep across the EN source and 18 translations to the\n house style. Russian and Ukrainian keep the typographic norm.\n\nMigration v17 stays. UseHellionFont users transition from Exo 2\nto Inter Light transparently on first reload.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.2 — First-Run Wizard Rework (2026-05-18)**\n\nUX patch. The first-run wizard becomes a four-step flow with a\nnew Roleplay privacy profile and a power-settings step that\nsurfaces previously-hidden defaults. Existing v1.5.1 users see\nthe new wizard once on first v1.5.2 boot.\n\nWhat changes user-visible:\n\n- Wizard navigation: Welcome → Privacy profile → Power settings\n → Done. Forge-Bronze pagination dots, dedicated stage for the\n power settings so they are no longer buried in Settings.\n- Fourth privacy profile \"Roleplay\": Privacy-First plus Say and\n both emote types, with a 30-day window for Say and a 90-day\n window for emotes. Shout, Yell and Novice Network stay out.\n- Privacy picker becomes a 2x2 grid. Casual stays the\n recommended option with a ★ marker.\n- Power-settings step covers Load Previous Session, Filter\n Include Previous Sessions, Auto-Tell-Tabs History Preload,\n Compact Density, Prettier Timestamps and a built-in theme\n picker. All six map to existing Configuration fields — no new\n settings introduced.\n- Staged commit: the wizard only writes to Config on the Finish\n step. Decide-later or X-close at any point leaves the existing\n config untouched.\n- Inline test hint on the done step: \"type /tell \n into chat\" surfaces the auto-tell-tab spawn mechanism.\n- Window starts at 720x480 (was 900x560) and can shrink to\n 600x400; Step 1 keeps the fox banner in a folded TreeNode so\n the onboarding copy stays primary.\n- Existing users get the new wizard surfaced once on first boot\n after the update via the new WizardLastShownVersion config\n field. Future cycles bump the constant only when the wizard\n itself changes shape.\n\nUnder the hood:\n\n- WizardStateSmokeStep added to /xlperf alongside the FontManager\n and ThemeSwitch self-tests.\n- Twelve new pure-helper xUnit Facts in the Build Suite cover\n all four privacy profile sets and their retention overrides.\n\nMigration v17 stays (no schema bump). The Configuration grows\none optional string field (WizardLastShownVersion) which\ndefaults to empty for legacy users.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\nFull history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases", + "Changelog": "**v1.5.6 — Upstream-Sync Filter-Notification-Polish (2026-05-22)**\n\nA backlog-sync cycle: filter and notification items plus polish.\nHalf two of a two-part backlog cleanup pass.\n\nUser-visible:\n\n- Tabs can carry an optional regular-expression filter applied on\n top of the channel filter, so a tab can collect only messages\n that contain a given keyword. Set it in the tab settings.\n- Before sending a message that contains plugin-only symbols\n (which other players may see as empty boxes), HellionChat now\n shows a warning; press Enter again to send anyway. Toggle in\n Settings -> Chat.\n- Sender names can be reformatted in the chat log: choose when the\n home world is appended and whether the full name, first name\n only, or initials are shown. Settings -> Chat.\n- The main chat window now has a separate opacity value for when\n it is not focused, so it can fade back while you play.\n- The three bundled custom notification sounds gained a volume\n slider in Settings -> General.\n\nSchema bumped to v19 (additive fields only, no data migration).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.5 — Upstream-Sync Tab-Features (2026-05-21)**\n\nA backlog-sync cycle: inherited tab-feature items plus a new fox\nbanner image and custom notification sounds.\n\nUser-visible:\n\n- Failed tells now raise a warning toast when a message you sent\n could not be delivered (recipient offline, in an instance, or\n blocking you). Toggle in Settings, Chat tab.\n- Per-tab notification sound: each tab can play a sound when a\n message arrives while you are looking at a different tab. Pick\n one of the 16 game chat sounds or one of three bundled Hellion\n sounds, with a preview button to hear it. Off by default,\n respects the global sound toggle.\n- The tab rename field in the right-click menu now focuses\n itself when the menu opens and accepts up to 512 characters,\n matching the settings-tab rename.\n- A jump-to-latest button appears in the chat log header while\n you are scrolled up from the live end.\n- Map flags and item links can be inserted into the chat input\n from its right-click menu.\n- The Hellion Forge fox banner in the first-run wizard and the\n Information tab is now a real image instead of ASCII art.\n\nSchema bumped to v18 (additive fields only, no data migration).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.4 — Polish and Motion (2026-05-20)**\n\nA polish cycle: smoother theme switching, faster theme and tab\naccess, and subtle hover motion. Three P3 items plus an\naccessibility toggle.\n\nUser-visible:\n\n- Theme switches now crossfade smoothly over ~300 ms across every\n Hellion-rendered surface — sidebar, title, buttons, tabs,\n scrollbar, separators. The window background snaps deliberately\n so the per-window opacity override from Dalamud's pinning menu\n stays untouched.\n- New header quick-picker: a palette button left of the cog opens\n a compact popup with two sections — every built-in and custom\n theme, and every tab. The active entry carries a check glyph;\n clicking another switches without closing the popup.\n- Sidebar icons ease their opacity on hover, and card-mode message\n borders highlight per tab while the cursor is over their rows.\n Framerate-independent, so a stalled Wine frame cannot overshoot\n the animation.\n- New \"Reduce motion\" toggle in Theme & Layout disables the\n crossfade, the hover animations and the unread-tab pulse for\n users who prefer a static UI.\n\nUnder the hood:\n\n- Two pure-helper lerp paths (ThemeAbgrCacheLerp, FrameLerp) with\n xUnit coverage in the Build Suite, plus a ColourUtil.ApplyAlpha\n alpha modulator. Two new /xlperf self-test steps pin the\n crossfade and quick-picker contracts.\n\nNo schema bump, no migration. Migration v17 stays.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.5.3 — Localisation Wave + Bundled-Font Overhaul (2026-05-19)**\n\nMulti-language pass plus a long-standing first-frame HITCH lands\nas a side effect of a font-stack rewrite.\n\nUser-visible:\n\n- 24 selectable UI languages (was 2). Catalan, Czech, Danish,\n Dutch, English, Finnish, French, German, Greek, Hungarian,\n Italian, Japanese, Korean, Norsk bokmål, Polish, Portuguese\n (BR + PT), Romanian, Russian, Spanish, Swedish, Turkish,\n Ukrainian, Simplified + Traditional Chinese. Sorted by endonym,\n \"None\" pinned first. Non-native locales are AI-assisted and\n flagged for native-speaker review via the Forge Discord.\n- Bundled Inter Light replaces Exo 2 (SIL OFL 1.1, 343 KB). The\n Inter font ships Latin Extended-A/B, Greek polytonic and\n Cyrillic Supplement coverage; NotoSansCjkRegular joins as a\n third merge layer for Hangul and Simplified-Han glyphs the\n FFXIV Japanese game font does not ship.\n- First-frame HITCH dropped from ~74 ms (v1.5.2 baseline that\n held since v1.4.x) to a median of ~20 ms (5-reload sample\n 17.9-23.6 ms, Linux/Wine). The bundled-font path silently\n fell back to the FFXIV Axis font for the entire v1.5.x series\n because of an early-return in the draw loop. The fix that\n routes RegularFont through draw also lands the defer-pattern\n win the v1.5.1 cycle was reaching for.\n- ExtraGlyphRanges auto-activates on language change. Korean,\n ChineseFull and the two new flags (LatinExtended, Greek) toggle\n on without a manual visit to Fonts and Colours.\n- New WarningText under the language dropdown notes FFXIV's\n chat input only fully supports EN/DE/FR/JA character sets.\n Other languages render in HellionChat but may garble when\n typed into in-game chat.\n\nUnder the hood:\n\n- Three-layer font stack: Inter Light primary, FFXIV\n JapaneseFont merge 1 for kana/kanji style, NotoSansCjkRegular\n merge 2 for everything else CJK.\n- LanguageOverride enum gains ten locales plus three previously\n commented out (Italian, Korean, Norwegian as `nb`). New\n values append to the enum so existing config integers stay\n stable across update.\n- Crowdin gap closed: four post-sync ChatTwo keys backfilled\n into 13 legacy locales with per-key AI markers.\n- Plugin.LoadAsync runs a one-shot migration that ORs in the\n matching ExtraGlyphRanges flag for users already on a\n non-default language. Settings.Apply auto-activates on\n change going forward.\n- Em-dash sweep across the EN source and 18 translations to the\n house style. Russian and Ukrainian keep the typographic norm.\n\nMigration v17 stays. UseHellionFont users transition from Exo 2\nto Inter Light transparently on first reload.\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\nFull history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases", "AcceptsFeedback": true, - "DownloadLinkInstall": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.5/latest.zip", - "DownloadLinkUpdate": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.5/latest.zip", - "DownloadLinkTesting": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.5/latest.zip", - "TestingAssemblyVersion": "1.5.5.0", + "DownloadLinkInstall": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.6/latest.zip", + "DownloadLinkUpdate": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.6/latest.zip", + "DownloadLinkTesting": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.6/latest.zip", + "TestingAssemblyVersion": "1.5.6.0", "IconUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/icon.png", "ImageUrls": [ "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/chatWindow.png",