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>
Running ClairObscurFix v0.0.10 with upstream defaults crashed on save load.
Removing it entirely let the game load normally, isolating the fix as the cause
rather than Proton or the year-old save. The fix is archived and predates the
current build; two pattern scans already failed outright, and the crash
coincides with its Level Load hook.
Ship a reduced profile with only Center HUD enabled - the one option actually
needed at 32:9 - and mark the game PARTIAL rather than implying full support.
Adds a revalidation checklist since vendored archived fixes decay as the game
patches, plus a note that the game has no DRM, so a dedicated HUD-centering
patch is a viable replacement if Center HUD eventually breaks too.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Expedition 33 is UE5 with no DRM, but a mature MIT-licensed fix already exists:
ClairObscurFix by Lyall. Rather than reimplement it, install.sh gains a third
method that vendors a third-party fix unmodified and layers our own tuned
config on top, with the upstream license shipped in the release zip as MIT
requires. Upstream is archived, so vendoring also keeps it available.
Our only change vs upstream defaults is [Center HUD] Enabled = true, since at
5120px wide the edge-anchored HUD elements end up absurdly far apart.
Install/uninstall round-trip verified against a scratch game dir, including
that our tuned ini overrides the vendored default.
Credit to Lyall is recorded in THIRD_PARTY.md, the game README, and the repo
README's method table.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Final tuned values baked in as defaults: HudScale=0.8, WorldLabelScale=0.8.
- install.sh gains METHOD=bepinex: installs BepInEx from vendor + the prebuilt
plugin, with a matching uninstall that leaves BepInEx/ alone (other mods may
depend on it). Success banner is now method-aware.
- Ship the prebuilt plugin DLL so users don't need a .NET SDK.
- Per-game README documenting why the camera is deliberately untouched
(orthographic, constant orthographicSize = already Hor+), the two-canvas UI
problem, tuning, and where the plugin log actually lives.
- Root README lists both games and both fix methods.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The in-game log showed 'World Canvas localScale (0,0,0) -> (0,0,0)'. Games hide
world-space UI by zeroing its scale; if that zero got cached as the baseline,
multiplying it would pin the canvas to zero permanently and the UI could never
reappear. Now skips canvases that are currently zeroed - both when capturing the
baseline and when applying - so hidden UI is left alone and picked up once the
game shows it again.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
BepInEx does not pick up external edits to a plugin's .cfg, so tuning values
while the game ran silently did nothing - the plugin kept the values loaded at
startup. Now watches the config file's mtime and calls Config.Reload() when it
changes, so edits apply within ~2s with no restart. Reload is wrapped in
try/catch so a malformed .cfg warns instead of spamming exceptions.
HUD adjustments now always log (not just under Verbose) with the resulting
scale, so it is obvious whether a value took effect.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Config-driven so values are tunable without recompiling or pasting console
scripts. Camera is deliberately untouched - it is orthographic with constant
orthographicSize, which is already correct Hor+ at 32:9.
Fixes the two UI families separately, each via the lever that actually works:
- HUD (ScreenSpaceOverlay/ScaleWithScreenSize): match=1 + referenceResolution.y
raised by HudScale, shrinking the HUD while giving the layout more room.
- World labels (WorldSpace): canvas transform localScale, because
CanvasScaler.scaleFactor is overwritten by HandleWorldCanvas every frame.
Baselines are cached per canvas so periodic re-apply never compounds.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Recon: Unity 6000.0.62f1, Mono backend (readable C# assemblies), URP +
Cinemachine, no DRM. No FOV logic in game code, so the horizontal-FOV lock is
a serialized camera setting - needs runtime inspection via BepInEx/UnityExplorer.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>