From 21a4cc943f4990f1d17711ebf7d4c36c3d17814a Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 15 Apr 2024 14:33:33 -0400 Subject: [PATCH 01/26] Fixed typo. --- audiogame-manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 364359f..7da46f3 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1285,7 +1285,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 From d2bc752393838096f8fce8a4252668e6dbd05848 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Tue, 23 Apr 2024 01:20:13 -0400 Subject: [PATCH 02/26] Move fake nvdaControllerclient32.dll to ipfs. --- audiogame-manager.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 7da46f3..8858672 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1062,6 +1062,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. @@ -1357,7 +1358,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 @@ -1866,7 +1867,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" @@ -2773,7 +2774,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 +2809,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 +2827,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 +2843,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 +2852,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 @@ -2861,7 +2862,7 @@ EOF ;; "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" @@ -3278,7 +3279,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" "{}" \; From 91c689278540c7017ccb8f04ea253222b78ca6ec Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 10 Jun 2024 12:02:49 -0400 Subject: [PATCH 03/26] Started work on adding "star Treck Final Conflict" it's commented out because not yet working. --- audiogame-manager.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 8858672..f23198a 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1243,6 +1243,7 @@ gameList=( "Sonic the Hedgehog" "Sonic Zoom" #"Space Defender" + #"Star Treck Final Conflict" "Super Deekout" "Super Dogs Bone Hunt" "Super Egg Hunt" @@ -2972,6 +2973,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" From 77d57a4fefce5f16c149cae577e8b3888bf77cc7 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Wed, 19 Jun 2024 23:00:02 -0400 Subject: [PATCH 04/26] Added game "Scrolling Battles Rewrite". --- audiogame-manager.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index f23198a..d05161d 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1231,6 +1231,7 @@ gameList=( "Sarah and the Castle of Witchcraft and Wizardry" "Scramble!" "Screaming Strike 2" + "Scrolling Battles" "Sketchbook" "Sequence Storm" #"Shades of Doom 1.2" @@ -2861,6 +2862,16 @@ 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" "${nvdaControllerClientDll}" From 94d6c3c4bcc9f5559d144743041187a26827a409 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sat, 6 Jul 2024 14:36:33 -0400 Subject: [PATCH 05/26] Added game "Simple Fighter". --- audiogame-manager.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index d05161d..b8baf91 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1239,6 +1239,7 @@ gameList=( "Shadow Line" "Shooter" "Silver Dollar" + "Simple Fighter" "Skateboarder Pro" "Slender Lost Vision" "Sonic the Hedgehog" @@ -2934,6 +2935,20 @@ EOF 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" From 35a44cac17d074cfd72972fe9ddabdb80f1eac5c Mon Sep 17 00:00:00 2001 From: Michael Taboada Date: Wed, 28 Aug 2024 09:47:36 -0700 Subject: [PATCH 06/26] Put draconis games in their own wine bottle. Please reinstall your games to get the right paths. --- audiogame-manager.sh | 79 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index b8baf91..f3e6b9d 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -328,10 +328,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"*) ;& @@ -1137,6 +1143,7 @@ gameList=( "Castaways" "Castaways 2" "Challenge of the Horse" + "Change Reaction" "Chillingham" #"Chopper Challenge" "Christmas Chaos" @@ -1387,9 +1394,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 @@ -1904,6 +1914,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 @@ -2099,9 +2123,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 @@ -2153,10 +2180,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 @@ -2165,10 +2194,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 @@ -2177,15 +2208,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") @@ -2566,9 +2599,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 @@ -2926,9 +2962,12 @@ EOF ;; "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 @@ -3124,9 +3163,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. @@ -3301,9 +3343,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 From 600e92c6db55e4b799d3788be67855c8c4c049d2 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 2 Sep 2024 04:23:41 -0400 Subject: [PATCH 07/26] Switch Shadow Line to use English translations file. --- audiogame-manager.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index b8baf91..d650800 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -949,7 +949,7 @@ game_launcher() { 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 & + "${0%/*}/speech/clipboard_reader.sh" play_sr.exe shadow-line & fi if [[ "$game" =~ sketchbook ]]; then find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; @@ -2908,7 +2908,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 @@ -2922,7 +2922,15 @@ 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" From 2f397693624600afb8e276a3cb28b9cf40fa0c2a Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 2 Sep 2024 15:36:07 -0400 Subject: [PATCH 08/26] Small updates to Shadow Line. --- audiogame-manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index c742819..d79ae5c 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -955,7 +955,7 @@ game_launcher() { fi if [[ "$game" =~ shadow-line ]]; then find "${WINEPREFIX}/drive_c/" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \; - "${0%/*}/speech/clipboard_reader.sh" play_sr.exe shadow-line & + "${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" "{}" \; From b36d99c97077e52d37cd60a1d7b2fe9fa44c74ff Mon Sep 17 00:00:00 2001 From: Michael Taboada Date: Sat, 7 Sep 2024 15:13:03 -0700 Subject: [PATCH 09/26] Crazy party beta81 is working. Until we get the update script working, please remove and reinstall. --- audiogame-manager.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index d79ae5c..00bb8a2 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -2016,12 +2016,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-beta81.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-beta81.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-beta81\Crazy Party.exe" ;; "Crazy Tennis") download "https://www.agarchive.net/games/VIP/crazy%20tennis%20setup.exe" From 9ce0c4c1e31f8e6a7c0ad78ac376b1516b5d1e08 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 9 Sep 2024 01:20:56 -0400 Subject: [PATCH 10/26] For games that require steamcmd, you can now place the files manually if you want. --- audiogame-manager.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 00bb8a2..e89eaaf 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -429,8 +429,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" \ From f459791fda87674ea1ae9a5a4b6660f370eac51d Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 12 Sep 2024 01:35:58 -0400 Subject: [PATCH 11/26] Started restructuring of the game launcher function. This included splitting it into 3 functions as well as redoing the way games are read from the games.conf file. There very well may be bugs. --- audiogame-manager.sh | 262 ++++++++++++++++++++++--------------------- 1 file changed, 137 insertions(+), 125 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index e89eaaf..adfe031 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -834,11 +834,132 @@ 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 "$winePath")" + wine "$wineExec" + 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 +} + +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 @@ -847,7 +968,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") @@ -864,156 +986,46 @@ 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 + custom_launch_parameters + ${wine:-wine} start /d "${game[1]%\\*}" "${game[1]##*\\}" /realtime fi exit 0 } From cabe79cc3406adc5f78d50fca9b43b0c9fab4020 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 12 Sep 2024 01:49:01 -0400 Subject: [PATCH 12/26] Fixed launcher for Warsim. --- audiogame-manager.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index adfe031..824c618 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -919,8 +919,8 @@ custom_launch_parameters() { exit 0 fi if [[ "${game[0]}" == "warsim" ]]; then - pushd "$(winepath "$winePath")" - wine "$wineExec" + pushd "$(winepath "${game[1]%\\*}")" + wine "${game[1]##*\\}" popd exit 0 fi From c77f05b86a44ee8cec671bceec1fbe5c106747c0 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 12 Sep 2024 14:26:46 -0400 Subject: [PATCH 13/26] More work on supporting extra flags like variable exports. Fixed the kill flag because the new format of the $game variable broke it. Probably still more bugs to deal with, just let me know if you find any. --- audiogame-manager.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 824c618..14bc14c 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -803,7 +803,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") @@ -943,6 +944,16 @@ custom_launch_parameters() { 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 @@ -1024,6 +1035,7 @@ game_launcher() { fi fi fi + process_launcher-flags custom_launch_parameters ${wine:-wine} start /d "${game[1]%\\*}" "${game[1]##*\\}" /realtime fi From c012cb5574112bc081d904749483a8222173b490 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 12 Sep 2024 14:37:51 -0400 Subject: [PATCH 14/26] Updated the add_launcher function to handle extra parameters. --- audiogame-manager.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 14bc14c..a2fe53b 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1050,6 +1050,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}" From 29ead41c1615ad60b513eafe56774344aea13887 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 12 Sep 2024 16:38:35 -0400 Subject: [PATCH 15/26] Added game "Balatro" --- audiogame-manager.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index a2fe53b..c841379 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -712,7 +712,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 @@ -1126,6 +1126,7 @@ gameList=( "Angel Gift" "AudioDisc" "AudioQuake" + "Balatro" "Battlefield 2D" "Battle of the Hunter" "Battle Zone" @@ -1474,6 +1475,16 @@ 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" + export WINEARCH=win64 + export winVer="win10" + install_wine_bottle + get_steam "2379780" "https://store.steampowered.com/app/2379780/Balatro/" + find "$WINEPREFIX/drive_c/Program Files/Balatro" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "$cache/nvda2speechd64.dll" "{}" \; + find "$WINEPREFIX/drive_c/Program Files/Balatro" -type f -name 'tolk.dll' -exec cp -v "$cache/Tolk.dll" "{}" \; + 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" From d1f95e02ef9cdf0613a92af767b86075b5ad2e65 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 13 Sep 2024 01:28:22 -0400 Subject: [PATCH 16/26] Migrated the game removal function over to the new system. --- audiogame-manager.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index c841379..b83450b 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -741,7 +741,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 @@ -749,7 +749,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") From 65a44d2c6b566eed76485e9e569cf670b0614429 Mon Sep 17 00:00:00 2001 From: Michael Taboada Date: Fri, 13 Sep 2024 11:17:04 -0700 Subject: [PATCH 17/26] Actually include the accessibility features for balatro! Doh lol. --- audiogame-manager.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index b83450b..bb80b97 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1477,13 +1477,23 @@ download "https://erion.cf/files/ag_103.zip" alert ;; "Balatro") - download "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd64.dll" "https://stormgames.wolfe.casa/downloads/Tolk.dll" + 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/" - find "$WINEPREFIX/drive_c/Program Files/Balatro" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "$cache/nvda2speechd64.dll" "{}" \; - find "$WINEPREFIX/drive_c/Program Files/Balatro" -type f -name 'tolk.dll' -exec cp -v "$cache/Tolk.dll" "{}" \; + 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") From ef19077d1cfbbd747edd7de5d1741633815b75ea Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Thu, 26 Sep 2024 04:52:44 -0400 Subject: [PATCH 18/26] Initial attempt at adding "The Tornado Chicken". Not quite working yet, crashes at main menu. --- audiogame-manager.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index b83450b..179695b 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1313,6 +1313,7 @@ gameList=( "The Blind Swordsman" #"The Gate" "The Great Toy Robbery" + "The Tornado Chicken" "The Vale" "They'll Come from the Moon" "Thief" @@ -3265,6 +3266,16 @@ EOF find "${WINEPREFIX}/drive_c/Program Files/Lworks/The Great Toy Robbery" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvda2speechd32.dll" "{}" \; add_launcher "c:\Program Files\Lworks\The Great Toy Robbery\tgtr.exe" ;; + "The Tornado Chicken") + export WINEARCH=win64 + export winVer="win10" + get_installer "ttc v2.0 windows.zip" "https://renzivan.itch.io/the-tornado-chicken" + install_wine_bottle + mkdir -p "$WINEPREFIX/drive_c/Program Files/The Tornado Chicken" + unzip -d "$WINEPREFIX/drive_c/Program Files/The Tornado Chicken" "${cache}/ttc v2.0 windows.zip" + find "${WINEPREFIX}/drive_c/Program Files/bf" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; + add_launcher "c:\Program Files\The Tornado Chicken\Ttc v2.0.exe" + ;; "The Vale") get_installer "the-vale-win.zip" "https://falling-squirrel.itch.io/the-vale" export WINEARCH=win64 From 91db128659cdb46973627c40436862b30291700b Mon Sep 17 00:00:00 2001 From: Michael Taboada Date: Thu, 26 Sep 2024 03:31:16 -0700 Subject: [PATCH 19/26] Revert "Initial attempt at adding "The Tornado Chicken". Not quite working yet, crashes at main menu." Games using nvgt since mid august will no longer work under wine, including this one. Reverting in hopes of getting a linux version (follow https://git.2mb.codes/~stormdragon2976/linux-game-manager to see if so). This reverts commit ef19077d1cfbbd747edd7de5d1741633815b75ea. --- audiogame-manager.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 42e8ac1..bb80b97 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -1313,7 +1313,6 @@ gameList=( "The Blind Swordsman" #"The Gate" "The Great Toy Robbery" - "The Tornado Chicken" "The Vale" "They'll Come from the Moon" "Thief" @@ -3276,16 +3275,6 @@ EOF find "${WINEPREFIX}/drive_c/Program Files/Lworks/The Great Toy Robbery" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvda2speechd32.dll" "{}" \; add_launcher "c:\Program Files\Lworks\The Great Toy Robbery\tgtr.exe" ;; - "The Tornado Chicken") - export WINEARCH=win64 - export winVer="win10" - get_installer "ttc v2.0 windows.zip" "https://renzivan.itch.io/the-tornado-chicken" - install_wine_bottle - mkdir -p "$WINEPREFIX/drive_c/Program Files/The Tornado Chicken" - unzip -d "$WINEPREFIX/drive_c/Program Files/The Tornado Chicken" "${cache}/ttc v2.0 windows.zip" - find "${WINEPREFIX}/drive_c/Program Files/bf" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvda2speechd64.dll" "{}" \; - add_launcher "c:\Program Files\The Tornado Chicken\Ttc v2.0.exe" - ;; "The Vale") get_installer "the-vale-win.zip" "https://falling-squirrel.itch.io/the-vale" export WINEARCH=win64 From c9309f4f197a7a0e35118d439ec01e1da3560a81 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Wed, 6 Nov 2024 05:09:31 -0500 Subject: [PATCH 20/26] Updated Crazy Party installer. --- audiogame-manager.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 42e8ac1..1cbc41c 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -2086,12 +2086,12 @@ download "https://erion.cf/files/ag_103.zip" "Crazy Party") export WINEARCH=win64 export winVer="win8" - download "http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta81.zip" "https://stormgames.wolfe.casa/downloads/Tolk.dll" "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd64.dll" + 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-beta81.zip" + 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-beta81\Crazy Party.exe" + add_launcher "c:\Program Files\Crazy-Party-beta82\Crazy Party.exe" ;; "Crazy Tennis") download "https://www.agarchive.net/games/VIP/crazy%20tennis%20setup.exe" From 246af6a8ad55a1ce7f6faac4850a39c8041a79c9 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 15 Nov 2024 16:32:44 -0500 Subject: [PATCH 21/26] Improved the Crazy Party update script. --- game-scripts/crazy-party-update.sh | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/game-scripts/crazy-party-update.sh b/game-scripts/crazy-party-update.sh index 43993cd..8092559 100755 --- a/game-scripts/crazy-party-update.sh +++ b/game-scripts/crazy-party-update.sh @@ -37,16 +37,28 @@ # 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 -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 From 6b73d2c7a83a481cfb613bcdaebdccf5cce7aba8 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 15 Nov 2024 17:03:24 -0500 Subject: [PATCH 22/26] Added reinstall warning for anyone updating from Crazy Party beta <= 78. --- game-scripts/crazy-party-update.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/game-scripts/crazy-party-update.sh b/game-scripts/crazy-party-update.sh index 8092559..5b2cbee 100755 --- a/game-scripts/crazy-party-update.sh +++ b/game-scripts/crazy-party-update.sh @@ -44,6 +44,13 @@ oldVersion=$(find ~/.local/wine/crazy-party -type d -name 'Crazy-Party-beta*' | cache="${XDG_CACHE_HOME:-$HOME/.cache}/audiogame-manager" configFile="${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/audiogame-manager/games.conf" +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." + find "${WINEPREFIX}/drive_c/Program Files" -name 'save.bin' 2> /dev/null +fi if [[ $oldVersion -eq $newVersion ]]; then echo "Crazy Party is up to date." exit 0 From b3db3bfe28adc7abbbca6b27d889bafddd68aef3 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 15 Nov 2024 18:20:01 -0500 Subject: [PATCH 23/26] Show latest changes after doing updates. --- audiogame-manager.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 97da9ae..1150171 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -93,7 +93,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 $? } From 6a4ff7358f67be4c7e1c4341e20bb7477f1a6580 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 15 Nov 2024 18:27:07 -0500 Subject: [PATCH 24/26] The logs were reliably being reported, so try a new approach. --- audiogame-manager.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 1150171..fd9b807 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 From 792a8d413f6c3729a6da471e3af76bc56046c3d1 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Fri, 15 Nov 2024 18:40:59 -0500 Subject: [PATCH 25/26] Add reminder for backing up deck and game directories before reinstalling for upgrade from beta78 and earlier. --- game-scripts/crazy-party-update.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/game-scripts/crazy-party-update.sh b/game-scripts/crazy-party-update.sh index 5b2cbee..d8faeb6 100755 --- a/game-scripts/crazy-party-update.sh +++ b/game-scripts/crazy-party-update.sh @@ -48,8 +48,10 @@ 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." - find "${WINEPREFIX}/drive_c/Program Files" -name 'save.bin' 2> /dev/null + 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." From baef70bcf15754b1068e3e02e8be57cb24ce2ceb Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sun, 17 Nov 2024 22:21:01 -0500 Subject: [PATCH 26/26] Fixed broken download link. --- audiogame-manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audiogame-manager.sh b/audiogame-manager.sh index fd9b807..bc45830 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -2715,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" "{}" \;