120 lines
3.0 KiB
Bash
120 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
# shellcheck disable=SC2034,SC2154 # Sourced by audiogame-manager and installers with shared globals.
|
|
|
|
require_umu() {
|
|
if command -v umu-run &> /dev/null; then
|
|
return 0
|
|
fi
|
|
local message="This game requires umu-launcher. Please install umu-launcher and try again."
|
|
if declare -F agm_msgbox &> /dev/null; then
|
|
agm_msgbox "Audio Game Manager" "Audio Game Manager" "$message"
|
|
else
|
|
echo "$message" >&2
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
get_umu_bottle() {
|
|
local gameId="$1"
|
|
if [[ -z "$gameId" ]]; then
|
|
echo "get_umu_bottle requires a game id." >&2
|
|
return 1
|
|
fi
|
|
|
|
export umuGameId="$gameId"
|
|
export WINEPREFIX="${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/protonBottles/${gameId}"
|
|
export GAMEID="$gameId"
|
|
export STORE="${umuStore:-none}"
|
|
export DISPLAY="${DISPLAY:-:0}"
|
|
mkdir -p "$WINEPREFIX"
|
|
}
|
|
|
|
install_proton_bottle() {
|
|
local gameId="$1"
|
|
shift || true
|
|
require_umu || return 1
|
|
get_umu_bottle "$gameId" || return 1
|
|
|
|
if [[ ! -f "${WINEPREFIX}/system.reg" ]]; then
|
|
umu-run ""
|
|
fi
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
umu-run winetricks "$@"
|
|
fi
|
|
}
|
|
|
|
umu_windows_path_to_unix() {
|
|
local windowsPath="$1"
|
|
local relativePath=""
|
|
if [[ "$windowsPath" =~ ^[cC]:\\ ]]; then
|
|
relativePath="${windowsPath:3}"
|
|
relativePath="${relativePath//\\//}"
|
|
printf '%s/drive_c/%s\n' "$WINEPREFIX" "$relativePath"
|
|
return 0
|
|
fi
|
|
winepath -u "$windowsPath"
|
|
}
|
|
|
|
run_umu_game() {
|
|
local windowsPath="$1"
|
|
local exePath=""
|
|
require_umu || return 1
|
|
if [[ -z "${umuGameId:-}" ]]; then
|
|
echo "UMU game id is not set for ${game[2]:-selected game}." >&2
|
|
return 1
|
|
fi
|
|
get_umu_bottle "$umuGameId" || return 1
|
|
exePath="$(umu_windows_path_to_unix "$windowsPath")"
|
|
if [[ ! -f "$exePath" ]]; then
|
|
echo "UMU executable not found: $exePath" >&2
|
|
return 1
|
|
fi
|
|
pushd "${exePath%/*}" > /dev/null || return 1
|
|
umu-run "$exePath"
|
|
popd > /dev/null || return 1
|
|
}
|
|
|
|
add_umu_launcher() {
|
|
local gameId="$1"
|
|
local windowsPath="$2"
|
|
shift 2
|
|
local launchSettings="umu|${windowsPath}|${game}|export umuGameId=${gameId}"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
launchSettings+="|$1"
|
|
shift
|
|
done
|
|
|
|
if ! grep -F -q -x "$launchSettings" "$configFile" 2> /dev/null; then
|
|
echo "$launchSettings" >> "$configFile"
|
|
sort -t '|' -k3,3f -o "$configFile" "$configFile"
|
|
fi
|
|
}
|
|
|
|
set_umu_reg_value() {
|
|
local key="$1"
|
|
local valueName="$2"
|
|
local valueData="$3"
|
|
wine reg add "$key" /v "$valueName" /t REG_SZ /d "$valueData" /f
|
|
}
|
|
|
|
set_umu_app_winver() {
|
|
local exeName="$1"
|
|
local winVersion="$2"
|
|
set_umu_reg_value "HKCU\\Software\\Wine\\AppDefaults\\${exeName}" "Version" "$winVersion"
|
|
}
|
|
|
|
install_crlf_file() {
|
|
local sourceFile="$1"
|
|
local destFile="$2"
|
|
mkdir -p "${destFile%/*}"
|
|
perl -pe 's/\r?\n/\r\n/' "$sourceFile" > "$destFile"
|
|
}
|
|
|
|
stop_umu_bottle() {
|
|
if command -v wineserver &> /dev/null; then
|
|
wineserver -k 2> /dev/null || true
|
|
fi
|
|
}
|