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:
@@ -0,0 +1,64 @@
|
||||
# Gundam Breaker 4 — UltraWide Fix
|
||||
|
||||
✅ **Confirmed working in gameplay at 5120×1440 (32:9) on Proton.**
|
||||
|
||||
Forces **Hor+ FOV** so an ultrawide display shows *more of the battlefield* instead of zooming the camera in, and disables pillarboxing.
|
||||
|
||||
- **Engine:** Unreal Engine 4.27
|
||||
- **Steam AppID:** 1672500
|
||||
- **Executable:** `GB4-Win64-Shipping.exe` (SteamStub-encrypted → runtime patch required)
|
||||
|
||||
## Install (Linux / Proton)
|
||||
|
||||
```bash
|
||||
./install.sh GundamBreaker4
|
||||
```
|
||||
|
||||
Then **required** — Steam → right-click *Gundam Breaker 4* → Properties → Launch Options:
|
||||
|
||||
```
|
||||
WINEDLLOVERRIDES="dsound=n,b" %command%
|
||||
```
|
||||
|
||||
Without it, Proton ignores the native `dsound.dll` and the fix appears to work **only in the lobby** (that part is the `Engine.ini` tweak) while reverting in missions.
|
||||
|
||||
Finally, set the in-game resolution to **5120×1440**, fullscreen.
|
||||
|
||||
## Install (Windows)
|
||||
|
||||
Extract the release zip into `…\GB4\Binaries\Win64\` (next to `GB4-Win64-Shipping.exe`). No launch option needed.
|
||||
|
||||
## Uninstall
|
||||
|
||||
```bash
|
||||
./install.sh GundamBreaker4 uninstall
|
||||
```
|
||||
|
||||
## What it patches
|
||||
|
||||
| Patch | Effect |
|
||||
|---|---|
|
||||
| `AspectRatioAxisConstraint` | Forces `MaintainYFOV` (0) → Hor+ FOV. **Do not use at 16:9 or narrower.** |
|
||||
| `ConstrainAspectRatio` | NOPs the pillarbox/letterbox clamp |
|
||||
| `HardcodedAspect_16by9_*` | Optional fallbacks, disabled by default |
|
||||
|
||||
The patterns are UE4-generic (adapted from Trepang2 / Lies of P in [Lyall's UltrawidePatches](https://codeberg.org/Lyall/UltrawidePatches)) and matched GB4's 4.27 code as-is.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Add `PROTON_LOG=1` to the launch options, relaunch, then:
|
||||
|
||||
```bash
|
||||
./tools/read_protonlog.sh 1672500
|
||||
```
|
||||
|
||||
That reports whether the ASI injected and how many matches each pattern found. If a pattern shows `No pattern found`, derive the exact bytes:
|
||||
|
||||
```bash
|
||||
python3 tools/dump_decrypted.py GB4-Win64-Shipping.exe # while the game runs
|
||||
python3 tools/aob.py <dump> games/GundamBreaker4/SUWSF.ini
|
||||
```
|
||||
|
||||
## Known / not yet verified
|
||||
|
||||
- HUD/UI scaling and cutscene framing at 32:9 have not been formally checked.
|
||||
@@ -0,0 +1,71 @@
|
||||
[UserSettings]
|
||||
; ==========================================================================
|
||||
; Gundam Breaker 4 - UltraWide Fix (SUWSF patch)
|
||||
; Target display: Samsung 49" Odyssey G93SC (5120x1440, 32:9)
|
||||
; Engine: Unreal Engine 4.27 | Exe is SteamStub-encrypted -> runtime patch
|
||||
; ==========================================================================
|
||||
; Your screen resolution used in patch calculations. "auto" reads primary
|
||||
; display; set explicitly if auto misreads under Proton/DPI scaling.
|
||||
Resolution="5120x1440"
|
||||
; Globally enable or disable all patches (default: true)
|
||||
Enabled=true
|
||||
|
||||
; --------------------------------------------------------------------------
|
||||
; WARNING: PATCHES BELOW. These are CANDIDATE UE4 patterns adapted from
|
||||
; known-good UE4 fixes (Trepang2 / Lies of P). Because GB4's .text is
|
||||
; SteamStub-encrypted on disk we cannot verify the exact bytes statically;
|
||||
; SUWSF scans the DECRYPTED image in memory at runtime, so if GB4's UE4.27
|
||||
; codegen matches these generic patterns they apply directly.
|
||||
;
|
||||
; If a patch reports 0 matches (see SUWSF log / no visual change), run
|
||||
; tools/dump_decrypted.sh while the game is running and send me the dump so
|
||||
; I can derive GB4's exact pattern. Each patch is independent - a miss on one
|
||||
; does not stop the others.
|
||||
; --------------------------------------------------------------------------
|
||||
|
||||
; [1] HOR+ FOV -- the primary fix.
|
||||
; Forces ULocalPlayer AspectRatioAxisConstraint to 0 (AspectRatio_MaintainYFOV).
|
||||
; This makes the camera keep VERTICAL FOV constant and expand horizontally
|
||||
; (Hor+), removing the zoomed-in feel at 32:9. Do NOT use at 16:9 or narrower.
|
||||
; Value BA 00 00 00 00 = "mov edx, 0" ; 90 90 90 = pad nops.
|
||||
[Patch:AspectRatioAxisConstraint]
|
||||
Enabled=true
|
||||
Pattern="0F ?? ?? ?? 0F ?? ?? ?? ?? ?? 41 ?? ?? ?? ?? ?? 00 00 48 ?? ?? ?? ?? 00 00 4C ?? ??"
|
||||
Offset=10
|
||||
Value="BA 00 00 00 00 90 90 90"
|
||||
ValueType="byte"
|
||||
Match="1"
|
||||
Module="auto"
|
||||
|
||||
; [2] Disable pillarboxing/letterboxing (bConstrainAspectRatio = 0).
|
||||
; Prevents the game clamping the render to 16:9 with black side bars.
|
||||
[Patch:ConstrainAspectRatio]
|
||||
Enabled=true
|
||||
Pattern="33 ?? ?? 83 ?? 02 31 ?? ?? 0F ?? ?? ?? ?? 00 00"
|
||||
Offset=0
|
||||
Value="90 90 90 90 90 90"
|
||||
ValueType="byte"
|
||||
Match="1"
|
||||
Module="auto"
|
||||
|
||||
; [3] OPTIONAL fallback: some UE builds hardcode 16:9 (1.777778) as a float
|
||||
; (39 8E E3 3F) or (3B 8E E3 3F) and clamp to it. Disabled by default because
|
||||
; it can double-apply with patch [1]. Enable ONLY if [1] misses and you still
|
||||
; see a squeezed/zoomed image. Writes your true aspect ratio in its place.
|
||||
[Patch:HardcodedAspect_16by9_a]
|
||||
Enabled=false
|
||||
Pattern="39 8E E3 3F"
|
||||
Offset=0
|
||||
Value="aspectratio"
|
||||
ValueType="float"
|
||||
Match="all"
|
||||
Module="auto"
|
||||
|
||||
[Patch:HardcodedAspect_16by9_b]
|
||||
Enabled=false
|
||||
Pattern="3B 8E E3 3F"
|
||||
Offset=0
|
||||
Value="aspectratio"
|
||||
ValueType="float"
|
||||
Match="all"
|
||||
Module="auto"
|
||||
@@ -0,0 +1,28 @@
|
||||
# Game metadata consumed by ../../install.sh
|
||||
# Everything game-specific lives here so the installer stays generic.
|
||||
|
||||
TITLE="Gundam Breaker 4"
|
||||
APPID=1672500
|
||||
|
||||
# Executable to locate, and its path under steamapps/common/
|
||||
EXE="GB4-Win64-Shipping.exe"
|
||||
COMMON_SUBDIR="GBBBB/GB4/Binaries/Win64"
|
||||
|
||||
# Ultimate ASI Loader proxy name. On Proton this REQUIRES the matching
|
||||
# WINEDLLOVERRIDES launch option (see LAUNCH_OPTION below).
|
||||
LOADER="dsound.dll"
|
||||
|
||||
# Engine .ini inside the Proton prefix, relative to compatdata/<APPID>/pfx/
|
||||
# Leave empty to skip the config-level tweak.
|
||||
PREFIX_INI="drive_c/users/steamuser/AppData/Local/GB4/Saved/Config/WindowsNoEditor/Engine.ini"
|
||||
|
||||
# Block appended to PREFIX_INI. Fixes menus/lobby immediately; the runtime
|
||||
# SUWSF patch is what carries it through gameplay.
|
||||
read -r -d '' INI_BLOCK <<'EOF' || true
|
||||
[/Script/Engine.LocalPlayer]
|
||||
AspectRatioAxisConstraint=AspectRatio_MaintainYFOV
|
||||
EOF
|
||||
|
||||
LAUNCH_OPTION='WINEDLLOVERRIDES="dsound=n,b" %command%'
|
||||
ENGINE="Unreal Engine 4.27"
|
||||
STATUS="Confirmed working in gameplay at 5120x1440 (32:9) on Proton"
|
||||
Reference in New Issue
Block a user