diff --git a/README.md b/README.md index 12ffe48..d93eb8d 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,21 @@ Voice names used must exactly match the way they appear in the set-voice.sh menu - MSSam - RHVoice +## Arcadelux speech under Wine + +Arcadelux's Prism NVDA backend uses an RPC discovery function that Wine does +not implement. Audio Game Manager prepares Prism's native Speech Dispatcher +Wine bridge on the first launch, using the same Prism release bundled with the +game. This requires an x86_64 host, CMake, Make, a C/C++ compiler, Wine development +tools (`winegcc`, `wineg++`, and `winebuild`), `pkg-config`, and Speech Dispatcher +development files. No administrator privileges are used by the launcher. + +The bridge is cached under `${XDG_CACHE_HOME:-$HOME/.cache}/audiogame-manager/prism-wine/`. +A game update that changes Prism's version triggers a matching bridge build at +next launch. The launcher restores the Windows placeholder beside Arcadelux.exe +and adds the matching host module directory to `WINEDLLPATH`, preserving any +existing entries. Other games keep their usual launch behavior. + ## AI-assisted contributions AI-assisted contributions are welcome. The person submitting the contribution remains responsible for reviewing and testing the changes before submission. Please review the generated diff, run the relevant tests, and describe what changed and how it was tested. diff --git a/audiogame-manager.sh b/audiogame-manager.sh index c05ae51..324e003 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -850,6 +850,14 @@ game_launcher() { start_nvda2speechd # Change to game directory before launching (required for proper game operation) pushd "$(winepath "${game[1]%\\*}")" > /dev/null || exit 1 + if [[ "${wineExec,,}" == "arcadelux.exe" ]]; then + # shellcheck source=.includes/prism-wine.sh + source "${scriptDir}/.includes/prism-wine.sh" + if ! prepare_arcadelux_prism_bridge "$PWD"; then + agm_msgbox "Arcadelux Speech" "Arcadelux Speech" "Could not prepare Prism Wine speech support. Check the terminal output for missing build tools or Speech Dispatcher development files." + exit 1 + fi + fi if [[ "$debugGdb" == "1" ]]; then run_with_optional_gamemode winedbg --gdb "${game[1]##*\\}" else