SteamWorld Heist UA Tools

A toolkit for localizing SteamWorld Heist. A full C# suite for injecting Cyrillic into proprietary binary bitmap fonts (SWH.FontTool), a WPF localization editor GUI (SWH.LocEditor), DLC archive repacking, and bilingual text validation.

Utilities

SWH.FontTool — a full C# toolset (Core / Analyzer / CLI) for injecting the complete Ukrainian alphabet into the game’s proprietary binary font format (.fnt + .png), reverse-engineered byte-by-byte with no developer documentation available. Each of the 66 Ukrainian letters gets fully new geometry in newly added PNG space; the baseline and body height are calibrated against the font’s original Latin glyphs (guaranteed correct), not the original Cyrillic, which in some files was itself an inconsistent size. A per-font, measured tracking (XAdvance) ratio — from ~0.64 for condensed fonts to ~1.0 for body text, since a single universal formula doesn’t work here. A safe 3-tier donor system for glyphs with no direct equivalent (Ё/Ъ/ё, etc.) that avoids characters already used by other localizations in the same file. Renders with the Fira Sans family (Extra Condensed Bold for headers, SemiBold for body text) — replacing the original Oswald/Comfortaa after a provenance check found that both fonts’ Cyrillic extension had been done by the same russian studio, whereas Fira Sans’s Latin and Cyrillic were built by one team (Carrois Type Design / Bulgarian designers Nikoltchev-Kateliev) with no relation to it. The console menu is fully bilingual (UA/EN). Replaces the previous FontGenMaster.

SWH.LocEditor — a WPF application (split into SWH.LocEditor.Core — pure GUI-independent logic, and SWH.LocEditor.GUI — the interface) for working with the game’s language CSV (.csv/.csv.z) directly, with no intermediate QuickBMS steps. Live translation checks while editing (Cyrillic inside engine variables, unbalanced tags, a translation suspiciously longer/shorter than the original — thresholds tuned for Ukrainian’s natural length expansion), automatic detection of technical rows (symbols/placeholders only, or an explicit developer comment saying “do not translate”) and duplicate originals with a one-click propagate-to-group action plus a separate marker if duplicates have already drifted out of sync. An editable “Review” column with ready-made markers or a free-form comment, working-TSV autosave. A clear separation of data sources: the key/original/developer comment always come from the game’s original CSV, while the columns meant for human reviewers are never read or overwritten by the program. Dark/light theme, font-size scaling, status filters with live counters, file logging of key operations for troubleshooting.

TextValidator — a bilingual (UA/EN) translation validator: merges reviewed lines back into the game’s format with automatic checks for tags, % placeholders, newlines, and stray Cyrillic in engine variables (prevents engine crashes), a report of original keys missing from the review file.

ImpakRepacker — a bilingual repacker for .impak DLC archives that preserves the original compression level of every file (prevents artifacts and crashes from mismatched compression). A selection menu to pack one specific DLC or all of them at once, with a readiness status for each.

OllamaTranslatorClient — a bilingual client for an automated first-pass translation via a local TranslateGemma 12B instance (Ollama), with protection for game tags and automated QA checks on the result.

Additional Tools

QuickBMS — used for unpacking and packing the game’s .z and .csv.z text archives.

Requirements

Windows 10/11 x64/x86. SWH.LocEditor: self-contained builds (win-x64/win-x86) require no .NET installation; the framework-dependent build requires .NET 10 Desktop Runtime. The other utilities require the .NET 10 SDK to build from source.

Download

The latest releases are available on GitHub Releases.

Security and Transparency

The source code for the installer and all utilities is completely open-source. The installer (Inno Setup, packexe.iss) only performs file-copy operations within the game’s folder: replacing the text archive, deploying custom font atlases, and updating DLC with repacked archives. The registry is used solely for a standard entry in HKEY_CURRENT_USER — uninstaller support via the Windows Control Panel and version tracking (to prevent duplicate installations). No global system settings, drivers, or security configurations are modified; the uninstaller completely removes all registry entries and installed files.

Windows SmartScreen warnings appear solely due to the lack of a paid digital signature — this is standard for non-commercial projects. An up-to-date VirusTotal report is available on the Nexus Mods page.

Developed for SteamWorld Heist — Ukrainian Localization.

Credits

  • QuickBMS — extraction and import of .z archives
  • Inno Setup — installer with versioning support
  • Fira Sans / Fira Sans Extra Condensed (Carrois Type Design for Mozilla/Telefónica, OFL) — the font family used to render all new Ukrainian glyphs
  • SixLabors.ImageSharp / ImageSharp.Drawing — PNG atlas processing and glyph rendering in SWH.FontTool
  • Ollama / TranslateGemma 12B — local model for the initial translation pass, with no cloud API keys involved
  • sb8gapi and the Graj po Polsku community — researching the structure of SteamWorld Heist .fnt files
  • Steam Community — technical details of working with .z archives
  • AI coding assistant (Claude) — part of the code was drafted with its help; all technical decisions, measurements, in-game verification, and final sign-off remain the author’s own