Add ONE PIECE ODYSSEY (UE4 + SteamStub, same profile as GB4)

Recon: UE4, SteamStub-wrapped (.bind present, .text entropy 8.00), no native
ultrawide, and the community workaround is raising FOV at 32:9 - the Vert-
signature. That is the Gundam Breaker 4 scenario exactly, so it reuses the
proven SUWSF method and UE4-generic patterns.

Patterns cannot be verified statically because the exe is encrypted; marked
unverified until a runtime check confirms the matches.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 17:53:54 -04:00
co-authored by Claude Opus 4.8
parent 1176df8f20
commit 2f781f95c9
4 changed files with 157 additions and 0 deletions
+1
View File
@@ -16,6 +16,7 @@ Most force **Hor+ FOV** (a wider screen shows you *more* rather than zooming in)
|---|---|---|---| |---|---|---|---|
| [Gundam Breaker 4](games/GundamBreaker4/) | Unreal Engine 4.27 | SUWSF | ✅ Confirmed working at 5120×1440 | | [Gundam Breaker 4](games/GundamBreaker4/) | Unreal Engine 4.27 | SUWSF | ✅ Confirmed working at 5120×1440 |
| [Burglin' Gnomes](games/BurglinGnomes/) | Unity 6 (Mono) | BepInEx plugin | ✅ Confirmed working at 5120×1440 | | [Burglin' Gnomes](games/BurglinGnomes/) | Unity 6 (Mono) | BepInEx plugin | ✅ Confirmed working at 5120×1440 |
| [ONE PIECE ODYSSEY](games/OnePieceOdyssey/) | Unreal Engine 4 | SUWSF | ⚠️ New — unverified |
| [Clair Obscur: Expedition 33](games/Expedition33/) | Unreal Engine 5 | External ([ClairObscurFix](https://github.com/Lyall/ClairObscurFix) by Lyall) | ⚠️ Partial — reduced profile, see notes | | [Clair Obscur: Expedition 33](games/Expedition33/) | Unreal Engine 5 | External ([ClairObscurFix](https://github.com/Lyall/ClairObscurFix) by Lyall) | ⚠️ Partial — reduced profile, see notes |
## Install ## Install
+65
View File
@@ -0,0 +1,65 @@
# ONE PIECE ODYSSEY — UltraWide Fix
⚠️ **New — patterns not yet verified at runtime.**
- **Engine:** Unreal Engine 4
- **Steam AppID:** 814000
- **Executable:** `odyssey-Win64-Shipping.exe` (**SteamStub-encrypted**)
- **Method:** SUWSF runtime memory patch
## Why this mirrors Gundam Breaker 4
Same engine, same DRM, same symptom — the game has no native ultrawide support and
the community workaround is *raising FOV* at 32:9, which is the Vert- signature:
the camera holds horizontal FOV constant, so a wider display crops vertically
instead of showing more.
Because the exe is SteamStub-wrapped (`.bind` section, `.text` entropy 8.00), it is
encrypted on disk and cannot be patched statically. SUWSF patches the decrypted
image in memory at launch, which is also why the fix survives into gameplay.
The patterns are the UE4-generic ones proven on Gundam Breaker 4.
## Install (Linux / Proton)
```bash
./install.sh OnePieceOdyssey
```
Then **required** — Steam → Properties → Launch Options:
```
WINEDLLOVERRIDES="dsound=n,b" %command%
```
Set **5120×1440** fullscreen in-game.
## Patches
| Patch | Effect |
|---|---|
| `AspectRatioAxisConstraint` | Forces `MaintainYFOV` → Hor+ FOV. **Do not use at 16:9 or narrower.** |
| `ConstrainAspectRatio` | NOPs the pillarbox/letterbox clamp |
| `HardcodedAspect_16by9_*` | Optional fallbacks, disabled by default |
## Verifying / troubleshooting
Add `PROTON_LOG=1` to the launch options, then:
```bash
./tools/read_protonlog.sh 814000
```
SUWSF reports each pattern as `Found patch … N matches` or `No pattern found, skipping`.
If `AspectRatioAxisConstraint` misses, derive the exact bytes from a runtime dump:
```bash
python3 tools/dump_decrypted.py odyssey-Win64-Shipping.exe # while the game runs
python3 tools/aob.py <dump> games/OnePieceOdyssey/SUWSF.ini
```
## Open questions
- [ ] Do the GB4 patterns match this build?
- [ ] Is the HUD sane at 32:9, or stretched/misplaced?
- [ ] Any pillarboxing left in cutscenes?
+71
View File
@@ -0,0 +1,71 @@
[UserSettings]
; ==========================================================================
; ONE PIECE ODYSSEY - UltraWide Fix (SUWSF patch)
; Target display: Samsung 49" Odyssey G93SC (5120x1440, 32:9)
; Engine: Unreal Engine 4 | 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"
+20
View File
@@ -0,0 +1,20 @@
# ONE PIECE ODYSSEY — metadata for ../../install.sh
TITLE="ONE PIECE ODYSSEY"
APPID=814000
EXE="odyssey-Win64-Shipping.exe"
COMMON_SUBDIR="ONE PIECE ODYSSEY/odyssey/Binaries/Win64"
ENGINE="Unreal Engine 4 (SteamStub DRM — runtime patching required)"
METHOD="suwsf"
LOADER="dsound.dll"
LAUNCH_OPTION='WINEDLLOVERRIDES="dsound=n,b" %command%'
# UE4 config-level partial win: fixes menus immediately; SUWSF carries gameplay.
PREFIX_INI="drive_c/users/steamuser/AppData/Local/odyssey/Saved/Config/WindowsNoEditor/Engine.ini"
read -r -d '' INI_BLOCK <<'BLOCK' || true
[/Script/Engine.LocalPlayer]
AspectRatioAxisConstraint=AspectRatio_MaintainYFOV
BLOCK
STATUS="NEW — UE4+SteamStub like GB4; patterns unverified at runtime"