#!/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 }