Add Clair Obscur: Expedition 33 via new METHOD=external

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>
This commit is contained in:
2026-07-21 16:58:05 -04:00
co-authored by Claude Opus 4.8
parent efaab8bd32
commit 0833cf8495
14 changed files with 277 additions and 5 deletions
+17 -3
View File
@@ -109,7 +109,9 @@ METHOD="${METHOD:-suwsf}"
if [ "$ACTION" = "uninstall" ]; then
echo "[+] Uninstalling..."
if [ "$METHOD" = "bepinex" ]; then
if [ "$METHOD" = "external" ]; then
for f in $EXTERNAL_FILES; do [ -f "$GAMEDIR/$f" ] && rm -v "$GAMEDIR/$f"; done
elif [ "$METHOD" = "bepinex" ]; then
rm -vf "$GAMEDIR/winhttp.dll" "$GAMEDIR/doorstop_config.ini" "$GAMEDIR/.doorstop_version" \
"$GAMEDIR/changelog.txt" "$GAMEDIR/BepInEx/plugins/$PLUGIN_DLL"
# leave BepInEx/ itself: the user may have other mods installed
@@ -125,7 +127,15 @@ if [ "$ACTION" = "uninstall" ]; then
fi
# --- install ------------------------------------------------------------------
if [ "$METHOD" = "bepinex" ]; then
if [ "$METHOD" = "external" ]; then
SRC="$HERE/vendor/$VENDOR_PAYLOAD"
[ -d "$SRC" ] || { echo "[!] missing vendored payload: $SRC"; exit 1; }
cp -v "$SRC"/* "$GAMEDIR/" 2>/dev/null || true
# our tuned config wins over the upstream default
if [ -n "${EXTERNAL_CONFIG:-}" ] && [ -f "$GAMES_DIR/$GAME/$EXTERNAL_CONFIG" ]; then
cp -v "$GAMES_DIR/$GAME/$EXTERNAL_CONFIG" "$GAMEDIR/$EXTERNAL_CONFIG"
fi
elif [ "$METHOD" = "bepinex" ]; then
BEPZIP=$(ls "$HERE"/vendor/BepInEx_win_x64_*.zip 2>/dev/null | head -1)
PLUGIN="$GAMES_DIR/$GAME/$PLUGIN_DLL"
[ -f "$BEPZIP" ] || { echo "[!] missing BepInEx zip in vendor/"; exit 1; }
@@ -156,7 +166,11 @@ apply_ini
cat <<EOF
[+] Installed ($METHOD): $([ "$METHOD" = "bepinex" ] && echo "BepInEx + $PLUGIN_DLL + $LOADER" || echo "SUWSF.asi, SUWSF.ini, $LOADER")
[+] Installed ($METHOD): $(case "$METHOD" in
bepinex) echo "BepInEx + $PLUGIN_DLL + $LOADER" ;;
external) echo "$EXTERNAL_FILES" ;;
*) echo "SUWSF.asi, SUWSF.ini, $LOADER" ;;
esac)
NEXT (Proton) — REQUIRED, or the loader is ignored and the fix won't apply in gameplay.
Steam > right-click ${TITLE:-$GAME} > Properties > Launch Options: