ckochandClaude Opus 4.8 ed2e0016ba Plugin: never cache a zero baseline for world-space canvases
The in-game log showed 'World Canvas localScale (0,0,0) -> (0,0,0)'. Games hide
world-space UI by zeroing its scale; if that zero got cached as the baseline,
multiplying it would pin the canvas to zero permanently and the UI could never
reappear. Now skips canvases that are currently zeroed - both when capturing the
baseline and when applying - so hidden UI is left alone and picked up once the
game shows it again.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 16:25:27 -04:00
2026-07-21 12:03:21 -04:00

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.

Most of these force Hor+ FOV (a wider screen shows you more, instead of zooming the camera in) and disable pillarboxing, by patching the game in memory at runtime with SUWSF + Ultimate ASI Loader.

Supported games

Game Engine Status
Gundam Breaker 4 Unreal Engine 4.27 Confirmed working in gameplay at 5120×1440

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 That game's patch definitions
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 GitHub 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
vendor/SUWSF-x64/ Upstream SUWSF 2.3.0 + Ultimate ASI Loader (MIT)

Adding a game

  1. mkdir games/<GameName> with a game.conf (copy GB4's as a template) and a SUWSF.ini.
  2. Start from the known UE4 patterns in games/GundamBreaker4/SUWSF.ini — they match across many UE4 titles.
  3. If a pattern misses, use tools/dump_decrypted.py + tools/aob.py to derive the game's exact bytes.

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.

S
Description
No description provided
Readme MIT
5.9 MiB
v1.2.0
Latest
2026-07-21 17:35:37 -04:00
Languages
C# 40.5%
Shell 34.4%
Python 25.1%