Merge branch 'testing' introduces game specific wine versions. Breaks

Mac compatibility. Please see the wiki for an alternative option.
This commit is contained in:
stormdragon2976 2023-03-02 00:58:18 -05:00
commit 43005a75b6
5 changed files with 263 additions and 43 deletions

View File

@ -45,6 +45,13 @@ EOF
export DIALOGOPTS='--no-lines --visit-items' 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 for latest news
check_news() { check_news() {
trap return INT trap return INT
@ -284,7 +291,7 @@ download() {
fi fi
# Skip if the item is in cache. # Skip if the item is in cache.
test -e "${cache}/${dest}" && continue 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\"..." echo "Could not download \"$i\"..."
exit 1 exit 1
fi fi
@ -305,7 +312,9 @@ get_bottle() {
"puzzle-divided"*) ;& "puzzle-divided"*) ;&
"revelation"*) ;& "revelation"*) ;&
"swamp"*) ;& "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";; "bg-"*) export WINEPREFIX="${HOME}/.local/wine/bg";;
# ESP Pinball games # ESP Pinball games
"esp-pinball-classic"*) export WINEPREFIX="${HOME}/.local/wine/esp-pinball";; "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";; "challenge-of-the-horse"*) export WINEPREFIX="${HOME}/.local/wine/tunmi13";;
*) export WINEPREFIX="${HOME}/.local/wine/${game%|*}";; *) export WINEPREFIX="${HOME}/.local/wine/${game%|*}";;
esac 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() { 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)" 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. # Game name specific docs, add the name to the for loop.
if [[ -z "$gameDoc" ]]; then 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)" gameDoc="$(find "$gamePath" -type f -iname "$i" -or -iname 'manual.htm' | head -1)"
done done
fi fi
@ -457,6 +476,33 @@ echo "Loading documentation, please wait..."
exit 0 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() { winetricks() {
# Report used packages to the winetricks maintainer so he knows they are being used. # 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 if ! [[ -e "${XDG_CACHE_HOME:-$HOME/.cache}/winetricks/track_usage" ]]; then
@ -502,14 +548,19 @@ install_rhvoice() {
download "${RHVoice[${voiceName}]}" download "${RHVoice[${voiceName}]}"
winetricks -q win8 winetricks -q win8
echo "Installing RHVoice ${voiceName^}..." echo "Installing RHVoice ${voiceName^}..."
wine "${cache}/${voiceFile}" & ${wine} "${cache}/${voiceFile}" &
sleep 20 sleep 20
wineserver -k ${wine}server -k
} }
install_wine_bottle() { 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. # 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}" 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 if [[ -z "$bottle" ]]; then
local bottle="${game,,}" local bottle="${game,,}"
bottle="${bottle//[[:space:]]/-}" bottle="${bottle//[[:space:]]/-}"
@ -532,9 +583,11 @@ install_wine_bottle() {
geckoPath="${cache}/wine_gecko-2.40-x86.msi" geckoPath="${cache}/wine_gecko-2.40-x86.msi"
fi fi
# This is in a brace list to pipe through dialog. # This is in a brace list to pipe through dialog.
{ DISPLAY="" wineboot -u { echo -n "Using "
wine msiexec /i z:"$monoPath" /quiet ${wine} --version
wine msiexec /i z:"$geckoPath" /quiet DISPLAY="" ${wine}boot -u
${wine} msiexec /i z:"$monoPath" /quiet
${wine} msiexec /i z:"$geckoPath" /quiet
if [[ "${*}" =~ (speechsdk|sapi) ]]; then if [[ "${*}" =~ (speechsdk|sapi) ]]; then
install_rhvoice install_rhvoice
fi fi
@ -546,11 +599,16 @@ install_wine_bottle() {
chmod +x "${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" chmod +x "${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd"
fi fi
winetricks -q isolate_home $@ ${winVer:-winxp} ${winetricksSettings}; } | dialog --progressbox "Installing wine bottle, please wait..." -1 -1 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 # Install games
game_installer() { 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 '/^$/d' "${configFile}" 2> /dev/null | cut -d '|' -f3)
# Create the menu of installed games # Create the menu of installed games
declare -a menuList declare -a menuList
@ -714,14 +772,17 @@ game_launcher() {
exit 0 exit 0
fi fi
get_bottle "$game" get_bottle "$game"
# make sure wine is actually set to something
export wine="${wine:-wine}"
echo -n "launching "
${wine} --version
local winePath="${game#*|}" local winePath="${game#*|}"
winePath="${winePath%\\*.exe}" winePath="${winePath%\\*.exe}"
local wineExec="${game#*|}" local wineExec="${game#*|}"
wineExec="${wineExec%|*}" wineExec="${wineExec%|*}"
wineExec="${wineExec##*\\}" wineExec="${wineExec##*\\}"
# kill any previous existing wineservers for this prefix in case they didn't shut down properly. # kill any previous existing wineservers for this prefix in case they didn't shut down properly.
wineserver -k ${wine}server -k
# launch the game
# launch the game # launch the game
if command -v qjoypad &> /dev/null ; then if command -v qjoypad &> /dev/null ; then
mkdir -p ~/.qjoypad3 mkdir -p ~/.qjoypad3
@ -752,16 +813,16 @@ game_launcher() {
if [[ "$game" =~ light-battles ]]; then if [[ "$game" =~ light-battles ]]; then
pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd &
fi 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 if [[ "$game" =~ ^bokurano-daibouken-2\| ]]; then
"${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken2 & "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken2 &
fi fi
if [[ "$game" =~ ^bokurano-daibouken\| ]]; then if [[ "$game" =~ ^bokurano-daibouken\| ]]; then
"${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken & "${0%/*}/speech/clipboard_translator.sh" play.exe bokurano-daibouken &
fi 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 if [[ "$game" =~ bokurano-daibouken-3 ]]; then
dictPath="$(winepath "${winePath}")" dictPath="$(winepath "${winePath}")"
if [[ -r "${cache}/bk3-dict.dat" ]] && [[ ! -d "${dictPath}/dict" ]]; then if [[ -r "${cache}/bk3-dict.dat" ]] && [[ ! -d "${dictPath}/dict" ]]; then
@ -790,6 +851,13 @@ game_launcher() {
if [[ "$game" =~ sequence-storm ]]; then if [[ "$game" =~ sequence-storm ]]; then
"${0%/*}/speech/clipboard_reader.sh" SequenceStorm & "${0%/*}/speech/clipboard_reader.sh" SequenceStorm &
fi 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 if [[ "$game" =~ audiodisc ]]; then
wine "$winePath\\$wineExec" wine "$winePath\\$wineExec"
exit 0 exit 0
@ -798,9 +866,9 @@ game_launcher() {
wine "$winePath\\$wineExec" wine "$winePath\\$wineExec"
exit 0 exit 0
fi fi
if [[ "$game" =~ rs-games ]] || [[ "$game" =~ screaming-strike-2 ]]; then if [[ "$game" =~ screaming-strike-2 ]]; then
pushd "$(winepath "$winePath")" pushd "$(winepath "$winePath")"
wine "$wineExec" ${wine} "$wineExec"
popd popd
exit 0 exit 0
fi fi
@ -818,10 +886,10 @@ game_launcher() {
fi fi
if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then
pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd & pgrep -u "$USER" nvda2speechd &> /dev/null || ${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd &
wine64 start /realtime /d "${winePath}" "$wineExec" # switch to wine64 for 64 bit prefix.
else [[ "${wine}" == "wine" ]] && export wine="wine64"
wine start /d "${winePath}" "$wineExec" /realtime
fi fi
${wine:-wine} start /d "${winePath}" "$wineExec" /realtime
fi fi
exit 0 exit 0
} }
@ -889,6 +957,7 @@ export BOX86_NOBANNER=1
unset noCache unset noCache
# Manual installation is not default, make sure it's unset # Manual installation is not default, make sure it's unset
unset manualInstall unset manualInstall
unset version
# The list of games available for installation. # The list of games available for installation.
@ -1013,6 +1082,7 @@ gameList=(
"Manamon 2" "Manamon 2"
#"Marina Break" #"Marina Break"
#"Minecraft" #"Minecraft"
"Mist World"
"Monkey Business" "Monkey Business"
"MudSplat French" "MudSplat French"
"MudSplat English" "MudSplat English"
@ -1045,19 +1115,21 @@ gameList=(
"Sequence Storm" "Sequence Storm"
#"Shades of Doom 1.2" #"Shades of Doom 1.2"
"Shades of Doom" "Shades of Doom"
#"Shadow Line" "Shadow Line"
"Shooter" "Shooter"
"Silver Dollar" "Silver Dollar"
"Slender Lost Vision" "Slender Lost Vision"
"Sonic the Hedgehog" "Sonic the Hedgehog"
"Sonic Zoom" "Sonic Zoom"
#"Space Defender" #"Space Defender"
"Super Deekout"
"Super Dogs Bone Hunt" "Super Dogs Bone Hunt"
"Super Egg Hunt" "Super Egg Hunt"
"Super Liam" "Super Liam"
"Super Mario Bros" "Super Mario Bros"
"Survive the Wild" "Survive the Wild"
"Swamp" "Swamp"
"Tactical Battle"
"Technoshock" "Technoshock"
"Ten Pin Alley" "Ten Pin Alley"
"The Blind Swordsman" "The Blind Swordsman"
@ -1207,6 +1279,7 @@ case "${game}" in
add_launcher "c:\Program Files\AudioQuake\AudioQuake.exe" add_launcher "c:\Program Files\AudioQuake\AudioQuake.exe"
echo echo
echo "After you launch the game, press tab then enter and it should begin speaking." echo "After you launch the game, press tab then enter and it should begin speaking."
alert
;; ;;
"Battle of the Hunter") "Battle of the Hunter")
export bottle="tunmi13" export bottle="tunmi13"
@ -1911,23 +1984,25 @@ case "${game}" in
add_launcher "c:\Program Files\Endless Runner\runner.exe" add_launcher "c:\Program Files\Endless Runner\runner.exe"
;; ;;
"Entombed") "Entombed")
export version="6.18"
install_wine "$version" "32"
export winVer="win7" export winVer="win7"
install_wine_bottle speechsdk msvcrt40 gdiplus ie7 wmp11 mf install_wine_bottle speechsdk msvcrt40 gdiplus ie7 wmp11 mf
# Ok, more dotnet. # Ok, more dotnet.
LC_ALL=C DISPLAY="" winetricks -q dotnet40 xna40 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" 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" mkdir -p "${WINEPREFIX}/drive_c/temp"
pushd "${WINEPREFIX}/drive_c/temp" pushd "${WINEPREFIX}/drive_c/temp"
7z x "${cache}/SSCERuntime-ENU.exe" 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 * rm *
popd popd
pushd "${WINEPREFIX}/drive_c/Program Files/Microsoft SQL Server Compact Edition/v3.5" pushd "${WINEPREFIX}/drive_c/Program Files/Microsoft SQL Server Compact Edition/v3.5"
wine regsvr32 sqlceoledb35.dll ${wine} regsvr32 sqlceoledb35.dll
wine regsvr32 sqlceca35.dll ${wine} regsvr32 sqlceca35.dll
popd popd
wine "${cache}/EntombedSetup.exe" /silent ${wine} "${cache}/EntombedSetup.exe" /silent
pushd "${WINEPREFIX}/drive_c/Program Files/Entombed" 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/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* . cp ../Microsoft\ SQL\ Server\ Compact\ Edition/v3.5/sql* .
@ -2262,6 +2337,24 @@ EOF
done done
# And of course, add the launcher. # 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") "Monkey Business")
export winVer="win7" export winVer="win7"
install_wine_bottle vb6run dx8vb speechsdk quartz install_wine_bottle vb6run dx8vb speechsdk quartz
@ -2446,10 +2539,12 @@ EOF
add_launcher "c:\Program Files\RTR Offline\rtr.exe" add_launcher "c:\Program Files\RTR Offline\rtr.exe"
;; ;;
"RS Games") "RS Games")
export version="7.0"
install_wine "$version" "32"
export winVer="win7" export winVer="win7"
install_wine_bottle speechsdk install_wine_bottle speechsdk
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" "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" "{}" \; find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\RS Games Client\rsg.exe" add_launcher "c:\Program Files\RS Games Client\rsg.exe"
;; ;;
@ -2492,10 +2587,12 @@ EOF
"Sketchbook") "Sketchbook")
export winVer="win7" export winVer="win7"
install_wine_bottle speechsdk install_wine_bottle speechsdk
download "http://games.ims-productions.com/SBYW/SBYW.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll" download "http://sbyw.games/SBYW/SBYW.zip" "http://sbyw.games/SBYW/sounds.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files/scrolling battles" "${cache}/SBYW.zip" 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" "{}" \; 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") "Sequence Storm")
get_installer "sequence-storm-win64.zip" "https://special-magic-games-llc.itch.io/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" add_launcher "c:\Program Files\Shades of Doom 2.0\sod.exe"
;; ;;
"Shadow Line") "Shadow Line")
export winVer="win8" speechsdk export version="7.7"
install_wine "$version" "32"
export winVer="win8"
install_wine_bottle install_wine_bottle
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"
wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- $wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- &
xdotool sleep 30 key --clearmodifiers --delay=500 Return 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 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 space
xdotool key --clearmodifiers --delay=500 alt+i xdotool key --clearmodifiers --delay=500 alt+f
wineserver -w ${wine}server -w
add_launcher "c:\Program Files\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe" add_launcher "c:\Program Files\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe"
;; ;;
"Silver Dollar") "Silver Dollar")
@ -2584,6 +2684,41 @@ EOF
unzip -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/space_defender.zip" unzip -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/space_defender.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvdaControllerClient64.dll" "{}" \; find "${WINEPREFIX}" -type f -name 'nvdaControllerClient64.dll' -exec cp -v "${cache}/nvdaControllerClient64.dll" "{}" \;
add_launcher "c:\Program Files\space_defender\sdefender.exe" 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") "Super Dogs Bone Hunt")
install_wine_bottle vb6run dx8vb speechsdk install_wine_bottle vb6run dx8vb speechsdk
@ -2621,6 +2756,8 @@ EOF
add_launcher "c:\Program Files\Survive the Wild\stw.exe" add_launcher "c:\Program Files\Survive the Wild\stw.exe"
;; ;;
"Swamp") "Swamp")
export version="7.7"
install_wine "${version}" "32"
export bottle="aprone" export bottle="aprone"
export winVer="win7" export winVer="win7"
export winetricksSettings="vd=1024x768" export winetricksSettings="vd=1024x768"
@ -2633,14 +2770,22 @@ EOF
if curl -L --output "${cache}/SwampPatch.zip" "https://www.kaldobsky.com/audiogames/SwampPatch.zip" ; then 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" unzip -o -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/SwampPatch.zip"
fi fi
wine 'c:\Program Files\swamp\checkup.exe' /verysilent $wine 'c:\Program Files\swamp\checkup.exe' /verysilent
#wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat' #$wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat'
# Delete music if requested. # Delete music if requested.
if [[ $deleteMusic -eq 0 ]]; then if [[ $deleteMusic -eq 0 ]]; then
rm -frv "$WINEPREFIX/drive_c/Program Files/swamp/sounds/Music/" rm -frv "$WINEPREFIX/drive_c/Program Files/swamp/sounds/Music/"
fi fi
add_launcher "c:\Program Files\swamp\Swamp.exe" 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") "Technoshock")
install_wine_bottle install_wine_bottle
download "http://tiflocomp.ru/download/games/technoshock_140b_en.zip" "http://tiflocomp.ru/download/games/technoshock140b_en_update.zip" 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 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 "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." echo "In each subsequent launch, you will need to hit enter a couple times before it starts speaking."
alert
;; ;;
"Warsim") "Warsim")
get_installer "Warsim Full Game.zip" "https://huw2k8.itch.io/warsim" get_installer "Warsim Full Game.zip" "https://huw2k8.itch.io/warsim"

View File

@ -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

View File

@ -3,7 +3,8 @@
# Modified from the script at: # Modified from the script at:
# https://gist.github.com/fdietze/6768a0970d7d732b7fbd7930ccceee2a # 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 shopt -s expand_aliases

View File

@ -77,6 +77,14 @@ if [[ -z "${WINEPREFIX}" ]]; then
exit 0 exit 0
fi 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() { msgbox() {
# Returns: None # Returns: None
# Shows the provided message on the screen with an ok button. # Shows the provided message on the screen with an ok button.
@ -124,7 +132,7 @@ menulist() {
restore_voice() { restore_voice() {
if [[ $doRestore -eq 0 ]]; then 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" $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 fi
} }
@ -142,7 +150,7 @@ set_voice() {
RHVoiceName="${RHVoiceName##*/}" RHVoiceName="${RHVoiceName##*/}"
fullVoice="${voiceListFullName[$counter]}" fullVoice="${voiceListFullName[$counter]}"
fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" 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 # Remove any existing rate change for voices
$sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" $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" $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##*/}" RHVoiceName="${RHVoiceName##*/}"
fullVoice="${voiceListFullName[$counter]}" fullVoice="${voiceListFullName[$counter]}"
fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" 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" $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" cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs"
dim speechobject dim speechobject
set speechobject=createobject("sapi.spvoice") 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." 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 EOF
wine cscript "c:\windows\temp\speak.vbs" ${wine} cscript "c:\windows\temp\speak.vbs"
} }
# Handle voice restore, but only if voice changed # Handle voice restore, but only if voice changed
@ -181,7 +189,7 @@ dim speechobject
set speechobject=createobject("sapi.spvoice") set speechobject=createobject("sapi.spvoice")
speechobject.speak "" speechobject.speak ""
EOF EOF
wine cscript "c:\windows\temp\speak.vbs" ${wine} cscript "c:\windows\temp\speak.vbs"
# Create an array of available voices. # Create an array of available voices.
ifs="$IFS" ifs="$IFS"

View File

@ -13,12 +13,12 @@ is_function() {
configure_arch() { configure_arch() {
packageList=( packageList=(
cabextract cabextract
curl
dialog dialog
dos2unix dos2unix
gawk gawk
unzip unzip
w3m w3m
wget
wine wine
winetricks winetricks
wine_gecko wine_gecko
@ -34,6 +34,8 @@ configure_arch() {
alsa-lib alsa-lib
mesa mesa
openal openal
sox
sqlite3
translate-shell translate-shell
xz xz
gst-plugins-bad gst-plugins-bad
@ -41,6 +43,7 @@ configure_arch() {
gst-plugins-ugly gst-plugins-ugly
gst-libav gst-libav
p7zip p7zip
xdg-utils
) )
if [[ "$(uname -m)" == "x86_64" ]]; then if [[ "$(uname -m)" == "x86_64" ]]; then
# Enable multilib # Enable multilib
@ -72,6 +75,7 @@ configure_arch() {
configure_debian() { configure_debian() {
packageList=( packageList=(
curl
dialog dialog
gawk gawk
gstreamer1.0-plugins-bad:i386 gstreamer1.0-plugins-bad:i386