diff --git a/.includes/bottle.sh b/.includes/bottle.sh index 20293a0..1b1a8ba 100644 --- a/.includes/bottle.sh +++ b/.includes/bottle.sh @@ -67,9 +67,9 @@ install_rhvoice() { download "${RHVoice[${voiceName}]}" winetricks -q win8 | agm_progressbox "RHVoice Setup" "Preparing Windows environment for RHVoice..." echo "Installing RHVoice ${voiceName^}..." - wine "${cache}/${voiceFile}" & + "${WINE:-wine}" "${cache}/${voiceFile}" & sleep 20 | agm_progressbox "RHVoice Setup" "Installing RHVoice ${voiceName^} voice..." - wineserver -k + "${WINESERVER:-wineserver}" -k } install_wine_bottle() { @@ -92,9 +92,16 @@ install_wine_bottle() { fi export WINEPREFIX="$HOME/.local/wine${architecture}" - # Modern wine is unified - no separate wine32/wine64 executables - export WINE="wine" - export WINESERVER="wineserver" + + # Use managed wine32 for SAPI compatibility, system wine for everything else + if [[ "$WINEARCH" == "win32" ]] && [[ -n "$wine32" ]]; then + export WINE="$wine32" + export WINESERVER="$wine32server" + echo "Using managed Wine32 for SAPI compatibility" + else + export WINE="wine" + export WINESERVER="wineserver" + fi # Check if bottle already exists and is properly initialized local bottleExists=false @@ -106,8 +113,8 @@ install_wine_bottle() { # Only do basic setup if bottle doesn't exist if [[ "$bottleExists" == false ]]; then echo -n "Creating new wine${architecture} bottle - Using " - wine --version - DISPLAY="" wineboot -u | agm_progressbox "Wine Setup" "Initializing wine bottle..." + "$WINE" --version + DISPLAY="" "$WINE" wineboot -u | agm_progressbox "Wine Setup" "Initializing wine bottle..." # Install mono and gecko only for new bottles monoPath="$(find /usr/share/wine/ -maxdepth 1 -type d -name mono 2> /dev/null)" @@ -120,8 +127,8 @@ install_wine_bottle() { 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:"$monoPath" /quiet | agm_progressbox "Wine Setup" "Installing .NET Framework..." - wine msiexec /i z:"$geckoPath" /quiet | agm_progressbox "Wine Setup" "Installing Web Browser support..." + "$WINE" msiexec /i z:"$monoPath" /quiet | agm_progressbox "Wine Setup" "Installing .NET Framework..." + "$WINE" msiexec /i z:"$geckoPath" /quiet | agm_progressbox "Wine Setup" "Installing Web Browser support..." fi # Install RHVoice only if needed and not already installed diff --git a/.install/Swamp.sh b/.install/Swamp.sh index cbab125..ca01f80 100644 --- a/.install/Swamp.sh +++ b/.install/Swamp.sh @@ -1,20 +1,16 @@ -# Source dialog interface wrapper -source "${0%/*}/../.includes/dialog-interface.sh" - -# Uses standard wine path based on architecture (win32/win64) -export winVer="win7" +export WINEARCH="win32" 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?" deleteMusic=$? download "https://www.kaldobsky.com/audiogames/Swamp.zip" -install_wine_bottle dx8vb quartz corefonts vb6run sapi +install_wine_bottle dx8vb speechsdk quartz corefonts vb6run install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/Swamp.zip" # make sure the latest version is installed. if curl -L --output "${cache}/SwampPatch.zip" "https://www.kaldobsky.com/audiogames/SwampPatch.zip" ; then install_with_progress unzip "Installing Swamp patch..." -d "$WINEPREFIX/drive_c/Program Files/swamp" "${cache}/SwampPatch.zip" fi -$wine 'c:\Program Files\swamp\checkup.exe' /verysilent -#$wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows32bit.bat' +"$WINE" 'c:\Program Files\swamp\checkup.exe' /verysilent +#wine cmd.exe /c 'cd /d c:\Program Files\swamp && Windows64bit.bat' # Delete music if requested. if [[ $deleteMusic -eq 0 ]]; then rm -frv "$WINEPREFIX/drive_c/Program Files/swamp/sounds/Music/" diff --git a/audiogame-manager.sh b/audiogame-manager.sh index 56629ca..03744b3 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -3,6 +3,49 @@ # Dialog accessibility export DIALOGOPTS='--no-lines --visit-items' +# Wine32 version for SAPI compatibility +wineThirtyTwoVersion="9.0" + +# Check and manage wine32 installation +check_wine32() { + local wine32Dir="${XDG_DATA_HOME:-$HOME/.local/share}/audiogame-manager/wine32" + local versionFile="$wine32Dir/VERSION" + local currentVersion="" + + # Check current installed version + [[ -f "$versionFile" ]] && currentVersion=$(cat "$versionFile") + + # If version mismatch or missing, install/update + if [[ "$currentVersion" != "$wineThirtyTwoVersion" ]]; then + echo "Setting up Wine32 version $wineThirtyTwoVersion for SAPI compatibility..." + + # Remove old installation + rm -rf "$wine32Dir" 2>/dev/null + mkdir -p "$wine32Dir" + + # Download and install wine32 + local installFile="$(mktemp)" + if curl -L --output "$installFile" "https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-x86/PlayOnLinux-wine-${wineThirtyTwoVersion}-upstream-linux-x86.tar.gz"; then + if tar xf "$installFile" -C "$wine32Dir" --strip-components=1; then + echo "$wineThirtyTwoVersion" > "$versionFile" + echo "Wine32 version $wineThirtyTwoVersion installed successfully." + else + echo "Failed to extract wine32. SAPI games may not work properly." + rm -rf "$wine32Dir" + fi + else + echo "Failed to download wine32. SAPI games may not work properly." + fi + rm -f "$installFile" + fi + + # Export wine32 path for bottle.sh + if [[ -f "$wine32Dir/bin/wine" ]]; then + export wine32="$wine32Dir/bin/wine" + export wine32server="$wine32Dir/bin/wineserver" + fi +} + # Install games game_installer() { export LANG="en_US.UTF-8" @@ -476,6 +519,8 @@ source .includes/update.sh # Check minimum requirements check_requirements || exit 1 +# Set up wine32 for SAPI games +check_wine32 # Check for updates update # Get latest news if available