Files
local_machine/scripts/games/gog/prepare-ja3-d3dmetal.sh
ahauimix 1938b7c743 Expand local_machine docs and automation for connectivity, games, and ops.
Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 08:12:19 +03:00

85 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# JA3 + D3DMetal: убрать DXVK/GPTK PE из system32, оставить builtin Gcenx + d3d12/dxgi.so → libd3dshared.
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
SYS32="${BOTTLE_DIR}/drive_c/windows/system32"
WINE_PE="${WHISKY_LIBS}/Libraries/Wine/lib/wine/x86_64-windows"
WINE_UNIX="${WHISKY_LIBS}/Libraries/Wine/lib/wine/x86_64-unix"
BAK="${SYS32}/.ja3-d3dmetal-bak"
LS="${BOTTLE_DIR}/drive_c/users/${WINE_USER:-eternal}/AppData/Roaming/Jagged Alliance 3/LocalStorage.lua"
ja3_gptk_available || ja3_bottle_uses_d3dmetal || {
echo "❌ Нет GPTK/D3DMetal — configure-ja3-d3dmetal.sh"
exit 1
}
bash "${GOG_DIR}/install-gptk-whisky.sh"
mkdir -p "${BAK}"
# DXVK / GPTK PE в system32 ломают D3DMetal (114688/86016 → «graphics subsystem»).
for dll in d3d12.dll dxgi.dll d3d11.dll d3d10core.dll d3d12core.dll winemetal.dll; do
if [[ -f "${SYS32}/${dll}" ]]; then
mv -f "${SYS32}/${dll}" "${BAK}/${dll}" 2>/dev/null || true
fi
done
# Мост Metal + Gcenx PE (94208/200704). НЕ GPTK PE — __wine_unix_call на Wine 11.
# НЕ копировать в system32 DXVK/GPTK DLL.
mkdir -p "${WINE_UNIX}"
ln -sf ../../external/libd3dshared.dylib "${WINE_UNIX}/d3d12.so"
ln -sf ../../external/libd3dshared.dylib "${WINE_UNIX}/dxgi.so"
# system32: убрать overrides — builtin из Wine lib
for dll in d3d12.dll dxgi.dll d3d11.dll d3d10core.dll d3d12core.dll winemetal.dll; do
if [[ -f "${SYS32}/${dll}" ]]; then
mv -f "${SYS32}/${dll}" "${BAK}/${dll}" 2>/dev/null || true
fi
done
export WINEPREFIX="${BOTTLE_DIR}"
export DYLD_LIBRARY_PATH="${WHISKY_LIBS}/Libraries/Wine/lib/external:${WINE_LIB}:${DYLD_LIBRARY_PATH:-}"
export WINED3DMETAL=1
export WINEDEBUG=-all
"${WINE64}" reg delete 'HKCU\Software\Wine\DllOverrides' /v d3d11 /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKCU\Software\Wine\DllOverrides' /v d3d10core /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKCU\Software\Wine\DllOverrides' /v dxgi /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKCU\Software\Wine\DllOverrides' /v d3d12 /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKCU\Software\Wine\Direct3D' /v renderer /f >/dev/null 2>&1 || true
if [[ -f "${LS}" ]]; then
perl -i -pe 's/^\t\tGraphicsApi = ".*"/\t\tGraphicsApi = "d3d12"/' "${LS}"
else
mkdir -p "$(dirname "${LS}")"
cat >"${LS}" <<'EOF'
return {
Options = {
GraphicsApi = "d3d12",
VideoPreset = "Low",
},
}
EOF
fi
if [[ -f "${BOTTLE_DIR}/Metadata.plist" ]]; then
/usr/libexec/PlistBuddy -c 'Set :dxvkConfig:dxvk false' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || true
/usr/libexec/PlistBuddy -c 'Set :performanceConfig:forceD3D11 false' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || \
/usr/libexec/PlistBuddy -c 'Add :performanceConfig:forceD3D11 bool false' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || true
/usr/libexec/PlistBuddy -c 'Set :graphicsConfig:backend d3dMetal' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || true
/usr/libexec/PlistBuddy -c 'Set :metalConfig:sequoiaCompatMode true' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || true
fi
touch "${BOTTLE_DIR}/.ja3_d3dmetal_prepared"
# Ярлык для Whisky Run (тот же CWD + D3DMetal env из Metadata)
cat >"${BOTTLE_DIR}/drive_c/GOG Games/Jagged Alliance 3/run-ja3.cmd" <<'EOF'
@echo off
cd /d "C:\GOG Games\Jagged Alliance 3"
start "" "JA3.exe" -unpacked %*
EOF
echo "OK: D3DMetal graphics для ${BOTTLE_NAME}"
echo " Скрипт: bash ${GOG_DIR}/run-ja3.sh"
echo " Whisky Run: C:\\GOG Games\\Jagged Alliance 3\\run-ja3.cmd (не JA3.exe напрямую)"