Files
UltraWidePatches/README.md
T
ckochandClaude Opus 4.8 6f24502956 Expedition 33: record version drift honestly, ship reduced profile
Running ClairObscurFix v0.0.10 with upstream defaults crashed on save load.
Removing it entirely let the game load normally, isolating the fix as the cause
rather than Proton or the year-old save. The fix is archived and predates the
current build; two pattern scans already failed outright, and the crash
coincides with its Level Load hook.

Ship a reduced profile with only Center HUD enabled - the one option actually
needed at 32:9 - and mark the game PARTIAL rather than implying full support.
Adds a revalidation checklist since vendored archived fixes decay as the game
patches, plus a note that the game has no DRM, so a dedicated HUD-centering
patch is a viable replacement if Center HUD eventually breaks too.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 17:15:12 -04:00

4.6 KiB
Raw Blame History

UltraWidePatches

Ultrawide (32:9 / 21:9) fixes for PC games that ship with poor or no ultrawide support — built and tested on a Samsung 49" Odyssey G93SC (5120×1440), and Proton/Linux-first.

Fixes use whichever approach the engine calls for:

  • SUWSF + Ultimate ASI Loader — runtime memory patching, for Unreal titles (and anything DRM-wrapped, where static patching is impossible).
  • BepInEx plugin — a proper C# mod, for Unity titles with the Mono backend.
  • External — where a good third-party fix already exists, it is vendored (license permitting) with our tuned config and full credit, rather than reimplemented. Vendored fixes can go stale against a patched game, so those entries carry a revalidation checklist.

Most force Hor+ FOV (a wider screen shows you more rather than zooming in) and fix UI that assumes 16:9. Some games already render correctly and only need UI work — Burglin' Gnomes is one, and the fix deliberately leaves its camera alone.

Supported games

Game Engine Method Status
Gundam Breaker 4 Unreal Engine 4.27 SUWSF Confirmed working at 5120×1440
Burglin' Gnomes Unity 6 (Mono) BepInEx plugin Confirmed working at 5120×1440
Clair Obscur: Expedition 33 Unreal Engine 5 External (ClairObscurFix by Lyall) ⚠️ Partial — reduced profile, see notes

Install

./install.sh                    # list available patches
./install.sh GundamBreaker4     # install one
./install.sh GundamBreaker4 uninstall

The installer finds the game across your Steam libraries, drops the loader + patch next to the executable, and applies any config-level tweak (with a backup). It never modifies game files.

Proton users: each game needs a WINEDLLOVERRIDES launch option or the loader is silently ignored — the installer prints the exact line for that game. This is the single most common reason a fix "doesn't work."

Windows users can extract a release zip straight into the game's exe folder; no launch option needed.

Why runtime patching

Config-file tweaks (e.g. UE4's AspectRatioAxisConstraint=MaintainYFOV) typically fix menus but revert once gameplay loads, because the game re-sets the camera per view. Many shipping executables are also DRM-encrypted on disk (GB4's is SteamStub-wrapped, .text entropy 8.0), which makes static exe patching impossible. Patching the decrypted image in memory solves both problems at once.

Repo layout

Path What
games/<Game>/SUWSF.ini Patch definitions (SUWSF games)
games/<Game>/plugin/ C# plugin source + prebuilt DLL (BepInEx games)
games/<Game>/*.ini Our tuned config for a vendored external fix
games/<Game>/game.conf Game metadata (appid, exe, paths, launch option)
install.sh Generic installer / uninstaller
tools/build_release.sh Builds a per-game drop-in release zip
tools/publish.sh Pushes + cuts a Gitea release
tools/dump_decrypted.py Dumps a DRM-decrypted image from a running process
tools/aob.py Verifies/derives byte patterns against a dump
tools/read_protonlog.sh Confirms ASI injection + per-patch match counts
tools/unity_diag.cs, tools/unity_uitune.cs UnityExplorer console diagnostics/tuners
vendor/SUWSF-x64/ Upstream SUWSF 2.3.0 + Ultimate ASI Loader (MIT)
vendor/BepInEx_win_x64_*.zip Upstream BepInEx 5.4.23.5 (LGPL-2.1)

Adding a game

  1. mkdir games/<GameName> with a game.conf (copy GB4's as a template) and a SUWSF.ini.
  2. Set METHOD= in game.conf to suwsf, bepinex, or external. Check for an existing fix first — if a good one exists and its license allows redistribution, vendor it with credit instead of rewriting it.
  3. Unreal: start from the UE4 patterns in games/GundamBreaker4/SUWSF.ini — they match across many UE4 titles. If a pattern misses, use tools/dump_decrypted.py + tools/aob.py to derive the exact bytes.
  4. Unity: install BepInEx + UnityExplorer and inspect live with tools/unity_diag.cs / tools/unity_uitune.cs, then write a plugin (copy games/BurglinGnomes/plugin/).

License

MIT — see LICENSE. Bundled third-party components (SUWSF, Ultimate ASI Loader) are MIT and credited in THIRD_PARTY.md. You must own the games; nothing here modifies or circumvents copy protection.