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>
59 lines
2.7 KiB
Bash
Executable File
59 lines
2.7 KiB
Bash
Executable File
#!/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)"
|