diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 364359f..bc45830 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -75,6 +75,7 @@ check_news() { fi } +# Automatic update function # Automatic update function update() { if ! [[ -d ".git" ]]; then @@ -93,7 +94,8 @@ if [[ "$home" == "$remote" ]]; then fi dialog --backtitle "Audiogame Manager" \ --yesno "Updates are available. Would you like to update now?" -1 -1 --stdout || return - git pull + { git pull + git log '@{1}..' --pretty=format:'%an: %s'; } exit $? } @@ -328,10 +330,16 @@ get_bottle() { "triple-triad"*) export WINEPREFIX="${HOME}/.local/wine/aprone" ;; "bg-"*) export WINEPREFIX="${HOME}/.local/wine/bg";; - # ESP Pinball games - "esp-pinball-classic"*) export WINEPREFIX="${HOME}/.local/wine/esp-pinball";; - "esp-pinball-extreme"*) export WINEPREFIX="${HOME}/.local/wine/esp-pinball";; - "esp-pinball-party-pack"*) export WINEPREFIX="${HOME}/.local/wine/esp-pinball";; + # draconis games + "esp-pinball-classic"*) ;& + "esp-pinball-extreme"*) ;& + "esp-pinball-party-pack"*) ;& + "silver-dollar"*) ;& + "monkey-business"*) ;& + "alien-outback"*) ;& + "dyna-man"*) ;& + "change-reaction"*) ;& + "ten-pin-alley"*) export WINEPREFIX="${HOME}/.local/wine/draconis";; # l-works games group "duck-hunt"*) ;& "judgement-day"*) ;& @@ -423,8 +431,24 @@ get_installer() { get_steam() { # Arguments: $1 id of item for download, $2 url for game trap "exit 0" SIGINT - echo "The next steps will install through steamcmd." + echo "manual intervention required." alert + dialog --backtitle "Audiogame Manager" \ + --yes-label "Continue with Steam" \ + --no-label "Install manually" \ + --extra-button \ + --extra-label "Exit" \ + --yesno "To install the game manually, place files in \"${WINEPREFIX}/drive_c/Program Files/${game}\"" -1 -1 --stdout + case $? in + 0) echo "The next steps will install through steamcmd." ;; + 1) + mkdir -p "${WINEPREFIX}/drive_c/Program Files/${game}" + dialog --backtitle "Audiogame Manager" \ + --msgbox "Place game files in \"${WINEPREFIX}/drive_c/Program Files/${game}\" and press enter to continue." -1 -1 --stdout + return + ;; + *) exit 0 ;; + esac # Check for steamcmd if ! command -v steamcmd &> /dev/null ; then dialog --backtitle "Audiogame Manager" \ @@ -690,7 +714,7 @@ install_wine_bottle() { game_installer() { export LANG="en_US.UTF-8" # Try to deal with systems in other languages - mapfile -t installedGames < <(sed '/^$/d' "${configFile}" 2> /dev/null | cut -d '|' -f3) + mapfile -t installedGames < <(sed -e '/^$/d' -e '/^[[:space:]]*#/d' "${configFile}" 2> /dev/null | cut -d '|' -f3) # Create the menu of installed games declare -a menuList for i in "${gameList[@]}" ; do @@ -719,7 +743,7 @@ game_installer() { # remove games game_removal() { - mapfile -t lines < <(sed '/^$/d' "${configFile}" 2> /dev/null) + mapfile -t lines < <(sed -e '/^$/d' -e '/^[[:space:]]*#/d' "${configFile}" 2> /dev/null) if [[ ${#lines} -eq 0 ]]; then echo "No games found." exit 0 @@ -727,7 +751,8 @@ game_removal() { # Create the menu of installed games declare -a menuList for i in "${lines[@]}" ; do - menuList+=("${i%|*}" "${i##*|}") + IFS='|' read -ra gameInfo <<< "$i" + menuList+=("${gameInfo[0]}|${gameInfo[1]}" "${gameInfo[2]}") done menuList+=("Donate" "Donate") menuList+=("Become a Patron" "Become a Patron") @@ -781,7 +806,8 @@ kill_game() { # Create the menu of installed games declare -a menuList for i in "${lines[@]}" ; do - menuList+=("${i%|*}" "${i##*|}") + IFS='|' read -ra gameInfo <<< "$i" + menuList+=("${gameInfo[0]}|${gameInfo[1]}" "${gameInfo[2]}") done menuList+=("Donate" "Donate") menuList+=("Become a Patron" "Become a Patron") @@ -812,11 +838,142 @@ kill_game() { exit 0 } +# for games that require custom scripts before launch or custom launch parameters +custom_launch_parameters() { + if [[ "${game[0]}" == "dragon-pong" ]]; then + "${0%/*}/speech/speak_window_title.sh" DragonPong.exe & + pushd "$(winepath "$winePath")" + wine "$wineExec" + popd + exit 0 + fi + if [[ "${game[0]}" == "executioner's-rage" ]]; then + find "${WINEPREFIX}/drive_c/Program Files" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; + fi + if [[ "${game[0]}" == "haunted-party" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ "${game[0]}" == "laser-breakout" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + "${0%/*}/speech/speak_window_title.sh" play.exe & + fi + if [[ "${game[0]}" == "light-battles" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ "${game[0]}" == "mist-world" ]]; then + "${0%/*}/speech/speak_window_title.sh" mw.exe & + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ "${game[0]}" == "oh-shit" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ "${game[0]}" == "bokurano-daibouken-2" ]]; then + "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken2 & + fi + if [[ "${game[0]}" == "bokurano-daibouken" ]]; then + "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken & + fi + if [[ "${game[0]}" =~ "bokurano-daibouken-3" ]]; then + dictPath="$(winepath "${winePath}")" + if [[ -r "${cache}/bk3-dict.dat" ]] && [[ ! -d "${dictPath}/dict" ]]; then + cp "${cache}/bk3-dict.dat" "${dictPath}/dict.dat" + fi + if [[ -d "${dictPath}/dict" ]]; then + if [[ ! -e "${dictPath}/data/nvdaControllerClient.dll" ]]; then + cp "${cache}/nvda2speechd32.dll" "${dictPath}/data/nvdaControllerClient.dll" + fi + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ ! -d "${dictPath}/dict" ]] && [[ ! -r "${cache}/bk3-dict.dat" ]]; then + find "${WINEPREFIX}/drive_c/nyanchangame/bk3" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \; + "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken3 & + fi + fi + if [[ "${game[0]}" == "bop-it-emulator" ]]; then + "${0%/*}/speech/speak_window_title.sh" bop.exe & + fi + if [[ "${game[0]}" == "breu2-shadow-hunt" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ "${game[0]}" == "road-to-rage" ]]; then + "${0%/*}/speech/speak_window_title.sh" trtr.exe & + fi + if [[ "${game[0]}" == "sequence-storm" ]]; then + "${0%/*}/speech/clipboard_reader.sh" SequenceStorm & + fi + if [[ "${game[0]}" == "shadow-line" ]]; then + find "${WINEPREFIX}/drive_c/" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \; + "${0%/*}/speech/clipboard_translator.sh" play_sr.exe shadow-line & + fi + if [[ "${game[0]}" == "sketchbook" ]]; then + find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; + fi + if [[ "${game[0]}" == "audiodisc" ]]; then + wine "$winePath\\$wineExec" + exit 0 + fi + if [[ "${game[0]}" == "audioquake" ]]; then + wine "$winePath\\$wineExec" + exit 0 + fi + if [[ "${game[0]}" == "screaming-strike-2" ]]; then + pushd "$(winepath "$winePath")" + ${wine} "$wineExec" + popd + exit 0 + fi + if [[ "${game[0]}" == "warsim" ]]; then + pushd "$(winepath "${game[1]%\\*}")" + wine "${game[1]##*\\}" + popd + exit 0 + fi + if [[ "${game[0]}" == "interceptor" ]]; then + pushd "$(winepath "$winePath")" + wine "$wineExec" + popd + exit 0 + fi + if [[ "${game[0]}" == "vip-mud" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi + if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + # switch to wine64 for 64 bit prefix. + [[ "${wine}" == "wine" ]] && export wine="wine64" + fi + if [[ "${game[0]}" == "the-great-toy-robbery" ]] ; then + pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & + fi +} + +# Process game launcher flags +process_launcher-flags() { + flags=("${game[@]:3}") + for i in "${flags[@]}" ; do + if [[ "${i}" =~ ^export\ [a-zA-Z_][a-zA-Z0-9_]*=\'?.*\'?$ ]]; then + eval "${i}" + fi + done +} + +create_game_array() { + # Game array 0 bottle, 1 path, 2 title, 3+ flags + for i in "${lines[@]}" ; do + if [[ "${game}" =~ ^${i} ]]; then + # This is weird. Why do I have to set game to i before making the array? + game="$i" + IFS='|' read -ra game <<< "$i" + break + fi + done +} + # launch games that are installed game_launcher() { # For use by update scripts that want to source functions in this file. [[ "$agmNoLaunch" == "true" ]] && return - mapfile -t lines < <(sed '/^$/d' "${configFile}" 2> /dev/null) + mapfile -t lines < <(sed -e '/^$/d' -e '/^ *#/d' "${configFile}" 2> /dev/null) if [[ ${#lines} -eq 0 ]]; then echo "Install some games first." exit 0 @@ -825,7 +982,8 @@ game_launcher() { # Create the menu of installed games declare -a menuList for i in "${lines[@]}" ; do - menuList+=("${i%|*}" "${i##*|}") + IFS='|' read -ra gameInfo <<< "$i" + menuList+=("${gameInfo[0]}|${gameInfo[1]}" "${gameInfo[2]}") done menuList+=("Donate" "Donate") menuList+=("Become a Patron" "Become a Patron") @@ -842,156 +1000,47 @@ game_launcher() { elif [[ $menuCode -eq 3 ]]; then documentation "$game" "$(echo "$game" | cut -d '|' -f2)" fi + create_game_array else - local game="$(grep "^${1}|" "${configFile}" 2> /dev/null)" - game="${game%|*}" + create_game_array if [[ -z "$game" ]]; then echo "Game $1 not found." exit 1 fi fi - if [[ ${#game} -gt 0 ]]; then - if [[ "$game" == "Donate" ]]; then + if [[ ${#game[@]} -gt 0 ]]; then + if [[ "${game[0]}" == "Donate" ]]; then open_url "https://ko-fi.com/stormux" exit 0 fi - if [[ "$game" == "Become a Patron" ]]; then + if [[ "${game[0]}" == "Become a Patron" ]]; then open_url "https://2mb.games/product/2mb-patron/" exit 0 fi - get_bottle "$game" + get_bottle "${game[0]}" # make sure wine is actually set to something export wine="${wine:-wine}" echo -n "launching " ${wine} --version - local winePath="${game#*|}" - winePath="${winePath%\\*.exe}" - local wineExec="${game#*|}" - wineExec="${wineExec%|*}" - wineExec="${wineExec##*\\}" # kill any previous existing wineservers for this prefix in case they didn't shut down properly. ${wine}server -k # launch the game if command -v qjoypad &> /dev/null ; then mkdir -p ~/.qjoypad3 - touch "${HOME}/.qjoypad3/${game%|*}.lyt" + touch "${HOME}/.qjoypad3/${game[2]}.lyt" # A | separated list of games that should not start with qjoypad. - noQjoypadGames="a-hero's-call" - if [[ "${noqjoypad}" != "true" ]] && ! [[ "${game}" =~ ${noQjoypadGames} ]]; then + noQjoypadGames="A Hero's Call" + if [[ "${noqjoypad}" != "true" ]] && ! [[ "${game[2]}" =~ ${noQjoypadGames} ]]; then if pgrep qjoypad &> /dev/null ; then - qjoypad -T "${game%|*}" 2> /dev/null + qjoypad -T "${game[2]}" 2> /dev/null else - qjoypad -T "${game%|*}" 2> /dev/null & + qjoypad -T "${game[2]}" 2> /dev/null & fi fi fi - # for games that require custom scripts before launch or custom launch parameters - if [[ "$game" =~ dragon-pong ]]; then - "${0%/*}/speech/speak_window_title.sh" DragonPong.exe & - pushd "$(winepath "$winePath")" - wine "$wineExec" - popd - exit 0 - fi - if [[ "$game" =~ executioner\'s ]]; then - find "${WINEPREFIX}/drive_c/Program Files" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; - fi - if [[ "$game" =~ haunted-party ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ "$game" =~ laser-breakout ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - "${0%/*}/speech/speak_window_title.sh" play.exe & - fi - if [[ "$game" =~ light-battles ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ "$game" =~ mist-world ]]; then - "${0%/*}/speech/speak_window_title.sh" mw.exe & - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ "$game" =~ oh-shit ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ "$game" =~ ^bokurano-daibouken-2\| ]]; then - "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken2 & - fi - if [[ "$game" =~ ^bokurano-daibouken\| ]]; then - "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken & - fi - if [[ "$game" =~ bokurano-daibouken-3 ]]; then - dictPath="$(winepath "${winePath}")" - if [[ -r "${cache}/bk3-dict.dat" ]] && [[ ! -d "${dictPath}/dict" ]]; then - cp "${cache}/bk3-dict.dat" "${dictPath}/dict.dat" - fi - if [[ -d "${dictPath}/dict" ]]; then - if [[ ! -e "${dictPath}/data/nvdaControllerClient.dll" ]]; then - cp "${cache}/nvda2speechd32.dll" "${dictPath}/data/nvdaControllerClient.dll" - fi - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ ! -d "${dictPath}/dict" ]] && [[ ! -r "${cache}/bk3-dict.dat" ]]; then - find "${WINEPREFIX}/drive_c/nyanchangame/bk3" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \; - "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken3 & - fi - fi - if [[ "$game" =~ bop-it-emulator ]]; then - "${0%/*}/speech/speak_window_title.sh" bop.exe & - fi - if [[ "$game" =~ breu2-shadow-hunt ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ "$game" =~ road-to-rage\| ]]; then - "${0%/*}/speech/speak_window_title.sh" trtr.exe & - fi - if [[ "$game" =~ sequence-storm ]]; then - "${0%/*}/speech/clipboard_reader.sh" SequenceStorm & - fi - if [[ "$game" =~ shadow-line ]]; then - find "${WINEPREFIX}/drive_c/" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \; - "${0%/*}/speech/clipboard_translator.sh" play_sr.exe shadow-line & - fi - if [[ "$game" =~ sketchbook ]]; then - find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; - fi - if [[ "$game" =~ audiodisc ]]; then - wine "$winePath\\$wineExec" - exit 0 - fi - if [[ "$game" =~ audioquake ]]; then - wine "$winePath\\$wineExec" - exit 0 - fi - if [[ "$game" =~ screaming-strike-2 ]]; then - pushd "$(winepath "$winePath")" - ${wine} "$wineExec" - popd - exit 0 - fi - if [[ "$game" =~ warsim ]]; then - pushd "$(winepath "$winePath")" - wine "$wineExec" - popd - exit 0 - fi - if [[ "$game" =~ interceptor ]]; then - pushd "$(winepath "$winePath")" - wine "$wineExec" - popd - exit 0 - fi - if [[ "$game" =~ vip-mud ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - # switch to wine64 for 64 bit prefix. - [[ "${wine}" == "wine" ]] && export wine="wine64" - fi - if [[ "$game" =~ the-great-toy-robbery ]] ; then - pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - fi - ${wine:-wine} start /d "${winePath}" "$wineExec" /realtime + process_launcher-flags + custom_launch_parameters + ${wine:-wine} start /d "${game[1]%\\*}" "${game[1]##*\\}" /realtime fi exit 0 } @@ -1004,6 +1053,11 @@ game_launcher() { add_launcher() { local launchSettings="${game,,}" launchSettings="${launchSettings//[[:space:]]/-}|${1}|${game}" + shift + while [[ $# -gt 0 ]]; do + launchSettings+="|$1" + shift + done if ! grep -F -q -x "${launchSettings}" "${configFile}" 2> /dev/null ; then echo "${launchSettings}" >> "${configFile}" sort -o "${configFile}" "${configFile}" @@ -1062,6 +1116,7 @@ unset manualInstall unset version # ipfs gateway export ipfsGateway="${ipfsGateway:-https://gateway.pinata.cloud}" +export nvdaControllerClientDll="${ipfsGateway}/ipfs/QmWu7YdSbKMk1Qm5DKvEA5hk1YuAK8wVkwhDf2CsmPkmF1?filename=nvdaControllerClient32.dll" # The list of games available for installation. @@ -1074,6 +1129,7 @@ gameList=( "Angel Gift" "AudioDisc" "AudioQuake" + "Balatro" "Battlefield 2D" "Battle of the Hunter" "Battle Zone" @@ -1136,6 +1192,7 @@ gameList=( "Castaways" "Castaways 2" "Challenge of the Horse" + "Change Reaction" "Chillingham" #"Chopper Challenge" "Christmas Chaos" @@ -1230,6 +1287,7 @@ gameList=( "Sarah and the Castle of Witchcraft and Wizardry" "Scramble!" "Screaming Strike 2" + "Scrolling Battles" "Sketchbook" "Sequence Storm" #"Shades of Doom 1.2" @@ -1237,11 +1295,13 @@ gameList=( "Shadow Line" "Shooter" "Silver Dollar" + "Simple Fighter" "Skateboarder Pro" "Slender Lost Vision" "Sonic the Hedgehog" "Sonic Zoom" #"Space Defender" + #"Star Treck Final Conflict" "Super Deekout" "Super Dogs Bone Hunt" "Super Egg Hunt" @@ -1285,7 +1345,7 @@ for i in curl sox wine winetricks ; do fi done # Get latest news if available -#check_news +check_news # With no arguments, open the game launcher. if [[ $# -eq 0 ]]; then game_launcher @@ -1357,7 +1417,7 @@ done # Install game based on the selection above. case "${game}" in "A Hero's Call") - download "https://blindgamers.com/downloads/a-heros-call-freeware.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "https://blindgamers.com/downloads/a-heros-call-freeware.zip" "${nvdaControllerClientDll}" export winVer="win7" export winetricksSettings="vd=1024x768" install_wine_bottle speechsdk corefonts @@ -1383,9 +1443,12 @@ case "${game}" in ;; "Alien Outback") download "http://download.dracoent.com/Windows/classic/AOSetup.exe" + export bottle="draconis" export winVer="win7" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/AOSetup.exe" /sp- /silent + cp -v "${cache}/AOSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/AOSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/AOSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -1415,6 +1478,26 @@ download "https://erion.cf/files/ag_103.zip" echo "After you launch the game, press tab then enter and it should begin speaking." alert ;; + "Balatro") + download "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd64.dll" "https://stormgames.wolfe.casa/downloads/Tolk.dll" "https://github.com/Aurelius7309/BlackHole/releases/download/0.3.1/BlackHole-Release.zip" + export WINEARCH=win64 + export winVer="win10" + install_wine_bottle + get_steam "2379780" "https://store.steampowered.com/app/2379780/Balatro/" + mkdir -p "$WINEPREFIX/drive_c/users/$USER/AppData/Roaming/Balatro/Mods" + unzip -d "$WINEPREFIX/drive_c/users/$USER/AppData/Roaming/Balatro" "$cache/BlackHole-Release.zip" + pushd "$WINEPREFIX/drive_c/users/$USER/AppData/Roaming/Balatro/Mods" + (cat mod_urls.txt ; echo) | while read -r x ; do + git clone "$x" + done + cp -v BlackHole/bin/*.dll "$WINEPREFIX/drive_c/Program Files/Balatro" + cp -v "$cache/Tolk.dll" "$WINEPREFIX/drive_c/Program Files/Balatro/tolk.dll" + cp -v "$cache/Tolk.dll" BlackHole/bin/tolk.dll + cp -v "$cache/nvda2speechd64.dll" "$WINEPREFIX/drive_c/Program Files/Balatro/nvdaControllerClient64.dll" + cp -v "$cache/nvda2speechd64.dll" BlackHole/bin/nvdaControllerClient64.dll + cp -v ../version.dll "$WINEPREFIX/drive_c/Program Files/Balatro" + add_launcher 'c:\Program Files\Balatro\Balatro.exe' 'export WINEDLLOVERRIDES=version=n,b' + ;; "Battlefield 2D") get_installer "bf.zip" "https://tunmi13.itch.io/battlefield-2d" download "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd64.dll" @@ -1866,7 +1949,7 @@ download "https://erion.cf/files/ag_103.zip" add_launcher "c:\Program Files\bomvercats\game.exe" ;; "Breed Memorial") - download "https://hirotaka2014.sakura.ne.jp/mh0406/game/breed_memorial.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "https://hirotaka2014.sakura.ne.jp/mh0406/game/breed_memorial.zip" "${nvdaControllerClientDll}" export winVer="win7" install_wine_bottle cjkfonts speechsdk unzip -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/breed_memorial.zip" @@ -1900,6 +1983,20 @@ download "https://erion.cf/files/ag_103.zip" find "${WINEPREFIX}" -type f -name "nvdaControllerClient32.dll" -exec rm -fv "{}" \; add_launcher "c:\Program Files\\${game}\game.exe" ;; + "Change Reaction") + download "https://download.dracoent.com/Windows/ChangeReactionSetup.exe" + export bottle="draconis" + export winVer="win7" + install_wine_bottle vb6run dx8vb speechsdk quartz + cp -v "${cache}/ChangeReactionSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/ChangeReactionSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/ChangeReactionSetup.exe" + # warning warning warning: Do not change location, or installer will not function. + # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. + winetricks -q dotnet20 + wineserver -k # Damn you, dotnet. + add_launcher "c:\Program Files\Draconis Entertainment\Change Reaction\ChangeReactionGui.exe" + ;; "Chillingham") download "https://stormgames.wolfe.casa/downloads/chillingham.zip" install_wine_bottle vb6run mfc42 @@ -1988,12 +2085,14 @@ download "https://erion.cf/files/ag_103.zip" add_launcher "c:\Program Files\copter mission\game.exe" ;; "Crazy Party") - export winVer="win7" - download "${ipfsGateway}/ipfs/QmZPsVdizDW6nrNj9czPTctAomYxafs7SYRw6YjqxPidvn?filename=Crazy-Party-beta78.zip" - install_wine_bottle speechsdk - unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/Crazy-Party-beta78.zip" - add_launcher "c:\Program Files\Crazy-Party-beta78\Crazy Party.exe" - rm -f "${WINEPREFIX}/drive_c/Program Files/Crazy-Party-beta78/nvdaControllerClient32.dll" + export WINEARCH=win64 + export winVer="win8" + download "http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta82.zip" "https://stormgames.wolfe.casa/downloads/Tolk.dll" "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd64.dll" + install_wine_bottle + unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/Crazy-Party-beta82.zip" + find "${WINEPREFIX}" -type f -name 'Tolk.dll' -exec cp -v "${cache}/Tolk.dll" "{}" \; + find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; + add_launcher "c:\Program Files\Crazy-Party-beta82\Crazy Party.exe" ;; "Crazy Tennis") download "https://www.agarchive.net/games/VIP/crazy%20tennis%20setup.exe" @@ -2095,9 +2194,12 @@ download "https://erion.cf/files/ag_103.zip" ;; "DynaMan") export winVer="win7" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/DMSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/DMSetup.exe" /sp- /silent + cp -v "${cache}/DMSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/DMSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/DMSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -2149,10 +2251,12 @@ download "https://erion.cf/files/ag_103.zip" ;; "ESP Pinball Classic") export winVer="win7" - export bottle="esp-pinball" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/PBCSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/PBCSetup.exe" /sp- /silent + cp -v "${cache}/PBCSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/PBCSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/PBCSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -2161,10 +2265,12 @@ download "https://erion.cf/files/ag_103.zip" ;; "ESP Pinball Extreme") export winVer="win7" - export bottle="esp-pinball" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/PBXSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/PBXSetup.exe" /sp- /silent + cp -v "${cache}/PBXSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/PBXSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/PBXSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -2173,15 +2279,17 @@ download "https://erion.cf/files/ag_103.zip" ;; "ESP Pinball Party Pack") export winVer="win7" - export bottle="esp-pinball" - export WINEPREFIX="$HOME/.local/wine/esp-pinball" + export bottle="draconis" + export WINEPREFIX="$HOME/.local/wine/draconis" # Only works in conjunction with esp pinball extreme. if ! [ -f "$HOME/.local/wine/$bottle/drive_c/Program Files/Draconis Entertainment/ESP Pinball Xtreme/pbx.exe" ] ; then echo "Error: You need to install ESP Pinball Extreme first to use this game. Please do so before continuing." >&2 exit 1 fi download "http://download.dracoent.com/Windows/classic/PP1Setup.exe" - wine "${cache}/PP1Setup.exe" /sp- /silent + cp -v "${cache}/PP1Setup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/PP1Setup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/PP1Setup.exe" add_launcher "c:\Program Files\Draconis Entertainment\ESP Pinball Xtreme\pbx.exe" ;; "Eurofly") @@ -2562,9 +2670,12 @@ EOF ;; "Monkey Business") export winVer="win7" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/MBSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/MBSetup.exe" /sp- /silent + cp -v "${cache}/MBSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/MBSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/MBSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -2604,7 +2715,7 @@ EOF "Oh Shit") export winVer="win7" export norh="true" # Requires sapi even though uses nvda - download "${ipfsGateway}/ipfs/QmQnAJJrt5uABFziQc7enXYrJ74J9GKQSMi8Ry8ebsxfPV?filename=OhShit.zip" "https://stormgames.wolfe.casa/downloads/nvda2speechd32.dll" + download "${ipfsGateway}/ipfs/QmQnAJJrt5uABFziQc7enXYrJ74J9GKQSMi8Ry8ebsxfPV?filename=OhShit.zip" "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd" "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd32.dll" install_wine_bottle speechsdk unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/OhShit.zip" find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvda2speechd32.dll" "{}" \; @@ -2773,7 +2884,7 @@ EOF "Rhythm Rage") export bottle="oriol-gomez" export winVer="win7" - download "http://oriolgomez.com/games/rr_en.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "http://oriolgomez.com/games/rr_en.zip" "${nvdaControllerClientDll}" install_wine_bottle speechsdk unzip -d "$WINEPREFIX/drive_c/Program Files/rhythm rage" "${cache}/rr_en.zip" find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; @@ -2808,7 +2919,7 @@ EOF ;; "RS Games") export version="7.0" - download "http://rsgames.org/rsdownloads/rsgclient/rsgames-client-setup-2.01.exe" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "http://rsgames.org/rsdownloads/rsgclient/rsgames-client-setup-2.01.exe" "${nvdaControllerClientDll}" install_wine "$version" "32" export winVer="win7" install_wine_bottle speechsdk @@ -2826,7 +2937,7 @@ EOF ;; "Sammy Center") export winVer="win7" - download "http://www.samtupy.com/games/SCSetup.exe" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "http://www.samtupy.com/games/SCSetup.exe" "${nvdaControllerClientDll}" install_wine_bottle speechsdk wine "${cache}/SCSetup.exe" /silent find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; @@ -2842,7 +2953,7 @@ EOF "Scramble!") winetricksSettings="vd=1024x768" export winVer="win7" - download "https://stevend.net/downloads/scramble_win32.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "https://stevend.net/downloads/scramble_win32.zip" "${nvdaControllerClientDll}" install_wine_bottle speechsdk unzip -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/scramble_win32.zip" find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; @@ -2851,7 +2962,7 @@ EOF "Screaming Strike 2") export bottle="nyanchan" export winVer="win7" - download "https://www.nyanchangames.com/softs/screamingStrike2.exe" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "https://www.nyanchangames.com/softs/screamingStrike2.exe" "${nvdaControllerClientDll}" install_wine_bottle fakejapanese speechsdk wine "${cache}/screamingStrike2.exe" & xdotool sleep 10 key Return @@ -2859,9 +2970,19 @@ EOF find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; add_launcher "c:\nyanchangame\Screaming Strike 2\play.exe" ;; + "Scrolling Battles") + export WINEARCH=win64 + export winVer="win7" + get_installer "sbrw-win.zip" "https://masonasons.itch.io/sbrw" + download "https://stormgames.wolfe.casa/downloads/Tolk.dll" + install_wine_bottle + unzip -d "$WINEPREFIX/drive_c/Program Files/sbrw" "${cache}/sbrw-win.zip" + find "${WINEPREFIX}" -type f -name 'Tolk.dll' -exec cp -v "${cache}/Tolk.dll" "{}" \; + add_launcher "c:\Program Files\sbrw\sb.exe" + ;; "Sketchbook") export winVer="win7" - download "http://sbyw.games/SBYW/SBYW.zip" "http://sbyw.games/SBYW/sounds.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "http://sbyw.games/SBYW/SBYW.zip" "http://sbyw.games/SBYW/sounds.zip" "${nvdaControllerClientDll}" install_wine_bottle speechsdk mv -v "${cache}/sounds.zip" "${cache}/SBYW-sounds.zip" unzip -d "$WINEPREFIX/drive_c/Program Files/sketchbook" "${cache}/SBYW.zip" @@ -2894,7 +3015,7 @@ EOF ;; "Shadow Line") export version="7.7" - download "https://www.mm-galabo.com/sr/Download_files_srfv/shadowrine_fullvoice3.171.exe" + download "https://www.mm-galabo.com/sr/Download_files_srfv/shadowrine_fullvoice3.171.exe" "https://raw.githubusercontent.com/LordLuceus/sr-english-localization/master/language_en.dat" install_wine "$version" "32" export winVer="win8" install_wine_bottle @@ -2908,19 +3029,44 @@ EOF xdotool key --clearmodifiers --delay=500 space xdotool key --clearmodifiers --delay=500 alt+f ${wine}server -w + mv -v "${cache}/language_en.dat" "${WINEPREFIX}/drive_c/Program Files/GalaxyLaboratory/ShadowRine_FullVoice/SystemData/language_en.dat" add_launcher "c:\Program Files\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe" + echo "Please set the language to English when the game opens." + echo "Go to options and press enter." + echo "Press down arrow 5 times and press enter." + echo "Press down arrow 1 time and press enter." + echo "Press up arrow 2 times and press enter." + echo "If everything worked as expected you should be back on the game menu and speech should work." + alert ;; "Silver Dollar") export winVer="win7" + export bottle="draconis" download "http://download.dracoent.com/Windows/SilverDollarSetup.exe" install_wine_bottle speechsdk - wine "${cache}/SilverDollarSetup.exe" /silent + cp -v "${cache}/SilverDollarSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/SilverDollarSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/SilverDollarSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet40 by itself so it actually doesn't hang. DISPLAY="" winetricks -q dotnet40 wineserver -k # Damn you, dotnet. add_launcher "c:\Program Files\Draconis Entertainment\Silver Dollar\SilverDollarGui.exe" ;; + "Simple Fighter") + export WINEARCH=win64 + export winVer="win7" + get_installer "simple fighter.exe" "https://tsatria03.itch.io/simple-fighter" + if [[ ! -r "${cache}/simple-fighter-sounds.7z" ]] && [[ ! -r "${cache}/sounds.7z" ]]; then + get_installer "sounds.7z" "https://tsatria03.itch.io/simple-fighter" + mv "${cache}/sounds.7z" "${cache}/simple-fighter-sounds.7z" + fi + install_wine_bottle + 7z x -o"$WINEPREFIX/drive_c/Program Files/simple fighter" "${cache}/simple fighter.exe" + 7z x -o"$WINEPREFIX/drive_c/Program Files/simple fighter/sounds" "${cache}/simple-fighter-sounds.7z" + find "${WINEPREFIX}/drive_c/Program Files/bf" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; + add_launcher "c:\Program Files\simple fighter\game.exe" + ;; "Slender Lost Vision") export winVer="win7" download "https://www.iamtalon.me/games/slender.zip" @@ -2971,6 +3117,12 @@ EOF find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvdaControllerClient64.dll" "{}" \; add_launcher "c:\Program Files\space_defender\sdefender.exe" ;; + "Star Treck Final Conflict") + download "https://agarchive.net/games/USA/star%20trek%20final%20conflict%20Setup.exe" + install_wine_bottle speechsdk + wine "${cache}/star trek final conflict Setup.exe" /silent + add_launcher "c:\Program Files\USA Games\Final Conflict\stfc.exe" + ;; "Super Deekout") export bottle=dan-z download "http://www.danielzingaro.com/superdeekout_setup.exe" "http://www.danielzingaro.com/sd_full.exe" @@ -3090,9 +3242,12 @@ EOF ;; "Ten Pin Alley") export winVer="win7" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/TPAXPSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/TPAXPSetup.exe" /sp- /silent + cp -v "${cache}/TPAXPSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/TPAXPSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/TPAXPSetup.exe" #winetricks -q msdxmocx # I think having this installed first breaks things. # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. @@ -3267,9 +3422,12 @@ export norh=false # Must install a voice, and rhvoice works easily with 64 bit. ;; "Ultimate SounDoku") export winVer="win7" + export bottle="draconis" download "http://download.dracoent.com/Windows/classic/USSetup.exe" install_wine_bottle vb6run dx8vb speechsdk quartz - wine "${cache}/USSetup.exe" /sp- /silent + cp -v "${cache}/USSetup.exe" "$WINEPREFIX/drive_c/windows/temp/" + wine "c:/windows/temp/USSetup.exe" /sp- /silent + rm -fv "$WINEPREFIX/drive_c/windows/temp/USSetup.exe" # warning warning warning: Do not change location, or installer will not function. # FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang. winetricks -q dotnet20 @@ -3278,7 +3436,7 @@ export norh=false # Must install a voice, and rhvoice works easily with 64 bit. ;; "Undead Assault") export winVer="win7" - download "http://undead-assault.com/static/files/public/undead_assault.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + download "http://undead-assault.com/static/files/public/undead_assault.zip" "${nvdaControllerClientDll}" install_wine_bottle speechsdk unzip -d "$WINEPREFIX/drive_c/Program Files/undead_assault" "${cache}/undead_assault.zip" find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; diff --git a/game-scripts/crazy-party-update.sh b/game-scripts/crazy-party-update.sh index 43993cd..d8faeb6 100755 --- a/game-scripts/crazy-party-update.sh +++ b/game-scripts/crazy-party-update.sh @@ -37,16 +37,37 @@ # Works which are defined in the CPAL as a work which combines Covered Code # or portions thereof with code not governed by the terms of the CPAL. +newVersion=82 + +WINEPREFIX="${XDG_DATA_HOME:-$HOME/.local}/wine/crazy-party" +oldVersion=$(find ~/.local/wine/crazy-party -type d -name 'Crazy-Party-beta*' | tr -cd '[:digit:]') cache="${XDG_CACHE_HOME:-$HOME/.cache}/audiogame-manager" configFile="${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/audiogame-manager/games.conf" -url="http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta78.zip" -(rm -v "${cache}/Crazy-Party-beta77.zip" -wget -O "${cache}/Crazy-Party-beta78.zip" "$url" || { echo "Could not download file."; exit 1; } -unzip -DDod "$HOME/.local/wine/crazy-party/drive_c/Program Files" "${cache}/Crazy-Party-beta78.zip" -rm -fv "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta78/nvdaControllerClient32.dll" -sed -i 's/Crazy-Party-beta77/Crazy-Party-beta78/' "$configFile" -mv -v "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta77/save.bin" "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta78/" -cp -ruv "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta77/"* "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta78/" 2> /dev/null -rm -rf "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta77/") | dialog --progressbox "updating Crazy Party, please wait..." -1 -1 + +if [[ $oldVersion -le 78 ]]; then + echo "Crazy party has to be reinstalled because it is now a 64 bit application." + echo "Please run audiogame-manager -r to remove the old version." + echo "You can then install it again with audiogame-manager -i" + echo "Don't forget to make a backup of your save.bin file, custom card decks, and custom game lists." + find "${WINEPREFIX}/drive_c/Program Files" -type f -name 'save.bin' 2> /dev/null + find "${WINEPREFIX}/drive_c/Program Files" -type d -name 'deck' 2> /dev/null + find "${WINEPREFIX}/drive_c/Program Files" -type d -name 'game' 2> /dev/null +fi +if [[ $oldVersion -eq $newVersion ]]; then + echo "Crazy Party is up to date." + exit 0 +fi + + +url="http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta${newVersion}.zip" +(rm -v "${cache}/Crazy-Party-beta${oldVersion}.zip" +wget -O "${cache}/Crazy-Party-beta${newVersion}.zip" "$url" || { echo "Could not download file."; exit 1; } +unzip -DDod "${WINEPREFIX}/drive_c/Program Files" "${cache}/Crazy-Party-beta${newVersion}.zip" +find "${WINEPREFIX}" -type f -name 'Tolk.dll' -exec cp -v "${cache}/Tolk.dll" "{}" \; +find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; +sed -i "s/Crazy-Party-beta${oldVersion}/Crazy-Party-beta${newVersion}/" "$configFile" +cp -v "${WINEPREFIX}/drive_c/Program Files/Crazy-Party-beta${oldVersion}/save.bin" "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta${newVersion}/" +cp -ruv "${WINEPREFIX}/drive_c/Program Files/Crazy-Party-beta${oldVersion}/"* "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta${newVersion}/" 2> /dev/null +rm -rf "${WINEPREFIX}/drive_c/Program Files/Crazy-Party-beta${oldVersion}/") | dialog --progressbox "updating Crazy Party, please wait..." -1 -1 exit 0