From 2f781f95c9e5e7dbe0a337fbe63df1a2566dbfab Mon Sep 17 00:00:00 2001 From: ckoch Date: Tue, 21 Jul 2026 17:53:54 -0400 Subject: [PATCH] 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 --- README.md | 1 + games/OnePieceOdyssey/README.md | 65 ++++++++++++++++++++++++++++++ games/OnePieceOdyssey/SUWSF.ini | 71 +++++++++++++++++++++++++++++++++ games/OnePieceOdyssey/game.conf | 20 ++++++++++ 4 files changed, 157 insertions(+) create mode 100644 games/OnePieceOdyssey/README.md create mode 100644 games/OnePieceOdyssey/SUWSF.ini create mode 100644 games/OnePieceOdyssey/game.conf diff --git a/README.md b/README.md index 2a56ac0..fe7aa84 100644 --- a/README.md +++ b/README.md @@ -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 | | [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 | ## Install diff --git a/games/OnePieceOdyssey/README.md b/games/OnePieceOdyssey/README.md new file mode 100644 index 0000000..4a56e5b --- /dev/null +++ b/games/OnePieceOdyssey/README.md @@ -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 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? diff --git a/games/OnePieceOdyssey/SUWSF.ini b/games/OnePieceOdyssey/SUWSF.ini new file mode 100644 index 0000000..65e36d1 --- /dev/null +++ b/games/OnePieceOdyssey/SUWSF.ini @@ -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" diff --git a/games/OnePieceOdyssey/game.conf b/games/OnePieceOdyssey/game.conf new file mode 100644 index 0000000..402ed4f --- /dev/null +++ b/games/OnePieceOdyssey/game.conf @@ -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"