Restructure into multi-game UltraWidePatches umbrella
Generalize the project from a single GB4 fix into a collection that can host
ultrawide patches for many games.
- games/<Game>/{SUWSF.ini,game.conf,README.md}; GB4 moved in as the first entry
- game.conf carries all game-specific data (appid, exe, paths, loader, launch
option), so install.sh is fully generic: ./install.sh <Game> [uninstall]
- installer gains GAME_DIR / PREFIX_INI_FILE / LOADER_NAME overrides; verified
install -> idempotent re-run -> uninstall leaves the tree pristine
- tools de-hardcoded: dump_decrypted.py takes an exe name, read_protonlog.sh
takes an appid, aob.py takes a dump + game ini, build_release.sh takes a game
- README rewritten as an umbrella index with an "adding a game" guide
- LICENSE copyright -> programmingPug
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,66 +1,53 @@
|
||||
# Gundam Breaker 4 — UltraWide Fix
|
||||
# UltraWidePatches
|
||||
|
||||
UltraWide (32:9) fix for **Gundam Breaker 4** on PC, targeting the **Samsung 49" Odyssey G93SC** (5120×1440). Works on **Linux/Proton** and Windows.
|
||||
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**.
|
||||
|
||||
## What it fixes
|
||||
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).
|
||||
|
||||
At 32:9 the game keeps a fixed *horizontal* FOV, so a wider display just **zooms the camera in** instead of showing more. This forces the camera to keep *vertical* FOV constant and expand horizontally (**Hor+**), and disables the pillarbox/letterbox clamp — the correct ultrawide behavior.
|
||||
## Supported games
|
||||
|
||||
## How it works (and why it has to work this way)
|
||||
| Game | Engine | Status |
|
||||
|---|---|---|
|
||||
| [Gundam Breaker 4](games/GundamBreaker4/) | Unreal Engine 4.27 | ✅ Confirmed working in gameplay at 5120×1440 |
|
||||
|
||||
- GB4 is **Unreal Engine 4.27**. The classic fix is to set `AspectRatioAxisConstraint = MaintainYFOV`, but doing it in `Engine.ini` **reverts once a mission loads** — the game re-sets the camera constraint per view at runtime.
|
||||
- The shipping exe (`GB4-Win64-Shipping.exe`) is wrapped in **SteamStub DRM**: `.text` is encrypted on disk (entropy 8.0), so a static hex patch of the file is impossible. The real code only exists decrypted in memory.
|
||||
- So the fix is a **runtime memory patch** via [SUWSF](https://github.com/PhantomGamers/SUWSF) (Somewhat Universal Widescreen Fix) loaded by [Ultimate ASI Loader](https://github.com/ThirteenAG/Ultimate-ASI-Loader). SUWSF scans the *decrypted* image at launch and rewrites the instruction that selects the FOV axis — surviving into missions.
|
||||
|
||||
## Install (Linux / Proton)
|
||||
## Install
|
||||
|
||||
```bash
|
||||
./install.sh
|
||||
./install.sh # list available patches
|
||||
./install.sh GundamBreaker4 # install one
|
||||
./install.sh GundamBreaker4 uninstall
|
||||
```
|
||||
|
||||
This drops `SUWSF.asi`, `dsound.dll` (ASI loader), and `SUWSF.ini` next to the shipping exe, and adds the `MaintainYFOV` tweak to the Proton-prefix `Engine.ini` (fixes menus/lobby instantly; SUWSF covers missions). It **never modifies the exe or any game file** and keeps an `Engine.ini.bak-bg4uw` backup.
|
||||
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.**
|
||||
|
||||
**REQUIRED on Proton** — add this to GB4's **Steam → Properties → Launch Options**, or the ASI loader is ignored and the fix only works in the lobby:
|
||||
> **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."
|
||||
|
||||
```
|
||||
WINEDLLOVERRIDES="dsound=n,b" %command%
|
||||
```
|
||||
Windows users can extract a release zip straight into the game's exe folder; no launch option needed.
|
||||
|
||||
Then set the in-game resolution to **5120×1440** fullscreen. (If `dsound` ever collides, `LOADER_NAME=version.dll ./install.sh` with `version=n,b` works too.)
|
||||
## Why runtime patching
|
||||
|
||||
> ✅ Confirmed working in gameplay at 5120×1440 (32:9) on Proton — Hor+ FOV holds through missions.
|
||||
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.
|
||||
|
||||
### Install (Windows)
|
||||
Extract `dist/GB4_UltraWide_Fix.zip` into `...\GB4\Binaries\Win64\` (next to `GB4-Win64-Shipping.exe`).
|
||||
|
||||
### Uninstall
|
||||
```bash
|
||||
./install.sh uninstall
|
||||
```
|
||||
|
||||
## Status & the one open step
|
||||
|
||||
The byte patterns in [`patch/SUWSF.ini`](patch/SUWSF.ini) are **candidate UE4 patterns** proven on other UE4 titles (Trepang2, Lies of P). Because the DRM encrypts the exe, they can only be verified against GB4's **decrypted memory at runtime**. If they hit (likely — same engine family), you're done. If a patch reports no change:
|
||||
|
||||
```bash
|
||||
# with the game running at the main menu:
|
||||
python3 tools/dump_decrypted.py # dumps decrypted image via /proc/<pid>/mem
|
||||
python3 tools/aob.py # reports which patterns matched (OK / MISS / MANY)
|
||||
```
|
||||
|
||||
Send me the `aob.py` output and I'll derive GB4's exact pattern from the dump.
|
||||
|
||||
## Layout
|
||||
## Repo layout
|
||||
|
||||
| Path | What |
|
||||
|---|---|
|
||||
| `patch/SUWSF.ini` | The ultrawide patch definitions (HOR+, pillarbox, fallbacks) |
|
||||
| `install.sh` | Proton/Linux installer + uninstaller |
|
||||
| `tools/dump_decrypted.py` | Dumps the decrypted exe image from the running process |
|
||||
| `tools/aob.py` | Verifies/derives AOB patterns against a dump |
|
||||
| `tools/find_projfunc.py` | Static fingerprint scan (confirmed the DRM encryption) |
|
||||
| `dist/GB4_UltraWide_Fix.zip` | Drop-in bundle for manual/Windows install |
|
||||
| `vendor/SUWSF-x64/` | Upstream SUWSF 2.3.0 + Ultimate ASI Loader |
|
||||
| `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) |
|
||||
|
||||
## Credits
|
||||
[SUWSF](https://github.com/PhantomGamers/SUWSF) by PhantomGamers · [Ultimate ASI Loader](https://github.com/ThirteenAG/Ultimate-ASI-Loader) by ThirteenAG · AspectRatioAxisConstraint / pillarbox patterns adapted from [Lyall's UltrawidePatches](https://codeberg.org/Lyall/UltrawidePatches).
|
||||
## 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`](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.
|
||||
|
||||
Reference in New Issue
Block a user