Add basic Wine install and launch helpers

This commit is contained in:
Storm Dragon
2026-04-22 12:06:02 -04:00
parent e42edf2000
commit 7c9f485962
2 changed files with 115 additions and 0 deletions
@@ -125,3 +125,104 @@ get_installer() {
exit 1
fi
}
install_with_progress() {
local operation="$1"
local message="$2"
shift 2
case "$operation" in
unzip)
unzip -o "$@" | ui_progressbox "Game Installation" "$message"
;;
7z)
7z -y "$@" | ui_progressbox "Game Installation" "$message"
;;
cp|copy)
cp -fv "$@" | ui_progressbox "Game Installation" "$message"
;;
*)
"$operation" "$@" | ui_progressbox "Game Installation" "$message"
;;
esac
}
install_wine_bottle() {
local dep
local depsToInstall=()
check_dependencies wine wineserver winepath winetricks
if [[ -z "${WINEARCH:-}" ]]; then
export WINEARCH="win64"
fi
case "$WINEARCH" in
win64) export WINEPREFIX="${HOME}/.local/wine64" ;;
*)
ui_msgbox "Game Installer" "Game Installer" "Unsupported Wine architecture: ${WINEARCH}"
exit 1
;;
esac
mkdir -p "$WINEPREFIX"
if [[ ! -f "${WINEPREFIX}/system.reg" ]]; then
ui_progressbox "Wine Setup" "Initializing Wine bottle" < /dev/null
DISPLAY="${DISPLAY:-}" wine wineboot -u
fi
for dep in "$@"; do
case "$dep" in
sapi|speechsdk)
depsToInstall+=(speechsdk)
;;
win7|win8|win10|corefonts|vcrun2019|isolate_home)
depsToInstall+=("$dep")
;;
esac
done
if [[ "${#depsToInstall[@]}" -gt 0 ]]; then
env DISPLAY="${DISPLAY:-:0}" WINETRICKS_FORCE=1 winetricks -q "${depsToInstall[@]}" \
| ui_progressbox "Wine Setup" "Installing Wine dependencies"
fi
if [[ -n "${winVer:-}" ]]; then
export gameWinVer="$winVer"
fi
}
set_app_winver() {
local exePath="$1"
local winVersion="$2"
local exeName="${exePath##*\\}"
local regFile
[[ -n "$exePath" && -n "$winVersion" ]] || return 0
regFile="$(mktemp)"
cat > "$regFile" <<REGEDIT
REGEDIT4
[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\${exeName}]
"Version"="${winVersion}"
REGEDIT
wine regedit "$regFile"
rm -f "$regFile"
}
add_launcher() {
local wineTarget="$1"
local launcherRecipe="${launchRoot}/${gameName}.game"
[[ -n "$wineTarget" ]] || return 1
if [[ -n "${gameWinVer:-}" ]]; then
set_app_winver "$wineTarget" "$gameWinVer"
unset gameWinVer
fi
cat > "$launcherRecipe" <<LAUNCHER
run_wine_path '${wineTarget}'
LAUNCHER
chmod 755 "$launcherRecipe"
}
@@ -63,6 +63,20 @@ run_wine() {
popd > /dev/null || return 1
}
run_wine_path() {
local wineTarget="$1"
local wineDir
local wineExec
export WINEPREFIX="${WINEPREFIX:-${HOME}/.local/wine64}"
wineserver -k 2> /dev/null || true
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
wineExec="${wineTarget##*\\}"
pushd "$wineDir" > /dev/null || return 1
wine "$wineExec"
popd > /dev/null || return 1
}
run_native() {
local gameDir="$1"
local exeName="$2"