diff --git a/audiogame-manager.sh b/audiogame-manager.sh index b171709..6db1edb 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -47,6 +47,11 @@ checklist() { else errorList+=("Critical: Wget is not installed. You will not be able to install any games.") fi + if command -v dialog &> /dev/null ; then + echo "Dialog is installed." + else + errorList+=("Critical: Dialog is not installed. You will not be able to install, launch, or remove any games.") + fi for i in 7z cabextract unzip xz ; do if command -v $i &> /dev/null ; then echo "${i^} is installed." diff --git a/game-scripts/crazy-party-build-games.sh b/game-scripts/crazy-party-build-games.sh new file mode 100755 index 0000000..7897c17 --- /dev/null +++ b/game-scripts/crazy-party-build-games.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +for i in dialog unix2dos; do + if ! command -v $i &> /dev/null ; then + echo "Please install dialog and dos2unix before using this script." + fi +done + +if [[ $# -ne 1 ]]; then + echo "usage: $0 filename without the .txt extension." + exit 1 +fi + +mapfile -t gameList < <(tail +3 "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/Mini-games reference.txt") + +for i in "${gameList[@]}" ; do + menuList+=("$i" "${i#* }" "off") +done + +unset gameList +gameList="$(dialog --clear \ + --no-tags \ + --ok-label "Add Games" \ + --separate-output \ + --backtitle "Select games to add to the $1 list." \ + --checklist "Press space to check or uncheck a selected game." 0 0 0 "${menuList[@]}" --stdout)" + +if [[ -z "${gameList}" ]]; then + exit 0 +fi + +mkdir -p "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/game" +echo "$gameList" >> "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/game/${1}.txt" +sort -uno "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/game/${1}.txt" "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/game/${1}.txt" +eunix2dos "$HOME/.local/wine/crazy-party/drive_c/Program Files/Crazy-Party-beta73/game/${1}.txt" +dialog --infobox "Game list \"$1\" updated." 10 80 +exit 0 diff --git a/swamp-update.sh b/game-scripts/swamp-update.sh similarity index 100% rename from swamp-update.sh rename to game-scripts/swamp-update.sh diff --git a/topspeedserver.sh b/game-scripts/topspeedserver.sh similarity index 100% rename from topspeedserver.sh rename to game-scripts/topspeedserver.sh diff --git a/speech/set-voice.sh b/speech/set-voice.sh new file mode 100755 index 0000000..8f40927 --- /dev/null +++ b/speech/set-voice.sh @@ -0,0 +1,166 @@ +#!/bin/bash +# Set Voice +# Set the default wine voice based on installed options. +# Rate can be specified as a numeric argument to this script, 1 through 9. +# The default rate is 7 +# +# Copyright 2020, Storm Dragon, +# +# This is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free +# Software Foundation; either version 3, or (at your option) any later +# version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this package; see the file COPYING. If not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. +# +#--code-- + +# Settings to improve accessibility of dialog. +export DIALOGOPTS='--insecure --no-lines --visit-items' + +# Get the desired wine bottle + +declare -a bottle +for i in $(find ~/.local/wine -maxdepth 1 -type d -not -name 'wine' | sort) ; do + bottle+=("$i" "${i##*/}") + done +export WINEPREFIX="$(dialog --backtitle "Use the up and down arrow keys to find the option you want, then press enter to select it." \ + --clear \ + --no-tags \ + --menu "Select A Wine Bottle" 0 0 0 "${bottle[@]}" --stdout)" + +if [[ -z "${WINEPREFIX}" ]]; then + exit 0 +fi + +echo "wineprefix = $WINEPREFIX" + +msgbox() { +# Returns: None +# Shows the provided message on the screen with an ok button. +dialog --clear --msgbox "$*" 0 0 +} + +infobox() { + # Returns: None + # Shows the provided message on the screen with no buttons. + local timeout=3 + dialog --infobox "$*" 0 0 + read -n1 -t $timeout continue + # Clear any keypresses from the buffer + read -t 0.01 continue +} + +yesno() { + # Returns: Yes or No + # Args: Question to user. + # Called in if $(yesno) == "Yes" + # Or variable=$(yesno) + dialog --clear --backtitle "Press 'Enter' for "yes" or 'Escape' for "no"." --yesno "$*" 0 0 --stdout + if [[ $? -eq 0 ]]; then + echo "Yes" + else + echo "No" + fi +} + +menulist() { + # Args: List of items for menu. + # returns: selected tag + declare -a menuList + for i in "${@}" ; do + menuList+=("$i" "$i") + done + dialog --backtitle "$(gettext "Use the up and down arrow keys to find the option you want, then press enter to select it.")" \ + --clear \ + --extra-button \ + --extra-label "$(gettext "Test Voice")" \ + --no-tags \ + --menu "$(gettext "Please select one")" 0 0 0 "${menuList[@]}" --stdout + return $? +} + +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 + sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Tokens\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" + fi +} + +set_voice() { + doRestore=1 + local tmp="$1" + local fullVoice + local counter=0 + for x in ${voiceList[@]} ; do + [ "$x" = "$tmp" ] && break + counter=$(( $counter + 1 )) + done + fullVoice=${voiceListFullName[$counter]} + wineserver -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\\\\Tokens\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${2:-7}'/g' "${WINEPREFIX}/user.reg" +} + +test_voice() { + doRestore=0 + local tmp="$1" + local fullVoice + local counter=0 + for x in ${voiceList[@]} ; do + [ "$x" = "$tmp" ] && break + counter=$(( $counter + 1 )) + done + fullVoice=${voiceListFullName[$counter]} + wineserver -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\\\\Tokens\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" + cat << "EOF" > /tmp/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 "z:\tmp\speak.vbs" +} + +# Handle voice restore, but only if voice changed +doRestore=1 +trap restore_voice SIGINT + +# Create an array of available voices. +ifs="$IFS" +IFS=$'\n' +voiceListFullName=($(grep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Tokens\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | sed -E -e 's/\[([^]]+)\].*/\1/g')) +IFS="$ifs" +voiceList=() +for x in "${voiceListFullName[@]}" ; do + voiceList+=("$(echo "$x" | rev | cut -d\\ -f1 | rev)") +done +oldVoice="$(grep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Tokens\\\\[^"]+"' "${WINEPREFIX}/user.reg" | sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')" +echo "oldVoice: ${oldVoice}" +echo "voiceList: ${voiceList[@]}" +echo "voiceListFullName: ${voiceListFullName[@]}" +#exit 1 +exit=1 +while [[ $exit -ne 0 ]] ; do +voice="$(menulist ${voiceList[@]})" + +case $? in + 0) + set_voice "$voice" "$1" ; exit=0 ;; + 3) + test_voice "$voice";; + *) + restore_voice ; exit=0 ;; +esac +done + +exit 0 diff --git a/setup.sh b/wine/install-wine.sh similarity index 100% rename from setup.sh rename to wine/install-wine.sh diff --git a/mkwine.sh b/wine/mkwine.sh similarity index 100% rename from mkwine.sh rename to wine/mkwine.sh