Compare commits

...

37 Commits

Author SHA1 Message Date
stormdragon2976
43005a75b6 Merge branch 'testing' introduces game specific wine versions. Breaks
Mac compatibility. Please see the wiki for an alternative option.
2023-03-02 00:58:18 -05:00
stormdragon2976
172f5482d0 Fixed up the grep statement to show only the first layout if there are multiples. 2023-02-10 09:44:45 -05:00
stormdragon2976
f1d21ae49f Updated the README with information on switching keyboard layout if necessary. 2023-02-09 17:13:34 -05:00
stormdragon2976
fbb389019d Experimental fix for systems in other languages. Export LANG to en_US.UTF-8 temporarily during installation of games. This needs testing, especially if your computer is normally in a different language. 2023-02-09 00:14:42 -05:00
stormdragon2976
f10afe820a Added an alert for the message about getting speech in vipMUD. 2023-02-08 20:26:51 -05:00
stormdragon2976
3085939e35 Add some flags to make curl try harder to download files for those hosts that are less than reliable. 2023-02-08 16:03:14 -05:00
stormdragon2976
8dcdea5ed1 Removed the "adding games" section from the README. It now has its own wiki page. 2023-02-08 09:51:21 -05:00
stormdragon2976
57eac5b7f6 Found a patch that turns Super Deekout into the full version. 2023-02-07 22:28:46 -05:00
stormdragon2976
68af5c8710 Finished adding Super Deekout. Xdotool is very important dependency for this one. 2023-02-07 18:35:20 -05:00
stormdragon2976
9736e4c000 More progress on Super Deekout. Unfortunately going to have to run the config.exe program. More xdotool to come. 2023-02-07 15:40:25 -05:00
stormdragon2976
bc7cdcfd25 Adding Super Deekout, but have to save for later. Will finish it in a bit. 2023-02-07 14:10:40 -05:00
stormdragon2976
ecec18417e Added game "Tactical Battle". 2023-02-07 03:46:15 -05:00
stormdragon2976
dd1007dce1 Fixed a bug with Mist World installer. Apparently in ' sneaked it's way into the installer. Added an alert functioon in case there's something that needs to be read for an installer. 2023-02-06 05:04:26 -05:00
stormdragon2976
5e1ca7ce7f Create a file, agm.conf, in new bottles that contains the path to wine and wineserver. This will make it possible for game helper scripts to work without breaking bottles that require different versions. 2023-02-05 15:37:57 -05:00
6712a9a234 Fixed missing quote in mist world section. 2023-02-05 11:20:35 -07:00
5113d99a9d Fix up update.exe for mist world on install 2023-02-04 22:36:23 -08:00
stormdragon2976
e9e2003dcb Added instructions for using the Mist World account creation script to the end of installation. 2023-02-04 16:58:55 -05:00
stormdragon2976
b76c55db6f First pass at Mist World account creator script. 2023-02-04 16:51:05 -05:00
677e0211cc First pass at mist world. Seems to work ok. 2023-02-03 22:29:22 -08:00
stormdragon2976
a659b4e63e Make sure the wine variable gets set to something, if none of the conditions for setting it get called. 2023-02-02 04:42:02 -05:00
stormdragon2976
119f8ecfd4 Fixed Shadow Line launcher. 2023-02-02 04:11:54 -05:00
stormdragon2976
33800fc980 Fixed major bug that would sometimes cause the wrong version of wine to be used. 2023-01-31 17:37:10 -05:00
stormdragon2976
e5253d7757 Finally, RS Games working. More fixes needed for some games. 2023-01-30 23:56:21 -05:00
stormdragon2976
b434cc16db RS Games requires an older version of wine to actually speak. Trying 7.7. 2023-01-30 21:54:06 -05:00
stormdragon2976
947c5eacb9 Added missing package xdg-utils to dependency installer script. 2023-01-30 21:49:10 -05:00
stormdragon2976
a6c42a6bd1 Sketchbook now working with sound. 2023-01-27 13:38:08 -05:00
stormdragon2976
5a9f715891 Replace nvdaControllerClient at the launch of Sketchbook so that updates won't break it. Immediately after updating, relaunch the game to restore speech. 2023-01-27 12:27:17 -05:00
stormdragon2976
eaafc19768 Fixed path for Sketchbook. 2023-01-27 11:50:46 -05:00
stormdragon2976
2fdf75a477 Entombed working again, requires wine 7.0. 2023-01-26 21:56:20 -05:00
stormdragon2976
7e90f9586f Entombed now uses wine 7.7, but there appears to be something wrong with part of the installation process, so not working currently. Added some statements to show what is happening, including which wine is being used or installed. 2023-01-26 19:52:00 -05:00
stormdragon2976
795eef018d Updated the dependency installer script. 2023-01-25 01:46:15 -05:00
stormdragon2976
ed82d449c6 Updated installer for swamp. It now uses the new code to make sure everything happens in 7.7 2023-01-24 16:09:13 -05:00
stormdragon2976
8bdba9d93e More very experimental changes. Now games should install using the required version of wine if necessary. It works in all the tests I have done, but that doesn't mean there are no bugs. 2023-01-24 16:04:58 -05:00
stormdragon2976
3cd9facf29 Finally fixed Shadow Line installer, I think. 2023-01-24 12:17:00 -05:00
stormdragon2976
db463525e9 Fixed clipboard_translator. It was refusing to run if or exiting if for some reason the clipboard was empty. 2023-01-23 23:33:00 -05:00
stormdragon2976
56eb97c659 First code using the new wine version code. All Aprone games now use Wine 7.7, this fixes problems with Swamp frequently disconnecting. If you find this doesn't work for you, please use the master branch to play Swamp until the bugs are fixed. I tested it here, and Swamp launched, but I also have wine 7.7 installed system wide currently. 2023-01-23 20:18:36 -05:00
stormdragon2976
1ec6eb758f First incarnation of a function to install different wine versions for audio games that require a specific version of wine to work. 2023-01-23 18:08:56 -05:00
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")
@ -2585,6 +2685,41 @@ EOF
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
download "http://www.pcs-games.net/SBH11.exe" download "http://www.pcs-games.net/SBH11.exe"
@ -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