diff --git a/audiogame-manager.sh b/audiogame-manager.sh index c40f698..0c96e6c 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -45,6 +45,13 @@ EOF export DIALOGOPTS='--no-lines --visit-items' +# Alerts, for when user needs to read something. +alert() { + play -qnV0 synth 3 pluck D3 pluck A3 pluck D4 pluck F4 pluck A4 delay 0 .1 .2 .3 .4 remix - chorus 0.9 0.9 38 0.75 0.3 0.5 -t + echo + read -rp "Press enter to continue." continue +} + # Check for latest news check_news() { trap return INT @@ -284,7 +291,7 @@ download() { fi # Skip if the item is in cache. test -e "${cache}/${dest}" && continue - if ! curl -L4 --output "${cache}/${dest}" "${i}" ; then + if ! curl -L4 -C - --retry 10 --output "${cache}/${dest}" "${i}" ; then echo "Could not download \"$i\"..." exit 1 fi @@ -305,7 +312,9 @@ get_bottle() { "puzzle-divided"*) ;& "revelation"*) ;& "swamp"*) ;& - "triple -triad"*) export WINEPREFIX="${HOME}/.local/wine/aprone" ;; + "triple -triad"*) + install_wine "7.7" "32" + 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";; @@ -346,6 +355,16 @@ get_bottle() { "challenge-of-the-horse"*) export WINEPREFIX="${HOME}/.local/wine/tunmi13";; *) export WINEPREFIX="${HOME}/.local/wine/${game%|*}";; esac + # Wine version for bottles + if [[ "$game" =~ entombed ]]; then + install_wine "6.18" "32" + fi + if [[ "$game" =~ rs-games ]]; then + install_wine "7.0" "32" + fi + if [[ "$game" =~ shadow-line ]]; then + install_wine "7.7" "32" + fi } get_installer() { @@ -418,7 +437,7 @@ echo "Loading documentation, please wait..." local gameDoc="$(find "$gamePath" -type f -iname 'user_manual.html' -or -iname 'user_manual.htm' | head -1)" # Game name specific docs, add the name to the for loop. if [[ -z "$gameDoc" ]]; then - for i in "troopanum.txt" ; do + for i in "troopanum.txt" "superdeekout.txt" ; do gameDoc="$(find "$gamePath" -type f -iname "$i" -or -iname 'manual.htm' | head -1)" done fi @@ -457,6 +476,33 @@ echo "Loading documentation, please wait..." exit 0 } +install_wine() { + # Requires wine version, e.g. 7.7 and architecture, 32|64 + if [[ $# -ne 2 ]]; then + exit 1 + fi + # Figure out wineInstallationPath + wineInstallationPath="${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/wine_$2/$1" + export wine="${wineInstallationPath}/bin/wine" + # If the path exists, wine should already be installed. + # Just make sure we didn't wind up with a empty directory for some reason + rmdir "${wineInstallationPath}" 2> /dev/null + if [[ -d "${wineInstallationPath}" ]]; then + return + fi + mkdir -p "${wineInstallationPath}" 2> /dev/null + # This probably does not need to be cached, so download to tmp. + installationFile="$(mktemp)" + local v=$2 + v="${v/32/x86}" + v="${v/64/x64}" # Probably wrong, so just a place holder. + # If this goes wrong, bail out + set -e + { curl -L --output "${installationFile}" "https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-x86/PlayOnLinux-wine-${1}-upstream-linux-${v}.tar.gz" + tar xf "${installationFile}" -C "${wineInstallationPath}"; } | dialog --progressbox "Installing $2 bit Wine version $1." -1 -1 + set +e +} + winetricks() { # Report used packages to the winetricks maintainer so he knows they are being used. if ! [[ -e "${XDG_CACHE_HOME:-$HOME/.cache}/winetricks/track_usage" ]]; then @@ -502,14 +548,19 @@ install_rhvoice() { download "${RHVoice[${voiceName}]}" winetricks -q win8 echo "Installing RHVoice ${voiceName^}..." - wine "${cache}/${voiceFile}" & + ${wine} "${cache}/${voiceFile}" & sleep 20 - wineserver -k + ${wine}server -k } install_wine_bottle() { # 32 bit installations work best and are the default here, if you need to override it, do it in the game specific installation steps. export WINEARCH="${WINEARCH:-win32}" + # Figure out if we are using a specific version of wine + export wine="${wine:-$(command -v wine)}" + # Set the WINE and WINESERVER environmental variables so winetricks will use the right installation. + export WINE="${wine}" + export WINESERVER="${wine}server" if [[ -z "$bottle" ]]; then local bottle="${game,,}" bottle="${bottle//[[:space:]]/-}" @@ -532,9 +583,11 @@ install_wine_bottle() { geckoPath="${cache}/wine_gecko-2.40-x86.msi" fi # This is in a brace list to pipe through dialog. - { DISPLAY="" wineboot -u - wine msiexec /i z:"$monoPath" /quiet - wine msiexec /i z:"$geckoPath" /quiet + { echo -n "Using " + ${wine} --version + DISPLAY="" ${wine}boot -u + ${wine} msiexec /i z:"$monoPath" /quiet + ${wine} msiexec /i z:"$geckoPath" /quiet if [[ "${*}" =~ (speechsdk|sapi) ]]; then install_rhvoice fi @@ -546,11 +599,16 @@ install_wine_bottle() { chmod +x "${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" fi winetricks -q isolate_home $@ ${winVer:-winxp} ${winetricksSettings}; } | dialog --progressbox "Installing wine bottle, please wait..." -1 -1 + # make it easy for game scripts to know which version of wine to use. + echo "WINE=\"${WINE}\"" > "$HOME/.local/wine/${bottle}/agm.conf" + echo "WINESERVER=\"${WINESERVER}\"" >> "$HOME/.local/wine/${bottle}/agm.conf" } # Install games 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) # Create the menu of installed games declare -a menuList @@ -714,14 +772,17 @@ game_launcher() { exit 0 fi get_bottle "$game" + # 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. - wineserver -k - # launch the game + ${wine}server -k # launch the game if command -v qjoypad &> /dev/null ; then mkdir -p ~/.qjoypad3 @@ -752,16 +813,16 @@ game_launcher() { 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" =~ ^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" =~ 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" =~ bokurano-daibouken-3 ]]; then dictPath="$(winepath "${winePath}")" if [[ -r "${cache}/bk3-dict.dat" ]] && [[ ! -d "${dictPath}/dict" ]]; then @@ -790,6 +851,13 @@ game_launcher() { 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 @@ -798,9 +866,9 @@ game_launcher() { wine "$winePath\\$wineExec" exit 0 fi - if [[ "$game" =~ rs-games ]] || [[ "$game" =~ screaming-strike-2 ]]; then + if [[ "$game" =~ screaming-strike-2 ]]; then pushd "$(winepath "$winePath")" - wine "$wineExec" + ${wine} "$wineExec" popd exit 0 fi @@ -818,10 +886,10 @@ game_launcher() { fi if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & - wine64 start /realtime /d "${winePath}" "$wineExec" - else - wine start /d "${winePath}" "$wineExec" /realtime + # switch to wine64 for 64 bit prefix. + [[ "${wine}" == "wine" ]] && export wine="wine64" fi + ${wine:-wine} start /d "${winePath}" "$wineExec" /realtime fi exit 0 } @@ -889,6 +957,7 @@ export BOX86_NOBANNER=1 unset noCache # Manual installation is not default, make sure it's unset unset manualInstall +unset version # The list of games available for installation. @@ -1013,6 +1082,7 @@ gameList=( "Manamon 2" #"Marina Break" #"Minecraft" + "Mist World" "Monkey Business" "MudSplat French" "MudSplat English" @@ -1045,19 +1115,21 @@ gameList=( "Sequence Storm" #"Shades of Doom 1.2" "Shades of Doom" - #"Shadow Line" + "Shadow Line" "Shooter" "Silver Dollar" "Slender Lost Vision" "Sonic the Hedgehog" "Sonic Zoom" #"Space Defender" + "Super Deekout" "Super Dogs Bone Hunt" "Super Egg Hunt" "Super Liam" "Super Mario Bros" "Survive the Wild" "Swamp" + "Tactical Battle" "Technoshock" "Ten Pin Alley" "The Blind Swordsman" @@ -1207,6 +1279,7 @@ case "${game}" in add_launcher "c:\Program Files\AudioQuake\AudioQuake.exe" echo echo "After you launch the game, press tab then enter and it should begin speaking." + alert ;; "Battle of the Hunter") export bottle="tunmi13" @@ -1911,23 +1984,25 @@ case "${game}" in add_launcher "c:\Program Files\Endless Runner\runner.exe" ;; "Entombed") + export version="6.18" + install_wine "$version" "32" export winVer="win7" install_wine_bottle speechsdk msvcrt40 gdiplus ie7 wmp11 mf # Ok, more dotnet. LC_ALL=C DISPLAY="" winetricks -q dotnet40 xna40 - wineserver -k # Sigh. + ${wine}server -k # Sigh. download "http://blind-games.com/newentombed/EntombedSetup.exe" "https://download.microsoft.com/download/E/C/1/EC1B2340-67A0-4B87-85F0-74D987A27160/SSCERuntime-ENU.exe" "https://stormgames.wolfe.casa/downloads/Entombed.exe.config" "https://stormgames.wolfe.casa/downloads/mfplat.dll" mkdir -p "${WINEPREFIX}/drive_c/temp" pushd "${WINEPREFIX}/drive_c/temp" 7z x "${cache}/SSCERuntime-ENU.exe" - wine msiexec /i "${WINEPREFIX}/drive_c/temp/SSCERuntime_x86-ENU.msi" /q + ${wine} msiexec /i "${WINEPREFIX}/drive_c/temp/SSCERuntime_x86-ENU.msi" /q rm * popd pushd "${WINEPREFIX}/drive_c/Program Files/Microsoft SQL Server Compact Edition/v3.5" - wine regsvr32 sqlceoledb35.dll - wine regsvr32 sqlceca35.dll + ${wine} regsvr32 sqlceoledb35.dll + ${wine} regsvr32 sqlceca35.dll popd - wine "${cache}/EntombedSetup.exe" /silent + ${wine} "${cache}/EntombedSetup.exe" /silent pushd "${WINEPREFIX}/drive_c/Program Files/Entombed" cp ../Microsoft\ SQL\ Server\ Compact\ Edition/v3.5/Private/System.Data.SqlServerCe.Entity.dll ../Microsoft\ SQL\ Server\ Compact\ Edition/v3.5/Private/System.Data.SqlServerCe.dll . cp ../Microsoft\ SQL\ Server\ Compact\ Edition/v3.5/sql* . @@ -2262,6 +2337,24 @@ EOF done # And of course, add the launcher. ;; + "Mist World") + export winVer="win7" + get_installer "Mist World_Setup.exe" "https://drive.google.com/file/d/12YeUqorkkMT46ZSR5pcfWxSY8DHOLxZ-/view?usp=share_link" + install_wine_bottle + download "https://github.com/RastislavKish/nvda2speechd/releases/download/v0.1/nvda2speechd32.dll" + 7z x -o"$WINEPREFIX/drive_c/Program Files/Mist World" "$cache/Mist World_Setup.exe" + sed -i 's/1024m/768m/g' "$WINEPREFIX/drive_c/Program Files/Mist World/mw.exe.vmoptions" + cp "$WINEPREFIX/drive_c/Program Files/Mist World/"{mw.exe.vmoptions,update.exe.vmoptions} + find "$WINEPREFIX/drive_c/Program Files/Mist World" -iname "nvdaControllerClient32.dll" -exec cp "$cache/nvda2speechd32.dll" "{}" \; + add_launcher 'c:\Program Files\Mist World\mw.exe' + echo + echo "If you do not have an account, There is a script in game-scripts to help." + echo "Launch the game, press enter on create account, then drop into a console so the game window does not lose focus." + echo "Change to the game-scripts directory and run" + echo "./mist_world_account_creator.sh and follow the prompts." + echo "To login, type your email address, press tab, and type your password. Press enter to confirm." + alert + ;; "Monkey Business") export winVer="win7" install_wine_bottle vb6run dx8vb speechsdk quartz @@ -2446,10 +2539,12 @@ EOF add_launcher "c:\Program Files\RTR Offline\rtr.exe" ;; "RS Games") + export version="7.0" + install_wine "$version" "32" export winVer="win7" install_wine_bottle speechsdk download "http://rsgames.org/rsdownloads/rsgclient/rsgames-client-setup-2.01.exe" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" - wine "${cache}/rsgames-client-setup-2.01.exe" /silent + ${wine} "${cache}/rsgames-client-setup-2.01.exe" /silent find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; add_launcher "c:\Program Files\RS Games Client\rsg.exe" ;; @@ -2492,10 +2587,12 @@ EOF "Sketchbook") export winVer="win7" install_wine_bottle speechsdk - download "http://games.ims-productions.com/SBYW/SBYW.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" - unzip -d "$WINEPREFIX/drive_c/Program Files/scrolling battles" "${cache}/SBYW.zip" + download "http://sbyw.games/SBYW/SBYW.zip" "http://sbyw.games/SBYW/sounds.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" + mv -v "${cache}/sounds.zip" "${cache}/SBYW-sounds.zip" + unzip -d "$WINEPREFIX/drive_c/Program Files/sketchbook" "${cache}/SBYW.zip" + unzip -d "$WINEPREFIX/drive_c/Program Files/sketchbook" "${cache}/SBYW-sounds.zip" find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \; - add_launcher "c:\Program Files\scrolling battles\SBYW.exe" + add_launcher "c:\Program Files\sketchbook\SBYW.exe" ;; "Sequence Storm") get_installer "sequence-storm-win64.zip" "https://special-magic-games-llc.itch.io/sequence-storm" @@ -2521,18 +2618,21 @@ EOF add_launcher "c:\Program Files\Shades of Doom 2.0\sod.exe" ;; "Shadow Line") - export winVer="win8" speechsdk + export version="7.7" + install_wine "$version" "32" + export winVer="win8" install_wine_bottle download "https://www.mm-galabo.com/sr/Download_files_srfv/shadowrine_fullvoice3.171.exe" - wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- + $wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- & xdotool sleep 30 key --clearmodifiers --delay=500 Return xdotool key --clearmodifiers --delay=500 Return xdotool key --clearmodifiers --delay=500 Return xdotool key --clearmodifiers --delay=500 Return - xdotool sleep 300 key --clearmodifiers --delay=500 Down + echo "Running installer, this will take approximately 3 minutes..." + xdotool sleep 180 key --clearmodifiers --delay=500 Down xdotool key --clearmodifiers --delay=500 space - xdotool key --clearmodifiers --delay=500 alt+i - wineserver -w + xdotool key --clearmodifiers --delay=500 alt+f + ${wine}server -w add_launcher "c:\Program Files\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe" ;; "Silver Dollar") @@ -2585,6 +2685,41 @@ EOF find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvdaControllerClient64.dll" "{}" \; add_launcher "c:\Program Files\space_defender\sdefender.exe" ;; + "Super Deekout") + install_wine_bottle vb6run dx8vb + download "http://www.danielzingaro.com/superdeekout_setup.exe" "http://www.danielzingaro.com/sd_full.exe" + ${wine} "${cache}/superdeekout_setup.exe" & + xdotool sleep 15 key --delay 100 y 2> /dev/null + xdotool sleep 3 key --delay 250 alt+n 2> /dev/null + xdotool key --delay 250 alt+a 2> /dev/null + xdotool key --delay 250 space 2> /dev/null + xdotool key --delay 250 alt+n 2> /dev/null + xdotool key --delay 250 alt+n 2> /dev/null + xdotool key --delay 250 alt+n 2> /dev/null + xdotool key --delay 250 alt+i 2> /dev/null + xdotool sleep 15 key --delay 250 alt+f 2> /dev/null + xdotool sleep 3 key --delay 250 n 2> /dev/null + ${wine}server -k + 7z x -y -o"$WINEPREFIX/drive_c/Program Files/Super Deekout" "${cache}/sd_full.exe" + echo "Super Deekout needs some information before it will run:" + alert + read -erp "Please enter your first name: " fname + read -erp "Please enter your last name: " lname + read -erp "Please enter your email address: " email + ${wine} "c:\Program Files\Super Deekout\config.exe" & + xdotool sleep 5 key --delay 100 Return 2> /dev/null + xdotool sleep 3 type --clearmodifiers --delay 100 "${fname}" + xdotool key --clearmodifiers --delay 100 Tab 2> /dev/null + xdotool sleep 1 type --clearmodifiers --delay 100 "${lname}" + xdotool key --clearmodifiers --delay 100 Tab 2> /dev/null + xdotool sleep 1 type --clearmodifiers --delay 100 "${email}" + xdotool key --clearmodifiers --delay 100 Tab 2> /dev/null + xdotool sleep 15 key --delay 100 u 2> /dev/null + xdotool key --clearmodifiers --delay 100 Tab 2> /dev/null + xdotool sleep 1 key --delay 250 Return 2> /dev/null + ${wine}server -k + add_launcher "c:\Program Files\Super Deekout\super.exe" + ;; "Super Dogs Bone Hunt") install_wine_bottle vb6run dx8vb speechsdk download "http://www.pcs-games.net/SBH11.exe" @@ -2621,6 +2756,8 @@ EOF add_launcher "c:\Program Files\Survive the Wild\stw.exe" ;; "Swamp") + export version="7.7" + install_wine "${version}" "32" export bottle="aprone" export winVer="win7" export winetricksSettings="vd=1024x768" @@ -2633,14 +2770,22 @@ EOF if curl -L --output "${cache}/SwampPatch.zip" "https://www.kaldobsky.com/audiogames/SwampPatch.zip" ; then unzip -o -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/SwampPatch.zip" fi - wine 'c:\Program Files\swamp\checkup.exe' /verysilent - #wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat' + $wine 'c:\Program Files\swamp\checkup.exe' /verysilent + #$wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat' # Delete music if requested. if [[ $deleteMusic -eq 0 ]]; then rm -frv "$WINEPREFIX/drive_c/Program Files/swamp/sounds/Music/" fi add_launcher "c:\Program Files\swamp\Swamp.exe" ;; + "Tactical Battle") + install_wine_bottle speechsdk + LC_ALL=C DISPLAY="" winetricks -q dotnet462 + ${wine}server -k + download "https://blindgamers.com/downloads/Tactical%20Battle%20Dev.zip" + unzip -d "$WINEPREFIX/drive_c/Program Files/Tactical Battle" "${cache}/Tactical Battle Dev.zip" + add_launcher "c:\Program Files\Tactical Battle\Tactical Battle.exe" + ;; "Technoshock") install_wine_bottle download "http://tiflocomp.ru/download/games/technoshock_140b_en.zip" "http://tiflocomp.ru/download/games/technoshock140b_en_update.zip" @@ -2833,6 +2978,7 @@ export norh=false # Must install a voice, and rhvoice works easily with 64 bit. echo "To bypass these dialogs, press alt+o, then press enter until speech starts." echo "To be sure that each new dialog has had time to complete, wait a second between each press of enter." echo "In each subsequent launch, you will need to hit enter a couple times before it starts speaking." + alert ;; "Warsim") get_installer "Warsim Full Game.zip" "https://huw2k8.itch.io/warsim" diff --git a/game-scripts/mist_world_account_creator.sh b/game-scripts/mist_world_account_creator.sh new file mode 100755 index 0000000..3fb1f99 --- /dev/null +++ b/game-scripts/mist_world_account_creator.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +export DISPLAY="${DISPLAY:-:0}" + +read -rp "Select create account from the menu, press enter to continue." continue +echo + +# Read email address +echo "Enter email address:" +read -r email + +# Validate email address format +if [[ "$email" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then + # Type email address + xdotool type --delay=75 "$email" + # Press tab + xdotool sleep 0.5 key --delay=75 Tab + # Press enter + xdotool sleep 0.5 key --delay=75 Return +else + echo "Invalid email format. Exiting." + exit 1 +fi + +# Press tab + +#xdotool sleep 0.5 key --delay=75 Tab +# Press enter +#xdotool sleep 0.5 key --delay=75 Return + +echo "Please check your email for the verification code." + +# Read verification code +echo "Enter verification code:" +read -r code + +# Type verification code +xdotool type --delay=1000 $code +# press tab +xdotool sleep 0.5 key --delay=75 Tab +# Press enter +xdotool sleep 0.5 key --delay=75 Return + +# Read password +echo "Enter password between 6 and 16 characters, 1 uppercase letter 1 number required:" +read -r password + +# Type password +xdotool type --delay=500 "$password" +# Press tab +xdotool sleep 0.5 key --delay=75 Tab +# Type password again +xdotool sleep 0.5 type --delay=500 "$password" +# Press tab +xdotool sleep 0.5 key --delay=75 Tab +# Press enter +xdotool sleep 0.5 key --delay=75 Return + +echo "Account created!" + +exit 0 diff --git a/speech/clipboard_translator.sh b/speech/clipboard_translator.sh index b3df40f..7a267b2 100755 --- a/speech/clipboard_translator.sh +++ b/speech/clipboard_translator.sh @@ -3,7 +3,8 @@ # Modified from the script at: # https://gist.github.com/fdietze/6768a0970d7d732b7fbd7930ccceee2a -set -Eeuo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/#:~:text=set%20%2Du,is%20often%20highly%20desirable%20behavior. +# The next line has been commented because if there's nothing in clipboard the script breaks. +# set -Eeuo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/#:~:text=set%20%2Du,is%20often%20highly%20desirable%20behavior. shopt -s expand_aliases diff --git a/speech/set-voice.sh b/speech/set-voice.sh index 41d9fde..f76013a 100755 --- a/speech/set-voice.sh +++ b/speech/set-voice.sh @@ -77,6 +77,14 @@ if [[ -z "${WINEPREFIX}" ]]; then exit 0 fi +# Get wine version if available +if [[ -r "${WINEPREFIX}/agm.conf" ]]; then + source "${WINEPREFIX}/agm.conf" + export WINE + export WINESERVER +fi +wine="${WINE:-$(command -v wine)}" + msgbox() { # Returns: None # Shows the provided message on the screen with an ok button. @@ -124,7 +132,7 @@ menulist() { restore_voice() { if [[ $doRestore -eq 0 ]]; then - wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely + ${wine}server -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" fi } @@ -142,7 +150,7 @@ set_voice() { RHVoiceName="${RHVoiceName##*/}" fullVoice="${voiceListFullName[$counter]}" fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" - wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely + ${wine}server -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely # Remove any existing rate change for voices $sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${2:-7}'/g' "${WINEPREFIX}/user.reg" @@ -161,14 +169,14 @@ test_voice() { RHVoiceName="${RHVoiceName##*/}" fullVoice="${voiceListFullName[$counter]}" fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" - wineserver -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely + ${wine}server -k # If we don't do this it's likely wine will overwrite our reverted change or even clobber the registry key entirely $sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs" dim speechobject set speechobject=createobject("sapi.spvoice") speechobject.speak "This is a test of your chosen voice. It contains multiple sentences and punctuation, and is designed to give a full representation of this voices qualities." EOF - wine cscript "c:\windows\temp\speak.vbs" + ${wine} cscript "c:\windows\temp\speak.vbs" } # Handle voice restore, but only if voice changed @@ -181,7 +189,7 @@ dim speechobject set speechobject=createobject("sapi.spvoice") speechobject.speak "" EOF -wine cscript "c:\windows\temp\speak.vbs" +${wine} cscript "c:\windows\temp\speak.vbs" # Create an array of available voices. ifs="$IFS" diff --git a/wine/install-dependencies.sh b/wine/install-dependencies.sh index f1829f6..c0b434b 100755 --- a/wine/install-dependencies.sh +++ b/wine/install-dependencies.sh @@ -13,12 +13,12 @@ is_function() { configure_arch() { packageList=( cabextract + curl dialog dos2unix gawk unzip w3m - wget wine winetricks wine_gecko @@ -34,6 +34,8 @@ configure_arch() { alsa-lib mesa openal + sox + sqlite3 translate-shell xz gst-plugins-bad @@ -41,6 +43,7 @@ configure_arch() { gst-plugins-ugly gst-libav p7zip + xdg-utils ) if [[ "$(uname -m)" == "x86_64" ]]; then # Enable multilib @@ -72,6 +75,7 @@ configure_arch() { configure_debian() { packageList=( + curl dialog gawk gstreamer1.0-plugins-bad:i386