# 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](https://github.com/PhantomGamers/SUWSF) + [Ultimate ASI Loader](https://github.com/ThirteenAG/Ultimate-ASI-Loader). ## Supported games | Game | Engine | Status | |---|---|---| | [Gundam Breaker 4](games/GundamBreaker4/) | Unreal Engine 4.27 | ✅ Confirmed working in gameplay at 5120×1440 | ## Install ```bash ./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//SUWSF.ini` | That game's patch definitions | | `games//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/` 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`](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](LICENSE). Bundled third-party components (SUWSF, Ultimate ASI Loader) are MIT and credited in [THIRD_PARTY.md](THIRD_PARTY.md). You must own the games; nothing here modifies or circumvents copy protection.