Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f9394f90c9 | ||
|
|
1fd3fcd21f | ||
|
|
cf1377d9e8 | ||
|
|
528ee7cd56 | ||
|
|
9ebb52f48f | ||
|
|
9d4e9b9a7f | ||
|
|
0c8a749240 |
@@ -55,9 +55,9 @@ declare -Ag ipfs=(
|
||||
[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"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
download "https://oriolgomez.com/games/beat_windows.zip"
|
||||
# Sapi is broken on win64 for now, and this game doesn't support nvda it seems.
|
||||
export WINEARCH=win64
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#Disable
|
||||
#//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"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
download "https://hirotaka2014.sakura.ne.jp/mh0406/game/breed_memorial.zip" "${nvdaControllerClient32Dll}"
|
||||
export winVer="win7"
|
||||
install_wine_bottle cjkfonts
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
#
|
||||
# Freezes at menu
|
||||
download "https://www.agarchive.net/games/XSight/chopper%20challenge%20setup.exe"
|
||||
download "${ipfs[Chopper Challenge]}"
|
||||
install_wine_bottle vb6run dx8vb
|
||||
wine "${cache}/chopper challenge setup.exe" /silent &
|
||||
xdotool sleep 5 key y 2> /dev/null
|
||||
wineserver -w
|
||||
echo "$USER|n/a" >> "$WINEPREFIX/drive_c/Program Files/x-sight interactive/chopper challenge/config.dat"
|
||||
add_launcher "c:\Program Files (x86)\x-sight interactive\chopper challenge\Chopper.exe"
|
||||
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"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
export winVer="win7"
|
||||
download "https://renovagames.com/bc/BC-Setup.exe"
|
||||
install_wine_bottle cjkfonts
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
# No custom bottle needed - use standard wine path based on architecture
|
||||
download "https://www.agarchive.net/games/pb/Dark-Destroyer-Setup.exe"
|
||||
install_wine_bottle ie6
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
download "https://www.iamtalon.me/games/dragonpong.zip"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Borken, candidate for removal
|
||||
#// Borken, candidate for removal
|
||||
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1 - complex .NET dependencies, test carefully
|
||||
download "http://blind-games.com/newentombed/EntombedSetup.exe" "https://download.microsoft.com/download/E/C/1/EC1B2340-67A0-4B87-85F0-74D987A27160/SSCERuntime-ENU.exe" "https://stormgames.wolfe.casa/downloads/Entombed.exe.config" "https://stormgames.wolfe.casa/downloads/mfplat.dll"
|
||||
export winVer="win7"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
export winVer="win7"
|
||||
export winetricksSettings="vd=1024x768"
|
||||
download "https://www.stefankiss.sk/files/eurofly2/Launcher_1.2.zip" "https://www.stefankiss.sk/files/eurofly2/Eurofly_2_ful_setup.exe"
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
download "https://dl.tweesecake.app/rage/rage1.5.0.zip"
|
||||
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}/rage1.5.0.zip"
|
||||
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/"
|
||||
echo "Before you can login, you need to create an account at:"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
download "http://www.agarchive.net/games/bpc/fartman.exe"
|
||||
install_wine_bottle dx8vb vb6run
|
||||
wine "${cache}/fartman.exe" /silent
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
# Uses standard wine path based on architecture (win32/win64)
|
||||
export winVer="win7"
|
||||
install_wine_bottle
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#//!/bin/bash
|
||||
case "${game}" in
|
||||
"MudSplat English")
|
||||
a="a"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
download "http://www.vgstorm.com/psycho_strike_installer.exe"
|
||||
install_wine_bottle
|
||||
wine "${cache}/psycho_strike_installer.exe" /silent
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
export winVer="win7"
|
||||
download "http://www.samtupy.com/games/SCSetup.exe" "${nvdaControllerClient32Dll}"
|
||||
install_wine_bottle
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#Disable since it's not working
|
||||
#//Disable since it's not working
|
||||
download "https://www.mm-galabo.com/sr/Download_files_srfv/shadowrine_fullvoice3.171.exe" "https://raw.githubusercontent.com/LordLuceus/sr-english-localization/master/language_en.dat"
|
||||
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
|
||||
export winVer="win8"
|
||||
|
||||
7
.install/Shooter_rw.sh
Normal file
7
.install/Shooter_rw.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
export WINEARCH=win64
|
||||
export winVer="win7"
|
||||
get_installer "shooterrw-win.zip" "https://masonasons.itch.io/shooterrw"
|
||||
install_wine_bottle
|
||||
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/shooter_rw" "${cache}/shooterrw-win.zip"
|
||||
find "$WINEPREFIX/drive_c/Program Files/shooter_rw" -type d -exec chmod 755 "{}" +
|
||||
add_launcher "c:\Program Files\shooter_rw\Shooter.exe"
|
||||
@@ -1,4 +1,4 @@
|
||||
#
|
||||
#//
|
||||
export winVer="win7"
|
||||
download "http://www.vgstorm.com/the_gate_installer.exe"
|
||||
install_wine_bottle
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
# Get script directory for relative paths
|
||||
scriptDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
@@ -11,6 +12,234 @@ export DIALOGOPTS='--no-lines --visit-items'
|
||||
# Wine32 version for SAPI compatibility
|
||||
wineThirtyTwoVersion="9.0"
|
||||
|
||||
# Track nvda2speechd lifecycle for this launcher run.
|
||||
nvda2speechdPid=""
|
||||
nvda2speechdStarted="false"
|
||||
customLaunchHandled="false"
|
||||
cthulhuTitleReaderEnabled="false"
|
||||
cthulhuTitleReaderTried="false"
|
||||
takeFocusWorkaroundActive="false"
|
||||
takeFocusRestoreMode="none"
|
||||
takeFocusRestoreValue=""
|
||||
|
||||
log_msg() {
|
||||
local logFile="${scriptDir}/game.log"
|
||||
local timestamp=""
|
||||
timestamp="$(date)"
|
||||
echo "${1} [${timestamp}]" >> "$logFile"
|
||||
}
|
||||
|
||||
start_nvda2speechd() {
|
||||
if [[ "$nvda2speechdStarted" == "true" ]]; then
|
||||
return
|
||||
fi
|
||||
if ! ss -ltnp | rg 3457 | grep -q 'cthulhu'; then
|
||||
if [[ -x "${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" ]]; then
|
||||
local translateSetting="${TRANSLATE:-unset}"
|
||||
local translateFromSetting="${TRANSLATE_FROM:-unset}"
|
||||
local translateToSetting="${TRANSLATE_TO:-unset}"
|
||||
log_msg "Preparing nvda2speechd with TRANSLATE=${translateSetting} TRANSLATE_FROM=${translateFromSetting} TRANSLATE_TO=${translateToSetting}."
|
||||
if [[ "${translateSetting,,}" == "true" ]] || [[ "$translateSetting" == "1" ]]; then
|
||||
if ! command -v trans &> /dev/null; then
|
||||
log_msg "TRANSLATE is enabled but 'trans' is missing; nvda2speechd may fail to start."
|
||||
fi
|
||||
fi
|
||||
"${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" &> /dev/null &
|
||||
nvda2speechdPid=$!
|
||||
nvda2speechdStarted="true"
|
||||
log_msg "Started nvda2speechd (pid ${nvda2speechdPid})."
|
||||
else
|
||||
log_msg "nvda2speechd binary not found or not executable; skipping start."
|
||||
fi
|
||||
else
|
||||
log_msg "cthulhu is already listening on port 3457; skipping nvda2speechd start."
|
||||
fi
|
||||
}
|
||||
|
||||
stop_nvda2speechd() {
|
||||
if [[ "$nvda2speechdStarted" != "true" ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ -n "$nvda2speechdPid" ]] && kill -0 "$nvda2speechdPid" 2>/dev/null; then
|
||||
kill "$nvda2speechdPid" 2>/dev/null
|
||||
wait "$nvda2speechdPid" 2>/dev/null
|
||||
fi
|
||||
nvda2speechdPid=""
|
||||
nvda2speechdStarted="false"
|
||||
}
|
||||
|
||||
enable_cthulhu_window_title_reader() {
|
||||
if [[ "$cthulhuTitleReaderEnabled" == "true" ]]; then
|
||||
return 0
|
||||
fi
|
||||
if [[ "$cthulhuTitleReaderTried" == "true" ]]; then
|
||||
return 1
|
||||
fi
|
||||
cthulhuTitleReaderTried="true"
|
||||
|
||||
if ! command -v gdbus &> /dev/null; then
|
||||
log_msg "gdbus not found; cannot enable Cthulhu WindowTitleReader."
|
||||
return 1
|
||||
fi
|
||||
|
||||
local dbusService="org.stormux.Cthulhu.Service"
|
||||
local modulePath="/org/stormux/Cthulhu/Service/PluginSystemManager"
|
||||
local titleModulePath="/org/stormux/Cthulhu/Service/Plugin_WindowTitleReader"
|
||||
local moduleInterface="org.stormux.Cthulhu.Module"
|
||||
local enableResult=""
|
||||
local titleEnableResult=""
|
||||
|
||||
gdbus call --session --dest "$dbusService" \
|
||||
--object-path "$modulePath" \
|
||||
--method "${moduleInterface}.ExecuteCommand" \
|
||||
"RescanPlugins" false &> /dev/null || true
|
||||
|
||||
enableResult="$(gdbus call --session --dest "$dbusService" \
|
||||
--object-path "$modulePath" \
|
||||
--method "${moduleInterface}.ExecuteParameterizedCommand" \
|
||||
"SetPluginActive" \
|
||||
'{"plugin_name": <"WindowTitleReader">, "active": <true>}' \
|
||||
false 2>/dev/null || true)"
|
||||
|
||||
if [[ "$enableResult" != *"true"* ]]; then
|
||||
log_msg "Failed to activate Cthulhu WindowTitleReader plugin via D-Bus."
|
||||
return 1
|
||||
fi
|
||||
|
||||
titleEnableResult="$(gdbus call --session --dest "$dbusService" \
|
||||
--object-path "$titleModulePath" \
|
||||
--method "${moduleInterface}.ExecuteParameterizedCommand" \
|
||||
"SetEnabled" \
|
||||
'{"enabled": <true>}' \
|
||||
false 2>/dev/null || true)"
|
||||
|
||||
if [[ "$titleEnableResult" == *"true"* ]]; then
|
||||
cthulhuTitleReaderEnabled="true"
|
||||
log_msg "Enabled Cthulhu WindowTitleReader tracking via D-Bus."
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_msg "Failed to enable Cthulhu WindowTitleReader tracking via D-Bus."
|
||||
return 1
|
||||
}
|
||||
|
||||
kill_nvda2speechd_listener() {
|
||||
local nvdaPids=()
|
||||
mapfile -t nvdaPids < <(pgrep -u "${USER}" -x nvda2speechd 2>/dev/null)
|
||||
if [[ ${#nvdaPids[@]} -eq 0 ]]; then
|
||||
log_msg "No nvda2speechd process found to stop."
|
||||
return
|
||||
fi
|
||||
log_msg "Stopping nvda2speechd process(es): ${nvdaPids[*]}."
|
||||
for pid in "${nvdaPids[@]}"; do
|
||||
kill "$pid" 2>/dev/null
|
||||
done
|
||||
local remainingPids=()
|
||||
mapfile -t remainingPids < <(pgrep -u "${USER}" -x nvda2speechd 2>/dev/null)
|
||||
if [[ ${#remainingPids[@]} -gt 0 ]]; then
|
||||
log_msg "nvda2speechd still running after stop attempt: ${remainingPids[*]}."
|
||||
fi
|
||||
}
|
||||
|
||||
cleanup_and_exit() {
|
||||
restore_executioners_rage_focus_workaround
|
||||
stop_nvda2speechd
|
||||
}
|
||||
|
||||
set_use_take_focus_value() {
|
||||
local takeFocusValue="${1^^}"
|
||||
if [[ "$takeFocusValue" != "Y" ]] && [[ "$takeFocusValue" != "N" ]]; then
|
||||
return 1
|
||||
fi
|
||||
wine reg add "HKCU\\Software\\Wine\\X11 Driver" /v UseTakeFocus /t REG_SZ /d "$takeFocusValue" /f &> /dev/null
|
||||
}
|
||||
|
||||
unset_use_take_focus_value() {
|
||||
wine reg delete "HKCU\\Software\\Wine\\X11 Driver" /v UseTakeFocus /f &> /dev/null
|
||||
}
|
||||
|
||||
capture_use_take_focus_state() {
|
||||
local queryOutput=""
|
||||
local currentValue=""
|
||||
takeFocusRestoreMode="none"
|
||||
takeFocusRestoreValue=""
|
||||
|
||||
if ! wine reg query "HKCU\\Software\\Wine" &> /dev/null; then
|
||||
takeFocusRestoreMode="unknown"
|
||||
return 1
|
||||
fi
|
||||
|
||||
queryOutput="$(wine reg query "HKCU\\Software\\Wine\\X11 Driver" /v UseTakeFocus 2>/dev/null || true)"
|
||||
if [[ "$queryOutput" == *"UseTakeFocus"* ]]; then
|
||||
currentValue="$(awk '/UseTakeFocus/ {print toupper($NF); exit}' <<< "$queryOutput")"
|
||||
if [[ "$currentValue" == "Y" ]] || [[ "$currentValue" == "N" ]]; then
|
||||
takeFocusRestoreMode="value"
|
||||
takeFocusRestoreValue="$currentValue"
|
||||
return 0
|
||||
fi
|
||||
takeFocusRestoreMode="unknown"
|
||||
return 1
|
||||
fi
|
||||
|
||||
takeFocusRestoreMode="delete"
|
||||
return 0
|
||||
}
|
||||
|
||||
apply_executioners_rage_focus_workaround() {
|
||||
if [[ "${game[2]}" != "Executioner's Rage" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
takeFocusWorkaroundActive="false"
|
||||
if ! capture_use_take_focus_state; then
|
||||
log_msg "Could not capture current UseTakeFocus state before launching Executioner's Rage."
|
||||
fi
|
||||
|
||||
if set_use_take_focus_value "Y"; then
|
||||
takeFocusWorkaroundActive="true"
|
||||
log_msg "Enabled UseTakeFocus=Y before launching Executioner's Rage."
|
||||
else
|
||||
log_msg "Failed to enable UseTakeFocus=Y for Executioner's Rage."
|
||||
fi
|
||||
}
|
||||
|
||||
restore_executioners_rage_focus_workaround() {
|
||||
if [[ "$takeFocusWorkaroundActive" != "true" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "${game[2]}" != "Executioner's Rage" ]]; then
|
||||
takeFocusWorkaroundActive="false"
|
||||
takeFocusRestoreMode="none"
|
||||
takeFocusRestoreValue=""
|
||||
return
|
||||
fi
|
||||
|
||||
case "$takeFocusRestoreMode" in
|
||||
value)
|
||||
if set_use_take_focus_value "$takeFocusRestoreValue"; then
|
||||
log_msg "Restored UseTakeFocus=${takeFocusRestoreValue} after closing Executioner's Rage."
|
||||
else
|
||||
log_msg "Failed to restore UseTakeFocus=${takeFocusRestoreValue} after closing Executioner's Rage."
|
||||
fi
|
||||
;;
|
||||
delete)
|
||||
if unset_use_take_focus_value; then
|
||||
log_msg "Removed UseTakeFocus override after closing Executioner's Rage."
|
||||
else
|
||||
log_msg "Failed to remove UseTakeFocus override after closing Executioner's Rage."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
log_msg "Skipping UseTakeFocus restore after closing Executioner's Rage because prior state was unknown."
|
||||
;;
|
||||
esac
|
||||
|
||||
takeFocusWorkaroundActive="false"
|
||||
takeFocusRestoreMode="none"
|
||||
takeFocusRestoreValue=""
|
||||
}
|
||||
|
||||
# Check and manage wine32 installation
|
||||
check_wine32() {
|
||||
local wine32Dir="${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/wine32"
|
||||
@@ -137,10 +366,10 @@ game_installer() {
|
||||
mapfile -t installedGames < <(sed -e '/^$/d' -e '/^[[:space:]]*#/d' "${configFile}" 2> /dev/null | cut -d '|' -f3)
|
||||
# Create the menu of available games by reading from .install directory
|
||||
declare -a menuList
|
||||
# Get all .sh files from .install directory, excluding those starting with # as first line.
|
||||
# Get all .sh files from .install directory, excluding those starting with #// as first line.
|
||||
mapfile -t sortedGames < <(for f in "${scriptDir}/.install/"*.sh; do
|
||||
# Skip if first line starts with #
|
||||
[[ $(head -n1 "$f") == "#"* ]] && continue
|
||||
# Skip if first line starts with #//
|
||||
[[ $(head -n1 "$f") == "#//"* ]] && continue
|
||||
echo "${f##*/%.sh}"
|
||||
done | sort)
|
||||
for i in "${sortedGames[@]}"; do
|
||||
@@ -316,27 +545,33 @@ kill_game() {
|
||||
# for games that require custom scripts before launch or custom launch parameters
|
||||
custom_launch_parameters() {
|
||||
if [[ "${game[2]}" == "Dragon Pong" ]]; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" DragonPong.exe &
|
||||
if ! enable_cthulhu_window_title_reader; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" DragonPong.exe &
|
||||
fi
|
||||
start_nvda2speechd
|
||||
pushd "$(winepath "$winePath")" || exit 1
|
||||
wine "$wineExec"
|
||||
popd || exit 1
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${game[2]}" == "Dreamland" ]]; then
|
||||
"$WINE" "${game[1]}" &> /dev/null &
|
||||
exit 0
|
||||
start_nvda2speechd
|
||||
"$WINE" "${game[1]}" &> /dev/null
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
# executioner's-rage: DLL replacement now handled by update_nvda_dlls()
|
||||
if [[ "${game[2]}" == "Laser Breakout" ]]; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" play.exe &
|
||||
if ! enable_cthulhu_window_title_reader; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" play.exe &
|
||||
fi
|
||||
fi
|
||||
if [[ "${game[2]}" == "Bokurano Daibouken 2" ]]; then
|
||||
find "${WINEPREFIX}/drive_c/nyanchangame/bk2" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \;
|
||||
"${scriptDir}/speech/clipboard_translator.sh" "play.exe" bokurano-daibouken2 &
|
||||
export TRANSLATE=true
|
||||
fi
|
||||
if [[ "${game[2]}" == "Bokurano Daibouken" ]]; then
|
||||
find "${WINEPREFIX}/drive_c/nyanchangame/bk" -type f -name 'nvdaControllerClient.dll' -exec rm -v "{}" \;
|
||||
"${scriptDir}/speech/clipboard_translator.sh" "play.exe" bokurano-daibouken &
|
||||
export TRANSLATE=true
|
||||
fi
|
||||
if [[ "${game[2]}" == "Bokurano Daibouken 3" ]]; then
|
||||
dictPath="$(winepath "${winePath}")"
|
||||
@@ -358,13 +593,19 @@ custom_launch_parameters() {
|
||||
fi
|
||||
fi
|
||||
if [[ "${game[2]}" == "Bop It Emulator" ]]; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" bop.exe &
|
||||
if ! enable_cthulhu_window_title_reader; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" bop.exe &
|
||||
fi
|
||||
fi
|
||||
if [[ "${game[2]}" == "Road to Rage" ]]; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" trtr.exe &
|
||||
if ! enable_cthulhu_window_title_reader; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" trtr.exe &
|
||||
fi
|
||||
fi
|
||||
if [[ "${game[2]}" == "Axel Pong" ]]; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" axel_pong.exe &
|
||||
if ! enable_cthulhu_window_title_reader; then
|
||||
"${scriptDir}/speech/speak_window_title.sh" axel_pong.exe &
|
||||
fi
|
||||
fi
|
||||
if [[ "${game[2]}" == "Sequence Storm" ]]; then
|
||||
"${scriptDir}/speech/clipboard_reader.sh" SequenceStorm &
|
||||
@@ -375,30 +616,40 @@ custom_launch_parameters() {
|
||||
#fi
|
||||
# sketchbook: DLL replacement now handled by update_nvda_dlls()
|
||||
if [[ "${game[2]}" == "Audiodisc" ]]; then
|
||||
start_nvda2speechd
|
||||
wine "$winePath\\$wineExec"
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${game[2]}" == "Audioquake" ]]; then
|
||||
start_nvda2speechd
|
||||
wine "$winePath\\$wineExec"
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${game[2]}" == "Screaming Strike 2" ]]; then
|
||||
start_nvda2speechd
|
||||
pushd "$(winepath "$winePath")" || exit 1
|
||||
wine "$wineExec"
|
||||
popd || exit 1
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${game[2]}" == "Warsim" ]]; then
|
||||
start_nvda2speechd
|
||||
pushd "$(winepath "${game[1]%\\*}")" || exit 1
|
||||
wine "${game[1]##*\\}"
|
||||
popd || exit 1
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${game[2]}" == "Interceptor" ]]; then
|
||||
start_nvda2speechd
|
||||
pushd "$(winepath "$winePath")" || exit 1
|
||||
wine "$wineExec"
|
||||
popd || exit 1
|
||||
exit 0
|
||||
customLaunchHandled="true"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -474,14 +725,8 @@ game_launcher() {
|
||||
[[ "$agmNoLaunch" == "true" ]] && return
|
||||
# shellcheck source=.includes/bottle.sh
|
||||
source "${scriptDir}/.includes/bottle.sh"
|
||||
|
||||
# Start nvda2speechd if available
|
||||
if ! ss -ltnp | rg 3457 | grep -q 'cthulhu'; then
|
||||
if [[ -x "${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" ]]; then
|
||||
"${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/nvda2speechd" &> /dev/null &
|
||||
fi
|
||||
fi
|
||||
|
||||
# Ensure a clean nvda2speechd state before launching a new game.
|
||||
kill_nvda2speechd_listener
|
||||
# Replace NVDA controller client DLLs in wine64 bottle
|
||||
update_nvda_dlls
|
||||
mapfile -t lines < <(sed -e '/^$/d' -e '/^ *#/d' "${configFile}" 2> /dev/null | sort -t '|' -k3,3f)
|
||||
@@ -568,15 +813,25 @@ game_launcher() {
|
||||
fi
|
||||
fi
|
||||
process_launcher_flags
|
||||
apply_executioners_rage_focus_workaround
|
||||
customLaunchHandled="false"
|
||||
custom_launch_parameters
|
||||
if [[ "$debugGdb" == "1" ]]; then
|
||||
# Change to game directory before launching
|
||||
pushd "$(winepath "${game[1]%\\*}")" > /dev/null || exit 1
|
||||
winedbg --gdb "${game[1]##*\\}"
|
||||
popd > /dev/null || exit 1
|
||||
else
|
||||
wine start /d "${game[1]%\\*}" "${game[1]##*\\}" /realtime
|
||||
if [[ "$customLaunchHandled" == "true" ]]; then
|
||||
restore_executioners_rage_focus_workaround
|
||||
exit 0
|
||||
fi
|
||||
start_nvda2speechd
|
||||
# Change to game directory before launching (required for proper game operation)
|
||||
pushd "$(winepath "${game[1]%\\*}")" > /dev/null || exit 1
|
||||
if [[ "$debugGdb" == "1" ]]; then
|
||||
winedbg --gdb "${game[1]##*\\}"
|
||||
else
|
||||
# Use direct wine execution instead of 'wine start' to ensure clipboard works
|
||||
# See: https://bugs.winehq.org/show_bug.cgi?id=50598
|
||||
wine "${game[1]##*\\}"
|
||||
fi
|
||||
popd > /dev/null || exit 1
|
||||
restore_executioners_rage_focus_workaround
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
@@ -584,10 +839,12 @@ game_launcher() {
|
||||
|
||||
# main script
|
||||
|
||||
trap "exit 0" SIGINT
|
||||
trap cleanup_and_exit EXIT
|
||||
trap "cleanup_and_exit; exit 0" SIGINT SIGTERM
|
||||
|
||||
# Detect dialog interface type BEFORE potentially setting DISPLAY
|
||||
# This must happen before we modify DISPLAY to preserve console detection
|
||||
# shellcheck disable=SC2034
|
||||
if [[ -z "$DISPLAY" ]]; then
|
||||
dialogType="dialog"
|
||||
elif command -v yad &> /dev/null; then
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Immediately exit if errors are encountered.
|
||||
set -e
|
||||
@@ -72,4 +72,4 @@ configure_arch() {
|
||||
|
||||
configure_arch
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Immediately exit if errors are encountered.
|
||||
set -e
|
||||
|
||||
29
wine/install-dependencies-mint.sh
Normal file
29
wine/install-dependencies-mint.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Immediately exit if errors are encountered.
|
||||
set -e
|
||||
|
||||
# Wine dependencies installer for Debian/Ubuntu
|
||||
# If this fails on your system, please contact storm_dragon@stormux.org
|
||||
|
||||
configure_debian() {
|
||||
packageList=(
|
||||
curl
|
||||
dialog
|
||||
gawk
|
||||
gstreamer1.0-plugins-bad:i386
|
||||
gstreamer1.0-plugins-good:i386
|
||||
gstreamer1.0-plugins-ugly:i386
|
||||
mono-complete
|
||||
libncurses5-dev
|
||||
w3m
|
||||
winehq-stable
|
||||
)
|
||||
# Make sure 32-bit libraries are available.
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt install --install-recommends "${packageList[@]}"
|
||||
}
|
||||
|
||||
configure_debian
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user