audiogame-manager/audiogame-manager.sh

995 lines
41 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright 2020, Stormux, <storm_dragon@linux-a11y.org>
#
# 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.
#
# Dialog accessibility
export DIALOGOPTS='--no-lines --visit-items'
# Automatic update function
update() {
local filePath="$(command -v ${0})"
if file "${filePath}" | grep -q 'Bourne-Again shell script, ASCII text' ; then
return
fi
# make sure the site can be reached
ping -c1 stormgames.wolfe.casa &> /dev/null || return
if [[ "$(wget --quiet -O - https://stormgames.wolfe.casa/downloads/audiogame-manager | sha256sum | cut -d ' ' -f1)" == "$(sha256sum "${filePath}" | cut -d ' ' -f1)" ]]; then
return
fi
echo "There is a new version of ${0##*/} available."
echo "Do you want to update now?"
read -r continue
if [[ "${continue,,}" =~ ^y|ye|yes$ ]]; then
if [[ -w "$0" ]]; then
wget --quiet -O "${filePath}" "https://stormgames.wolfe.casa/downloads/audiogame-manager"
else
sudo wget --quiet -O "${filePath}" "https://stormgames.wolfe.casa/downloads/audiogame-manager"
fi
echo "${0##*/} has been updated. Please launch the program again to use the latest version."
exit 0
fi
}
# Function to open urls across OS.
open_url() {
if [[ "$(uname)" == "Darwin" ]]; then
open "${*}"
else
xdg-open "${*}"
fi
}
# Create the clipboard reading function for Sequence Storm
write_sequence_storm_reader() {
if -e ~/.SequenceStormReader ]]; then
return
fi
# Here-document start
cat << "EOF" > ~/.SequenceStormReader
#!/usr/bin/env bash
# Wait for the game to be launched
while ! pgrep -u $USER ^SequenceStorm &> /dev/null ; do
sleep 0.05
done
export DISPLAY=:0
unset cliptext
while pgrep -u $USER ^SequenceStorm &> /dev/null ; do
if [[ "$(uname)" == "Darwin" ]]; then
tmp="$(pbpaste 2> /dev/null)"
else
tmp="$(xclip -selection clipboard -o 2> /dev/null)"
fi
tmp="${tmp//%/ percent }"
if [ "$tmp" != "$cliptext" ] ; then
cliptext="$tmp"
if [[ "${cliptext,,}" =~ key|load|private|says|terminal ]]; then
if [[ "$(uname)" == "Darwin" ]]; then
say -v alex -r 300 "$cliptext"
else
spd-say -w -r 50 -- "$cliptext"
fi
else
if [[ "$(uname)" == "Darwin" ]]; then
say -v alex -r 300 "$cliptext"
else
spd-say -r 50 -- "$cliptext"
fi
fi
fi
sleep 0.05
done
exit 0
EOF
# Here-document end
chmod 755 ~/.SequenceStormReader
}
# Wine configuration section
checklist() {
declare -a errorList
echo "Checking your system..."
echo
if command -v wine &> /dev/null ; then
echo "Wine is installed."
else
errorList+=("Critical: Wine is not installed. You will not be able to play any games.")
fi
if command -v winetricks &> /dev/null ; then
echo "Winetricks is installed."
else
errorList+=("Critical: Winetricks is not installed. This means wine cannot be configured, dependancies cannot be installed, and only self-voicing games have any chance of working.")
fi
if command -v wget &> /dev/null ; then
echo "Wget is installed."
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."
else
errorList+=("Critical: ${i^} is not installed. You will not be able to install some games or their components.")
fi
done
if command -v gawk &> /dev/null ; then
echo "Gawk is installed."
else
errorList+=("Warning: gawk is not installed. Game removal with -r will not work.")
fi
if command -v ocrdesktop &> /dev/null ; then
echo "Ocrdesktop is installed."
else
errorList+=("Warning: ocrdesktop is not installed. It can help if the installer gets stuck to figure out what is happening.")
fi
if command -v unix2dos &> /dev/null ; then
echo "Dos2unix is installed."
else
errorList+=("Warning: unix2dos is not installed. Some games need a configuration file in dos format before they will run.")
fi
if [[ -d /usr/share/wine/gecko/ ]]; then
echo "Found wine gecko."
else
errorList+=("Warning: Wine gecko not found, some games may not work.")
fi
if [[ -d /usr/share/wine/mono/ ]]; then
echo "Found wine mono."
else
errorList+=("Warning: Wine mono not found, some games may not work.")
fi
if command -v xclip &> /dev/null ; then
echo "Xclip is installed."
else
errorList+=("Warning: Xclip is not installed. Some games may not speak or register properly.")
fi
if command -v xdotool &> /dev/null ; then
echo "Xdotool is installed."
else
errorList+=("Warning: Xdotool is not installed. Some installlers may not work or may need manual intervention.")
fi
# Show the results
if [[ ${#errorList[@]} -eq 0 ]]; then
echo "No problems found, you are good to go."
exit 0
fi
echo "Errors detected, here is a list along with the severity."
echo "Note that errors marked critical mean that you will not be able to install and play games until they are resolved."
for i in "${errorList[@]}" ; do
echo "$i"
done
exit 0
}
download() {
local source=($@)
for i in "${source[@]}" ; do
local dest="${i##*/}"
dest="${dest//%20/ }"
# Return if the game is in cache.
test -e "${cache}/${dest}" && return
if ! wget -O "${cache}/${dest}" "${i}" ; then
echo "Could not download game."
exit 1
fi
done
}
help() {
echo -e "Usage:\n"
echo "With no arguments, open the game launcher."
for i in "${!command[@]}" ; do
echo "-${i/:/ <parameter>}: ${command[${i}]}"
done | sort
exit 0
}
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}"
local bottle="${game,,}"
bottle="${bottle//[[:space:]]/-}"
mkdir -p "$HOME/.local/wine/${bottle}"
export WINEPREFIX="$HOME/.local/wine/${bottle}"
# Arguments to the function are dependancies to be installed.
(DISPLAY="" wineboot -u
wine msiexec /i z:$(find /usr/share/wine/mono -name "wine-mono*x86.msi") /quiet
wine msiexec /i z:$(find /usr/share/wine/gecko -name "wine-gecko*x86.msi") /quiet
winetricks -q $@ ${winVer:-winxp} ${winetricksSettings}) | dialog --progressbox "Installing wine bottle, please wait..." -1 -1
}
# Install games
game_installer() {
mapfile -t installedGames < <(sed '/^$/d' "${configFile}" 2> /dev/null | cut -d '|' -f3)
# Create the menu of installed games
declare -a menuList
for i in "${gameList[@]}" ; do
local menuItem="$i"
for j in "${installedGames[@]}" ; do
if [[ "$j" == "$menuItem" ]]; then
unset menuItem
fi
done
if [[ -n "$menuItem" ]]; then
menuList+=("$menuItem" "$menuItem")
fi
done
if [[ ${#menuList[@]} -eq 0 ]]; then
echo "All games are already installed."
exit 0
fi
menuList+=("Make a One Time Donation" "Make a One Time Donation")
menuList+=("Become a Patron" "Become a Patron")
game="$(dialog --backtitle "Audio Game Installer" \
--clear \
--no-tags \
--menu "Please select a game to install" 0 0 0 "${menuList[@]}" --stdout)"
}
# remove games
game_removal() {
mapfile -t lines < <(sed '/^$/d' "${configFile}" 2> /dev/null)
if [[ ${#lines} -eq 0 ]]; then
echo "No games found."
exit 0
fi
# Create the menu of installed games
declare -a menuList
for i in "${lines[@]}" ; do
menuList+=("${i%|*}" "${i##*|}")
done
menuList+=("Make a One Time Donation" "Make a One Time Donation")
menuList+=("Become a Patron" "Become a Patron")
local game="$(dialog --backtitle "Audio Game Removal" \
--clear \
--no-tags \
--menu "Please select a game to delete" 0 0 0 "${menuList[@]}" --stdout)"
if [[ ${#game} -gt 0 ]]; then
if [[ "$game" == "Make a One Time Donation" ]]; then
open_url "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stormdragon2976@gmail.com&lc=US&item_name=Donation+to+Storm+Games&no_note=0&cn=&currency_code=USD&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted"
exit 0
fi
if [[ "$game" == "Become a Patron" ]]; then
open_url "https://patreon.com/stormux"
exit 0
fi
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.
WINEPREFIX="${HOME}/.local/wine/${game%|*}" wineserver -k
# remove the game
rm -rf "${HOME}/.local/wine/${game%|*}"
# remove the launcher
gawk -i inplace -vLine="${game//\\/\\\\}" '!index($0,Line)' "$configFile"
echo "The selected game has been deleted."
fi
exit 0
}
# launch games that are installed
game_launcher() {
mapfile -t lines < <(sed '/^$/d' "${configFile}" 2> /dev/null)
if [[ ${#lines} -eq 0 ]]; then
echo "Install some games first."
exit 0
fi
if [[ $# -eq 0 ]]; then
# Create the menu of installed games
declare -a menuList
for i in "${lines[@]}" ; do
menuList+=("${i%|*}" "${i##*|}")
done
menuList+=("Make a One Time Donation" "Make a One Time Donation")
menuList+=("Become a Patron" "Become a Patron")
local game="$(dialog --backtitle "Audio Game Launcher" \
--clear \
--no-tags \
--menu "Please select a game to play" 0 0 0 "${menuList[@]}" --stdout)"
else
local game="$(grep "^${1}|" "${configFile}")"
game="${game%|*}"
if [[ -z "$game" ]]; then
echo "Game $1 not found."
exit 1
fi
fi
if [[ ${#game} -gt 0 ]]; then
if [[ "$game" == "Make a One Time Donation" ]]; then
open_url "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stormdragon2976@gmail.com&lc=US&item_name=Donation+to+Storm+Games&no_note=0&cn=&currency_code=USD&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted"
exit 0
fi
if [[ "$game" == "Become a Patron" ]]; then
open_url "https://patreon.com/stormux"
exit 0
fi
# for games that require custom scripts before launch
if [[ "$game" =~ sequence-storm ]]; then
[[ -x ~/.SequenceStormReader ]] && ~/.SequenceStormReader &
fi
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.
WINEPREFIX="${HOME}/.local/wine/${game%|*}" wineserver -k
# launch the game
if command -v qjoypad &> /dev/null ; then
mkdir -p ~/.qjoypad3
touch "${HOME}/.qjoypad3/${game%|*}.lyt"
if pgrep qjoypad &> /dev/null ; then
qjoypad -T "${game%|*}" 2> /dev/null
else
qjoypad -T "${game%|*}" 2> /dev/null &
fi
fi
export WINEPREFIX="${HOME}/.local/wine/${game%|*}"
if [[ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]]; then
wine64 start /realtime /d "${winePath}" "$wineExec"
else
wine start /realtime /d "${winePath}" "$wineExec"
fi
fi
exit 0
}
# main script
#functions
add_launcher() {
local launchSettings="${game,,}"
launchSettings="${launchSettings//[[:space:]]/-}|${1}|${game}"
if ! grep -F -q -x "${launchSettings}" "${configFile}" ; then
echo "${launchSettings}" >> "${configFile}"
sort -o "${configFile}" "${configFile}"
# Remove .lnk files because they don't work.
find ~/Desktop -type f -iname '*.lnk' -exec bash -c '
for f ; do
mimeType="$(file -b "$f")"
mimeType="${mimeType%%,*}"
if [[ "$mimeType" == "MS Windows shortcut" ]]; then
rm -v "$f"
fi
done' _ {} +
if [[ "${noCache}" == "true" ]]; then
rm -f "${cache}/${1##*\\}"
fi
fi
}
# Check for updates
update
# If display isn't set assume we are launching from console and an X environment is running using display :0
if [[ -z "$DISPLAY" ]]; then
export DISPLAY=":0"
fi
# Settings file
cache="${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/audiogame-manager/cache"
configFile="${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/audiogame-manager/games.conf"
mkdir -p "${cache}"
mkdir -p "${configFile%/*}"
# Turn off debug messages
export WINEDEBUG="-all"
# During installation, you can set winVer to the versions available.
# To set winetricks arguments, such as virtual desktop, set the winetricksSettings variable.
# Example: winetricksSettings="vd=1024x768"
# Files are cached unless -N no cache is set.
unset noCache
# Manual installation is not default, make sure it's unset
unset manualInstall
# The list of games available for installation.
# Use menu friendly names.
gameList=(
"A Hero's Call"
"Adrian's Doom"
"Adventurers At C"
"AudioDisc"
"Battle Zone"
"Bloodshed"
#"Chopper Challenge"
"Christmas WhoopAss"
"Crazy Party"
"Crazy Tennis"
"Death on the Road"
"Easter Quest"
#"Entombed"
"Fantasy Story II"
#"Fartman"
"Finger Panic"
"Fuck That Bird"
"GMA Tank Commander"
"Hunter"
"Judgement Day"
"Kitchensinc Games"
"Kringle Crash"
"Light Cars"
"Lockpick"
"Lone Wolf"
"Manamon"
"Manamon 2"
"MudSplat French"
"MudSplat English"
"MudSplat Swedish"
"Oh Shit!"
"Palace Punch Up"
"Paladin of the Sky"
"Perilous Hearts"
"Pontes Kickups!"
"Q9"
"Revenge of the Undead"
"Rhythm Rage"
"RS Games"
"Run For Your Life"
"Sequence Storm"
"Shades of Doom"
"Super Egg Hunt"
"Super Liam"
"Survive the Wild"
"Swamp"
"Technoshock"
"The Blind Swordsman"
"The Great Toy Robbery"
#"Three D velocity"
"Top Speed 3"
"Triple Triad"
"Undead Assault"
)
# With no arguments, open the game launcher.
if [[ $# -eq 0 ]]; then
game_launcher
fi
# Array of command line arguments
declare -A command=(
[c]="Check your system for necessary components."
[d]="debug mode, wine will be much more verbose when games are launched with this flag."
[h]="This help screen."
[i]="Install games."
[l:]="launch given game without interactive audiogame-manager menu specified by its wine bottle."
[N]="No cache, delete the installer after it has been extracted."
[r]="Remove a game. This will delete all game data."
)
# Convert the keys of the associative array to a format usable by getopts
args="${!command[*]}"
args="${args//[[:space:]]/}"
while getopts "${args}" i ; do
case "$i" in
c) checklist;;
d)
unset WINEDEBUG
game_launcher
;;
h) help;;
i) game_installer;;
l) game_launcher "${OPTARG}";;
N) noCache="true";;
r) game_removal;;
esac
done
# Install game based on the selection above.
case "${game}" in
"A Hero's Call")
export winVer="win7"
install_wine_bottle dotnet40 xna31 speechsdk corefonts
download "http://files.OutOfSightGames.com/files/a-heros-call.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/a-heros-call.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\a-heros-call\A Hero's Call.exe"
;;
"Adrian's Doom")
install_wine_bottle speechsdk
download "https://agarchive.net/games/mt/adrian's%20doom.exe"
wine "${cache}/adrian's doom.exe" /silent
add_launcher "c:\Program Files\Two Caring Citizens\Adrian's Doom!\adrian.exe"
;;
"Adventurers At C")
install_wine_bottle speechsdk
download "http://www.vgstorm.com/aac/aac.zip" "https://www.agarchive.net/games/vg/adventure%20at%20c%20stages.7z"
unzip -d "$WINEPREFIX/drive_c/Program Files/aac" "${cache}/aac.zip"
7z e -o"$WINEPREFIX/drive_c/Program Files/aac/stages" "${cache}/adventure at c stages.7z"
add_launcher "c:\Program Files\aac\aac.exe"
;;
"AudioDisc")
install_wine_bottle
download "https://agarchive.net/games/other/audiodisc.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/audiodisc.zip"
add_launcher "c:\Program Files\audiodisc\disco.exe"
;;
"Battle Zone")
export winVer="win7"
install_wine_bottle speechsdk
download "https://www.agarchive.net/games/gameMadnessInteractive/battle%20zone%2013.5%20setup.exe"
wine "${cache}/battle zone 13.5 setup.exe" /silent
add_launcher "c:\Program Files\Battle Zone\ss.exe"
rm -fv "${WINEPREFIX}/drive_c/Program Files/Battle Zone/nvdaControllerClient32.dll"
;;
"Bloodshed")
export winVer="win7"
install_wine_bottle speechsdk
download "http://www.samtupy.com/games/bloodshed.exe"
cp "${cache}/bloodshed.exe" "$WINEPREFIX/drive_c/Program Files/"
add_launcher "c:\Program Files\bloodshed.exe"
;;
"Chopper Challenge")
# Freezes at menu
install_wine_bottle vb6run dx8vb setupapi
download "https://www.agarchive.net/games/XSight/chopper%20challenge%20setup.exe"
wine "${cache}/chopper challenge setup.exe" &
xdotool sleep 5 type y 2> /dev/null
xdotool sleep 1 key --clearmodifiers alt+n sleep 2 key alt+n sleep 2 key alt+n sleep 2 key alt+i sleep 5 key alt+f 2> /dev/null
echo "$USER|n/a" >> "$WINEPREFIX/drive_c/Program Files/x-sight interactive/chopper challenge/config.dat"
add_launcher "c:\Program Files\x-sight interactive\chopper challenge\Chopper.exe"
;;
"Christmas WhoopAss")
install_wine_bottle vb6run dx8vb
download "https://www.agarchive.net/games/draconis/christmas%20whoopass%20setup.exe"
wine "${cache}/christmas whoopass setup.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
wineserver -w
add_launcher "c:\Program Files\Draconis Entertainment\Christmas Whoop Ass\wa.exe"
;;
"Crazy Party")
export winVer="win7"
install_wine_bottle speechsdk
download "http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta73.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/Crazy-Party-beta73.zip"
add_launcher "c:\Program Files\Crazy-Party-beta73\Crazy Party.exe"
rm -f "${WINEPREFIX}/drive_c/Program Files/Crazy-Party-beta73/nvdaControllerClient32.dll"
;;
"Crazy Tennis")
install_wine_bottle speechsdk
download "https://www.agarchive.net/games/VIP/crazy%20tennis%20setup.exe"
wine "${cache}/crazy tennis setup.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
wineserver -w
add_launcher "c:\Program Files\Crazytennis\crazytennis.exe"
;;
"Death on the Road")
export winVer="win7"
install_wine_bottle
download "http://oriolgomez.com/games/road_en.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/death on the road" "${cache}/road_en.zip"
add_launcher "c:\Program Files\death on the road/game.exe"
;;
"Easter Quest")
install_wine_bottle
download "https://agarchive.net/games/mt/easter%20quest%20setup.exe"
wine "${cache}/easter quest setup.exe" /silent
add_launcher "c:\Program Files\MTGames\Easter Quest\easter.exe"
;;
"Entombed")
export winVer="win7"
#install_wine_bottle dotnet35 msvcrt40 speechsdk
install_wine_bottle speechsdk msvcrt40 dotnet48 xna40
download "http://blind-games.com/newentombed/EntombedSetup.exe"
wine "${cache}/EntombedSetup.exe" /silent
add_launcher "c:\Program Files\Entombed\Entombed.exe"
;;
"Fantasy Story II")
export winVer="win10"
install_wine_bottle speechsdk
download "https://stormgames.wolfe.casa/downloads/FS2_2.2_Windows_x86.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/FS2_2.2_Windows_x86.zip"
add_launcher "c:\Program Files\FS2_2.2_Windows_x86\FantasyStory2.exe"
;;
"Fartman")
install_wine_bottle dx8vb vb6run
download "http://www.agarchive.net/games/bpc/fartman.exe"
wine "${cache}/fartman.exe" /silent
#add_launcher "c:\Program Files\Finger Panic 1.0\FingerPanic.exe"
;;
"Finger Panic")
install_wine_bottle dx8vb vb6run
download "http://www.agarchive.net/games/bsc/FingerPanicSetup.exe"
wine "${cache}/FingerPanicSetup.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
wineserver -w
add_launcher "c:\Program Files\Finger Panic 1.0\FingerPanic.exe"
;;
"Fuck That Bird")
export winVer="win7"
install_wine_bottle
download "http://oriolgomez.com/games/bird_en.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/fuck that bird" "${cache}/bird_en.zip"
add_launcher "c:\Program Files\fuck that bird/game.exe"
;;
"GMA Tank Commander")
install_wine_bottle vb6run dx8vb speechsdk
download "http://www.gmagames.com/gtc120.exe"
wine "${cache}/gtc120.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
xdotool sleep 15 type --clearmodifiers --delay 100 "${USER^}" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool sleep 10 type --clearmodifiers --delay 100 "${HOSTNAME^}" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool sleep 10 type --clearmodifiers --delay 100 "na@na.na" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool sleep 10 type --clearmodifiers --delay 100 "uuuuuuu" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool key --clearmodifiers Return 2> /dev/null
xdotool sleep 10 key --clearmodifiers Return 2> /dev/null
wineserver -w
echo "To accurately set your information, edit the file:"
echo "${WINEPREFIX}/drive_c/Program\ Files/GMA\ Tank\ Commander/config.dat"
echo "The default country is US. The fields are:"
echo -e "\"Firstname Lastname\"\n\"Email address\"\n\"Country code\""
add_launcher "c:\Program Files\GMA Tank Commander\gtc.exe"
;;
"Hunter")
install_wine_bottle vb6run dx8vb
# FIXME: Hacky, but it works. Install dotnet35 by itself so it actually doesn't hang.
winetricks -q dotnet35
wineserver -k # Damn you, dotnet.
download "http://www.agarchive.net/games/bsc/HunterSetup.exe" "https://www.agarchive.net/games/bsc/BSC%20unlock%20code%20generator.7z"
wine "${cache}/HunterSetup.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
wineserver -w
mkdir -p "$WINEPREFIX/drive_c/Program Files/bsc-key-generator"
7z e -o"$WINEPREFIX/drive_c/Program Files/bsc-key-generator" "${cache}/BSC unlock code generator.7z"
echo "$USER"$'\n'"$(hostname)"$'\n'"none"$'\n'"US" > "$WINEPREFIX/drive_c/Program Files/Hunter/config.dat"
test command -v unix2dos &> /dev/null && unix2dos "$WINEPREFIX/drive_c/Program Files/Hunter/config.dat" || echo "Warning! You do not have unix2dos or dos2unix installed, Hunter may not work!"
if command -v xclip &> /dev/null && command -v xdotool &> /dev/null ; then
wine "c:\Program Files\Hunter\HunterRegistration.exe" &
xdotool sleep 10 key Return sleep 2 key Return sleep 2 key Alt+n
sleep 1
regcode="$(xclip -selection clipboard -o)"
xdotool sleep 1 key Shift+Tab sleep 1 key Return
# FIXME: Kind of hacky, but let's make sure it actually exitted.
sleep 5
wineserver -k
wine "c:\Program Files\bsc-key-generator\BlindsoftwareUnlockCodeGenerator.exe" &
xdotool sleep 10 key Return sleep 2 type hu
xdotool sleep 1 key Tab sleep 1 type $regcode
xdotool sleep 1 key Tab sleep 1 key Return
sleep 2
regcode="$(xclip -selection clipboard -o)" # Might as well reuse the variable.
# FIXME: Kind of hacky, but let's make sure it actually exitted since I can't find a good way to exit this program.
sleep 5
wineserver -k
wine "c:\Program Files\Hunter\HunterRegistration.exe" &
echo "$regcode" | xclip -selection clipboard
xdotool sleep 10 key Return sleep 2 key Shift+Tab sleep 1 key Shift+Tab sleep 1 key Return
# FIXME: Kind of hacky, but let's make sure it actually exitted.
sleep 5
wineserver -k
else
echo "Warning: You need xclip and xdotool for this installer to finish the registration process, however, you don't have them. Either remove the program, install the stated tools, and reinstall it, or go on your own. Caveat Emptor, go to jail, do not pass go, do not collect audiogame rewards and all that stuff."
fi
add_launcher "c:\Program Files\Hunter\HunterRun.exe"
;;
"Kringle Crash")
install_wine_bottle
download "https://www.agarchive.net/games/blastbay/kringle%20crash%20setup.exe"
wine "${cache}/kringle crash setup.exe" /silent
add_launcher "c:\Program Files\Kringle Crash\kringlecrash.exe"
;;
"Judgement Day")
install_wine_bottle vb6run dx8vb quartz
download "http://files.l-works.net/judgmentdayfullsetup.exe"
wine "${cache}/judgmentdayfullsetup.exe" /silent
cat << EOF > /tmp/judgementday.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\VB and VBA Program Settings\judgmentday\config]
"name"="$USER"
EOF
wine regedit /s /tmp/judgementday.reg
rm /tmp/judgementday.reg
add_launcher "c:\Program Files\Lworks\Judgment Day\judgmentday.exe"
;;
"Kitchensinc Games")
install_wine_bottle vb6run speechsdk dx8vb
download "https://stormgames.wolfe.casa/downloads/kitchen.tar.xz"
echo "Extracting files..."
tar xf "${cache}/kitchen.tar.xz" -C "$WINEPREFIX/drive_c/Program Files/"
add_launcher "c:\Program Files\Kitchen's Sink\gamemenu.exe"
;;
"Light Cars")
install_wine_bottle dx8vb vb6run
download "https://www.agarchive.net/games/lighttech/light%20cars%20setup.exe"
if [[ -n "$manualInstall" ]]; then
wine "${cache}/light cars setup.exe"
else
wine "${cache}/light cars setup.exe" &
automate_installer alt+n alt+a space alt+n alt+n alt+i alt+f
fi
echo -e "${USER} ${HOST}\nna@na.na\nUS" > ~/.local/wine/light-cars/drive_c/Program\ Files/Lighttech\ Interactive/Light\ Cars/config.dat
unix2dos ~/.local/wine/light-cars/drive_c/Program\ Files/Lighttech\ Interactive/Light\ Cars/config.dat
add_launcher "c:\Program Files\Lighttech Interactive\Light Cars\lightCars.exe"
;;
"Lockpick")
install_wine_bottle vb6run dx8vb
download "http://files.l-works.net/lockpicksetup.exe"
wine "${cache}/lockpicksetup.exe" /silent
add_launcher "c:\Program Files\lWorks\Lockpick\lockpick.exe"
;;
"Lone Wolf")
install_wine_bottle vb6run dx8vb speechsdk
download "http://www.gmagames.com/lw350.exe"
wine "${cache}/lw350.exe" /silent &
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
xdotool sleep 10 type --clearmodifiers --delay 100 "$USER" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool type --clearmodifiers --delay 100 "$HOSTNAME" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool type --clearmodifiers --delay 100 "na@na.na" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool type --clearmodifiers --delay 100 "uuuuuu" 2> /dev/null
xdotool key --clearmodifiers Tab 2> /dev/null
xdotool key --clearmodifiers Return 2> /dev/null
wineserver -w
add_launcher "c:\Program Files\Lone Wolf\lw.exe"
;;
"Manamon")
export winVer="win7"
install_wine_bottle speechsdk
download "https://www.vgstorm.com/manamon/manamon_installer.exe"
wine "${cache}/manamon_installer.exe" /silent
add_launcher "c:\Program Files\VGStorm.com\Manamon\rpg.exe"
;;
"Manamon 2")
export winVer="win7"
install_wine_bottle speechsdk
download "http://www.vgstorm.com/manamon2/manamon2_installer.exe"
wine "${cache}/manamon2_installer.exe" /silent
add_launcher "c:\Program Files\VGStorm.com\Manamon 2\rpg.exe"
;;
"MudSplat English")
a="a"
f="f"
i="i"
n="n"
;&
"MudSplat French")
# Variables may be already set for English installation, so make sure not to overwrite them.
a="${a:-a}"
f="${f:-f}"
i="${i:-i}"
n="${n:-n}"
;&
"MudSplat Swedish")
# Variables may be already set for French installation, so make sure not to overwrite them.
a="${a:-a}"
f="${f:-f}"
i="${i:-i}"
n="${n:-n}"
install_wine_bottle
download "https://www.agarchive.net/games/other/Mudsplat-install.exe"
wine "${cache}/Mudsplat-install.exe" &
# Select the language.
xdotool sleep 10 type --clearmodifiers ${game:9:1} 2> /dev/null
xdotool sleep 1 key --clearmodifiers Return sleep 1 key alt+${n} sleep 1 key alt+${a} sleep 1 key alt+${n} sleep 1 key space sleep 1 key alt+${n} sleep 1 key alt+${n} sleep 1 key alt+${i} sleep 10 key space sleep 1 key alt+${f} 2> /dev/null
wineserver -w
mudsplatLauncher="$(find "$WINEPREFIX/drive_c/Program Files/TiM/MudSplat" -name 'mudsplat-*.exe')"
mudsplatLauncher="${mudsplatLauncher##*/}"
add_launcher "c:\Program Files\TiM\MudSplat\\${mudsplatLauncher}"
;;
"Oh Shit!")
export winVer="win7"
install_wine_bottle speechsdk
download "http://samtupy.com/stevend/oh_shit.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/oh_shit.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\oh_shit\OhShit.exe"
;;
"Palace Punch Up")
install_wine_bottle speechsdk
download "https://www.agarchive.net/games/blastbay/palace%20punch-up%20setup.exe"
wine "${cache}/palace punch-up setup.exe" /silent
add_launcher "c:\Program Files\Palace Punch-up\palace.exe"
;;
"Paladin of the Sky")
export winVer="win7"
install_wine_bottle speechsdk
download "http://www.vgstorm.com/cod/pots/paladin_installer.exe"
wine "${cache}/paladin_installer.exe" /silent
add_launcher "c:\Program Files\VGStorm.com\Paladin of the Sky\game.exe"
;;
"Perilous Hearts")
install_wine_bottle speechsdk
download "https://www.agarchive.net/games/blastbay/perilous%20hearts%20concept%20demo.exe"
wine "${cache}/perilous hearts concept demo.exe" /silent
add_launcher "c:\Program Files\Perilous Hearts Concept Demo\perilous_hearts.exe"
;;
"Pontes Kickups!")
export winVer="win7"
install_wine_bottle speechsdk
download "http://www.pontes.ro/ro/divertisment/games/PontesKickUpsInstaller.exe"
wine "${cache}/PontesKickUpsInstaller.exe" /silent /q
rm -fv "${WINEPREFIX}/drive_c/Program Files/Pontes Games/Pontes Kick-ups/nvdaControllerClient32.dll"
add_launcher "c:\Program Files\Pontes Games\Pontes Kick-ups\PontesKickUps.exe"
;;
"Q9")
install_wine_bottle
download "http://www.blastbay.com/q9_english_installer.exe"
wine "${cache}/q9_english_installer.exe" /silent
add_launcher "c:\Program Files\Q9 Action Game\q9.exe"
;;
"Revenge of the Undead")
export winVer="win7"
install_wine_bottle speechsdk
download "https://tunmi13.dev/projects/rotu.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/rotu.zip"
rm -fv "${WINEPREFIX}/drive_c/Program Files/rotu/nvdaControllerClient32.dll"
add_launcher "c:\Program Files\rotu\rotu.exe"
;;
"Rhythm Rage")
export winVer="win7"
install_wine_bottle speechsdk
download "http://oriolgomez.com/games/rr_en.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files/rhythm rage" "${cache}/rr_en.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\rhythm rage/game.exe"
;;
"RS Games")
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
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\RS Games Client\rsg.exe"
;;
"Run For Your Life")
export winVer="win7"
install_wine_bottle
download "http://oriolgomez.com/games/rfyl_en.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/run for your life" "${cache}/rfyl_en.zip"
add_launcher "c:\Program Files\run for your life\game.exe"
;;
"Sequence Storm")
read -p "Make sure sequence-storm-win64.zip is available in either your Downloads or Desktop directory and press enter to continue." continue
for i in ~/Downloads ~/Desktop ; do
find $i -type f -name 'sequence-storm-win64.zip' -exec cp -v {} "${cache}/" \;
done
if [[ ! -f "${cache}/sequence-storm-win64.zip" ]]; then
echo "couldn't find sequence-storm-win64.zip. Please download the file and try again."
exit 1
fi
export WINEARCH=win64
export winVer="win10"
install_wine_bottle
unzip -d "$WINEPREFIX/drive_c/Program Files/sequence-storm" "${cache}/sequence-storm-win64.zip"
write_sequence_storm_reader
wget -O "$WINEPREFIX/drive_c/Program Files/sequence-storm/settings.json" "https://stormgames.wolfe.casa/downloads/sequencestorm-settings.json"
add_launcher "c:\Program Files\sequence-storm\SequenceStorm.exe"
;;
"Shades of Doom")
export winVer="win7"
install_wine_bottle vb6run dx8vb speechsdk
download "http://www.gmagames.com/sod20022.exe"
wine "${cache}/sod20022.exe" /silent
add_launcher "c:\Program Files\Shades of Doom 2.0\sod.exe"
;;
"Super Egg Hunt")
install_wine_bottle
download "http://files.l-works.net/superegghuntsetup.exe"
wine "${cache}/superegghuntsetup.exe" /silent
add_launcher "c:\Program Files\Lworks\super egg hunt\superegghunt.exe"
;;
"Super Liam")
install_wine_bottle vb6run dx8vb
download "http://files.l-works.net/superliamsetup.exe"
wine "${cache}/superliamsetup.exe" /silent
add_launcher "c:\Program Files\lWorks\Super Liam\sl.exe"
;;
"Survive the Wild")
export winVer="win7"
install_wine_bottle speechsdk
download "https://stormgames.wolfe.casa/downloads/survive-the-wild.tar.xz"
echo "Extracting files..."
tar xf "${cache}/survive-the-wild.tar.xz" -C "$WINEPREFIX/drive_c/Program Files/"
add_launcher "c:\Program Files\Sam Tupy\Survive the Wild\stw.exe"
;;
"Swamp")
export winVer="win7"
winetricksSettings="vd=1024x768"
install_wine_bottle vb6run dx8vb quartz speechsdk corefonts
download "https://kaldobsky.com/audiogames/SwampPart1.zip" "https://kaldobsky.com/audiogames/SwampPart2.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/SwampPart1.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/SwampPart2.zip"
# make sure the latest version is installed.
if wget -O "${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 cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat'
add_launcher "c:\Program Files\swamp\Swamp.exe"
;;
"Technoshock")
install_wine_bottle
download "http://tiflocomp.ru/download/games/technoshock_140b_en.zip" "http://tiflocomp.ru/download/games/technoshock140b_en_update.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/technoshock_140b_en.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/technoshock_140b_en_update.zip"
wine "$WINEPREFIX/drive_c/Program Files/setup_eng.exe" /silent
wineserver -w
wine "$WINEPREFIX/drive_c/Program Files/setup_eng_update_pack.exe" /silent
add_launcher "c:\Program Files\Tiflocomp Games\Technoshock\ts.exe"
;;
"The Blind Swordsman")
install_wine_bottle
download "http://www.evildogserver.com/theblindswordsman/theblindswordsmanPC.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/theblindswordsmanPC.zip"
add_launcher "c:\Program Files\TheBlindSwordsman.exe"
;;
"The Great Toy Robbery")
export winVer="win7"
install_wine_bottle speechsdk
download "http://files.l-works.net/tgtrsetup_2.04.exe" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
wine "${cache}/tgtrsetup_2.04.exe" /silent
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\Lworks\The Great Toy Robbery\tgtr.exe"
;;
"Three D velocity")
export winVer="win10"
install_wine_bottle speechsdk
download "https://github.com/munawarb/Three-D-Velocity-Binaries/archive/master.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/master.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\Three-D-Velocity-Binaries-master\tdv.exe"
;;
"Top Speed 3")
install_wine_bottle directplay
download "https://github.com/PlayingintheDark/TopSpeed/releases/download/h/Tspeed_3.0.3.exe"
wine "${cache}/Tspeed_3.0.3.exe" /silent
add_launcher "c:\Program Files\Playing in the dark\Top Speed 3\TopSpeed.exe"
;;
"Triple Triad")
export winVer="win7"
install_wine_bottle vb6run dx8vb quartz
download "https://www.kaldobsky.com/audiogames/tripletriad.zip"
unzip -d "$WINEPREFIX/drive_c/Program Files/Triple Triad" "${cache}/tripletriad.zip"
add_launcher "c:\Program Files\Triple Triad\TripleTriad.exe"
;;
"Undead Assault")
export winVer="win7"
install_wine_bottle speechsdk
download "http://undead-assault.com/static/files/public/undead_assault.zip" "https://stormgames.wolfe.casa/downloads/nvdaControllerClient32.dll"
unzip -d "$WINEPREFIX/drive_c/Program Files/undead_assault" "${cache}/undead_assault.zip"
find "${WINEPREFIX}" -type f -name 'nvdaControllerClient32.dll' -exec cp -v "${cache}/nvdaControllerClient32.dll" "{}" \;
add_launcher "c:\Program Files\undead_assault\Undead Assault.exe"
;;
"Make a One Time Donation")
open_url "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=stormdragon2976@gmail.com&lc=US&item_name=Donation+to+Storm+Games&no_note=0&cn=&currency_code=USD&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted"
;;
"Become a Patron")
open_url "https://patreon.com/stormux"
;;
*)
exit 0
;;
esac
exit 0