Oops forgot to include a file for Tekken installations.

This commit is contained in:
Storm Dragon committed 2026-10-15 22:12:46 -04:00
1 parent 105672be13
commit 4886578fc5
1 file changed
+96
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env bash
# Build the host bridge from the same release as the application's Prism DLL.
# Wine does not implement RpcMgmtInqIfIds, which Prism uses to detect NVDA.
build_prism_speech_bridge() (
local prismVersion="$1"
local bridgeDir="$2"
local buildRoot sourceRoot tool
local -a missingTools=()
for tool in curl tar cmake make winegcc wineg++ winebuild pkg-config; do
command -v "$tool" >/dev/null || missingTools+=("$tool")
done
if [[ ${#missingTools[@]} -gt 0 ]]; then
echo "Prism Wine speech requires: ${missingTools[*]}" >&2
return 1
fi
if ! pkg-config --exists speech-dispatcher; then
echo "Prism Wine speech requires the Speech Dispatcher development files (libspeechd)." >&2
return 1
fi
mkdir -p "${bridgeDir%/*}" || return 1
buildRoot="$(mktemp -d "${bridgeDir%/*}/.build.XXXXXX")" || return 1
trap 'rm -rf "$buildRoot"' EXIT
echo "Preparing Prism ${prismVersion} Wine speech support..."
if ! curl -fsSL --retry 3 "https://codeload.github.com/ethindp/prism/tar.gz/refs/tags/v${prismVersion}" -o "${buildRoot}/source.tar.gz" ||
! tar -xzf "${buildRoot}/source.tar.gz" -C "$buildRoot"; then
echo "Could not download or extract Prism ${prismVersion}." >&2
return 1
fi
sourceRoot="${buildRoot}/prism-${prismVersion}"
if ! cmake -S "${sourceRoot}/winelibs" -B "${buildRoot}/build" \
-DCMAKE_TOOLCHAIN_FILE="${sourceRoot}/cmake/winelib-toolchain.cmake" \
-DCMAKE_BUILD_TYPE=Release ||
! cmake --build "${buildRoot}/build" --target \
prism_speech_dispatcher_bridge prism_speech_dispatcher_bridge_placeholder -j2; then
echo "Could not build Prism ${prismVersion} Wine speech support." >&2
return 1
fi
mkdir -p "$bridgeDir" || return 1
cp "${buildRoot}/build/speechd/prism_speech_dispatcher_bridge.dll.so" \
"${buildRoot}/build/speechd/placeholder/prism_speech_dispatcher_bridge.dll" \
"$bridgeDir/" || return 1
)
prepare_arcadelux_prism_bridge() {
local gameDir="$1"
local prismVersion
local -a metadataFiles=("${gameDir}"/_internal/prismatoid-*.dist-info/METADATA)
if [[ ${#metadataFiles[@]} -ne 1 || ! -f "${metadataFiles[0]}" ]]; then
echo "Could not identify Arcadelux's bundled Prism version." >&2
return 1
fi
prismVersion="$(sed -n 's/^Version: //p' "${metadataFiles[0]}" | tr -d '\r')"
if [[ ! "$prismVersion" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Unsupported Prism version: ${prismVersion}" >&2
return 1
fi
prepare_prism_bridge "$gameDir" "$prismVersion" "Arcadelux.exe"
}
# App wrappers identify their bundled Prism release before sharing bridge setup.
prepare_prism_bridge() {
local gameDir="$1"
local prismVersion="$2"
local gameExecutable="$3"
local bridgeDir
if [[ ! "$prismVersion" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Unsupported Prism version: ${prismVersion}" >&2
return 1
fi
if [[ "$(uname -m)" != "x86_64" ]] || ! file -b "${gameDir}/${gameExecutable}" | grep -q 'PE32+'; then
echo "Prism Wine speech requires an x86_64 host and 64-bit game." >&2
return 1
fi
bridgeDir="${XDG_CACHE_HOME:-$HOME/.cache}/audiogame-manager/prism-wine/${prismVersion}-x86_64"
if [[ ! -f "${bridgeDir}/prism_speech_dispatcher_bridge.dll" ||
! -f "${bridgeDir}/prism_speech_dispatcher_bridge.dll.so" ]]; then
build_prism_speech_bridge "$prismVersion" "$bridgeDir" || return 1
fi
# Updates replace the game directory, so restore the placeholder each launch.
cp "${bridgeDir}/prism_speech_dispatcher_bridge.dll" "$gameDir/" || return 1
export WINEDLLPATH="${bridgeDir}${WINEDLLPATH:+:$WINEDLLPATH}"
}
prepare_tekken3_prism_bridge() {
local gameDir="$1"
local prismHash
# Access 1.0 ships this exact Prism 0.18.3 DLL. Refuse an unverified update.
prismHash="$(sha256sum "${gameDir}/T3Access/prism.dll")" || return 1
if [[ "${prismHash%% *}" != "7c7d09c8c7306e8e1a0c46d603ccb2a391c194c77843400c11b746e7dd56a467" ]]; then
echo "Tekken 3 Access has an unrecognized Prism DLL; update its AGM integration before launching." >&2
return 1
fi
prepare_prism_bridge "$gameDir" "0.18.3" "Tekken3.exe"
}