Merge branch 'testing'

This commit is contained in:
Storm Dragon
2025-12-24 02:08:26 -05:00
65 changed files with 275 additions and 246 deletions
+76 -15
View File
@@ -106,15 +106,16 @@ install_rhvoice() {
install_wine_bottle() { install_wine_bottle() {
# Simplified - bottles are now pre-created with dependencies # Simplified - bottles are now pre-created with dependencies
# Just set up the wine environment for game installation # Just set up the wine environment for game installation
# Determine architecture from WINEARCH or speechsdk dependency # Determine architecture from WINEARCH or dependency requirements
# Preserve existing WINEARCH if already set # Preserve existing WINEARCH if already set by game installer
if [[ -z "$WINEARCH" ]]; then if [[ -z "$WINEARCH" ]]; then
if [[ "$*" =~ speechsdk ]]; then # All games use wine64 now (wine32 eliminated 2025-12-06)
export WINEARCH="win32" # SAPI support is provided by wine64 with WINETRICKS_FORCE=1
else export WINEARCH="win64"
export WINEARCH="win64" echo "DEBUG: Auto-selected wine64 (default - wine32 eliminated)"
fi else
echo "DEBUG: Using pre-set WINEARCH=$WINEARCH from game installer"
fi fi
# Set architecture for WINEPREFIX path # Set architecture for WINEPREFIX path
@@ -132,34 +133,94 @@ install_wine_bottle() {
echo "Using pre-configured wine${architecture} bottle at $WINEPREFIX" echo "Using pre-configured wine${architecture} bottle at $WINEPREFIX"
# Store winVer for per-app setting in add_launcher (don't set globally)
if [[ -n "$winVer" ]]; then
export gameWinVer="$winVer"
fi
# Install any additional game-specific dependencies if specified # Install any additional game-specific dependencies if specified
if [[ $# -gt 0 ]]; then if [[ $# -gt 0 ]]; then
# Filter out dependencies that are already installed in bottle creation # Filter out dependencies that are already installed in bottle creation
local depsToInstall=() local depsToInstall=()
local alreadyInstalled="speechsdk corefonts isolate_home" local alreadyInstalled="speechsdk sapi corefonts isolate_home"
for dep in "$@"; do for dep in "$@"; do
# Skip dependencies already installed during bottle creation # Skip dependencies already installed during bottle creation
# Also skip winVer patterns - handled separately above
if [[ ! " $alreadyInstalled " =~ " $dep " ]] && [[ ! "$dep" =~ ^win(7|8|10)$ ]]; then if [[ ! " $alreadyInstalled " =~ " $dep " ]] && [[ ! "$dep" =~ ^win(7|8|10)$ ]]; then
depsToInstall+=("$dep") depsToInstall+=("$dep")
fi fi
done done
if [[ ${#depsToInstall[@]} -gt 0 ]]; then if [[ ${#depsToInstall[@]} -gt 0 ]]; then
echo "Installing additional dependencies: ${depsToInstall[*]}" # Separate speechsdk (needs FORCE) from other deps
{ local regularDeps=()
env WINE="$WINE" WINESERVER="$WINESERVER" DISPLAY="${DISPLAY:-:0}" winetricks -q isolate_home "${depsToInstall[@]}" "${winVer:-win7}" ${winetricksSettings} local needsSpeechsdk=false
} | agm_progressbox "Wine Setup" "Installing additional dependencies..." for dep in "${depsToInstall[@]}"; do
if [[ "$dep" == "speechsdk" ]]; then
needsSpeechsdk=true
else
regularDeps+=("$dep")
fi
done
# Install regular deps without FORCE
if [[ ${#regularDeps[@]} -gt 0 ]]; then
echo "Installing additional dependencies: ${regularDeps[*]}"
{
env WINE="$WINE" WINESERVER="$WINESERVER" DISPLAY="${DISPLAY:-:0}" winetricks -q isolate_home "${regularDeps[@]}" ${winetricksSettings}
} | agm_progressbox "Wine Setup" "Installing additional dependencies..."
fi
# Install speechsdk with FORCE if needed
if [[ "$needsSpeechsdk" == "true" ]]; then
echo "Installing speechsdk with WINETRICKS_FORCE=1"
{
env WINE="$WINE" WINESERVER="$WINESERVER" DISPLAY="${DISPLAY:-:0}" WINETRICKS_FORCE=1 winetricks -q speechsdk
} | agm_progressbox "Wine Setup" "Installing Speech SDK..."
fi
fi fi
fi fi
} }
# Set Windows version for a specific executable (per-app, not global)
# This allows different games to use different Windows versions in the same bottle
set_app_winver() {
local exePath="$1"
local winVersion="$2"
if [[ -z "$exePath" ]] || [[ -z "$winVersion" ]]; then
return
fi
# Extract just the exe filename from path (handles both / and \ separators)
local exeName="${exePath##*\\}"
exeName="${exeName##*/}"
echo "Setting Windows version $winVersion for $exeName"
cat > /tmp/app_winver.reg << EOF
REGEDIT4
[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\${exeName}]
"Version"="${winVersion}"
EOF
wine regedit /tmp/app_winver.reg
rm /tmp/app_winver.reg
}
add_launcher() { add_launcher() {
# Determine architecture from WINEPREFIX path instead of WINEARCH variable # Determine architecture from WINEPREFIX path instead of WINEARCH variable
local architecture="win64" # default local architecture="win64" # default
if [[ "$WINEPREFIX" =~ wine32 ]]; then if [[ "$WINEPREFIX" =~ wine32 ]]; then
architecture="win32" architecture="win32"
fi fi
# Set per-app Windows version if specified
if [[ -n "$gameWinVer" ]]; then
set_app_winver "$1" "$gameWinVer"
unset gameWinVer
fi
local launchSettings="${architecture}|${1}|${game}" local launchSettings="${architecture}|${1}|${game}"
shift shift
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
+4
View File
@@ -26,6 +26,10 @@ update() {
if ! [[ -d ".git" ]]; then if ! [[ -d ".git" ]]; then
return return
fi fi
# Check if we're in a detached HEAD state
if ! git symbolic-ref -q HEAD &> /dev/null; then
return
fi
local url="$(git ls-remote --get-url)" local url="$(git ls-remote --get-url)"
if [[ "$url" =~ ^ssh://|git@|gitea@ ]] || [[ -z "$url" ]]; then if [[ "$url" =~ ^ssh://|git@|gitea@ ]] || [[ -z "$url" ]]; then
return return
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmQiocMpMXoxejDftKKvmrR5xxpj1qcWcgkhBBwTcyijXg?filename=FPB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmQiocMpMXoxejDftKKvmrR5xxpj1qcWcgkhBBwTcyijXg?filename=FPB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/FPB32Setup10a.exe" /silent wine "${cache}/FPB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmPNt3c78UBgEMrTH3eJ5eD2mCMdth6jwes1iDKGW24Uj5?filename=BG204832Setup10a.exe" download "${ipfsGateway}/ipfs/QmPNt3c78UBgEMrTH3eJ5eD2mCMdth6jwes1iDKGW24Uj5?filename=BG204832Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BG204832Setup10a.exe" /silent wine "${cache}/BG204832Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmTshtHBEV9dh7wFtaQpNUEYHZ3fBpuhSRZqc7k8HwmtPM?filename=ASB32Setup10.exe" download "${ipfsGateway}/ipfs/QmTshtHBEV9dh7wFtaQpNUEYHZ3fBpuhSRZqc7k8HwmtPM?filename=ASB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/ASB32Setup10.exe" /silent wine "${cache}/ASB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/Qma76HXBhmKgMDeHH1XLePsaWzzzLsBS2HRL3c7MVwDokg?filename=BAC32Setup10.exe" download "${ipfsGateway}/ipfs/Qma76HXBhmKgMDeHH1XLePsaWzzzLsBS2HRL3c7MVwDokg?filename=BAC32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BAC32Setup10.exe" /silent wine "${cache}/BAC32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/Qmaq9P9fxdLTEFMGg4mhHrRuUbPg6HgU3eYVJNqZUimHjo?filename=BGB32Setup10.exe" download "${ipfsGateway}/ipfs/Qmaq9P9fxdLTEFMGg4mhHrRuUbPg6HgU3eYVJNqZUimHjo?filename=BGB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGB32Setup10.exe" /silent wine "${cache}/BGB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmQwWiJw9hDiPdfwDyL4XepeoD66ztVRi3HwbSjFFP4CNg?filename=BGB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmQwWiJw9hDiPdfwDyL4XepeoD66ztVRi3HwbSjFFP4CNg?filename=BGB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGB32Setup10a.exe" /silent wine "${cache}/BGB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmRn21tREXxXVSaDe9i54zEPzPSespjJAFBqu4DWocuagD?filename=BXB32Setup10.exe" download "${ipfsGateway}/ipfs/QmRn21tREXxXVSaDe9i54zEPzPSespjJAFBqu4DWocuagD?filename=BXB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BXB32Setup10.exe" /silent wine "${cache}/BXB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmWEdmTkQsjSqBgWUgnDajMf8QvQBbEF4Nxo6mhkXYzBtQ?filename=BRN32Setup10a.exe" download "${ipfsGateway}/ipfs/QmWEdmTkQsjSqBgWUgnDajMf8QvQBbEF4Nxo6mhkXYzBtQ?filename=BRN32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BRN32Setup10a.exe" /silent wine "${cache}/BRN32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmT2yBpU5Jqna18FxYtyWzi4xMGAY9PyJWStAskxCHqBDw?filename=BGC32Setup10d.exe" download "${ipfsGateway}/ipfs/QmT2yBpU5Jqna18FxYtyWzi4xMGAY9PyJWStAskxCHqBDw?filename=BGC32Setup10d.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGC32Setup10d.exe" /silent wine "${cache}/BGC32Setup10d.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmU486SssAdM7kPKwDyAKDLQs3Z92bG6wFjaLhzqDZCxAF?filename=BCB32Setup10.exe" download "${ipfsGateway}/ipfs/QmU486SssAdM7kPKwDyAKDLQs3Z92bG6wFjaLhzqDZCxAF?filename=BCB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BCB32Setup10.exe" /silent wine "${cache}/BCB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmbRUiknnNcibWD3NwK4DFZGNHWswBgsFidUzU1TFGJ5Ra?filename=BCS32Setup10.exe" download "${ipfsGateway}/ipfs/QmbRUiknnNcibWD3NwK4DFZGNHWswBgsFidUzU1TFGJ5Ra?filename=BCS32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BCS32Setup10.exe" /silent wine "${cache}/BCS32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmeFud3EPHy7wQe8UENgvh96HdAazEkwqA2AutCNkYvB3t?filename=BGC32Setup12e.exe" download "${ipfsGateway}/ipfs/QmeFud3EPHy7wQe8UENgvh96HdAazEkwqA2AutCNkYvB3t?filename=BGC32Setup12e.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGC32Setup12e.exe" /silent wine "${cache}/BGC32Setup12e.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BGX32Setup10h.exe" download "${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BGX32Setup10h.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGX32Setup10h.exe" /silent wine "${cache}/BGX32Setup10h.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BDD32Setup.exe" download "${ipfsGateway}/ipfs/QmZQGY9CeATEiWrSqsKBz4AN6jPgQuvbBZSpQoLiMjoDr2?filename=BDD32Setup.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BDD32Setup.exe" /silent wine "${cache}/BDD32Setup.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmWWZByYL5CsDSi6gQLGcMyBL7zqD5hWXbPXJr3shRt5AQ?filename=ESB32Setup10.exe" download "${ipfsGateway}/ipfs/QmWWZByYL5CsDSi6gQLGcMyBL7zqD5hWXbPXJr3shRt5AQ?filename=ESB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/ESB32Setup10.exe" /silent wine "${cache}/ESB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmSZt6dz7WQkNrFBmYq9n4WdYrrZyQAebTBPo46uHqCuNi?filename=BFD32Setup10.exe" download "${ipfsGateway}/ipfs/QmSZt6dz7WQkNrFBmYq9n4WdYrrZyQAebTBPo46uHqCuNi?filename=BFD32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BFD32Setup10.exe" /silent wine "${cache}/BFD32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmVfQMMnqTD9Zm8Xwv7rGrUTdS9FXToq7Fv6wtQQVgbQGR?filename=BGF32Setup20.exe" download "${ipfsGateway}/ipfs/QmVfQMMnqTD9Zm8Xwv7rGrUTdS9FXToq7Fv6wtQQVgbQGR?filename=BGF32Setup20.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGF32Setup20.exe" /silent wine "${cache}/BGF32Setup20.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmfAp9EYou1pndLwYSdpYdUCHBv2DR94oFccQh1ii9JVLD?filename=GSB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmfAp9EYou1pndLwYSdpYdUCHBv2DR94oFccQh1ii9JVLD?filename=GSB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/GSB32Setup10a.exe" /silent wine "${cache}/GSB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXTPMmvw7JE2eLuPBLGSpkZqUn12TX7QEQZbX8qtp7GBx?filename=HMB32Setup10.exe" download "${ipfsGateway}/ipfs/QmXTPMmvw7JE2eLuPBLGSpkZqUn12TX7QEQZbX8qtp7GBx?filename=HMB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/HMB32Setup10.exe" /silent wine "${cache}/HMB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmdU5ag1PRjvG28wNX7aNuJqZSVxaqEEKjgG6GoRoDT8k4?filename=BGH32Setup10b.exe" download "${ipfsGateway}/ipfs/QmdU5ag1PRjvG28wNX7aNuJqZSVxaqEEKjgG6GoRoDT8k4?filename=BGH32Setup10b.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/${BGH32Setup10b.exe}" /silent wine "${cache}/${BGH32Setup10b.exe}" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmctBDvhQWwER94LvgauR7sMDxv9D1mS9cToV47orTCdzU?filename=BGK32Setup10b.exe" download "${ipfsGateway}/ipfs/QmctBDvhQWwER94LvgauR7sMDxv9D1mS9cToV47orTCdzU?filename=BGK32Setup10b.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGK32Setup10b.exe" /silent wine "${cache}/BGK32Setup10b.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/Qma5WeCC9B2P5abRGX9nGYV8Zi9F8vfCCr4ehejP2bgmNm?filename=LAP32Setup10.exe" download "${ipfsGateway}/ipfs/Qma5WeCC9B2P5abRGX9nGYV8Zi9F8vfCCr4ehejP2bgmNm?filename=LAP32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/LAP32Setup10.exe" /silent wine "${cache}/LAP32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmP6cwMbirbBqAaG9JLfNRnD2dvJfh6nq74kfwxs5hN2RQ?filename=BMM32Setup10.exe" download "${ipfsGateway}/ipfs/QmP6cwMbirbBqAaG9JLfNRnD2dvJfh6nq74kfwxs5hN2RQ?filename=BMM32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BMM32Setup10.exe" /silent wine "${cache}/BMM32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmRa54HroWjwxHYfKr6hdmP34sHW5G3ecuzcjMA5UBBVKa?filename=MSB32Setup10.exe" download "${ipfsGateway}/ipfs/QmRa54HroWjwxHYfKr6hdmP34sHW5G3ecuzcjMA5UBBVKa?filename=MSB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/MSB32Setup10.exe" /silent wine "${cache}/MSB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/Qmb7eGTMDgiaDC9muMW9n8bHoistGcNm1VgHc6sr7dRyHU?filename=BNW32Setup10a.exe" download "${ipfsGateway}/ipfs/Qmb7eGTMDgiaDC9muMW9n8bHoistGcNm1VgHc6sr7dRyHU?filename=BNW32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BNW32Setup10a.exe" /silent wine "${cache}/BNW32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXKvQ6WNNSnDiSyYmvAhZXVdALnuhUGK7dSMQVkQNReJr?filename=BPS32Setup10c.exe" download "${ipfsGateway}/ipfs/QmXKvQ6WNNSnDiSyYmvAhZXVdALnuhUGK7dSMQVkQNReJr?filename=BPS32Setup10c.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BPS32Setup10c.exe" /silent wine "${cache}/BPS32Setup10c.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmPLv74LiDgVGuiGhu9HuPhx3uoMm9QyCYk6jgeFUHjj3S?filename=BPS32Setup10.exe" download "${ipfsGateway}/ipfs/QmPLv74LiDgVGuiGhu9HuPhx3uoMm9QyCYk6jgeFUHjj3S?filename=BPS32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BPS32Setup10.exe" /silent wine "${cache}/BPS32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmaqXaBKD3xY2smhU2LcejXRTPnWZHqaTW9se8yRepLsHu?filename=PSB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmaqXaBKD3xY2smhU2LcejXRTPnWZHqaTW9se8yRepLsHu?filename=PSB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/PSB32Setup10a.exe" /silent wine "${cache}/PSB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmSxJs2MiLQ61Fgx6vCpSD7GmQziLiCEU3sZ3mgWc7RsJ8?filename=BSS32Setup10.exe" download "${ipfsGateway}/ipfs/QmSxJs2MiLQ61Fgx6vCpSD7GmQziLiCEU3sZ3mgWc7RsJ8?filename=BSS32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BSS32Setup10.exe" /silent wine "${cache}/BSS32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmVrwyPdJBnmc4wLW7oT2hexxXnXxs8bA7gfiqbnJsWJ16?filename=BGS32Setup20.exe" download "${ipfsGateway}/ipfs/QmVrwyPdJBnmc4wLW7oT2hexxXnXxs8bA7gfiqbnJsWJ16?filename=BGS32Setup20.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGS32Setup20.exe" /silent wine "${cache}/BGS32Setup20.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXtBCqB6VCFPaDYuLaFNP1BDtJSLCJdJZzgm61zMtrsQt?filename=BGS32Setup10.exe" download "${ipfsGateway}/ipfs/QmXtBCqB6VCFPaDYuLaFNP1BDtJSLCJdJZzgm61zMtrsQt?filename=BGS32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGS32Setup10.exe" /silent wine "${cache}/BGS32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmdWBaDnLVbKCJSpiqF675ew6nJ6KHUVXA5FEH3t3E7UAu?filename=SPB32Setup10b.exe" download "${ipfsGateway}/ipfs/QmdWBaDnLVbKCJSpiqF675ew6nJ6KHUVXA5FEH3t3E7UAu?filename=SPB32Setup10b.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/SPB32Setup10b.exe" /silent wine "${cache}/SPB32Setup10b.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXCAHEVRGZBc8t45Jgn2vkxicwF9Aox6yz9XrQBdkv7WY?filename=SDB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmXCAHEVRGZBc8t45Jgn2vkxicwF9Aox6yz9XrQBdkv7WY?filename=SDB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/SDB32Setup10a.exe" /silent wine "${cache}/SDB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmYoiFQ6JuSXfZfZXT3SQDsYzMWLBu9rW9yivi1xiPjqZx?filename=SDB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmYoiFQ6JuSXfZfZXT3SQDsYzMWLBu9rW9yivi1xiPjqZx?filename=SDB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/SDB32Setup10a.exe" /silent wine "${cache}/SDB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmWJGvSR6iaQfMHM3XuGCkWxx285jkzSDdNSvvk3bSCH8S?filename=TPB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmWJGvSR6iaQfMHM3XuGCkWxx285jkzSDdNSvvk3bSCH8S?filename=TPB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/TPB32Setup10a.exe" /silent wine "${cache}/TPB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmWAk2TMHMvW6Kjc1sZBEPsxmCNHfY3nF1K723PCqaTa57?filename=T20B32Setup10.exe" download "${ipfsGateway}/ipfs/QmWAk2TMHMvW6Kjc1sZBEPsxmCNHfY3nF1K723PCqaTa57?filename=T20B32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/T20B32Setup10.exe" /silent wine "${cache}/T20B32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmVsfPkebSoTDwYSXF1n7y4P9eGJTgTcGXdrEjpcV8A3Dv?filename=BGU32Setup11a.exe" download "${ipfsGateway}/ipfs/QmVsfPkebSoTDwYSXF1n7y4P9eGJTgTcGXdrEjpcV8A3Dv?filename=BGU32Setup11a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGU32Setup11a.exe" /silent wine "${cache}/BGU32Setup11a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXtR49EZShyj15Tc9CXQpBYVmKNfZpp4515Epm16bviuH?filename=BWB32Setup10.exe" download "${ipfsGateway}/ipfs/QmXtR49EZShyj15Tc9CXQpBYVmKNfZpp4515Epm16bviuH?filename=BWB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BWB32Setup10.exe" /silent wine "${cache}/BWB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmfTgfRzd4JMRqKSfDiz76iMorkaG19BqH1K7nRCCDwo4H?filename=WCB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmfTgfRzd4JMRqKSfDiz76iMorkaG19BqH1K7nRCCDwo4H?filename=WCB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/WCB32Setup10a.exe" /silent wine "${cache}/WCB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmYQWZZifzKJSuVRCC1SabwRmEDz95GdFvbzRvsBMmTt6e?filename=BWJ32Setup10.exe" download "${ipfsGateway}/ipfs/QmYQWZZifzKJSuVRCC1SabwRmEDz95GdFvbzRvsBMmTt6e?filename=BWJ32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BWJ32Setup10.exe" /silent wine "${cache}/BWJ32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmXPtj5PkVZjXpU3m6FAfm8MwVL6bQCvhEDoR385u6FGTL?filename=BWM32Setup10.exe" download "${ipfsGateway}/ipfs/QmXPtj5PkVZjXpU3m6FAfm8MwVL6bQCvhEDoR385u6FGTL?filename=BWM32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BWM32Setup10.exe" /silent wine "${cache}/BWM32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmZp73ARDPqgnCz7zxfKeBHjNoHrgZSgg2NdQZR2sMyZGD?filename=WSB32Setup10.exe" download "${ipfsGateway}/ipfs/QmZp73ARDPqgnCz7zxfKeBHjNoHrgZSgg2NdQZR2sMyZGD?filename=WSB32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/WSB32Setup10.exe" /silent wine "${cache}/WSB32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmWWZFXVHNtmNkH55oermWWtrMcQ8qVqL687B7kGFyeezq?filename=WTB32Setup10a.exe" download "${ipfsGateway}/ipfs/QmWWZFXVHNtmNkH55oermWWtrMcQ8qVqL687B7kGFyeezq?filename=WTB32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/WTB32Setup10a.exe" /silent wine "${cache}/WTB32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmdicAVDegDktY3euVAC2PPn4YBGz96KedxYXNe4WDQaoq?filename=BWY32Setup10.exe" download "${ipfsGateway}/ipfs/QmdicAVDegDktY3euVAC2PPn4YBGz96KedxYXNe4WDQaoq?filename=BWY32Setup10.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BWY32Setup10.exe" /silent wine "${cache}/BWY32Setup10.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
download "${ipfsGateway}/ipfs/QmZebvkKgFAADnb1cgW6Bz7wTYdUh82X61QdtW66KcvmpF?filename=BGY32Setup10a.exe" download "${ipfsGateway}/ipfs/QmZebvkKgFAADnb1cgW6Bz7wTYdUh82X61QdtW66KcvmpF?filename=BGY32Setup10a.exe"
install_wine_bottle install_wine_bottle
wine "${cache}/BGY32Setup10a.exe" /silent wine "${cache}/BGY32Setup10a.exe" /silent
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1 - tested 2025-12-06
download "${ipfsGateway}/ipfs/QmcTCTMep4zp5zTw8ZaXYpjtu9inNPn8bNzwhW6cX97egw?filename=bloodshed.exe" download "${ipfsGateway}/ipfs/QmcTCTMep4zp5zTw8ZaXYpjtu9inNPn8bNzwhW6cX97egw?filename=bloodshed.exe"
cp "${cache}/bloodshed.exe" "$WINEPREFIX/drive_c/Program Files/" cp "${cache}/bloodshed.exe" "$WINEPREFIX/drive_c/Program Files/"
add_launcher "c:\Program Files\bloodshed.exe" add_launcher "c:\Program Files\bloodshed.exe"
+1 -2
View File
@@ -1,6 +1,5 @@
export WINEARCH=win32 export WINEARCH="win64" # Migrated to wine64
download "https://www.nyanchangames.com/softs/nn2_setup.exe" download "https://www.nyanchangames.com/softs/nn2_setup.exe"
# Uses standard wine path based on architecture (win32/win64)
export winVer="win7" export winVer="win7"
install_wine_bottle install_wine_bottle
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk2" "${cache}/nn2_setup.exe" install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk2" "${cache}/nn2_setup.exe"
+1 -3
View File
@@ -1,8 +1,6 @@
export WINEARCH="win64" # Migrated to wine64
download "https://www.nyanchangames.com/softs/nn3_setup.exe" download "https://www.nyanchangames.com/softs/nn3_setup.exe"
# Uses standard wine path based on architecture (win32/win64)
export winVer="win7" export winVer="win7"
export WINEARCH=win32
install_wine_bottle install_wine_bottle
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk3" "${cache}/nn3_setup.exe" install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk3" "${cache}/nn3_setup.exe"
if [[ ! -r "${cache}/bk3-dict.dat" ]]; then if [[ ! -r "${cache}/bk3-dict.dat" ]]; then
+1 -2
View File
@@ -1,7 +1,6 @@
download "https://www.nyanchangames.com/softs/nn_setup.exe" download "https://www.nyanchangames.com/softs/nn_setup.exe"
# Uses standard wine path based on architecture (win32/win64) export WINEARCH="win64" # Migrated to wine64
export winVer="win7" export winVer="win7"
export WINEARCH="win32"
install_wine_bottle install_wine_bottle
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk" "${cache}/nn_setup.exe" install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/nyanchangame/bk" "${cache}/nn_setup.exe"
add_launcher "c:\nyanchangame\bk\play.exe" add_launcher "c:\nyanchangame\bk\play.exe"
+2 -2
View File
@@ -1,8 +1,8 @@
# Uses standard wine path based on architecture (win32/win64) export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7" export winVer="win7"
export winetricksSettings="vd=1024x768" export winetricksSettings="vd=1024x768"
download "https://www.kaldobsky.com/audiogames/dogwhohatestoast.zip" download "https://www.kaldobsky.com/audiogames/dogwhohatestoast.zip"
install_wine_bottle vb6run dx8vb quartz install_wine_bottle sapi vb6run dx8vb quartz
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/dogwhohatestoast" "${cache}/dogwhohatestoast.zip" 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 wine 'c:\Program Files\dogwhohatestoast\checkup.exe' /verysilent
add_launcher "c:\Program Files\dogwhohatestoast\DogwhoHatesToast.exe" add_launcher "c:\Program Files\dogwhohatestoast\DogwhoHatesToast.exe"
+2 -2
View File
@@ -1,6 +1,6 @@
export winVer="win10" export winVer="win10"
export WINEARCH=win32 export WINEARCH="win64" # Migrated to wine64
export WINEPREFIX="$HOME/.local/wine32" # 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 download https://scwl-1251129685.cos.ap-shanghai.myqcloud.com/dreamland/Win/DreamLandSetup.exe
+2 -2
View File
@@ -1,7 +1,7 @@
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" 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"
# Uses wine32 due to dependency
export winVer="win7" export winVer="win7"
install_wine_bottle msvcrt40 gdiplus ie7 wmp11 mf install_wine_bottle sapi msvcrt40 gdiplus ie7 wmp11 mf
# Ok, more dotnet. # Ok, more dotnet.
LC_ALL=C DISPLAY="" winetricks -q dotnet40 xna40 LC_ALL=C DISPLAY="" winetricks -q dotnet40 xna40
wineserver -k # Sigh. wineserver -k # Sigh.
+4 -1
View File
@@ -1,5 +1,8 @@
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7"
export winetricksSettings="vd=1024x768"
download "${ipfsGateway}/ipfs/QmdkLPig6Kp3AZTwKAhjrhhsEuvhFCFhm6SHLUQVeNNYCb?filename=kitchen.tar.xz" download "${ipfsGateway}/ipfs/QmdkLPig6Kp3AZTwKAhjrhhsEuvhFCFhm6SHLUQVeNNYCb?filename=kitchen.tar.xz"
install_wine_bottle vb6run dx8vb install_wine_bottle sapi vb6run dx8vb
echo "Extracting files..." echo "Extracting files..."
tar xf "${cache}/kitchen.tar.xz" -C "$WINEPREFIX/drive_c/Program Files/" tar xf "${cache}/kitchen.tar.xz" -C "$WINEPREFIX/drive_c/Program Files/"
add_launcher "c:\Program Files\Kitchen's Sink\gamemenu.exe" add_launcher "c:\Program Files\Kitchen's Sink\gamemenu.exe"
+2 -2
View File
@@ -1,8 +1,8 @@
# Uses standard wine path based on architecture (win32/win64) export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7" export winVer="win7"
export winetricksSettings="vd=1024x768" export winetricksSettings="vd=1024x768"
download "https://kaldobsky.com/audiogames/lunimals.zip" download "https://kaldobsky.com/audiogames/lunimals.zip"
install_wine_bottle vb6run dx8vb quartz install_wine_bottle sapi vb6run dx8vb quartz
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/lunimals" "${cache}/lunimals.zip" install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/lunimals" "${cache}/lunimals.zip"
wine 'c:\Program Files\lunimals\checkup.exe' /verysilent wine 'c:\Program Files\lunimals\checkup.exe' /verysilent
add_launcher "c:\Program Files\lunimals\Lunimals.exe" add_launcher "c:\Program Files\lunimals\Lunimals.exe"
+3 -2
View File
@@ -1,7 +1,8 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
export winVer="win7" export winVer="win7"
export WINEPREFIX="$HOME/.local/wine32"
get_installer "Mist World_Setup.exe" "https://drive.google.com/uc?export=download&id=12YeUqorkkMT46ZSR5pcfWxSY8DHOLxZ-" get_installer "Mist World_Setup.exe" "https://drive.google.com/uc?export=download&id=12YeUqorkkMT46ZSR5pcfWxSY8DHOLxZ-"
install_wine_bottle
install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/Program Files/Mist World" "$cache/Mist World_Setup.exe" install_with_progress 7z "Extracting game files..." x -o"$WINEPREFIX/drive_c/Program Files/Mist World" "$cache/Mist World_Setup.exe"
sed -i 's/1024m/768m/g' "$WINEPREFIX/drive_c/Program Files/Mist World/mw.exe.vmoptions" sed -i 's/1024m/768m/g' "$WINEPREFIX/drive_c/Program Files/Mist World/mw.exe.vmoptions"
cp "$WINEPREFIX/drive_c/Program Files/Mist World/"{mw.exe.vmoptions,update.exe.vmoptions} cp "$WINEPREFIX/drive_c/Program Files/Mist World/"{mw.exe.vmoptions,update.exe.vmoptions}
+2 -1
View File
@@ -1,6 +1,7 @@
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7" export winVer="win7"
export norh="true" # Requires sapi even though uses nvda export norh="true" # Requires sapi even though uses nvda
download "${ipfsGateway}/ipfs/QmQnAJJrt5uABFziQc7enXYrJ74J9GKQSMi8Ry8ebsxfPV?filename=OhShit.zip" download "${ipfsGateway}/ipfs/QmQnAJJrt5uABFziQc7enXYrJ74J9GKQSMi8Ry8ebsxfPV?filename=OhShit.zip"
install_wine_bottle install_wine_bottle sapi
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files" "${cache}/OhShit.zip" 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" add_launcher "c:\Program Files\oh_shit\OhShit.exe"
+19 -14
View File
@@ -1,19 +1,24 @@
#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" 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"
# Uses wine64 (no speech API dependency) export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win8" export winVer="win8"
install_wine_bottle install_wine_bottle fakejapanese
$wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- & # Add bcrypt DLL override required for Shadow Line to run
xdotool sleep 30 key --clearmodifiers --delay=500 Return cat > /tmp/bcrypt_override.reg << 'EOF'
xdotool key --clearmodifiers --delay=500 Return [HKEY_CURRENT_USER\Software\Wine\DllOverrides]
xdotool key --clearmodifiers --delay=500 Return "bcryptprimitives"="native,builtin"
xdotool key --clearmodifiers --delay=500 Return EOF
echo "Running installer, this will take approximately 3 minutes..." wine regedit /tmp/bcrypt_override.reg
xdotool sleep 180 key --clearmodifiers --delay=500 Down rm /tmp/bcrypt_override.reg
xdotool key --clearmodifiers --delay=500 space {
xdotool key --clearmodifiers --delay=500 alt+f echo "# Installing Shadow Line..."
wineserver -w timeout 300 wine "${cache}/shadowrine_fullvoice3.171.exe" /sp- /VERYSILENT /SUPPRESSMSGBOXES 2>&1 || true
mv -v "${cache}/language_en.dat" "${WINEPREFIX}/drive_c/Program Files/GalaxyLaboratory/ShadowRine_FullVoice/SystemData/language_en.dat" echo "# Installation complete"
add_launcher "c:\Program Files\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe" } | agm_progressbox "Installing Game" "Installing Shadow Line (this may take a few minutes)..."
# Kill any auto-launched game processes (installer lacks skipifsilent flag)
wineserver -k 2>/dev/null || true
mv -v "${cache}/language_en.dat" "${WINEPREFIX}/drive_c/Program Files (x86)/GalaxyLaboratory/ShadowRine_FullVoice/SystemData/language_en.dat"
add_launcher "c:\Program Files (x86)\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe"
echo "Please set the language to English when the game opens." echo "Please set the language to English when the game opens."
echo "Go to options and press enter." echo "Go to options and press enter."
echo "Press down arrow 5 times and press enter." echo "Press down arrow 5 times and press enter."
+1 -1
View File
@@ -1,4 +1,4 @@
export WINEARCH="win32" export WINEARCH="win64" # Migrated to wine64
export winetricksSettings="vd=1024x768" export winetricksSettings="vd=1024x768"
agm_yesno "Swamp Installation" "Swamp Installation" "If you do not have a full 32 bit gstreamer installation, the Swamp music can cause stuttering and crashes. Would you like to remove the music directory after installation?" agm_yesno "Swamp Installation" "Swamp Installation" "If you do not have a full 32 bit gstreamer installation, the Swamp music can cause stuttering and crashes. Would you like to remove the music directory after installation?"
deleteMusic=$? deleteMusic=$?
+2 -1
View File
@@ -1,5 +1,6 @@
export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7" export winVer="win7"
install_wine_bottle vb6run dx8vb install_wine_bottle sapi vb6run dx8vb
wine "${cache}/vipmud20016.exe" /silent wine "${cache}/vipmud20016.exe" /silent
mkdir -p "${HOME}/.local/wine/vip-mud/drive_c/users/${USER}/Documents/VIP Mud" mkdir -p "${HOME}/.local/wine/vip-mud/drive_c/users/${USER}/Documents/VIP Mud"
add_launcher "c:\Program Files\VIPMud 2.0\vipmud2.exe" add_launcher "c:\Program Files\VIPMud 2.0\vipmud2.exe"
+1 -1
View File
@@ -1,4 +1,4 @@
# Uses standard wine path based on architecture (win32/win64) export WINEARCH="win64" # Migrated to wine64 with WINETRICKS_FORCE=1
export winVer="win7" export winVer="win7"
download "${ipfsGateway}/ipfs/QmWx271xuk3Mv9XTBoVu5BDJvXFZdasawC2nhtV21WAaUU?filename=villains_en.zip" download "${ipfsGateway}/ipfs/QmWx271xuk3Mv9XTBoVu5BDJvXFZdasawC2nhtV21WAaUU?filename=villains_en.zip"
install_wine_bottle install_wine_bottle
+54 -6
View File
@@ -34,14 +34,62 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
### Wine Architecture ### Wine Architecture
The project uses Wine with specific architectural requirements: The project uses Wine with a unified architecture:
- **Modern approach**: Use WOW64 (wine64) for everything by default - it can run both 32-bit and 64-bit applications efficiently - **Wine64 Only**: All games use wine64+WOW64 exclusively - it runs both 32-bit and 64-bit applications efficiently
- **Wine32**: Legacy 32-bit prefix (stored in `~/.local/wine32`) - only for SAPI-dependent games with WOW64 issues - **Wine32 ELIMINATED**: As of 2025-12-06, wine32 bottle is no longer created or used
- **Wine64**: Modern prefix (stored in `~/.local/wine64`) - primary target for all games - **Unified bottle**: Single wine64 prefix (stored in `~/.local/wine64`) for ALL games, including SAPI games
- Wine32 version is controlled by `wineThirtyTwoVersion` variable in main script and auto-manages installation/updates - **Custom bottles**: Can be stored in `~/.local/share/audiogame-manager/wineBottles/` with per-bottle configurations in `~/.config/audiogame-manager/`
- **Custom bottles**: Stored in `~/.local/share/audiogame-manager/wineBottles/` with per-bottle configurations in `~/.config/audiogame-manager/`
- **IMPORTANT**: Never create game-specific wine directories like `~/.local/winegamename` - use the standard bottle system - **IMPORTANT**: Never create game-specific wine directories like `~/.local/winegamename` - use the standard bottle system
#### SAPI and Speech SDK Support (WINETRICKS_FORCE=1)
**Discovery (2025-12-06)**: Setting `WINETRICKS_FORCE=1` enables reliable speechsdk installation in wine64+WOW64 bottles, eliminating the need for wine32 for most SAPI-dependent games.
**Implementation:**
- `audiogame-manager.sh:96` - wine64 bottle creation includes speechsdk with `WINETRICKS_FORCE=1`
- `audiogame-manager.sh:99` - Restores win10 after speechsdk (see caveat below)
- `.includes/bottle.sh:176-181` - Only speechsdk installations use `WINETRICKS_FORCE=1` (other deps use regular winetricks)
- Both bottles install Microsoft Mike as the default SAPI voice automatically
**CAVEAT**: The `speechsdk` winetricks verb sets `w_set_winver winxp` at the end, trampling any previously set Windows version. Always call `winetricks win10` AFTER installing speechsdk.
**Migrated SAPI Games (wine64):**
- Bloodshed - Tested and confirmed working
- Kitchensinc Games - Tested and confirmed working (VB6)
- Oh Shit - Migrated, requires testing
- Dog Who Hates Toast - Migrated, requires testing (VB6)
- Lunimals - Migrated, requires testing (VB6)
- VIP Mud - Migrated, requires testing (VB6)
- Entombed - Migrated, requires testing (complex .NET dependencies)
- Skateboarder Pro - Already configured for wine64, now functional
- Three D velocity - Already configured for wine64, now functional
**Migrated Self-Voicing Games (wine64):**
- Shadow Line - Migrated, requires Windows 8 via per-app versioning
- Villains From Beyond - Tested and confirmed working
#### Per-Application Windows Version
**Problem (2025-12-08)**: Some games require specific Windows versions (e.g., Shadow Line needs win8) but with a unified bottle, `winetricks winXX` changes the version globally for ALL games.
**Solution**: Use Wine's per-application settings via registry keys:
```
[HKEY_CURRENT_USER\Software\Wine\AppDefaults\executable.exe]
"Version"="win8"
```
**Implementation:**
- Game installers set `export winVer="win8"` (or win7, win10)
- `install_wine_bottle()` stores this in `gameWinVer` (doesn't apply globally)
- `add_launcher()` calls `set_app_winver()` which writes the per-exe registry key
- Located in `.includes/bottle.sh:186-209` (`set_app_winver` function)
**Architecture Selection Logic:**
- Games explicitly setting `WINEARCH=win64` will use wine64 (new behavior)
- Games passing `sapi` dependency use wine64 with speechsdk pre-installed
- Legacy games passing `speechsdk` dependency still use wine32 for compatibility
- Default architecture is wine64 for all new games
### Interface System ### Interface System
Dialog interface automatically detects environment: Dialog interface automatically detects environment:
+31 -76
View File
@@ -51,72 +51,11 @@ check_wine32() {
fi fi
} }
# Ensure wine bottles exist with proper dependencies # Ensure wine64 bottle exists with all dependencies (wine32 no longer needed!)
ensure_wine_bottles() { ensure_wine_bottles() {
local wine32Bottle="$HOME/.local/wine32"
local wine64Bottle="$HOME/.local/wine64" local wine64Bottle="$HOME/.local/wine64"
# Create wine32 bottle for SAPI games if missing # Create wine64 bottle if missing - now includes SAPI support via WINETRICKS_FORCE=1
if [[ ! -d "$wine32Bottle" ]] || [[ ! -f "$wine32Bottle/system.reg" ]]; then
{
echo "# Creating wine32 bottle for SAPI compatibility..."
echo "# This may take several minutes on first run..."
# Set up environment for wine32
export WINEPREFIX="$wine32Bottle"
export WINE="$wine32"
export WINESERVER="$wine32server"
export PATH="${wine32%/*}:$PATH"
unset WINEARCH
# Initialize wine32 bottle
echo "# Initializing wine32 environment..."
DISPLAY="" "$WINE" wineboot -u
# Install mono and gecko
echo "# Installing .NET Framework..."
monoPath="$(find /usr/share/wine/ -maxdepth 1 -type d -name mono 2> /dev/null)"
if [[ -z "$monoPath" ]]; then
download 'http://dl.winehq.org/wine/wine-mono/6.0.0/wine-mono-6.0.0-x86.msi'
monoPath="${cache}/wine-mono-6.0.0-x86.msi"
fi
"$WINE" msiexec /i z:"$monoPath" /quiet
echo "# Installing web browser support..."
geckoPath="$(find /usr/share/wine/ -maxdepth 1 -type d -name "gecko" 2> /dev/null)"
if [[ -z "$geckoPath" ]]; then
download 'http://dl.winehq.org/wine/wine-gecko/2.40/wine_gecko-2.40-x86.msi'
geckoPath="${cache}/wine_gecko-2.40-x86.msi"
fi
"$WINE" msiexec /i z:"$geckoPath" /quiet
# Install SAPI dependencies
echo "# Installing Speech SDK and SAPI dependencies..."
env WINE="$WINE" WINESERVER="$WINESERVER" DISPLAY="${DISPLAY:-:0}" winetricks -q isolate_home speechsdk corefonts winxp
# Set Microsoft Mike as default voice (better than Mary/Sam)
echo "# Setting Microsoft Mike as default voice..."
# Initialize SAPI to create registry entries
mkdir -p "${WINEPREFIX}/drive_c/windows/temp"
cat << "EOF" > "${WINEPREFIX}/drive_c/windows/temp/init_sapi.vbs"
dim speechobject
set speechobject=createobject("sapi.spvoice")
speechobject.speak ""
EOF
"$WINE" cscript "c:\\windows\\temp\\init_sapi.vbs"
# Set Microsoft Mike as default voice
"$WINE" reg add "HKCU\\SOFTWARE\\Microsoft\\Speech\\Voices" /v "DefaultTokenId" /t REG_SZ /d "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MSMike" /f
# Set speech rate to 7 (normal speed)
"$WINE" reg add "HKCU\\SOFTWARE\\Microsoft\\Speech\\Voices" /v "DefaultTTSRate" /t REG_DWORD /d "7" /f
echo "Set Microsoft Mike as default voice"
echo "# Wine32 bottle creation complete."
} | agm_progressbox "Wine Bottle Setup" "Creating wine32 bottle for SAPI games (this may take several minutes)..."
fi
# Create wine64 bottle for modern games if missing
if [[ ! -d "$wine64Bottle" ]] || [[ ! -f "$wine64Bottle/system.reg" ]]; then if [[ ! -d "$wine64Bottle" ]] || [[ ! -f "$wine64Bottle/system.reg" ]]; then
{ {
echo "# Creating wine64 bottle for modern games..." echo "# Creating wine64 bottle for modern games..."
@@ -151,7 +90,28 @@ EOF
# Install common dependencies for modern games # Install common dependencies for modern games
echo "# Installing common dependencies..." echo "# Installing common dependencies..."
winetricks -q isolate_home corefonts vcrun2019 win10 winetricks -q isolate_home corefonts vcrun2019 win10
# Install Speech SDK for SAPI compatibility (experimental - requires WINETRICKS_FORCE=1)
echo "# Installing Speech SDK for wine64 SAPI support..."
env WINE="$WINE" WINESERVER="$WINESERVER" DISPLAY="${DISPLAY:-:0}" WINETRICKS_FORCE=1 winetricks -q speechsdk
# Restore win10 after speechsdk (speechsdk sets winxp)
winetricks -q win10
# Initialize SAPI and set Microsoft Mike as default voice
echo "# Setting Microsoft Mike as default voice..."
mkdir -p "${WINEPREFIX}/drive_c/windows/temp"
cat << "EOF" > "${WINEPREFIX}/drive_c/windows/temp/init_sapi.vbs"
dim speechobject
set speechobject=createobject("sapi.spvoice")
speechobject.speak ""
EOF
wine cscript "c:\\windows\\temp\\init_sapi.vbs"
wine reg add "HKCU\\SOFTWARE\\Microsoft\\Speech\\Voices" /v "DefaultTokenId" /t REG_SZ /d "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MSMike" /f
wine reg add "HKCU\\SOFTWARE\\Microsoft\\Speech\\Voices" /v "DefaultTTSRate" /t REG_DWORD /d "7" /f
echo "Set Microsoft Mike as default voice for wine64"
# Setup nvda2speechd for accessibility # Setup nvda2speechd for accessibility
echo "# Setting up accessibility support..." echo "# Setting up accessibility support..."
download "${nvda2speechdBinary}" download "${nvda2speechdBinary}"
@@ -161,7 +121,7 @@ EOF
fi fi
echo "# Wine64 bottle creation complete." echo "# Wine64 bottle creation complete."
} | agm_progressbox "Wine Bottle Setup" "Creating wine64 bottle for modern games..." } | agm_progressbox "Wine Bottle Setup" "Creating unified wine64 bottle with SAPI support (this may take several minutes)..."
fi fi
} }
@@ -479,14 +439,9 @@ update_nvda_dlls() {
fi fi
done done
fi fi
# Also update wine32 bottle if it exists # Note: 32-bit games running via WOW64 in wine64 bottle are handled above
if [[ -d "$HOME/.local/wine32" ]]; then # The 'file' command detects PE32 vs PE32+ and applies the correct DLL version
find "$HOME/.local/wine32" -type f \( -iname "nvdaControllerClient*.dll" \) -print0 | while IFS= read -r -d '' dllFile; do
echo "Updating $dllFile with nvdaControllerClient32"
cp "${cache}/nvdaControllerClient32.dll" "$dllFile"
done
fi
} }
# launch games that are installed # launch games that are installed
@@ -651,8 +606,8 @@ source "${scriptDir}/.includes/update.sh"
# Check minimum requirements # Check minimum requirements
check_requirements || exit 1 check_requirements || exit 1
# Set up wine32 for SAPI games # Wine32 no longer needed - all games use wine64 with SAPI support via WINETRICKS_FORCE=1
check_wine32 # check_wine32 # Disabled - wine32 eliminated 2025-12-06
# Ensure wine bottles exist with dependencies # Ensure wine bottles exist with dependencies
ensure_wine_bottles ensure_wine_bottles
# Check for updates # Check for updates
+21 -67
View File
@@ -1,15 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Set Voice - Fixed version for audiogame-manager # Set Voice - Fixed version for audiogame-manager
# Set a variable to make mac compatibility easier...
sed="sed"
grep="grep"
if [[ "$(uname)" == "Darwin" ]]; then
sed="gsed"
grep="ggrep"
fi
export grep
export sed
# Settings to improve accessibility of dialog. # Settings to improve accessibility of dialog.
export DIALOGOPTS='--insecure --no-lines --visit-items' export DIALOGOPTS='--insecure --no-lines --visit-items'
@@ -22,7 +13,6 @@ fi
# Handle arguments # Handle arguments
declare -A command=( declare -A command=(
[b:]="the wine bottle to use."
[h]="This help screen." [h]="This help screen."
[r:]="Specify voice rate, default is 7, options are 0-9 or A for fastest." [r:]="Specify voice rate, default is 7, options are 0-9 or A for fastest."
[v:]="Voice name, the voice to use, same as in the menu." [v:]="Voice name, the voice to use, same as in the menu."
@@ -40,9 +30,6 @@ help() {
exit 0 exit 0
} }
msgbox() {
dialog --clear --msgbox "$*" 0 0
}
menulist() { menulist() {
declare -a menuList declare -a menuList
@@ -60,8 +47,8 @@ menulist() {
restore_voice() { restore_voice() {
if [[ $doRestore -eq 0 ]]; then if [[ $doRestore -eq 0 ]]; then
${wine}server -k wineserver -k
$sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="'"${oldVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg"
fi fi
} }
@@ -72,16 +59,17 @@ set_voice() {
local counter=0 local counter=0
for x in "${voiceList[@]}" ; do for x in "${voiceList[@]}" ; do
[[ "$x" = "$tmp" ]] && break [[ "$x" = "$tmp" ]] && break
counter=$(( $counter + 1 )) counter=$((counter + 1))
done done
local RHVoiceName="$(find "${WINEPREFIX}/drive_c/ProgramData/Olga Yakovleva/RHVoice/data/voices/" -maxdepth 1 -type d 2>/dev/null | head -1)" local RHVoiceName
RHVoiceName="$(find "${WINEPREFIX}/drive_c/ProgramData/Olga Yakovleva/RHVoice/data/voices/" -maxdepth 1 -type d 2>/dev/null | head -1)"
RHVoiceName="${RHVoiceName##*/}" RHVoiceName="${RHVoiceName##*/}"
fullVoice="${voiceListFullName[$counter]}" fullVoice="${voiceListFullName[$counter]}"
fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}"
${wine}server -k wineserver -k
# Remove any existing rate change for voices # Remove any existing rate change for voices
$sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg" sed -i '/"DefaultTTSRate"=dword:/d' "${WINEPREFIX}/user.reg"
$sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'${rate:-7}'/g' "${WINEPREFIX}/user.reg" sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"\n"DefaultTTSRate"=dword:0000000'"${rate:-7}"'/g' "${WINEPREFIX}/user.reg"
} }
test_voice() { test_voice() {
@@ -90,21 +78,22 @@ test_voice() {
local fullVoice local fullVoice
local counter=0 local counter=0
for x in "${voiceList[@]}" ; do for x in "${voiceList[@]}" ; do
[ "$x" = "$tmp" ] && break [[ "$x" = "$tmp" ]] && break
counter=$(( $counter + 1 )) counter=$((counter + 1))
done done
local RHVoiceName="$(find "${WINEPREFIX}/drive_c/ProgramData/Olga Yakovleva/RHVoice/data/voices/" -maxdepth 1 -type d 2>/dev/null | head -1)" local RHVoiceName
RHVoiceName="$(find "${WINEPREFIX}/drive_c/ProgramData/Olga Yakovleva/RHVoice/data/voices/" -maxdepth 1 -type d 2>/dev/null | head -1)"
RHVoiceName="${RHVoiceName##*/}" RHVoiceName="${RHVoiceName##*/}"
fullVoice="${voiceListFullName[$counter]}" fullVoice="${voiceListFullName[$counter]}"
fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}" fullVoice="${fullVoice/RHVoice/RHVoice\\\\${RHVoiceName}}"
${wine}server -k wineserver -k
$sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg" sed -i -E -e 's/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"/"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\'"${fullVoice//\\/\\\\}"'"/g' "${WINEPREFIX}/user.reg"
cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs" cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs"
dim speechobject dim speechobject
set speechobject=createobject("sapi.spvoice") set speechobject=createobject("sapi.spvoice")
speechobject.speak "This is a test of your chosen voice. It contains multiple sentences and punctuation, and is designed to give a full representation of this voices qualities." speechobject.speak "This is a test of your chosen voice. It contains multiple sentences and punctuation, and is designed to give a full representation of this voices qualities."
EOF EOF
${wine} cscript "c:\windows\temp\speak.vbs" wine cscript "c:\windows\temp\speak.vbs"
} }
# Handle voice restore, but only if voice changed # Handle voice restore, but only if voice changed
@@ -116,14 +105,6 @@ args="${!command[*]}"
args="${args//[[:space:]]/}" args="${args//[[:space:]]/}"
while getopts "${args}" i ; do while getopts "${args}" i ; do
case "$i" in case "$i" in
b)
if ! [[ -d ~/".local/wine/${OPTARG}" ]]; then
echo "Invalid wine bottle specified."
exit 1
fi
export bottle=~/".local/wine/${OPTARG}"
export WINEPREFIX=~/".local/wine/${OPTARG}"
;;
h) help;; h) help;;
r) r)
if ! [[ "${OPTARG}" =~ ^[0-9A]$ ]]; then if ! [[ "${OPTARG}" =~ ^[0-9A]$ ]]; then
@@ -136,39 +117,12 @@ while getopts "${args}" i ; do
esac esac
done done
# Get the desired wine bottle # Set wine bottle path to fixed location
# Offer a list of wine bottles if one isn't specified on the command line.
if [[ -z "${bottle}" ]]; then
declare -a bottle
for i in $(find ~/.local/wine/ -maxdepth 1 -type d -not -name 'wine' | sort) ; do
bottle+=("$i" "${i##*/}")
done
export WINEPREFIX="$(dialog --backtitle "Use the up and down arrow keys to find the option you want, then press enter to select it." \
--clear \
--no-tags \
--menu "Select A Wine Bottle" 0 0 0 "${bottle[@]}" --stdout)"
fi
if [[ -z "${WINEPREFIX}" ]]; then export WINEPREFIX="$HOME/.local/wine64"
exit 0
fi
export bottle="$WINEPREFIX" export bottle="$WINEPREFIX"
# Get wine version if available - Use wine32 for SAPI games
if [[ -r "${WINEPREFIX}/agm.conf" ]]; then
source "${WINEPREFIX}/agm.conf"
export WINE
export WINESERVER
fi
# Use wine32 installation from audiogame-manager
wine32Dir="${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/wine32"
if [[ -f "$wine32Dir/bin/wine" ]]; then
wine="$wine32Dir/bin/wine"
else
wine="${WINE:-$(command -v wine)}"
fi
# In case the user hasn't run a game using sapi in this prefix yet, let's try to initialize all the registry keys properly. # In case the user hasn't run a game using sapi in this prefix yet, let's try to initialize all the registry keys properly.
cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs" cat << "EOF" > "${bottle}/drive_c/windows/temp/speak.vbs"
@@ -176,18 +130,18 @@ dim speechobject
set speechobject=createobject("sapi.spvoice") set speechobject=createobject("sapi.spvoice")
speechobject.speak "" speechobject.speak ""
EOF EOF
${wine} cscript "c:\windows\temp\speak.vbs" wine cscript "c:\windows\temp\speak.vbs"
# Create an array of available voices. # Create an array of available voices.
ifs="$IFS" ifs="$IFS"
IFS=$'\n' IFS=$'\n'
voiceListFullName=($($grep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | $sed -E -e 's/\[([^]]+)\].*/\1/g')) mapfile -t voiceListFullName < <(grep -P '\[Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^\\]+\].*' "${WINEPREFIX}/system.reg" | sed -E -e 's/\[([^]]+)\].*/\1/g')
IFS="$ifs" IFS="$ifs"
voiceList=() voiceList=()
for x in "${voiceListFullName[@]}" ; do for x in "${voiceListFullName[@]}" ; do
voiceList+=("$(echo "$x" | $sed -E -e 's/Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\(.+)/\3/g')") voiceList+=("$(echo "$x" | sed -E -e 's/Software\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\(.+)/\3/g')")
done done
oldVoice="$($grep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"' "${WINEPREFIX}/user.reg" | $sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')" oldVoice="$(grep -P '"DefaultTokenId"="HKEY_LOCAL_MACHINE\\\\(SOFTWARE|Software)\\\\(Wow6432Node\\\\|)Microsoft\\\\Speech\\\\Voices\\\\Token(Enum|)s\\\\[^"]+"' "${WINEPREFIX}/user.reg" | sed -E -e 's/"DefaultTokenId"="([^"]+)"/\1/g')"
exit=1 exit=1
if [[ "${#voiceList[@]}" -eq 0 ]]; then if [[ "${#voiceList[@]}" -eq 0 ]]; then
dialog --msgbox "No voices found." -1 -1 dialog --msgbox "No voices found." -1 -1