Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f50b872f6a | |||
| b6d77279f7 | |||
| 1063f21c43 | |||
| 20811bba1e | |||
| 6a05a2e385 | |||
| 085ba2bcca | |||
| c0ac5dbf4b | |||
| ae4e43cabf | |||
| a9387ddd6a | |||
| 6801613c99 | |||
| a831d5f2d5 | |||
| 0728a7eb01 | |||
| 0586974de8 | |||
| 077a6537df | |||
| 372bc878d4 | |||
| 52cb38964d | |||
| 6512d71c60 | |||
| 10bcd1ea3a | |||
| 97964682fb | |||
| 1ea194baf6 | |||
| 98ae684f7a | |||
| 2f45f9edab | |||
| 0c4bbed905 | |||
| 67eefc4d97 | |||
| 153fbd90d2 | |||
| 4c5e69649e | |||
| 7c9f485962 | |||
| e42edf2000 | |||
| e052fb314e | |||
| 8aa2ac37e1 | |||
| b7473e99fe | |||
| c6a182a47a | |||
| 038d2f4b62 | |||
| a8fe5d1eab | |||
| 93b7ad2ae5 | |||
| 284662ff49 | |||
| 6761f72338 | |||
| 2a8265a3b6 | |||
| b83b995cf0 | |||
| c92d35a023 |
@@ -2,6 +2,8 @@
|
||||
image/*
|
||||
*.img
|
||||
*.img.xz
|
||||
__pycache__/
|
||||
tests/
|
||||
|
||||
# AI assistant files
|
||||
AGENTS.md
|
||||
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
/home/stormux/.local/etc/RHVoice
|
||||
+1
@@ -0,0 +1 @@
|
||||
/home/stormux/.local/etc/speech-dispatcher/speechd.conf
|
||||
@@ -0,0 +1,2 @@
|
||||
HostKey /home/stormux/.local/etc/ssh/ssh_host_ed25519_key
|
||||
HostKey /home/stormux/.local/etc/ssh/ssh_host_rsa_key
|
||||
@@ -0,0 +1 @@
|
||||
%wheel ALL=(ALL) NOPASSWD: /usr/lib/stormux/stormux_alsa_state.sh *
|
||||
@@ -0,0 +1 @@
|
||||
%wheel ALL=(ALL) NOPASSWD: /home/stormux/.local/bin/stormux_service_state.sh *
|
||||
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
RequiresMountsFor=/home/stormux/.local/state/alsa
|
||||
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/usr/lib/stormux/stormux_alsa_state.sh restore
|
||||
ExecStop=
|
||||
ExecStop=-/usr/lib/stormux/stormux_alsa_state.sh store
|
||||
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Wants=user@1000.service
|
||||
After=user@1000.service
|
||||
|
||||
[Service]
|
||||
Environment=HOME=/home/stormux
|
||||
Environment=XDG_RUNTIME_DIR=/run/user/1000
|
||||
Environment=SPEECHD_ADDRESS=unix_socket:/run/user/1000/speech-dispatcher/speechd.sock
|
||||
@@ -0,0 +1,5 @@
|
||||
[Unit]
|
||||
Wants=
|
||||
Wants=stormux-sshd-hostkeys.service ssh-access.target
|
||||
After=
|
||||
After=network.target stormux-sshd-hostkeys.service
|
||||
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Apply persistent Stormux service state
|
||||
After=local-fs.target
|
||||
RequiresMountsFor=/home/stormux/.local/.services
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/home/stormux/.local/bin/stormux_service_state.sh apply
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,7 @@
|
||||
[Unit]
|
||||
Description=Generate persistent Stormux SSH host keys
|
||||
RequiresMountsFor=/home/stormux/.local/etc/ssh
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/lib/stormux/stormux_sshd_hostkeys.sh
|
||||
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Create Stormux user directories
|
||||
RequiresMountsFor=/home/stormux
|
||||
After=local-fs.target user@1000.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
User=stormux
|
||||
Environment=HOME=/home/stormux
|
||||
ExecStart=/usr/bin/xdg-user-dirs-update
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -41,7 +41,7 @@ if ! [[ -e "/tmp/startup_complete" ]]; then
|
||||
play -qV0 /usr/share/sounds/stormux/start.opus
|
||||
fi
|
||||
if [[ "$(tty)" == "/dev/tty1" ]]; then
|
||||
/usr/local/bin/diagnostics.sh
|
||||
exec /usr/local/bin/game_launcher.py
|
||||
/home/stormux/.local/bin/diagnostics.sh
|
||||
exec /home/stormux/.local/bin/game_launcher.py
|
||||
exit
|
||||
fi
|
||||
|
||||
+2
-2
@@ -109,10 +109,10 @@ case "$GAME" in
|
||||
nmtui-connect
|
||||
;;
|
||||
"Install to Disk")
|
||||
/usr/local/bin/install_to_disk.sh
|
||||
/home/stormux/.local/bin/install_to_disk.sh
|
||||
;;
|
||||
"Set Timezone")
|
||||
sudo /usr/local/bin/set-timezone.sh
|
||||
sudo /home/stormux/.local/bin/set-timezone.sh
|
||||
;;
|
||||
*".md") /usr/bin/markdown -toc "$GAME" | /usr/bin/w3m -T text/html ;;
|
||||
"/usr/bin/"*) $GAME ;;
|
||||
|
||||
@@ -19,7 +19,7 @@ sound = "play -qV0 \"|sox -np synth .07 sq 400\" \"|sox -np synth .5 sq 800\" fa
|
||||
# Escape always exits without action (built-in)
|
||||
# Unbound keys are ignored - the mode waits for a valid key
|
||||
|
||||
a = "/usr/local/bin/select_audio_convert.sh"
|
||||
a = "/home/stormux/.local/bin/select_audio_convert.sh"
|
||||
i = "/usr/bin/access-irc"
|
||||
r = "/usr/local/bin/record.sh"
|
||||
r = "/home/stormux/.local/bin/record.sh"
|
||||
w = "brave"
|
||||
|
||||
Executable
+318
@@ -0,0 +1,318 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2154
|
||||
|
||||
download_with_fallback() {
|
||||
local outputPath="$1"
|
||||
local sourceUrl="$2"
|
||||
local errorFile=""
|
||||
local curlArgs=(
|
||||
--fail
|
||||
--show-error
|
||||
--location
|
||||
--connect-timeout 20
|
||||
--speed-limit 1024
|
||||
--speed-time 30
|
||||
--retry 3
|
||||
--retry-connrefused
|
||||
--retry-delay 2
|
||||
)
|
||||
local curlExitCode=0
|
||||
local retryExitCode=0
|
||||
local fallbackExitCode=0
|
||||
local wgetExitCode=0
|
||||
local totalBytes=0
|
||||
|
||||
downloadAttemptExitCodes=""
|
||||
downloadErrorLog=""
|
||||
|
||||
errorFile="$(mktemp)" || return 1
|
||||
totalBytes="$(get_remote_file_size "${sourceUrl}")"
|
||||
|
||||
printf 'Trying curl with resume support: %s\n' "${sourceUrl}" >&2
|
||||
run_download_command "${outputPath}" "${totalBytes}" "${errorFile}" curl -4 -C - "${curlArgs[@]}" --output "${outputPath}" "${sourceUrl}"
|
||||
curlExitCode=$?
|
||||
if [[ "${curlExitCode}" -eq 0 ]]; then
|
||||
rm -f "${errorFile}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
rm -f "${outputPath}"
|
||||
printf 'Trying fresh IPv4 curl download: %s\n' "${sourceUrl}" >&2
|
||||
run_download_command "${outputPath}" "${totalBytes}" "${errorFile}" curl -4 "${curlArgs[@]}" --output "${outputPath}" "${sourceUrl}"
|
||||
retryExitCode=$?
|
||||
if [[ "${retryExitCode}" -eq 0 ]]; then
|
||||
rm -f "${errorFile}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
rm -f "${outputPath}"
|
||||
printf 'Trying fresh curl download with any address family: %s\n' "${sourceUrl}" >&2
|
||||
run_download_command "${outputPath}" "${totalBytes}" "${errorFile}" curl "${curlArgs[@]}" --output "${outputPath}" "${sourceUrl}"
|
||||
fallbackExitCode=$?
|
||||
if [[ "${fallbackExitCode}" -eq 0 ]]; then
|
||||
rm -f "${errorFile}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if command -v wget > /dev/null 2>&1; then
|
||||
rm -f "${outputPath}"
|
||||
printf 'Trying wget fallback: %s\n' "${sourceUrl}" >&2
|
||||
run_download_command "${outputPath}" "${totalBytes}" "${errorFile}" wget --tries=3 --timeout=20 --read-timeout=30 --output-document="${outputPath}" "${sourceUrl}"
|
||||
wgetExitCode=$?
|
||||
if [[ "${wgetExitCode}" -eq 0 ]]; then
|
||||
rm -f "${errorFile}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
downloadAttemptExitCodes="curl: ${curlExitCode}, ${retryExitCode}, ${fallbackExitCode}"
|
||||
if [[ "${wgetExitCode}" -ne 0 ]]; then
|
||||
downloadAttemptExitCodes+="; wget: ${wgetExitCode}"
|
||||
fi
|
||||
|
||||
if cp -f "${errorFile}" "${cache}/curl-error.log" 2> /dev/null; then
|
||||
downloadErrorLog="${cache}/curl-error.log"
|
||||
rm -f "${errorFile}"
|
||||
else
|
||||
downloadErrorLog="${errorFile}"
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
internet_available() {
|
||||
local targetUrl
|
||||
local targetUrls=(
|
||||
"https://www.gnu.org/"
|
||||
"https://1.1.1.1/"
|
||||
)
|
||||
|
||||
for targetUrl in "${targetUrls[@]}"; do
|
||||
if curl -fsS --connect-timeout 5 --max-time 8 "$targetUrl" > /dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
require_internet_connection() {
|
||||
local message="No internet connection detected. Configure a connection from System Settings, Internet Configuration, then try again."
|
||||
|
||||
if internet_available; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
ui_msgbox "Game Installer" "Game Installer" "$message"
|
||||
return 1
|
||||
}
|
||||
|
||||
get_remote_file_size() {
|
||||
local sourceUrl="$1"
|
||||
local headerOutput
|
||||
|
||||
headerOutput="$(curl --fail --silent --show-error --location --head --max-redirs 10 --max-time 20 "${sourceUrl}" 2> /dev/null || true)"
|
||||
awk '
|
||||
BEGIN { IGNORECASE = 1 }
|
||||
/^content-length:/ {
|
||||
gsub("\r", "", $2)
|
||||
if ($2 ~ /^[0-9]+$/) {
|
||||
contentLength = $2
|
||||
}
|
||||
}
|
||||
END {
|
||||
if (contentLength != "") {
|
||||
print contentLength
|
||||
} else {
|
||||
print 0
|
||||
}
|
||||
}
|
||||
' <<< "${headerOutput}"
|
||||
}
|
||||
|
||||
beep_download_progress() {
|
||||
local percent="$1"
|
||||
local frequency
|
||||
|
||||
[[ "${STORMUX_DOWNLOAD_BEEPS:-1}" == "1" ]] || return 0
|
||||
command -v play > /dev/null 2>&1 || return 0
|
||||
|
||||
frequency="$((220 + (percent * 7)))"
|
||||
play -q -n synth 0.06 sine "${frequency}" vol 0.25 > /dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
monitor_download_progress() {
|
||||
local outputPath="$1"
|
||||
local totalBytes="$2"
|
||||
local doneFile="$3"
|
||||
local currentBytes=0
|
||||
local percent=0
|
||||
local lastAnnouncedPercent=0
|
||||
local lastAnnouncedBytes=0
|
||||
local tickCount=0
|
||||
|
||||
while [[ ! -e "$doneFile" ]]; do
|
||||
if [[ -f "$outputPath" ]]; then
|
||||
currentBytes="$(stat -c '%s' "$outputPath" 2> /dev/null || printf '0')"
|
||||
else
|
||||
currentBytes=0
|
||||
fi
|
||||
|
||||
if [[ "$totalBytes" -gt 0 ]]; then
|
||||
percent="$(((currentBytes * 100) / totalBytes))"
|
||||
if [[ "$percent" -gt 100 ]]; then
|
||||
percent=100
|
||||
fi
|
||||
if [[ "$percent" -gt 0 && "$percent" -ge $((lastAnnouncedPercent + 10)) ]]; then
|
||||
printf 'Downloaded %s%% (%s/%s bytes)\n' "$percent" "$currentBytes" "$totalBytes" >&2
|
||||
beep_download_progress "$percent"
|
||||
lastAnnouncedPercent="$percent"
|
||||
fi
|
||||
else
|
||||
tickCount="$((tickCount + 1))"
|
||||
if [[ "$currentBytes" -gt "$lastAnnouncedBytes" && "$tickCount" -ge 5 ]]; then
|
||||
printf 'Downloaded %s bytes\n' "$currentBytes" >&2
|
||||
beep_download_progress 50
|
||||
lastAnnouncedBytes="$currentBytes"
|
||||
tickCount=0
|
||||
fi
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
}
|
||||
|
||||
stop_download_processes() {
|
||||
local doneFile="$1"
|
||||
local monitorPid="$2"
|
||||
local downloadPid="${3:-}"
|
||||
|
||||
touch "$doneFile" 2> /dev/null || true
|
||||
if [[ -n "$downloadPid" ]] && kill -0 "$downloadPid" 2> /dev/null; then
|
||||
kill "$downloadPid" 2> /dev/null || true
|
||||
wait "$downloadPid" 2> /dev/null || true
|
||||
fi
|
||||
if [[ -n "$monitorPid" ]] && kill -0 "$monitorPid" 2> /dev/null; then
|
||||
kill "$monitorPid" 2> /dev/null || true
|
||||
wait "$monitorPid" 2> /dev/null || true
|
||||
fi
|
||||
rm -f "$doneFile"
|
||||
}
|
||||
|
||||
run_download_command() {
|
||||
local outputPath="$1"
|
||||
local totalBytes="$2"
|
||||
local errorFile="$3"
|
||||
local doneFile
|
||||
local downloadPid=""
|
||||
local monitorPid
|
||||
local commandStatus=0
|
||||
shift 3
|
||||
|
||||
doneFile="$(mktemp)" || return 1
|
||||
rm -f "$doneFile"
|
||||
monitor_download_progress "$outputPath" "$totalBytes" "$doneFile" &
|
||||
monitorPid="$!"
|
||||
trap 'stop_download_processes "$doneFile" "$monitorPid" "$downloadPid"; trap - INT TERM HUP; exit 130' INT TERM HUP
|
||||
|
||||
"$@" 2> >(tee -a "$errorFile" >&2) &
|
||||
downloadPid="$!"
|
||||
if wait "$downloadPid"; then
|
||||
commandStatus=0
|
||||
else
|
||||
commandStatus="$?"
|
||||
fi
|
||||
|
||||
stop_download_processes "$doneFile" "$monitorPid"
|
||||
trap - INT TERM HUP
|
||||
|
||||
return "$commandStatus"
|
||||
}
|
||||
|
||||
validate_downloaded_cache_file() {
|
||||
local dest="$1"
|
||||
local downloadError=0
|
||||
|
||||
if [[ "${STORMUX_SKIP_DOWNLOAD_VALIDATION:-0}" == "1" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case "${dest##*.}" in
|
||||
pk3|zip)
|
||||
unzip -tq "${cache}/${dest}" | ui_progressbox "Game Installer" "Validating ${dest}"
|
||||
downloadError=${PIPESTATUS[0]}
|
||||
;;
|
||||
7z)
|
||||
7z t "${cache}/${dest}" | ui_progressbox "Game Installer" "Validating ${dest}"
|
||||
downloadError=${PIPESTATUS[0]}
|
||||
;;
|
||||
exe)
|
||||
if ! hexdump -n 2 -v -e '/1 "%02X"' "${cache}/${dest}" | grep -q "4D5A"; then
|
||||
downloadError=1
|
||||
fi
|
||||
;;
|
||||
wad)
|
||||
if [[ "$(file -b --mime-type "${cache}/${dest}")" != "application/octet-stream" ]]; then
|
||||
downloadError=1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if file -b "${cache}/${dest}" | grep -q "HTML document"; then
|
||||
downloadError=1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "${downloadError}" -ne 0 ]]; then
|
||||
rm -fv "${cache:?}/${dest}"
|
||||
alert "Game Installer" "Game Installer" "Error downloading ${dest}. Installation cannot continue."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
download() {
|
||||
local sourceUrls=("$@")
|
||||
local sourceUrl
|
||||
local dest
|
||||
|
||||
for sourceUrl in "${sourceUrls[@]}"; do
|
||||
dest="${sourceUrl##*/}"
|
||||
dest="${dest//%20/ }"
|
||||
dest="${dest#*\?filename=}"
|
||||
dest="${dest#*\?file=}"
|
||||
dest="${dest%\?*}"
|
||||
|
||||
[[ -s "${cache}/${dest}" ]] || rm -f "${cache:?}/${dest}" 2> /dev/null
|
||||
if [[ "${redownload}" == "true" && -e "${cache}/${dest}" ]]; then
|
||||
rm -v "${cache:?}/${dest}"
|
||||
fi
|
||||
if [[ -e "${cache}/${dest}" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
ui_progressbox "Game Installer" "Downloading ${dest}" < /dev/null
|
||||
if ! download_with_fallback "${cache}/${dest}" "${sourceUrl}"; then
|
||||
ui_msgbox "Game Installer" "Game Installer" "Could not download ${sourceUrl}.\n\nDownload exit codes: ${downloadAttemptExitCodes}\nError details: ${downloadErrorLog}"
|
||||
exit 1
|
||||
fi
|
||||
validate_downloaded_cache_file "${dest}"
|
||||
done
|
||||
}
|
||||
|
||||
download_named() {
|
||||
local dest="$1"
|
||||
local sourceUrl="$2"
|
||||
|
||||
[[ -n "${dest}" && -n "${sourceUrl}" ]] || return 1
|
||||
[[ -s "${cache}/${dest}" ]] || rm -f "${cache:?}/${dest}" 2> /dev/null
|
||||
if [[ "${redownload}" == "true" && -e "${cache}/${dest}" ]]; then
|
||||
rm -v "${cache:?}/${dest}"
|
||||
fi
|
||||
if [[ -e "${cache}/${dest}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! download_with_fallback "${cache}/${dest}" "${sourceUrl}"; then
|
||||
ui_msgbox "Game Installer" "Game Installer" "Could not download ${dest}.\n\nDownload exit codes: ${downloadAttemptExitCodes}\nError details: ${downloadErrorLog}"
|
||||
exit 1
|
||||
fi
|
||||
validate_downloaded_cache_file "${dest}"
|
||||
}
|
||||
+499
@@ -0,0 +1,499 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2154
|
||||
|
||||
scriptDir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
installSessionScript="${scriptDir%/.functions}/bin/stormux_install_session.sh"
|
||||
# shellcheck disable=SC1091
|
||||
source "${scriptDir}/download.sh"
|
||||
# shellcheck disable=SC1091
|
||||
source "${scriptDir}/ipfs.sh"
|
||||
|
||||
speak() {
|
||||
local message="$1"
|
||||
local waitForSpeech="${2:-0}"
|
||||
local speechMessage="${message//\\n/ }"
|
||||
|
||||
printf '%s\n' "${message}"
|
||||
if [[ "$waitForSpeech" == "1" ]]; then
|
||||
spd-say -Cw "${speechMessage}" 2> /dev/null || true
|
||||
else
|
||||
spd-say "${speechMessage}" 2> /dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
ui_msgbox() {
|
||||
local _title="$1"
|
||||
local _backTitle="$2"
|
||||
local message="$3"
|
||||
|
||||
speak "${message}" 1
|
||||
}
|
||||
|
||||
ui_infobox() {
|
||||
ui_msgbox "$@"
|
||||
}
|
||||
|
||||
ui_yesno() {
|
||||
local _title="$1"
|
||||
local _backTitle="$2"
|
||||
local message="$3"
|
||||
|
||||
speak "${message}"
|
||||
return 1
|
||||
}
|
||||
|
||||
ui_progressbox() {
|
||||
local _title="$1"
|
||||
local message="$2"
|
||||
|
||||
speak "${message}"
|
||||
cat
|
||||
}
|
||||
|
||||
alert() {
|
||||
local title="Game Installer"
|
||||
local backTitle="Game Installer"
|
||||
local message="Press enter to continue."
|
||||
|
||||
if [[ $# -eq 1 ]]; then
|
||||
message="$1"
|
||||
elif [[ $# -eq 2 ]]; then
|
||||
title="$1"
|
||||
backTitle="$1"
|
||||
message="$2"
|
||||
elif [[ $# -ge 3 ]]; then
|
||||
title="$1"
|
||||
backTitle="$2"
|
||||
shift 2
|
||||
message="$*"
|
||||
fi
|
||||
|
||||
ui_msgbox "${title}" "${backTitle}" "${message}"
|
||||
}
|
||||
|
||||
check_architecture() {
|
||||
local architecture
|
||||
local supportedArch
|
||||
|
||||
architecture="$(uname -m)"
|
||||
for supportedArch in "$@"; do
|
||||
if [[ "${architecture}" == "${supportedArch}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${architecture}" == "aarch64" && -d "${HOME}/.fex-emu/RootFS/ArchLinux" && "$*" == *"x86_64"* ]]; then
|
||||
export fex="FEXLoader -- "
|
||||
return 0
|
||||
fi
|
||||
|
||||
ui_infobox "Game Installer" "Game Installer" "This game is not compatible with ${architecture}."
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_dependencies() {
|
||||
local missingDependencies=()
|
||||
local dependency
|
||||
|
||||
for dependency in "$@"; do
|
||||
if [[ "${dependency}" == python-* ]]; then
|
||||
if ! python3 -c "import ${dependency#*:}" > /dev/null 2>&1; then
|
||||
missingDependencies+=("${dependency%:*}")
|
||||
fi
|
||||
elif ! command -v "${dependency}" > /dev/null 2>&1; then
|
||||
missingDependencies+=("${dependency}")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${#missingDependencies[@]}" -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
ui_msgbox "Game Installer" "Game Installer" "Missing dependencies: ${missingDependencies[*]}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
open_url() {
|
||||
local targetUrl="$1"
|
||||
|
||||
check_dependencies brave cthulhu
|
||||
env GAME="$targetUrl" startx
|
||||
}
|
||||
|
||||
run_install_x_command() {
|
||||
local quotedCommand=""
|
||||
|
||||
check_dependencies startx
|
||||
if [[ ! -x "$installSessionScript" ]]; then
|
||||
ui_msgbox "Game Installer" "Game Installer" "Missing install session helper: ${installSessionScript}"
|
||||
exit 1
|
||||
fi
|
||||
printf -v quotedCommand '%q ' "$@"
|
||||
quotedCommand="${quotedCommand% }"
|
||||
|
||||
env -u DISPLAY \
|
||||
STORMUX_INSTALL_COMMAND="$quotedCommand" \
|
||||
startx "$installSessionScript"
|
||||
}
|
||||
|
||||
run_wine_headless() {
|
||||
local commandName="$1"
|
||||
|
||||
shift
|
||||
command "$commandName" "$@"
|
||||
}
|
||||
|
||||
wine() {
|
||||
run_install_x_command command wine "$@"
|
||||
}
|
||||
|
||||
winetricks() {
|
||||
run_install_x_command command winetricks "$@"
|
||||
}
|
||||
|
||||
wait_for_enter() {
|
||||
local message="$1"
|
||||
|
||||
printf '%s\n' "$message"
|
||||
if [[ -r /dev/tty ]]; then
|
||||
read -r < /dev/tty || true
|
||||
else
|
||||
read -r || true
|
||||
fi
|
||||
}
|
||||
|
||||
collect_installer_file() {
|
||||
local installerName="$1"
|
||||
local sourceDir
|
||||
|
||||
for sourceDir in "${cache}" "${HOME}/Downloads" "${HOME}/Desktop"; do
|
||||
[[ -d "$sourceDir" ]] || continue
|
||||
find "$sourceDir" -maxdepth 1 -type f -name "$installerName" -exec mv -v {} "${cache}/" \; 2> /dev/null || true
|
||||
done
|
||||
|
||||
[[ -f "${cache}/${installerName}" ]]
|
||||
}
|
||||
|
||||
get_installer() {
|
||||
local installerName="$1"
|
||||
local downloadUrl="${2:-}"
|
||||
local instructions
|
||||
|
||||
if collect_installer_file "$installerName"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ -n "$downloadUrl" ]]; then
|
||||
instructions="Opening game download page.
|
||||
When the download finishes, please close your browser window to continue. You can do this by pressing control+w.
|
||||
Press enter to continue."
|
||||
speak "$instructions" 1
|
||||
wait_for_enter "Press enter to continue."
|
||||
if ! open_url "$downloadUrl"; then
|
||||
ui_msgbox "Game Installer" "Game Installer" "Could not open the browser for ${installerName}. Check the install log for details."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if collect_installer_file "$installerName"; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
ui_msgbox "Game Installer" "Game Installer" "Could not find ${installerName}. Make sure the download completed and the file name is ${installerName}."
|
||||
exit 1
|
||||
}
|
||||
|
||||
install_with_progress() {
|
||||
local operation="$1"
|
||||
local message="$2"
|
||||
shift 2
|
||||
|
||||
case "$operation" in
|
||||
unzip)
|
||||
unzip -o "$@" | ui_progressbox "Game Installation" "$message"
|
||||
;;
|
||||
7z)
|
||||
7z -y "$@" | ui_progressbox "Game Installation" "$message"
|
||||
;;
|
||||
cp|copy)
|
||||
cp -fv "$@" | ui_progressbox "Game Installation" "$message"
|
||||
;;
|
||||
*)
|
||||
"$operation" "$@" | ui_progressbox "Game Installation" "$message"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
ensure_wine_accessibility_files() {
|
||||
local accessibilityDir="${HOME}/.local/share/stormux/wine-accessibility"
|
||||
local nvdaControllerClient32Dll="${ipfsGateway}/ipfs/QmTrRrT4QFKSkZ8ivfUawA6iJ6adEyyogccE3nLDTfSK8u?filename=nvdaControllerClient32.dll"
|
||||
local nvdaControllerClient64Dll="${ipfsGateway}/ipfs/QmaYE7RFDtwHCiXCVLcuA3esfFx6E7koidtvrck9AwPuuN?filename=nvdaControllerClient64.dll"
|
||||
local nvda2speechdBinary="${ipfsGateway}/ipfs/QmPxhoNsoFoJC7bCfioBBCcK8tEoSoYpm342z6u7KjFsVz?filename=nvda2speechd"
|
||||
|
||||
download_named "nvdaControllerClient32.dll" "$nvdaControllerClient32Dll"
|
||||
download_named "nvdaControllerClient64.dll" "$nvdaControllerClient64Dll"
|
||||
download_named "nvda2speechd" "$nvda2speechdBinary"
|
||||
|
||||
mkdir -p "$accessibilityDir"
|
||||
cp -f "${cache}/nvdaControllerClient32.dll" "${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
cp -f "${cache}/nvdaControllerClient64.dll" "${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
cp -f "${cache}/nvda2speechd" "${accessibilityDir}/nvda2speechd"
|
||||
chmod 755 "${accessibilityDir}/nvda2speechd"
|
||||
}
|
||||
|
||||
replace_wine_nvda_dlls() {
|
||||
local accessibilityDir="${HOME}/.local/share/stormux/wine-accessibility"
|
||||
local scanRoots=("${HOME}/.local/games/Wine" "${WINEPREFIX:-}/drive_c")
|
||||
local scanRoot
|
||||
local dllFile
|
||||
local dllName
|
||||
local replacement
|
||||
local fileInfo
|
||||
|
||||
[[ -d "${WINEPREFIX:-}" ]] || return 0
|
||||
|
||||
ensure_wine_accessibility_files
|
||||
for scanRoot in "${scanRoots[@]}"; do
|
||||
[[ -d "$scanRoot" ]] || continue
|
||||
find "$scanRoot" -type f -iname 'nvdaControllerClient*.dll' -print0
|
||||
done | while IFS= read -r -d '' dllFile; do
|
||||
dllName="${dllFile##*/}"
|
||||
replacement=""
|
||||
|
||||
fileInfo="$(file "$dllFile" 2> /dev/null || true)"
|
||||
if grep -q 'PE32+' <<< "$fileInfo"; then
|
||||
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
elif grep -q 'PE32' <<< "$fileInfo"; then
|
||||
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
else
|
||||
case "${dllName,,}" in
|
||||
nvdacontrollerclient32.dll)
|
||||
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
|
||||
;;
|
||||
nvdacontrollerclient64.dll)
|
||||
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [[ -n "$replacement" && -f "$replacement" ]]; then
|
||||
cp -f "$replacement" "$dllFile"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
prepare_wine_game_dirs() {
|
||||
local driveC="${WINEPREFIX}/drive_c"
|
||||
local gamesWineRoot="${HOME}/.local/games/Wine"
|
||||
local programName
|
||||
local sourceDir
|
||||
local targetDir
|
||||
local item
|
||||
|
||||
[[ -d "$driveC" ]] || return 0
|
||||
|
||||
for programName in "Program Files" "Program Files (x86)"; do
|
||||
sourceDir="${driveC}/${programName}"
|
||||
targetDir="${gamesWineRoot}/${programName}"
|
||||
|
||||
mkdir -p "$targetDir"
|
||||
|
||||
if [[ -L "$sourceDir" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -d "$sourceDir" ]]; then
|
||||
shopt -s dotglob nullglob
|
||||
for item in "$sourceDir"/*; do
|
||||
mv -n "$item" "$targetDir/"
|
||||
done
|
||||
shopt -u dotglob nullglob
|
||||
rmdir "$sourceDir" 2> /dev/null || true
|
||||
fi
|
||||
|
||||
if [[ ! -e "$sourceDir" ]]; then
|
||||
ln -s "$targetDir" "$sourceDir"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
wine_dependency_state_dir() {
|
||||
printf '%s\n' "${WINEPREFIX}/.stormux-installed-winetricks"
|
||||
}
|
||||
|
||||
wine_dependency_marker() {
|
||||
local dependency="$1"
|
||||
local safeDependency
|
||||
|
||||
safeDependency="${dependency//[^[:alnum:]._-]/_}"
|
||||
printf '%s/%s.done\n' "$(wine_dependency_state_dir)" "$safeDependency"
|
||||
}
|
||||
|
||||
wine_dependency_installed() {
|
||||
local dependency="$1"
|
||||
|
||||
[[ -f "$(wine_dependency_marker "$dependency")" ]]
|
||||
}
|
||||
|
||||
mark_wine_dependencies_installed() {
|
||||
local dependency
|
||||
local stateDir
|
||||
|
||||
stateDir="$(wine_dependency_state_dir)"
|
||||
mkdir -p "$stateDir"
|
||||
for dependency in "$@"; do
|
||||
: > "$(wine_dependency_marker "$dependency")"
|
||||
done
|
||||
}
|
||||
|
||||
install_missing_wine_dependencies() {
|
||||
local progressMessage="$1"
|
||||
local forceWinetricks="${2:-false}"
|
||||
local dependency
|
||||
local missingDeps=()
|
||||
|
||||
shift 2
|
||||
for dependency in "$@"; do
|
||||
if ! wine_dependency_installed "$dependency"; then
|
||||
missingDeps+=("$dependency")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${#missingDeps[@]}" -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$forceWinetricks" == "true" ]]; then
|
||||
WINETRICKS_FORCE=1 winetricks -q "${missingDeps[@]}" \
|
||||
| ui_progressbox "Wine Setup" "$progressMessage"
|
||||
else
|
||||
winetricks -q "${missingDeps[@]}" \
|
||||
| ui_progressbox "Wine Setup" "$progressMessage"
|
||||
fi
|
||||
mark_wine_dependencies_installed "${missingDeps[@]}"
|
||||
}
|
||||
|
||||
install_wine_bottle() {
|
||||
local dep
|
||||
local missingCommonDeps=()
|
||||
local regularDeps=()
|
||||
local needsSpeechsdk=false
|
||||
local winetricksOptions=()
|
||||
|
||||
check_dependencies wine wineserver winepath winetricks
|
||||
|
||||
if [[ -z "${WINEARCH:-}" ]]; then
|
||||
export WINEARCH="win64"
|
||||
fi
|
||||
|
||||
case "$WINEARCH" in
|
||||
win64) export WINEPREFIX="${HOME}/.local/wine64" ;;
|
||||
*)
|
||||
ui_msgbox "Game Installer" "Game Installer" "Unsupported Wine architecture: ${WINEARCH}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
mkdir -p "$WINEPREFIX"
|
||||
if [[ ! -f "${WINEPREFIX}/system.reg" ]]; then
|
||||
ui_progressbox "Wine Setup" "Initializing Wine bottle" < /dev/null
|
||||
DISPLAY="${DISPLAY:-}" wine wineboot -u
|
||||
fi
|
||||
prepare_wine_game_dirs
|
||||
|
||||
for dep in isolate_home corefonts vcrun2019; do
|
||||
if ! wine_dependency_installed "$dep"; then
|
||||
missingCommonDeps+=("$dep")
|
||||
fi
|
||||
done
|
||||
if [[ "${#missingCommonDeps[@]}" -gt 0 ]]; then
|
||||
winetricks -q "${missingCommonDeps[@]}" win10 \
|
||||
| ui_progressbox "Wine Setup" "Installing common Wine dependencies"
|
||||
mark_wine_dependencies_installed "${missingCommonDeps[@]}"
|
||||
fi
|
||||
install_missing_wine_dependencies "Installing Wine speech support" true speechsdk
|
||||
install_missing_wine_dependencies "Restoring Wine Windows version" false win10
|
||||
|
||||
for dep in "$@"; do
|
||||
case "$dep" in
|
||||
sapi|speechsdk)
|
||||
needsSpeechsdk=true
|
||||
;;
|
||||
corefonts|vcrun2019|isolate_home)
|
||||
regularDeps+=("$dep")
|
||||
;;
|
||||
win7|win8|win10)
|
||||
:
|
||||
;;
|
||||
*)
|
||||
regularDeps+=("$dep")
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -n "${winetricksSettings:-}" ]]; then
|
||||
read -r -a winetricksOptions <<< "$winetricksSettings"
|
||||
fi
|
||||
|
||||
if [[ "${#regularDeps[@]}" -gt 0 ]]; then
|
||||
local missingRegularDeps=()
|
||||
for dep in "${regularDeps[@]}"; do
|
||||
if ! wine_dependency_installed "$dep"; then
|
||||
missingRegularDeps+=("$dep")
|
||||
fi
|
||||
done
|
||||
if [[ "${#missingRegularDeps[@]}" -gt 0 ]]; then
|
||||
winetricks -q isolate_home "${missingRegularDeps[@]}" "${winetricksOptions[@]}" \
|
||||
| ui_progressbox "Wine Setup" "Installing Wine dependencies"
|
||||
mark_wine_dependencies_installed isolate_home "${missingRegularDeps[@]}"
|
||||
fi
|
||||
elif [[ "${#winetricksOptions[@]}" -gt 0 ]]; then
|
||||
winetricks -q "${winetricksOptions[@]}" \
|
||||
| ui_progressbox "Wine Setup" "Applying Wine settings"
|
||||
fi
|
||||
|
||||
if [[ "$needsSpeechsdk" == "true" ]]; then
|
||||
install_missing_wine_dependencies "Installing Wine speech support" true speechsdk
|
||||
install_missing_wine_dependencies "Restoring Wine Windows version" false win10
|
||||
fi
|
||||
|
||||
if [[ -n "${winVer:-}" ]]; then
|
||||
export gameWinVer="$winVer"
|
||||
fi
|
||||
}
|
||||
|
||||
set_app_winver() {
|
||||
local exePath="$1"
|
||||
local winVersion="$2"
|
||||
local exeName="${exePath##*\\}"
|
||||
local regFile
|
||||
|
||||
[[ -n "$exePath" && -n "$winVersion" ]] || return 0
|
||||
|
||||
regFile="$(mktemp)"
|
||||
cat > "$regFile" <<REGEDIT
|
||||
REGEDIT4
|
||||
|
||||
[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\${exeName}]
|
||||
"Version"="${winVersion}"
|
||||
REGEDIT
|
||||
wine regedit "$regFile"
|
||||
rm -f "$regFile"
|
||||
}
|
||||
|
||||
add_launcher() {
|
||||
local wineTarget="$1"
|
||||
local launcherRecipe="${launchRoot}/${gameName}.game"
|
||||
|
||||
[[ -n "$wineTarget" ]] || return 1
|
||||
if [[ -n "${gameWinVer:-}" ]]; then
|
||||
set_app_winver "$wineTarget" "$gameWinVer"
|
||||
unset gameWinVer
|
||||
fi
|
||||
replace_wine_nvda_dlls
|
||||
|
||||
cat > "$launcherRecipe" <<LAUNCHER
|
||||
run_wine_path '${wineTarget}'
|
||||
LAUNCHER
|
||||
chmod 755 "$launcherRecipe"
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
scriptDir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
installerPath="${1:-}"
|
||||
logRoot="${STORMUX_LOG_ROOT:-${HOME}/Logs}"
|
||||
logDir="${logRoot}/installs"
|
||||
logFile=""
|
||||
|
||||
if [[ -z "${installerPath}" || ! -f "${installerPath}" ]]; then
|
||||
printf 'Usage: %s installer.sh\n' "${0##*/}" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
gameName="${installerPath##*/}"
|
||||
gameName="${gameName%.sh}"
|
||||
game="${game:-${gameName}}"
|
||||
installPath="${installPath:-${HOME}/.local/games}"
|
||||
cache="${cache:-${XDG_CACHE_HOME:-${HOME}/.cache}/stormux-game-install}"
|
||||
launchRoot="${launchRoot:-${HOME}/.local/.launch}"
|
||||
redownload="${redownload:-false}"
|
||||
ipfsGateway="${ipfsGateway:-https://ipfs.stormux.org}"
|
||||
fex="${fex:-}"
|
||||
DISPLAY="${DISPLAY:-:0}"
|
||||
|
||||
export installPath cache launchRoot redownload ipfsGateway fex gameName game DISPLAY
|
||||
|
||||
safe_log_name() {
|
||||
local name="$1"
|
||||
|
||||
name="${name//\//_}"
|
||||
name="${name//[^[:alnum:]. _-]/_}"
|
||||
printf '%s\n' "$name"
|
||||
}
|
||||
|
||||
prune_old_logs() {
|
||||
find "$logDir" -type f -name '*.log' -mtime +7 -delete 2> /dev/null || true
|
||||
}
|
||||
|
||||
setup_logging() {
|
||||
local safeName
|
||||
|
||||
mkdir -p "$logDir"
|
||||
prune_old_logs
|
||||
safeName="$(safe_log_name "$gameName")"
|
||||
logFile="${logDir}/${safeName}.log"
|
||||
exec > >(tee "$logFile") 2>&1
|
||||
printf 'Installing %s [%s]\n' "$gameName" "$(date)"
|
||||
printf 'Installer path: %s\n' "$installerPath"
|
||||
}
|
||||
|
||||
finish_logging() {
|
||||
local exitCode=$?
|
||||
|
||||
if [[ "$exitCode" -eq 0 ]]; then
|
||||
printf '%s installed [%s]\n' "$gameName" "$(date)"
|
||||
else
|
||||
printf '%s installation failed with exit code %s [%s]\n' "$gameName" "$exitCode" "$(date)"
|
||||
speak "${gameName} installation failed. Check ${logFile} for details." 1
|
||||
fi
|
||||
exit "$exitCode"
|
||||
}
|
||||
|
||||
mkdir -p "${installPath}" "${cache}" "${launchRoot}"
|
||||
setup_logging
|
||||
trap finish_logging EXIT
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
source "${scriptDir}/game_install_functions.sh"
|
||||
|
||||
require_internet_connection
|
||||
|
||||
speak "Installing ${gameName}"
|
||||
# shellcheck source=/dev/null
|
||||
source "${installerPath}"
|
||||
|
||||
if [[ -f "${launchRoot}/${gameName}.game" ]]; then
|
||||
ln -sf "${gameName}.game" "${launchRoot}/${gameName}.sh"
|
||||
fi
|
||||
|
||||
speak "${gameName} installed"
|
||||
@@ -0,0 +1,63 @@
|
||||
# shellcheck shell=bash disable=SC2034,SC2154
|
||||
# Central repository for IPFS game download URLs
|
||||
# This file is sourced by functions.sh
|
||||
|
||||
declare -Ag ipfs=(
|
||||
# Core System Files
|
||||
[nvdaControllerClient32]="${ipfsGateway}/ipfs/QmTrRrT4QFKSkZ8ivfUawA6iJ6adEyyogccE3nLDTfSK8u?filename=nvdaControllerClient32.dll"
|
||||
[nvdaControllerClient64]="${ipfsGateway}/ipfs/QmaYE7RFDtwHCiXCVLcuA3esfFx6E7koidtvrck9AwPuuN?filename=nvdaControllerClient64.dll"
|
||||
[nvda2speechd]="${ipfsGateway}/ipfs/QmPxhoNsoFoJC7bCfioBBCcK8tEoSoYpm342z6u7KjFsVz?filename=nvda2speechd"
|
||||
|
||||
# Games (alphabetical order)
|
||||
[BG 15 Puzzle]="${ipfsGateway}/ipfs/QmQiocMpMXoxejDftKKvmrR5xxpj1qcWcgkhBBwTcyijXg?filename=FPB32Setup10a.exe"
|
||||
[BG 2048]="${ipfsGateway}/ipfs/QmPNt3c78UBgEMrTH3eJ5eD2mCMdth6jwes1iDKGW24Uj5?filename=BG204832Setup10a.exe"
|
||||
[BG Aces Up Solitaire]="${ipfsGateway}/ipfs/QmTshtHBEV9dh7wFtaQpNUEYHZ3fBpuhSRZqc7k8HwmtPM?filename=ASB32Setup10.exe"
|
||||
[BG Alchemy]="${ipfsGateway}/ipfs/Qma76HXBhmKgMDeHH1XLePsaWzzzLsBS2HRL3c7MVwDokg?filename=BAC32Setup10.exe"
|
||||
[BG Battleship]="${ipfsGateway}/ipfs/Qmaq9P9fxdLTEFMGg4mhHrRuUbPg6HgU3eYVJNqZUimHjo?filename=BGB32Setup10.exe"
|
||||
[BG Boggle]="${ipfsGateway}/ipfs/QmQwWiJw9hDiPdfwDyL4XepeoD66ztVRi3HwbSjFFP4CNg?filename=BGB32Setup10a.exe"
|
||||
[BG Boxes]="${ipfsGateway}/ipfs/QmRn21tREXxXVSaDe9i54zEPzPSespjJAFBqu4DWocuagD?filename=BXB32Setup10.exe"
|
||||
[BG Brainiac]="${ipfsGateway}/ipfs/QmWEdmTkQsjSqBgWUgnDajMf8QvQBbEF4Nxo6mhkXYzBtQ?filename=BRN32Setup10a.exe"
|
||||
[BG Chess Challenge]="${ipfsGateway}/ipfs/QmT2yBpU5Jqna18FxYtyWzi4xMGAY9PyJWStAskxCHqBDw?filename=BGC32Setup10d.exe"
|
||||
[BG Code Breaker]="${ipfsGateway}/ipfs/QmU486SssAdM7kPKwDyAKDLQs3Z92bG6wFjaLhzqDZCxAF?filename=BCB32Setup10.exe"
|
||||
[BG Cribbage]="${ipfsGateway}/ipfs/QmeFud3EPHy7wQe8UENgvh96HdAazEkwqA2AutCNkYvB3t?filename=BGC32Setup12e.exe"
|
||||
[BG Cribbage Solitaire]="${ipfsGateway}/ipfs/QmbRUiknnNcibWD3NwK4DFZGNHWswBgsFidUzU1TFGJ5Ra?filename=BCS32Setup10.exe"
|
||||
[BG Crossword Puzzle]="${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BGX32Setup10h.exe"
|
||||
[BG Draw Dominoes]="${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BDD32Setup.exe"
|
||||
[BG Elevens Solitaire]="${ipfsGateway}/ipfs/QmWWZByYL5CsDSi6gQLGcMyBL7zqD5hWXbPXJr3shRt5AQ?filename=ESB32Setup10.exe"
|
||||
[BG Fives Dominoes]="${ipfsGateway}/ipfs/QmSZt6dz7WQkNrFBmYq9n4WdYrrZyQAebTBPo46uHqCuNi?filename=BFD32Setup10.exe"
|
||||
[BG Free Cell Solitaire]="${ipfsGateway}/ipfs/QmVfQMMnqTD9Zm8Xwv7rGrUTdS9FXToq7Fv6wtQQVgbQGR?filename=BGF32Setup20.exe"
|
||||
[BG Golf Solitaire]="${ipfsGateway}/ipfs/QmfAp9EYou1pndLwYSdpYdUCHBv2DR94oFccQh1ii9JVLD?filename=GSB32Setup10a.exe"
|
||||
[BG Hangman]="${ipfsGateway}/ipfs/QmXTPMmvw7JE2eLuPBLGSpkZqUn12TX7QEQZbX8qtp7GBx?filename=HMB32Setup10.exe"
|
||||
[BG Hearts]="${ipfsGateway}/ipfs/QmdU5ag1PRjvG28wNX7aNuJqZSVxaqEEKjgG6GoRoDT8k4?filename=BGH32Setup10b.exe"
|
||||
[BG Klondike Solitaire]="${ipfsGateway}/ipfs/QmctBDvhQWwER94LvgauR7sMDxv9D1mS9cToV47orTCdzU?filename=BGK32Setup10b.exe"
|
||||
[BG LAP]="${ipfsGateway}/ipfs/Qma5WeCC9B2P5abRGX9nGYV8Zi9F8vfCCr4ehejP2bgmNm?filename=LAP32Setup10.exe"
|
||||
[BG Master Mind]="${ipfsGateway}/ipfs/QmP6cwMbirbBqAaG9JLfNRnD2dvJfh6nq74kfwxs5hN2RQ?filename=BMM32Setup10.exe"
|
||||
[BG Mine Sweeper]="${ipfsGateway}/ipfs/QmRa54HroWjwxHYfKr6hdmP34sHW5G3ecuzcjMA5UBBVKa?filename=MSB32Setup10.exe"
|
||||
[BG Nomination Whist]="${ipfsGateway}/ipfs/Qmb7eGTMDgiaDC9muMW9n8bHoistGcNm1VgHc6sr7dRyHU?filename=BNW32Setup10a.exe"
|
||||
[BG Penguin Solitaire]="${ipfsGateway}/ipfs/QmXKvQ6WNNSnDiSyYmvAhZXVdALnuhUGK7dSMQVkQNReJr?filename=BPS32Setup10c.exe"
|
||||
[BG Poker Solitaire]="${ipfsGateway}/ipfs/QmPLv74LiDgVGuiGhu9HuPhx3uoMm9QyCYk6jgeFUHjj3S?filename=BPS32Setup10.exe"
|
||||
[BG Pyramid Solitaire]="${ipfsGateway}/ipfs/QmaqXaBKD3xY2smhU2LcejXRTPnWZHqaTW9se8yRepLsHu?filename=PSB32Setup10a.exe"
|
||||
[BG Scorpion Solitaire]="${ipfsGateway}/ipfs/QmSxJs2MiLQ61Fgx6vCpSD7GmQziLiCEU3sZ3mgWc7RsJ8?filename=BSS32Setup10.exe"
|
||||
[BG Scrabble]="${ipfsGateway}/ipfs/QmVrwyPdJBnmc4wLW7oT2hexxXnXxs8bA7gfiqbnJsWJ16?filename=BGS32Setup20.exe"
|
||||
[BG Simon]="${ipfsGateway}/ipfs/QmXtBCqB6VCFPaDYuLaFNP1BDtJSLCJdJZzgm61zMtrsQt?filename=BGS32Setup10.exe"
|
||||
[BG Spider Solitaire]="${ipfsGateway}/ipfs/QmdWBaDnLVbKCJSpiqF675ew6nJ6KHUVXA5FEH3t3E7UAu?filename=SPB32Setup10b.exe"
|
||||
[BG Sudoku]="${ipfsGateway}/ipfs/QmXCAHEVRGZBc8t45Jgn2vkxicwF9Aox6yz9XrQBdkv7WY?filename=SDB32Setup10a.exe"
|
||||
[BG Tablic Solitaire]="${ipfsGateway}/ipfs/QmYoiFQ6JuSXfZfZXT3SQDsYzMWLBu9rW9yivi1xiPjqZx?filename=SDB32Setup10a.exe"
|
||||
[BG Tri-Peaks Solitaire]="${ipfsGateway}/ipfs/QmWJGvSR6iaQfMHM3XuGCkWxx285jkzSDdNSvvk3bSCH8S?filename=TPB32Setup10a.exe"
|
||||
[BG Twenty 20 Cricket]="${ipfsGateway}/ipfs/QmWAk2TMHMvW6Kjc1sZBEPsxmCNHfY3nF1K723PCqaTa57?filename=T20B32Setup10.exe"
|
||||
[BG Uno]="${ipfsGateway}/ipfs/QmVsfPkebSoTDwYSXF1n7y4P9eGJTgTcGXdrEjpcV8A3Dv?filename=BGU32Setup11a.exe"
|
||||
[BG Word Builder]="${ipfsGateway}/ipfs/QmXtR49EZShyj15Tc9CXQpBYVmKNfZpp4515Epm16bviuH?filename=BWB32Setup10.exe"
|
||||
[BG Word Candy]="${ipfsGateway}/ipfs/QmfTgfRzd4JMRqKSfDiz76iMorkaG19BqH1K7nRCCDwo4H?filename=WCB32Setup10a.exe"
|
||||
[BG Word Jumble]="${ipfsGateway}/ipfs/QmYQWZZifzKJSuVRCC1SabwRmEDz95GdFvbzRvsBMmTt6e?filename=BWJ32Setup10.exe"
|
||||
[BG Word Maze]="${ipfsGateway}/ipfs/QmXPtj5PkVZjXpU3m6FAfm8MwVL6bQCvhEDoR385u6FGTL?filename=BWM32Setup10.exe"
|
||||
[BG Word Solitaire]="${ipfsGateway}/ipfs/QmZp73ARDPqgnCz7zxfKeBHjNoHrgZSgg2NdQZR2sMyZGD?filename=WSB32Setup10.exe"
|
||||
[BG Word Target]="${ipfsGateway}/ipfs/QmWWZFXVHNtmNkH55oermWWtrMcQ8qVqL687B7kGFyeezq?filename=WTB32Setup10a.exe"
|
||||
[BG Word Yahtzee]="${ipfsGateway}/ipfs/QmdicAVDegDktY3euVAC2PPn4YBGz96KedxYXNe4WDQaoq?filename=BWY32Setup10.exe"
|
||||
[BG Yahtzee]="${ipfsGateway}/ipfs/QmZebvkKgFAADnb1cgW6Bz7wTYdUh82X61QdtW66KcvmpF?filename=BGY32Setup10a.exe"
|
||||
[Bloodshed]="${ipfsGateway}/ipfs/QmcTCTMep4zp5zTw8ZaXYpjtu9inNPn8bNzwhW6cX97egw?file=bloodshed.exe"
|
||||
[Chopper Challenge]="${ipfsGateway}/ipfs/QmY1jmwVkmwEcqBs84i4mpancD3R1W4Vu6w1RdcrFUnbGx?filename=chopper%20challenge.zip"
|
||||
[Christmas Chaos]="${ipfsGateway}/ipfs/QmYx11vsMDBgjPd1coZPGHxMXf2qtf4icqmB3Q9iUazyQv?filename=ChristmasChaos.zip"
|
||||
[Kitchensinc Games]="${ipfsGateway}/ipfs/QmdkLPig6Kp3AZTwKAhjrhhsEuvhFCFhm6SHLUQVeNNYCb?filename=kitchen.tar.xz"
|
||||
[Oh Shit]="${ipfsGateway}/ipfs/QmQnAJJrt5uABFziQc7enXYrJ74J9GKQSMi8Ry8ebsxfPV?filename=OhShit.zip"
|
||||
[Villains From Beyond]="${ipfsGateway}/ipfs/QmWx271xuk3Mv9XTBoVu5BDJvXFZdasawC2nhtV21WAaUU?filename=villains_en.zip"
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/mt/adrian's%20doom.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/adrian's doom.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\Two Caring Citizens\Adrian's Doom!\adrian.exe"
|
||||
@@ -0,0 +1,12 @@
|
||||
download "http://download.dracoent.com/Windows/classic/AOSetup.exe"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/AOSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/AOSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/AOSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\Alien Outback\ao.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/other/AngelGift.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/Angel Gift" "$cache/AngelGift.zip"
|
||||
add_launcher 'c:\Program Files\Angel Gift\ag.exe'
|
||||
@@ -0,0 +1,3 @@
|
||||
check_architecture x86_64
|
||||
download "https://michaels.world/aq-linux.zip"
|
||||
unzip -d "${installPath}/AudioQuake" "${cache}/aq-linux.zip"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/other/audiodisc.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/audiodisc.zip"
|
||||
add_launcher "c:\Program Files\audiodisc\disco.exe"
|
||||
@@ -0,0 +1,8 @@
|
||||
# shellcheck shell=bash disable=SC2154 # cache and WINEPREFIX are set by audiogame-manager
|
||||
download "https://github.com/matatk/agrip/releases/download/2020.0-beta1/AudioQuake+LDL_2020.0-beta1_Windows.zip" "https://stormgames.wolfe.casa/downloads/quake.zip"
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/AudioQuake+LDL_2020.0-beta1_Windows.zip"
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/AudioQuake/id1" "${cache}/quake.zip"
|
||||
add_launcher "c:\Program Files\AudioQuake\AudioQuake.exe"
|
||||
alert "After you launch the game, press tab then enter and it should begin speaking."
|
||||
@@ -0,0 +1,4 @@
|
||||
check_architecture x86_64
|
||||
get_installer "Audo-linux-x64.zip" "https://shiftbacktick.itch.io/audo"
|
||||
mkdir -p "${installPath}/Audo"
|
||||
unzip -d "${installPath}/Audo" "${cache}/Audo-linux-x64.zip"
|
||||
@@ -0,0 +1,4 @@
|
||||
check_architecture x86_64
|
||||
get_installer "Auroboros-linux-x64.zip" "https://shiftbacktick.itch.io/auroboros"
|
||||
mkdir -p "${installPath}/Auroboros"
|
||||
unzip -d "${installPath}/Auroboros" "${cache}/Auroboros-linux-x64.zip"
|
||||
@@ -0,0 +1,5 @@
|
||||
version=1.3.5
|
||||
check_architecture x86_64
|
||||
download "https://files.sooslandia.ru/BallBouncer/${version}/BallBouncer-linux-${version}.zip"
|
||||
unzip -d "${installPath}/" "${cache}/BallBouncer-linux-${version}.zip"
|
||||
chmod +x "${installPath}/BallBouncer/BallBouncer"
|
||||
@@ -0,0 +1,5 @@
|
||||
download "https://www.agarchive.net/games/gameMadnessInteractive/battle%20zone%2013.5%20setup.exe"
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
wine "${cache}/battle zone 13.5 setup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\Battle Zone\ss.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
download "http://files.tunmi13.com/projects_archive/bth.zip"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/$game" "${cache}/bth.zip"
|
||||
add_launcher "c:\Program Files\\${game}\bth.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
get_installer "bf.zip" "https://tunmi13.itch.io/battlefield-2d"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/bf.zip"
|
||||
add_launcher "c:\Program Files\bf\bf.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
#//Disable
|
||||
download "https://nibblenerds.com/static/blades_of_glory.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/Blades of Glory" "${cache}/blades_of_glory.zip"
|
||||
install_discord_rpc_bridge
|
||||
add_launcher "c:\Program Files\Blades of Glory\blades_of_glory.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
check_architecture x86_64
|
||||
get_installer "Bladius-linux-x64.zip" "https://shiftbacktick.itch.io/bladius"
|
||||
mkdir -p "${installPath}/Bladius"
|
||||
unzip -d "${installPath}/Bladius" "${cache}/Bladius-linux-x64.zip"
|
||||
@@ -0,0 +1,9 @@
|
||||
get_installer "Blind Drive 1.1.112.00i-win64.zip" "https://lofipeople.itch.io/blind-drive"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/blind-drive" "${cache}/Blind Drive 1.1.112.00i-win64.zip"
|
||||
# Weird work around to get keyboard working.
|
||||
winetricks -q usetakefocus=y
|
||||
winetricks -q usetakefocus=n
|
||||
add_launcher "c:\Program Files\blind-drive\Blind Drive.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
export WINEARCH="win64" # Migrated to wine64
|
||||
download "${ipfs[Bloodshed]}"
|
||||
install_wine_bottle
|
||||
cp "${cache}/bloodshed.exe" "$WINEPREFIX/drive_c/Program Files/"
|
||||
add_launcher "c:\Program Files\bloodshed.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
download "http://oriolgomez.com/games/bombercats_en.zip"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/bomvercats" "${cache}/bombercats_en.zip"
|
||||
add_launcher "c:\Program Files\bomvercats\game.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
export WINEARCH=win64
|
||||
get_installer "bounce_bounce.rar" "https://kavyapriya.itch.io/bounce-bounce"
|
||||
install_wine_bottle
|
||||
unrar x "${cache}/bounce_bounce.rar" -op"$WINEPREFIX/drive_c/Program Files"
|
||||
add_launcher "c:\Program Files\bounce_bounce\bounce.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
get_installer "breu2.zip" "https://breu.itch.io/shadowhunt"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/breu2.zip"
|
||||
add_launcher "c:\Program Files\breu2\breu2.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
download "http://files.tunmi13.com/projects_archive/coth.zip"
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/$game" "${cache}/coth.zip"
|
||||
add_launcher "c:\Program Files\\${game}\game.exe"
|
||||
@@ -0,0 +1,12 @@
|
||||
download "https://download.dracoent.com/Windows/ChangeReactionSetup.exe"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/ChangeReactionSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/ChangeReactionSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/ChangeReactionSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\Change Reaction\ChangeReactionGui.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://stormgames.wolfe.casa/downloads/chillingham.zip"
|
||||
install_wine_bottle vb6run mfc42
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "$cache/chillingham.zip"
|
||||
add_launcher "c:\Program Files\chillingham\Chillingham.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
check_architecture x86_64
|
||||
get_installer "Chimera-linux-x64.zip" "https://shiftbacktick.itch.io/chimera"
|
||||
mkdir -p "${installPath}/Chimera"
|
||||
unzip -d "${installPath}/Chimera" "${cache}/Chimera-linux-x64.zip"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "${ipfs[Chopper Challenge]}"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/chopper challenge.zip"
|
||||
add_launcher "c:\Program Files\chopper challenge\Chopper.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
export WINEARCH=win64
|
||||
export winVer="win7"
|
||||
download "${ipfs[Christmas Chaos]}" "https://stormgames.wolfe.casa/downloads/Tolk.dll"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/ChristmasChaos.zip"
|
||||
find "${WINEPREFIX}" -type f -name 'Tolk.dll' -exec cp -fv "${cache}/Tolk.dll" "{}" \;
|
||||
add_launcher "c:\Program Files\ChristmasChaos\ChristmasChaos.exe"
|
||||
@@ -0,0 +1,9 @@
|
||||
check_architecture x86_64
|
||||
get_installer "christmas_dash_linux.zip" "https://tunmi13.itch.io/christmas-dash"
|
||||
unzip -d "${installPath}" "${cache}/christmas_dash_linux.zip"
|
||||
if [[ -d "${installPath}/Christmas Dash/christmas_dash_linux" ]]; then
|
||||
rm -rf "${installPath}/christmas_dash_linux"
|
||||
mv -v "${installPath}/Christmas Dash/christmas_dash_linux" "${installPath}/christmas_dash_linux"
|
||||
rmdir "${installPath}/Christmas Dash" 2> /dev/null || true
|
||||
fi
|
||||
chmod +x "${installPath}/christmas_dash_linux/game.bin"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://www.agarchive.net/games/draconis/christmas%20whoopass%20setup.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "${cache}/christmas whoopass setup.exe" /sp- /silent
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\Christmas Whoop Ass\wa.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
get_installer "clashes_of_the_sky.zip" "https://tunmi13.itch.io/clashes-of-the-sky"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/clashes_of_the_sky.zip"
|
||||
add_launcher 'c:\Program Files\clashes_of_the_sky\clash.exe'
|
||||
@@ -0,0 +1,7 @@
|
||||
check_architecture x86_64
|
||||
installPath="${installPath:-${HOME}/.local/games}"
|
||||
cache="${cache:-${XDG_CACHE_HOME:-$HOME/.cache}/linux-game-manager}"
|
||||
download "https://samtupy.com/games/cm.tar.gz"
|
||||
mkdir -p "${installPath}/Constant Motion"
|
||||
tar -xzf "${cache}/cm.tar.gz" -C "${installPath}/Constant Motion"
|
||||
chmod +x "${installPath}/Constant Motion/cm"
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "http://oriolgomez.com/games/copter_en.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/copter mission" "${cache}/copter_en.zip"
|
||||
add_launcher "c:\Program Files\copter mission\game.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
download "http://pragmapragma.free.fr/crazy-party/Crazy-Party-beta82.zip" "https://stormgames.wolfe.casa/downloads/Tolk.dll"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/Crazy-Party-beta82.zip"
|
||||
find "${WINEPREFIX}" -type f -name 'Tolk.dll' -exec cp -fv "${cache}/Tolk.dll" "{}" \;
|
||||
add_launcher "c:\Program Files\Crazy-Party-beta82\Crazy Party.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
export WINEARCH=win64
|
||||
export winVer="win7"
|
||||
download "http://masonasons.me/softs/CH2.0Win.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/crime-hunter" "${cache}/CH2.0Win.zip"
|
||||
add_launcher "c:\Program Files\crime-hunter\ch.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
check_architecture x86_64
|
||||
get_installer "critter-sanctuary-linux.zip" "https://punishedfelix.itch.io/critter-sanctuary"
|
||||
mkdir -p "${installPath}/critter-sanctuary"
|
||||
unzip -d "${installPath}/critter-sanctuary" "${cache}/critter-sanctuary-linux.zip"
|
||||
mkdir -p "${XDG_DATA_HOME:-${HOME}/.local}/share/godot/app_userdata/OverworldMovementEngine"
|
||||
cp -v "${installPath}/critter-sanctuary/blind_options.save" "${XDG_DATA_HOME:-${HOME}/.local}/share/godot/app_userdata/OverworldMovementEngine/options.save"
|
||||
@@ -0,0 +1,9 @@
|
||||
download "https://www.agarchive.net/games/xl/DangerCityBeta2.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "$cache/DangerCityBeta2.exe" /silent &
|
||||
xdotool sleep 15 key --clearmodifiers --delay 200 Return 2> /dev/null
|
||||
xdotool sleep 5 key --clearmodifiers --delay 200 Return 2> /dev/null
|
||||
xdotool sleep 5key --clearmodifiers --delay 200 Return 2> /dev/null
|
||||
xdotool sleep 10 --clearmodifiers --delay 200 Return 2> /dev/null
|
||||
wineserver -w
|
||||
add_launcher 'c:\Program Files\Danger City\dc.exe'
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "http://oriolgomez.com/games/road_en.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -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"
|
||||
@@ -0,0 +1,6 @@
|
||||
export winVer="win7"
|
||||
export winetricksSettings="vd=1024x768"
|
||||
download "https://www.agarchive.net/games/realitySoftware/death%20match%20project%20alpha%20setup.exe"
|
||||
install_wine_bottle quartz
|
||||
wine "${cache}/death match project alpha setup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\reality software\death match project alpha\dm1.exe"
|
||||
@@ -0,0 +1,9 @@
|
||||
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
|
||||
export winVer="win7"
|
||||
export winetricksSettings="vd=1024x768"
|
||||
download "https://www.kaldobsky.com/audiogames/dogwhohatestoast.zip"
|
||||
install_wine_bottle sapi vb6run dx8vb quartz
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/dogwhohatestoast" "${cache}/dogwhohatestoast.zip"
|
||||
wine 'c:\Program Files\dogwhohatestoast\checkup.exe' /verysilent
|
||||
add_launcher "c:\Program Files\dogwhohatestoast\DogwhoHatesToast.exe"
|
||||
echo "Note: Dog who Hates Toast installed. Once you start the game, you must press tab until you hear sapi on to get speech." >&2
|
||||
@@ -0,0 +1,22 @@
|
||||
export winVer="win10"
|
||||
export WINEARCH="win64" # Migrated to wine64
|
||||
# WINEPREFIX will be set automatically by install_wine_bottle to ~/.local/wine64
|
||||
|
||||
download https://scwl-1251129685.cos.ap-shanghai.myqcloud.com/dreamland/Win/DreamLandSetup.exe
|
||||
|
||||
install_wine_bottle
|
||||
|
||||
winetricks -q vcrun2019 d3dcompiler_47
|
||||
|
||||
# Run installer silently (shows a dialog but completes successfully)
|
||||
# Using C:\DreamLand instead of Program Files to avoid potential permission issues
|
||||
{
|
||||
echo "# Installing Dreamland..."
|
||||
timeout 120 wine "${cache}/DreamLandSetup.exe" /VERYSILENT /NORESTART /DIR="C:\DreamLand" 2>&1 || true
|
||||
echo "# Installation complete"
|
||||
} | agm_progressbox "Installing Game" "Installing Dreamland (this may take a minute)..."
|
||||
|
||||
# Kill any game processes that may have auto-launched
|
||||
wineserver -k 2>/dev/null || true
|
||||
|
||||
add_launcher "c:\DreamLand\DreamLand.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://files.l-works.net/dhsetup.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "${cache}/dhsetup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\Lworks\Duck Hunt\duckhunt.exe"
|
||||
@@ -0,0 +1,12 @@
|
||||
export winVer="win7"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
download "http://download.dracoent.com/Windows/classic/DMSetup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/DMSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/DMSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/DMSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\DynaMan\dm.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
check_architecture x86_64
|
||||
get_installer "EXO-linux-x64.zip" "https://shiftbacktick.itch.io/exo"
|
||||
mkdir -p "${installPath}/E.X.O."
|
||||
unzip -d "${installPath}/E.X.O." "${cache}/EXO-linux-x64.zip"
|
||||
@@ -0,0 +1,12 @@
|
||||
export winVer="win7"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
download "http://download.dracoent.com/Windows/classic/PBCSetup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/PBCSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/PBCSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/PBCSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\ESP Pinball Classic\pbc.exe"
|
||||
@@ -0,0 +1,12 @@
|
||||
export winVer="win7"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
download "http://download.dracoent.com/Windows/classic/PBXSetup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/PBXSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/PBXSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/PBXSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\ESP Pinball Xtreme\pbx.exe"
|
||||
@@ -0,0 +1,13 @@
|
||||
export winVer="win7"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
download "http://download.dracoent.com/Windows/classic/PP1Setup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
# Only works in conjunction with esp pinball extreme.
|
||||
if ! [ -f "$WINEPREFIX/drive_c/Program Files (x86)/Draconis Entertainment/ESP Pinball Xtreme/pbx.exe" ] ; then
|
||||
echo "Error: You need to install ESP Pinball Extreme first to use this game. Please do so before continuing." >&2
|
||||
exit 1
|
||||
fi
|
||||
cp -fv "${cache}/PP1Setup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/PP1Setup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/PP1Setup.exe"
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\ESP Pinball Xtreme\pbx.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/mt/easter%20quest%20setup.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/easter quest setup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\MTGames\Easter Quest\easter.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
check_architecture x86_64
|
||||
get_installer "Echo Command.tar.xz" "https://pancakedev.itch.io/echo-command"
|
||||
mkdir -p "${installPath}/Echo-Command"
|
||||
tar xf "${cache}/Echo Command.tar.xz" -C "${installPath}/Echo-Command"
|
||||
ln -sr "${installPath}/Echo-Command/Echo Command.x86_64" "${installPath}/Echo-Command/Echo_Command.x86_64"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://www.masonasons.me/softs/EndlessRunner.7z"
|
||||
install_wine_bottle
|
||||
install_with_progress 7z "Extracting game files..." x -y -o"$WINEPREFIX/drive_c/Program Files/Endless Runner" "${cache}/EndlessRunner.7z" -prunner
|
||||
add_launcher "c:\Program Files\Endless Runner\runner.exe"
|
||||
@@ -0,0 +1,14 @@
|
||||
# shellcheck shell=bash disable=SC2154 # cache, WINEPREFIX, and game are set by audiogame-manager
|
||||
gameVersion=2.4.1
|
||||
download "https://dl.tweesecake.app/rage/rage${gameVersion}.zip"
|
||||
export WINEARCH=win64
|
||||
export winVer="win10"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/rage${gameVersion}.zip"
|
||||
add_launcher "c:\Program Files\rage\rage.exe"
|
||||
url="https://techcake.games/games/executioners-rage/"
|
||||
message="Before you can login, you need to create an account at:\n${url}"
|
||||
if echo "$url" | xclip -selection clipboard 2> /dev/null ; then
|
||||
message+="\n\nThe URL has been copied to the clipboard."
|
||||
fi
|
||||
alert "Executioner's Rage" "Executioner's Rage" "$message"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/other/extant.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/extant" "${cache}/extant.zip"
|
||||
add_launcher "c:\Program Files\extant\Extant.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://www.agarchive.net/games/bsc/FingerPanicSetup.exe"
|
||||
install_wine_bottle dx8vb vb6run
|
||||
wine "${cache}/FingerPanicSetup.exe" /sp- /silent
|
||||
add_launcher "c:\Program Files (x86)\Finger Panic 1.0\FingerPanic.exe"
|
||||
@@ -0,0 +1,45 @@
|
||||
tobyVersion="9.0"
|
||||
mkdir -p "${installPath}/doom"
|
||||
doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null)"
|
||||
if [[ ${#doomPath} -lt 5 ]]; then
|
||||
ui_yesno "Linux Game Manager" "Linux Game Manager" "Do you want Linux Game Manager to install freedoom and gzdoom for you? If you want to do this manually, select no." || exit 0
|
||||
if command -v yay &> /dev/null ; then
|
||||
yay -Sy --noconfirm --sudoloop freedoom gzdoom freedm blasphemer-wad
|
||||
elif command -v slapt-src &> /dev/null ; then
|
||||
su -c 'slapt-src -i freedoom gzdoom'
|
||||
elif command -v dnf &> /dev/null ; then
|
||||
sudo dnf copr -y enable nalika/gzdoom
|
||||
sudo dnf -q -y install freedoom
|
||||
sudo dnf -q -y install gzdoom
|
||||
else
|
||||
ui_msgbox "Linux Game Manager" "Linux Game Manager" "No supported package managers found. Please install the freedoom and gzdoom packages manually."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null | head -1)"
|
||||
# The url breaks the normal download function
|
||||
download_named "keyshare-universal.pk3" "https://forum.zdoom.org/download/file.php?id=42262"
|
||||
download "${ipfsGateway}/ipfs/QmU6REFot8CGVSBy2YWQxnmXoh7M4EF74RxFtLzvtJxoGC?filename=toby_doom_${tobyVersion}_full.zip"
|
||||
unzip -n -d "${installPath}/doom" "${cache}/toby_doom_${tobyVersion}_full.zip"
|
||||
# Move contents from nested folder up one directory (including hidden files)
|
||||
shopt -s dotglob
|
||||
mv "${installPath}/doom/TobyAccessibilityMod_Version9"*/* "${installPath}/doom/"
|
||||
shopt -u dotglob
|
||||
# Remove the now-empty nested folder
|
||||
rmdir "${installPath}/doom/TobyAccessibilityMod_Version9"*
|
||||
#unzip -n -d "${installPath}/doom" "${cache}/OpMDK_ForV${tobyVersion}.zip"
|
||||
cp -v "${cache}/keyshare-universal.pk3" "${installPath}/doom"
|
||||
rm -fv "${installPath}/doom/"*.{bat,exe,dll,ps1}
|
||||
rm -rfv "${installPath}/doom/_internal"
|
||||
#if [[ -e /usr/share/doom/blasphem.wad ]]; then
|
||||
#ln -s /usr/share/doom/blasphem.wad "${installPath}/doom/"
|
||||
#fi
|
||||
mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom"
|
||||
cp "${installPath}/doom/TobyConfig.ini" "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/gzdoom.ini"
|
||||
cp "${installPath}/doom/zcajun/bots.cfg" "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/"
|
||||
sed -i "s;^\[IWADSearch.Directories\]$;[IWADSearch.Directories]\nPath=${doomPath}\nPath=${installPath}/doom;" "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/gzdoom.ini"
|
||||
sed -i "s;^\[FileSearch.Directories\]$;[FileSearch.Directories]\nPath=${doomPath}\nPath=${installPath}/doom;" "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/gzdoom.ini"
|
||||
sed -i "s;^\[SoundfontSearch.Directories\]$;[SoundfontSearch.Directories]\nPath=${doomPath}/fm_banks\nPath=${doomPath}/soundfonts\nPath=${installPath}/doom/soundfonts\nPath=${installPath}/doom/fm_banks;" "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/gzdoom.ini"
|
||||
# sed -i 's/Mouse1=+attack/CTRL=+attack/' "${XDG_CONFIG_HOME:-$HOME/.config}/gzdoom/gzdoom.ini"
|
||||
launcherPath="$(readlink -f "$0")"
|
||||
launcherPath="${launcherPath%/*}"
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "http://oriolgomez.com/games/bird_en.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/fuck that bird" "${cache}/bird_en.zip"
|
||||
add_launcher "c:\Program Files\fuck that bird\game.exe"
|
||||
@@ -0,0 +1,20 @@
|
||||
download "http://www.gmagames.com/gtc120.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
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 (x86)\GMA Tank Commander\gtc.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
# shellcheck shell=bash disable=SC2154 # cache and WINEPREFIX are set by audiogame-manager
|
||||
get_installer "Galactic Strike 1.2.zip" "https://fusion-forged-games.itch.io/galactic-strike"
|
||||
export winVer="win10"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/Galactic Strike" "${cache}/Galactic Strike 1.2.zip"
|
||||
add_launcher "c:\Program Files\Galactic Strike\Galactic Strike.exe"
|
||||
alert "Use controls wasd to movi and navigate the menu.\nUse m to fire and select items from the menu."
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "http://oriolgomez.com/games/hammer_en.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/hammer of glory" "${cache}/hammer_en.zip"
|
||||
add_launcher "c:\Program Files\hammer of glory\game.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
get_installer "hp.zip" "https://tunmi13.itch.io/haunted-party"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/" "${cache}/hp.zip"
|
||||
add_launcher "c:\Program Files\hp\hp.exe"
|
||||
@@ -0,0 +1,40 @@
|
||||
download "http://www.agarchive.net/games/bsc/HunterSetup.exe" "https://www.agarchive.net/games/bsc/BSC%20unlock%20code%20generator.7z"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
# FIXME: Hacky, but it works. Install dotnet35 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet35sp1
|
||||
wineserver -k # Damn you, dotnet.
|
||||
wine "${cache}/HunterSetup.exe" /silent &
|
||||
xdotool sleep 10 key --clearmodifiers alt+y 2> /dev/null
|
||||
sleep 30 && wineserver -k # Sometimes the installer finishes but the wineserver has more processes that don't exit, so we can't depend on wineserver -w.
|
||||
mkdir -p "$WINEPREFIX/drive_c/Program Files/bsc-key-generator"
|
||||
install_with_progress 7z "Extracting game files..." x -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"
|
||||
unix2dos "$WINEPREFIX/drive_c/Program Files/Hunter/config.dat"
|
||||
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 h
|
||||
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 (x86)\Hunter\HunterRun.exe"
|
||||
@@ -0,0 +1,9 @@
|
||||
get_installer "Inquisitor_windows_ENG.zip" "https://www.audiogame.store/en/products/inquisitors-heartbeat--windows/ios-only"
|
||||
export WINEARCH=win64
|
||||
export winVer="win8"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/Inquisitor_windows_ENG.zip"
|
||||
# Weird work around to get keyboard working.
|
||||
winetricks -q usetakefocus=y
|
||||
winetricks -q usetakefocus=n
|
||||
add_launcher "c:\Program Files\Inquisitor_windows_ENG\Inquisitor's Heartbeat.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "http://oriolgomez.com/games/insect_en.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/insect therapy" "${cache}/insect_en.zip"
|
||||
add_launcher "c:\Program Files\insect therapy\game.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://www.valiantgalaxy.com/interceptor/Interceptor0.0.2.0Installer.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/Interceptor0.0.2.0Installer.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\VGA\interceptor\launch_interceptor.exe"
|
||||
@@ -0,0 +1,13 @@
|
||||
# shellcheck shell=bash disable=SC2154 # cache is set by audiogame-manager
|
||||
download "https://www.l-works.net/files/judgmentdayfullsetup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
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 (x86)\Lworks\Judgment Day\judgmentday.exe"
|
||||
@@ -0,0 +1,8 @@
|
||||
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
|
||||
export winVer="win7"
|
||||
export winetricksSettings="vd=1024x768"
|
||||
download "${ipfs[Kitchensinc Games]}"
|
||||
install_wine_bottle sapi vb6run dx8vb
|
||||
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"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://www.agarchive.net/games/blastbay/kringle%20crash%20setup.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/kringle crash setup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\Kringle Crash\kringlecrash.exe"
|
||||
@@ -0,0 +1,6 @@
|
||||
export winVer="win7"
|
||||
download "https://www.agarchive.net/games/nyanchan/laser%20breakout.7z" "https://stormgames.wolfe.casa/downloads/laser-breakout-options.dat"
|
||||
install_wine_bottle
|
||||
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/" "$cache/laser breakout.7z"
|
||||
cp -fv "$cache/laser-breakout-options.dat" "$WINEPREFIX/drive_c/nyanchangame/laser breakout/options.dat"
|
||||
add_launcher "c:\nyanchangame\laser breakout\play.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "https://prometheus-enterprises.com/games/CoL.exe"
|
||||
install_wine_bottle
|
||||
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/Program Files/Light Battles" "${cache}/CoL.exe"
|
||||
add_launcher "c:\Program Files\Light Battles\battles.exe"
|
||||
@@ -0,0 +1,8 @@
|
||||
download "https://www.agarchive.net/games/lighttech/light%20cars%20setup.exe"
|
||||
install_wine_bottle dx8vb vb6run
|
||||
wine "${cache}/light cars setup.exe" &
|
||||
xdotool sleep 10 key --clearmodifiers alt+n sleep 1 key --clearmodifiers alt+a key --clearmodifiers space sleep 1 key --clearmodifiers alt+n sleep 1 key --clearmodifiers alt+n sleep 1 key --clearmodifiers alt+i sleep 30 key --clearmodifiers Tab sleep 1 key --clearmodifiers Return 2> /dev/null
|
||||
wineserver -w
|
||||
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"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://files.l-works.net/lockpicksetup.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "${cache}/lockpicksetup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\lWorks\Lockpick\lockpick.exe"
|
||||
@@ -0,0 +1,15 @@
|
||||
download "http://www.gmagames.com/lw350.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
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 (x86)\Lone Wolf\lw.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://agarchive.net/games/danZ/lost.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/lost" "$cache/lost.zip"
|
||||
add_launcher 'c:\Program Files\lost\lost.exe'
|
||||
@@ -0,0 +1,15 @@
|
||||
download "http://www.danielzingaro.com/maze_craze_setup.exe"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "${cache}/maze_craze_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
|
||||
wineserver -k
|
||||
add_launcher "c:\Program Files\Maze Craze 1.4\mazecraze.exe"
|
||||
@@ -0,0 +1,12 @@
|
||||
export winVer="win7"
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
download "http://download.dracoent.com/Windows/classic/MBSetup.exe"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
cp -fv "${cache}/MBSetup.exe" "$WINEPREFIX/drive_c/windows/temp/"
|
||||
wine "c:/windows/temp/MBSetup.exe" /sp- /silent
|
||||
rm -fv "$WINEPREFIX/drive_c/windows/temp/MBSetup.exe"
|
||||
# warning warning warning: Do not change location, or installer will not function.
|
||||
# FIXME: Hacky, but it works. Install dotnet20 by itself so it actually doesn't hang.
|
||||
winetricks -q dotnet20
|
||||
wineserver -k # Damn you, dotnet.
|
||||
add_launcher "c:\Program Files (x86)\Draconis Entertainment\Monkey Business\mb.exe"
|
||||
@@ -0,0 +1,2 @@
|
||||
check_dependencies python-pygame:pygame python-xdg:xdg python-pyperclip:pyperclip python-requests:requests python-setproctitle:setproctitle
|
||||
git -C "${installPath}" clone --recurse-submodules https://gitlab.com/stormdragon2976/monkeyspank.git
|
||||
@@ -0,0 +1,2 @@
|
||||
check_dependencies python-pygame:pygame python-xdg:xdg python-pyperclip:pyperclip python-requests:requests python-setproctitle:setproctitle
|
||||
git -C "${installPath}" clone --recurse-submodules https://gitlab.com/stormdragon2976/numnastics.git
|
||||
@@ -0,0 +1,7 @@
|
||||
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
|
||||
export winVer="win7"
|
||||
export norh="true" # Requires sapi even though uses nvda
|
||||
download "${ipfs[Oh Shit]}"
|
||||
install_wine_bottle sapi
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/OhShit.zip"
|
||||
add_launcher "c:\Program Files\oh_shit\OhShit.exe"
|
||||
@@ -0,0 +1,5 @@
|
||||
check_architecture x86_64
|
||||
get_installer "onslaught.AppImage" "https://lightsoutgames.itch.io/onslaught"
|
||||
mkdir -p "${installPath}/Onslaught"
|
||||
cp -v "${cache}/onslaught.AppImage" "${installPath}/Onslaught/onslaught.AppImage"
|
||||
chmod +x "${installPath}/Onslaught/onslaught.AppImage"
|
||||
@@ -0,0 +1,5 @@
|
||||
export winVer="win7"
|
||||
download "https://www.iamtalon.me/games/blacksquare.zip"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/blacksquare.zip"
|
||||
add_launcher "c:\Program Files\blacksquare\OperationBlackSquare.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "http://www.gmagames.com/pmt101.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/pmt101.exe" /sp- /silent
|
||||
add_launcher "c:\Program Files (x86)\Pacman Talks\pmt.exe"
|
||||
@@ -0,0 +1,4 @@
|
||||
download "https://www.agarchive.net/games/blastbay/palace%20punch-up%20setup.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/palace punch-up setup.exe" /silent
|
||||
add_launcher "c:\Program Files (x86)\Palace Punch-up\palace.exe"
|
||||
@@ -0,0 +1,7 @@
|
||||
export winVer="win7"
|
||||
export winetricksSettings="vd=1024x768"
|
||||
download "https://www.kaldobsky.com/audiogames/pawprints.zip"
|
||||
install_wine_bottle vb6run dx8vb quartz
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/pawprints" "${cache}/pawprints.zip"
|
||||
wine 'c:\Program Files\pawprints\checkup.exe' /verysilent
|
||||
add_launcher "c:\Program Files\pawprints\PawPrints.exe"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user