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>