Files
local_machine/scripts/games/gog/install-ja3-dxmt.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

59 lines
2.7 KiB
Bash
Executable File
Raw Permalink 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
# DXMT (D3D10/11 → Metal) для JA3 без GPTK. JA3 на D3D12 всё равно нужен GPTK; скрипт + -graphicsapi d3d11.
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
GAMES_DIR="$(cd "${GOG_DIR}/.." && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
DXMT_CACHE="${GAMES_DIR}/cache/dxmt"
DXMT_TAR="${DXMT_CACHE}/dxmt-v0.80-builtin.tar.gz"
DXMT_URL="https://github.com/3Shain/dxmt/releases/download/v0.80/dxmt-v0.80-builtin.tar.gz"
WINE_LIB="${WHISKY_LIBS}/Libraries/Wine/lib"
WINE_LIB64="${WINE_LIB}/wine/x86_64-windows"
WINE_UNIX="${WINE_LIB}/wine/x86_64-unix"
SYS32="${BOTTLE_DIR}/drive_c/windows/system32"
gog_wine_check
mkdir -p "${DXMT_CACHE}" "${SYS32}"
[[ -f "${DXMT_TAR}" ]] || curl -L --fail -o "${DXMT_TAR}" "${DXMT_URL}"
tar -xzf "${DXMT_TAR}" -C "${DXMT_CACHE}"
# builtin layout: bin/ or root with dlls — find files
DXMT_ROOT="${DXMT_CACHE}"
for sub in dxmt-v0.80-builtin bin .; do
[[ -f "${DXMT_CACHE}/${sub}/d3d11.dll" ]] && DXMT_ROOT="${DXMT_CACHE}/${sub}" && break
done
[[ -f "${DXMT_ROOT}/d3d11.dll" ]] || DXMT_ROOT="$(find "${DXMT_CACHE}" -name d3d11.dll -print -quit | xargs dirname)"
install_one() {
local src="$1" dest="$2"
[[ -f "${src}" ]] || return 0
cp -f "${src}" "${dest}/"
}
install_one "${DXMT_ROOT}/winemetal.so" "${WINE_UNIX}"
install_one "${DXMT_ROOT}/winemetal.dll" "${WINE_LIB64}"
install_one "${DXMT_ROOT}/winemetal.dll" "${SYS32}"
install_one "${DXMT_ROOT}/d3d11.dll" "${WINE_LIB64}"
install_one "${DXMT_ROOT}/dxgi.dll" "${WINE_LIB64}"
install_one "${DXMT_ROOT}/d3d10core.dll" "${WINE_LIB64}"
# Только wine lib + system32 (не в папку игры — иначе конфликт с overrides).
install_one "${DXMT_ROOT}/d3d11.dll" "${SYS32}"
install_one "${DXMT_ROOT}/dxgi.dll" "${SYS32}"
install_one "${DXMT_ROOT}/d3d10core.dll" "${SYS32}"
export WINEPREFIX="${BOTTLE_DIR}"
export DYLD_LIBRARY_PATH="${WINE_LIB}:${DYLD_LIBRARY_PATH:-}"
"${WINE64}" reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v d3d12 /d disabled /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v d3d11 /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v d3d10core /f >/dev/null 2>&1 || true
"${WINE64}" reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v dxgi /f >/dev/null 2>&1 || true
touch "${BOTTLE_DIR}/.ja3_dxmt_installed"
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 true' "${BOTTLE_DIR}/Metadata.plist" 2>/dev/null || true
fi
echo "OK: DXMT v0.80 в ${BOTTLE_NAME} (+ game dir)"