openvibers/source.openvibe.games Commits
Add Proton DLL validation and artifact install helpers
Changes
nnew file mode 100644@@@ -0,0 +1,41 @@++# Proton client DLL debug path++++Proton runs the Windows `hl2.exe`, so it loads:++++```text++game/openvibe.games/bin/client.dll++game/openvibe.games/bin/server.dll++```++++It cannot load the Linux modules:++++```text++game/openvibe.games/bin/linux64/client.so++game/openvibe.games/bin/linux64/server.so++```++++If the in-game console says `Unknown command "ov_join"` or `Unknown command "ov_menu"`, then one of these is true:++++1. `client.dll` is missing.++2. `client.dll` is stock/old and does not contain the OpenVibe commands.++3. The mod path is wrong and `hl2.exe` is not loading `game/openvibe.games`.++4. The DLL failed during load.++++Useful commands:++++```bash++tools/verify-openvibe-dll-content.sh++OPENVIBE_PROTON_LOG=1 OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015++tools/collect-proton-openvibe-debug.sh++```++++Safe fallback aliases are prefixed with `ovp_` so they do not mask real client DLL commands:++++```text++ovp_help++ovp_join_hub++ovp_join_prophunt++ovp_join_deathrun++ovp_join_fortwars++ovp_join_traitortown++```@@@ -1,35 +1,9 @@--// OpenVibe Proton client fallback aliases.--// This file is executed by tools/run-client-proton.sh.--// Proton Windows hl2.exe does not load Linux bin/linux64/client.so, so the--// native OpenVibe client DLL commands are not available in this mode.----echo "[OpenVibe] Proton fallback cfg loaded. Electron is the custom menu in Proton mode."----alias ov_help "echo OpenVibe Proton fallback: use ov_join_hub / ov_join_prophunt / ov_join_deathrun / ov_join_fortwars / ov_join_traitortown. Electron remains the full HTML/CSS/JS menu."--alias ov_menu "echo OpenVibe HTML menu is hosted by Electron in Proton mode. Alt-tab to the launcher or run npm run dev."--alias ov_ui "ov_menu"--alias ov_main_menu "ov_menu"--alias ov_menu_main "ov_menu"--alias ov_menu_servers "echo Server browser is in Electron. Quick connects: ov_join_hub, ov_join_prophunt, ov_join_deathrun, ov_join_fortwars, ov_join_traitortown."--alias ov_menu_leaderboard "echo Leaderboard UI is in Electron in Proton mode."--alias ov_menu_inventory "echo Inventory UI is in Electron in Proton mode."--alias ov_menu_shop "echo Shop UI is in Electron in Proton mode."--alias ov_menu_settings "echo Settings UI is in Electron in Proton mode."--alias ov_menu_reload "echo Reload the Electron window with Ctrl+R or restart npm run dev."--alias ov_menu_close "echo Close/minimize the Electron launcher window."----alias ov_join "echo Usage in Proton fallback: ov_join_hub / ov_join_prophunt / ov_join_deathrun / ov_join_fortwars / ov_join_traitortown. The argument-taking ov_join command needs OpenVibe client.dll/client.so."--alias ov_join_hub "connect 127.0.0.1:27015"--alias ov_join_prophunt "connect 127.0.0.1:27016"--alias ov_join_deathrun "connect 127.0.0.1:27017"--alias ov_join_fortwars "connect 127.0.0.1:27018"--alias ov_join_traitortown "connect 127.0.0.1:27019"----alias ov_js_status "cmd ov_js_status"--alias ov_js_reload "cmd ov_js_reload"--alias ov_js_cmd "cmd ov_js_cmd"--alias ov_js_fire "cmd ov_js_fire"----alias ov_prophunt_disguise "cmd ov_prophunt_disguise"--alias ov_prophunt_reset_disguise "cmd ov_prophunt_reset_disguise"--alias ov_fortwars_spawn "cmd ov_fortwars_spawn"++echo "==== OpenVibe Proton fallback cfg loaded ===="++echo "This cfg only adds ovp_* fallback aliases. Real ov_join/ov_menu must come from client.dll."++echo "Try real commands first: ov_join hub ; ov_menu ; ov_menu_servers"++alias ovp_help "echo OpenVibe Proton fallback commands: ovp_join_hub ovp_join_prophunt ovp_join_deathrun ovp_join_fortwars ovp_join_traitortown"++alias ovp_join_hub "connect 127.0.0.1:27015"++alias ovp_join_prophunt "connect 127.0.0.1:27016"++alias ovp_join_deathrun "connect 127.0.0.1:27017"++alias ovp_join_fortwars "connect 127.0.0.1:27018"++alias ovp_join_traitortown "connect 127.0.0.1:27019"@@@ -32,3 +32,11 @@ if [[ -f "$win_bin/client.dll" ]]; thenelseecho "[openvibe] Proton Windows hl2.exe will NOT have in-game ov_* client commands until client.dll exists."fi++++echo++echo "[openvibe] Deep DLL content check:"++if [[ -x "${OPENVIBE_ROOT:-$HOME/src/openvibe-source}/tools/verify-openvibe-dll-content.sh" ]]; then++ "${OPENVIBE_ROOT:-$HOME/src/openvibe-source}/tools/verify-openvibe-dll-content.sh" || true++else++ echo "tools/verify-openvibe-dll-content.sh missing"++finnew file mode 100755@@@ -0,0 +1,42 @@++#!/usr/bin/env bash++set -euo pipefail++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"++MOD="$ROOT/game/openvibe.games"++STEAM_APP_ID="${SteamAppId:-243750}"++PATTERN='OpenVibe|ov_|client\.dll|server\.dll|GameDLL|ClientDLL|Unknown command|failed|Failed|unable|Unable|error|Error'++++printf '[openvibe] collecting Proton/Source debug hints\n'++printf 'root=%s\n' "$ROOT"++printf 'mod=%s\n\n' "$MOD"++++candidates=(++ "$MOD/console.log"++ "$MOD/openvibe_proton_console.log"++ "$ROOT/console.log"++ "$ROOT/openvibe_proton_console.log"++ "$HOME/steam-${STEAM_APP_ID}.log"++ "$HOME/steam-${STEAM_APP_ID}.log.last"++)++++found=0++for file in "${candidates[@]}"; do++ if [[ -f "$file" ]]; then++ found=1++ echo "--------------------------------------------------------------------------------"++ echo "[log] $file"++ echo "[tail] last matching lines"++ grep -Eia "$PATTERN" "$file" | tail -80 || true++ fi++done++++if [[ "$found" -eq 0 ]]; then++ cat <<MSG++No common logs found yet.++++Launch with Proton logging enabled:++ OPENVIBE_PROTON_LOG=1 OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015++++Then run this again:++ tools/collect-proton-openvibe-debug.sh++MSG++finnew file mode 100755@@@ -0,0 +1,90 @@++#!/usr/bin/env bash++set -euo pipefail++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"++cd "$ROOT"++++WORKFLOW="${OPENVIBE_WINDOWS_WORKFLOW:-windows-source-sdk-dlls.yml}"++BRANCH="${OPENVIBE_BRANCH:-$(git branch --show-current)}"++ART_DIR="$ROOT/.tmp/windows-dll-artifact"++MOD_BIN="$ROOT/game/openvibe.games/bin"++++if ! command -v gh >/dev/null 2>&1; then++ cat <<MSG++[openvibe] gh is missing.++++Install/authenticate it:++ sudo apt update++ sudo apt install gh++ gh auth login++++Then rerun:++ tools/gh-windows-build-and-install.sh++++Manual fallback:++ Open GitHub Actions -> $WORKFLOW -> Run workflow -> branch $BRANCH++ Download the artifact, then copy client.dll/server.dll into:++ $MOD_BIN++MSG++ exit 127++fi++++if ! gh auth status >/dev/null 2>&1; then++ echo "[openvibe] gh is installed but not authenticated. Run: gh auth login" >&2++ exit 126++fi++++repo="$(gh repo view --json nameWithOwner -q .nameWithOwner)"++echo "[openvibe] repo=$repo"++echo "[openvibe] workflow=$WORKFLOW"++echo "[openvibe] branch=$BRANCH"++++git push origin "$BRANCH"++++echo "[openvibe] triggering Windows DLL workflow"++gh workflow run "$WORKFLOW" --ref "$BRANCH"++++echo "[openvibe] waiting for workflow run to appear"++run_id=""++for _ in {1..30}; do++ run_id="$(gh run list --workflow "$WORKFLOW" --branch "$BRANCH" --limit 1 --json databaseId,status -q '.[0].databaseId // empty' 2>/dev/null || true)"++ [[ -n "$run_id" ]] && break++ sleep 2++done++++if [[ -z "$run_id" ]]; then++ echo "[openvibe] could not find workflow run. Check GitHub Actions manually." >&2++ exit 1++fi++++echo "[openvibe] watching run $run_id"++gh run watch "$run_id" --exit-status++++rm -rf "$ART_DIR"++mkdir -p "$ART_DIR"++echo "[openvibe] downloading artifacts to $ART_DIR"++gh run download "$run_id" --dir "$ART_DIR"++++client="$(find "$ART_DIR" -iname 'client.dll' -type f | head -n 1 || true)"++server="$(find "$ART_DIR" -iname 'server.dll' -type f | head -n 1 || true)"++++if [[ -z "$client" || -z "$server" ]]; then++ echo "[openvibe] artifact did not contain client.dll and server.dll" >&2++ find "$ART_DIR" -maxdepth 5 -type f | sort >&2++ exit 1++fi++++mkdir -p "$MOD_BIN"++cp -f "$client" "$MOD_BIN/client.dll"++cp -f "$server" "$MOD_BIN/server.dll"++++echo "[openvibe] installed:"++ls -lh "$MOD_BIN/client.dll" "$MOD_BIN/server.dll"++++tools/verify-openvibe-dll-content.sh++++echo "[openvibe] done. Now test:"++echo " OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015"++echo "Then in the game console:"++echo " ov_join hub"++echo " ov_menu"++echo " ov_menu_servers"@@@ -1,52 +1,64 @@#!/bin/bash# OpenVibe: Source - Game Client Launcher via GE-Proton10-34--# Uses GE-Proton10-34 with SteamLinuxRuntime_sniper bypassing d3d probe timeout++set -euo pipefail--set -e----STEAM_PATH="/mnt/6tb/ssd_offload/home/workstation/.steam/debian-installation"--GE_PROTON="$STEAM_PATH/compatibilitytools.d/GE-Proton10-34"--STEAM_COMPAT_DATA="$STEAM_PATH/steamapps/compatdata/243750"--HL2_EXE="/mnt/data-f/SteamLibrary/steamapps/common/Source SDK Base 2013 Multiplayer/hl2.exe"--GAME_DIR="/home/workstation/src/openvibe-source/game/openvibe.games"++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"++STEAM_PATH="${OPENVIBE_STEAM_PATH:-/mnt/6tb/ssd_offload/home/workstation/.steam/debian-installation}"++GE_PROTON="${OPENVIBE_GE_PROTON:-$STEAM_PATH/compatibilitytools.d/GE-Proton10-34}"++STEAM_COMPAT_DATA="${OPENVIBE_STEAM_COMPAT_DATA:-$STEAM_PATH/steamapps/compatdata/243750}"++HL2_EXE="${OPENVIBE_HL2_EXE:-/mnt/data-f/SteamLibrary/steamapps/common/Source SDK Base 2013 Multiplayer/hl2.exe}"++GAME_DIR="${OPENVIBE_GAME_DIR:-$ROOT/game/openvibe.games}"CLIENT_DLL="$GAME_DIR/bin/client.dll"++SERVER_DLL="$GAME_DIR/bin/server.dll"--# Check dependenciesif [ ! -f "$HL2_EXE" ]; then-- echo "ERROR: hl2.exe not found at $HL2_EXE"-- exit 1++ echo "ERROR: hl2.exe not found at $HL2_EXE" >&2++ exit 1fiif [ ! -d "$GE_PROTON" ]; then-- echo "ERROR: GE-Proton10-34 not found at $GE_PROTON"-- exit 1++ echo "ERROR: GE-Proton not found at $GE_PROTON" >&2++ exit 1fi--# Build connect args if IP/PORT providedCONNECT_ARGS=""--if [ -n "$1" ] && [ -n "$2" ]; then-- CONNECT_ARGS="+connect $1:$2"++if [ "${1:-}" != "" ] && [ "${2:-}" != "" ]; then++ CONNECT_ARGS="+connect $1:$2"fi--echo "Launching OpenVibe: Source..."--echo "NOTE: Proton Windows hl2.exe will not load Linux client.so; Electron launcher remains the reliable custom UI."--echo " Game: $GAME_DIR"++echo "Launching OpenVibe: Source via Proton..."++echo " Game: $GAME_DIR"echo " Proton: $GE_PROTON"++echo " HL2: $HL2_EXE"[ -n "$CONNECT_ARGS" ] && echo " Connect: $CONNECT_ARGS"++if [ -f "$CLIENT_DLL" ] && command -v strings >/dev/null 2>&1 && strings -a "$CLIENT_DLL" | grep -Fq "ov_join"; then++ echo " Client DLL: patched OpenVibe client.dll detected"++elif [ -f "$CLIENT_DLL" ]; then++ echo " WARNING: client.dll exists, but ov_join string was not found. It may be stock/old." >&2++else++ echo " WARNING: client.dll missing. Proton will not have OpenVibe client commands." >&2++fi++++if [ ! -f "$SERVER_DLL" ]; then++ echo " WARNING: server.dll missing for Windows listen/server use." >&2++fi++mkdir -p "$STEAM_COMPAT_DATA"export DISPLAY="${DISPLAY:-:0}"export STEAM_COMPAT_CLIENT_INSTALL_PATH="$STEAM_PATH"export STEAM_COMPAT_DATA_PATH="$STEAM_COMPAT_DATA"--export SteamAppId=243750--export PROTON_LOG=0--export OPENVIBE_PROTON_FALLBACK=1--export DXVK_ASYNC=1++export SteamAppId="${SteamAppId:-243750}"++export PROTON_LOG="${OPENVIBE_PROTON_LOG:-${PROTON_LOG:-1}}"++export DXVK_ASYNC="${DXVK_ASYNC:-1}"exec "$GE_PROTON/proton" waitforexitandrun \-- "$HL2_EXE" \-- -game "$GAME_DIR" \-- -console -condebug -dev -novid -sw -w 1280 -h 720 \-- -port 27115 -clientport 27105 +con_enable 1 +developer 1 \-- $CONNECT_ARGS++ "$HL2_EXE" \++ -game "$GAME_DIR" \++ -console -dev -condebug -novid -sw -w 1280 -h 720 \++ -port 27115 -clientport 27105 \++ +developer 1 \++ +con_logfile openvibe_proton_console.log \++ +exec openvibe_proton_client.cfg \++ $CONNECT_ARGSnnew file mode 100755@@@ -0,0 +1,69 @@++#!/usr/bin/env bash++set -euo pipefail++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"++CLIENT="$ROOT/game/openvibe.games/bin/client.dll"++SERVER="$ROOT/game/openvibe.games/bin/server.dll"++++ok=0++fail=0++++line() { printf '%s\n' "--------------------------------------------------------------------------------"; }++check_file() {++ local label="$1" file="$2"; shift 2++ line++ echo "[$label] $file"++ if [[ ! -f "$file" ]]; then++ echo "[missing] $file"++ fail=$((fail+1))++ return++ fi++ file "$file" || true++ stat -c '[size] %s bytes' "$file" || true++ sha256sum "$file" | awk '{print "[sha256] "$1}' || true++++ local missing=0++ for needle in "$@"; do++ if strings -a "$file" | grep -Fq -- "$needle"; then++ echo "[ok] contains string: $needle"++ else++ echo "[miss] does not contain string: $needle"++ missing=1++ fi++ done++++ if [[ "$missing" -eq 0 ]]; then++ ok=$((ok+1))++ else++ fail=$((fail+1))++ fi++}++++check_file "Windows/Proton client.dll" "$CLIENT" \++ "ov_join" \++ "ov_auth_steam" \++ "ov_menu" \++ "OpenVibe"++++check_file "Windows/Proton server.dll" "$SERVER" \++ "ov_js_status" \++ "ov_js_cmd" \++ "OpenVibe"++++line++if [[ "$fail" -eq 0 ]]; then++ echo "[openvibe] DLL content check passed. Proton should load OpenVibe client/server commands if the mod path is correct."++ exit 0++fi++++cat <<'MSG'++[openvibe] DLL content check failed.++++Meaning:++ - client.dll/server.dll may exist, but they are probably old/stock/unpatched DLLs.++ - If the in-game console says Unknown command "ov_join" or "ov_menu", this is the first thing to fix.++++Fix:++ - Trigger the Windows GitHub Actions build, download its artifact, and install the resulting DLLs.++ - Run: tools/gh-windows-build-and-install.sh++MSG++exit 2
new file mode 100644
new file mode 100644
@@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
+# Proton client DLL debug path
+
+Proton runs the Windows `hl2.exe`, so it loads:
+
+```text
+game/openvibe.games/bin/client.dll
+game/openvibe.games/bin/server.dll
+```
+
+It cannot load the Linux modules:
+
+```text
+game/openvibe.games/bin/linux64/client.so
+game/openvibe.games/bin/linux64/server.so
+```
+
+If the in-game console says `Unknown command "ov_join"` or `Unknown command "ov_menu"`, then one of these is true:
+
+1. `client.dll` is missing.
+2. `client.dll` is stock/old and does not contain the OpenVibe commands.
+3. The mod path is wrong and `hl2.exe` is not loading `game/openvibe.games`.
+4. The DLL failed during load.
+
+Useful commands:
+
+```bash
+tools/verify-openvibe-dll-content.sh
+OPENVIBE_PROTON_LOG=1 OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015
+tools/collect-proton-openvibe-debug.sh
+```
+
+Safe fallback aliases are prefixed with `ovp_` so they do not mask real client DLL commands:
+
+```text
+ovp_help
+ovp_join_hub
+ovp_join_prophunt
+ovp_join_deathrun
+ovp_join_fortwars
+ovp_join_traitortown
+```
@@ -1,35 +1,9 @@
@@ -1,35 +1,9 @@
-// OpenVibe Proton client fallback aliases.
-// This file is executed by tools/run-client-proton.sh.
-// Proton Windows hl2.exe does not load Linux bin/linux64/client.so, so the
-// native OpenVibe client DLL commands are not available in this mode.
-
-echo "[OpenVibe] Proton fallback cfg loaded. Electron is the custom menu in Proton mode."
-
-alias ov_help "echo OpenVibe Proton fallback: use ov_join_hub / ov_join_prophunt / ov_join_deathrun / ov_join_fortwars / ov_join_traitortown. Electron remains the full HTML/CSS/JS menu."
-alias ov_menu "echo OpenVibe HTML menu is hosted by Electron in Proton mode. Alt-tab to the launcher or run npm run dev."
-alias ov_ui "ov_menu"
-alias ov_main_menu "ov_menu"
-alias ov_menu_main "ov_menu"
-alias ov_menu_servers "echo Server browser is in Electron. Quick connects: ov_join_hub, ov_join_prophunt, ov_join_deathrun, ov_join_fortwars, ov_join_traitortown."
-alias ov_menu_leaderboard "echo Leaderboard UI is in Electron in Proton mode."
-alias ov_menu_inventory "echo Inventory UI is in Electron in Proton mode."
-alias ov_menu_shop "echo Shop UI is in Electron in Proton mode."
-alias ov_menu_settings "echo Settings UI is in Electron in Proton mode."
-alias ov_menu_reload "echo Reload the Electron window with Ctrl+R or restart npm run dev."
-alias ov_menu_close "echo Close/minimize the Electron launcher window."
-
-alias ov_join "echo Usage in Proton fallback: ov_join_hub / ov_join_prophunt / ov_join_deathrun / ov_join_fortwars / ov_join_traitortown. The argument-taking ov_join command needs OpenVibe client.dll/client.so."
-alias ov_join_hub "connect 127.0.0.1:27015"
-alias ov_join_prophunt "connect 127.0.0.1:27016"
-alias ov_join_deathrun "connect 127.0.0.1:27017"
-alias ov_join_fortwars "connect 127.0.0.1:27018"
-alias ov_join_traitortown "connect 127.0.0.1:27019"
-
-alias ov_js_status "cmd ov_js_status"
-alias ov_js_reload "cmd ov_js_reload"
-alias ov_js_cmd "cmd ov_js_cmd"
-alias ov_js_fire "cmd ov_js_fire"
-
-alias ov_prophunt_disguise "cmd ov_prophunt_disguise"
-alias ov_prophunt_reset_disguise "cmd ov_prophunt_reset_disguise"
-alias ov_fortwars_spawn "cmd ov_fortwars_spawn"
+echo "==== OpenVibe Proton fallback cfg loaded ===="
+echo "This cfg only adds ovp_* fallback aliases. Real ov_join/ov_menu must come from client.dll."
+echo "Try real commands first: ov_join hub ; ov_menu ; ov_menu_servers"
+alias ovp_help "echo OpenVibe Proton fallback commands: ovp_join_hub ovp_join_prophunt ovp_join_deathrun ovp_join_fortwars ovp_join_traitortown"
+alias ovp_join_hub "connect 127.0.0.1:27015"
+alias ovp_join_prophunt "connect 127.0.0.1:27016"
+alias ovp_join_deathrun "connect 127.0.0.1:27017"
+alias ovp_join_fortwars "connect 127.0.0.1:27018"
+alias ovp_join_traitortown "connect 127.0.0.1:27019"
@@ -32,3 +32,11 @@ if [[ -f "$win_bin/client.dll" ]]; then
@@ -32,3 +32,11 @@ if [[ -f "$win_bin/client.dll" ]]; then
else
else
echo "[openvibe] Proton Windows hl2.exe will NOT have in-game ov_* client commands until client.dll exists."
echo "[openvibe] Proton Windows hl2.exe will NOT have in-game ov_* client commands until client.dll exists."
fi
fi
+
+echo
+echo "[openvibe] Deep DLL content check:"
+if [[ -x "${OPENVIBE_ROOT:-$HOME/src/openvibe-source}/tools/verify-openvibe-dll-content.sh" ]]; then
+ "${OPENVIBE_ROOT:-$HOME/src/openvibe-source}/tools/verify-openvibe-dll-content.sh" || true
+else
+ echo "tools/verify-openvibe-dll-content.sh missing"
+fi
new file mode 100755
new file mode 100755
@@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+set -euo pipefail
+ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
+MOD="$ROOT/game/openvibe.games"
+STEAM_APP_ID="${SteamAppId:-243750}"
+PATTERN='OpenVibe|ov_|client\.dll|server\.dll|GameDLL|ClientDLL|Unknown command|failed|Failed|unable|Unable|error|Error'
+
+printf '[openvibe] collecting Proton/Source debug hints\n'
+printf 'root=%s\n' "$ROOT"
+printf 'mod=%s\n\n' "$MOD"
+
+candidates=(
+ "$MOD/console.log"
+ "$MOD/openvibe_proton_console.log"
+ "$ROOT/console.log"
+ "$ROOT/openvibe_proton_console.log"
+ "$HOME/steam-${STEAM_APP_ID}.log"
+ "$HOME/steam-${STEAM_APP_ID}.log.last"
+)
+
+found=0
+for file in "${candidates[@]}"; do
+ if [[ -f "$file" ]]; then
+ found=1
+ echo "--------------------------------------------------------------------------------"
+ echo "[log] $file"
+ echo "[tail] last matching lines"
+ grep -Eia "$PATTERN" "$file" | tail -80 || true
+ fi
+done
+
+if [[ "$found" -eq 0 ]]; then
+ cat <<MSG
+No common logs found yet.
+
+Launch with Proton logging enabled:
+ OPENVIBE_PROTON_LOG=1 OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015
+
+Then run this again:
+ tools/collect-proton-openvibe-debug.sh
+MSG
+fi
new file mode 100755
new file mode 100755
@@ -0,0 +1,90 @@
@@ -0,0 +1,90 @@
+#!/usr/bin/env bash
+set -euo pipefail
+ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
+cd "$ROOT"
+
+WORKFLOW="${OPENVIBE_WINDOWS_WORKFLOW:-windows-source-sdk-dlls.yml}"
+BRANCH="${OPENVIBE_BRANCH:-$(git branch --show-current)}"
+ART_DIR="$ROOT/.tmp/windows-dll-artifact"
+MOD_BIN="$ROOT/game/openvibe.games/bin"
+
+if ! command -v gh >/dev/null 2>&1; then
+ cat <<MSG
+[openvibe] gh is missing.
+
+Install/authenticate it:
+ sudo apt update
+ sudo apt install gh
+ gh auth login
+
+Then rerun:
+ tools/gh-windows-build-and-install.sh
+
+Manual fallback:
+ Open GitHub Actions -> $WORKFLOW -> Run workflow -> branch $BRANCH
+ Download the artifact, then copy client.dll/server.dll into:
+ $MOD_BIN
+MSG
+ exit 127
+fi
+
+if ! gh auth status >/dev/null 2>&1; then
+ echo "[openvibe] gh is installed but not authenticated. Run: gh auth login" >&2
+ exit 126
+fi
+
+repo="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
+echo "[openvibe] repo=$repo"
+echo "[openvibe] workflow=$WORKFLOW"
+echo "[openvibe] branch=$BRANCH"
+
+git push origin "$BRANCH"
+
+echo "[openvibe] triggering Windows DLL workflow"
+gh workflow run "$WORKFLOW" --ref "$BRANCH"
+
+echo "[openvibe] waiting for workflow run to appear"
+run_id=""
+for _ in {1..30}; do
+ run_id="$(gh run list --workflow "$WORKFLOW" --branch "$BRANCH" --limit 1 --json databaseId,status -q '.[0].databaseId // empty' 2>/dev/null || true)"
+ [[ -n "$run_id" ]] && break
+ sleep 2
+done
+
+if [[ -z "$run_id" ]]; then
+ echo "[openvibe] could not find workflow run. Check GitHub Actions manually." >&2
+ exit 1
+fi
+
+echo "[openvibe] watching run $run_id"
+gh run watch "$run_id" --exit-status
+
+rm -rf "$ART_DIR"
+mkdir -p "$ART_DIR"
+echo "[openvibe] downloading artifacts to $ART_DIR"
+gh run download "$run_id" --dir "$ART_DIR"
+
+client="$(find "$ART_DIR" -iname 'client.dll' -type f | head -n 1 || true)"
+server="$(find "$ART_DIR" -iname 'server.dll' -type f | head -n 1 || true)"
+
+if [[ -z "$client" || -z "$server" ]]; then
+ echo "[openvibe] artifact did not contain client.dll and server.dll" >&2
+ find "$ART_DIR" -maxdepth 5 -type f | sort >&2
+ exit 1
+fi
+
+mkdir -p "$MOD_BIN"
+cp -f "$client" "$MOD_BIN/client.dll"
+cp -f "$server" "$MOD_BIN/server.dll"
+
+echo "[openvibe] installed:"
+ls -lh "$MOD_BIN/client.dll" "$MOD_BIN/server.dll"
+
+tools/verify-openvibe-dll-content.sh
+
+echo "[openvibe] done. Now test:"
+echo " OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015"
+echo "Then in the game console:"
+echo " ov_join hub"
+echo " ov_menu"
+echo " ov_menu_servers"
@@ -1,52 +1,64 @@
@@ -1,52 +1,64 @@
#!/bin/bash
#!/bin/bash
# OpenVibe: Source - Game Client Launcher via GE-Proton10-34
# OpenVibe: Source - Game Client Launcher via GE-Proton10-34
-# Uses GE-Proton10-34 with SteamLinuxRuntime_sniper bypassing d3d probe timeout
+set -euo pipefail
-set -e
-
-STEAM_PATH="/mnt/6tb/ssd_offload/home/workstation/.steam/debian-installation"
-GE_PROTON="$STEAM_PATH/compatibilitytools.d/GE-Proton10-34"
-STEAM_COMPAT_DATA="$STEAM_PATH/steamapps/compatdata/243750"
-HL2_EXE="/mnt/data-f/SteamLibrary/steamapps/common/Source SDK Base 2013 Multiplayer/hl2.exe"
-GAME_DIR="/home/workstation/src/openvibe-source/game/openvibe.games"
+ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
+STEAM_PATH="${OPENVIBE_STEAM_PATH:-/mnt/6tb/ssd_offload/home/workstation/.steam/debian-installation}"
+GE_PROTON="${OPENVIBE_GE_PROTON:-$STEAM_PATH/compatibilitytools.d/GE-Proton10-34}"
+STEAM_COMPAT_DATA="${OPENVIBE_STEAM_COMPAT_DATA:-$STEAM_PATH/steamapps/compatdata/243750}"
+HL2_EXE="${OPENVIBE_HL2_EXE:-/mnt/data-f/SteamLibrary/steamapps/common/Source SDK Base 2013 Multiplayer/hl2.exe}"
+GAME_DIR="${OPENVIBE_GAME_DIR:-$ROOT/game/openvibe.games}"
CLIENT_DLL="$GAME_DIR/bin/client.dll"
CLIENT_DLL="$GAME_DIR/bin/client.dll"
+SERVER_DLL="$GAME_DIR/bin/server.dll"
-# Check dependencies
if [ ! -f "$HL2_EXE" ]; then
if [ ! -f "$HL2_EXE" ]; then
- echo "ERROR: hl2.exe not found at $HL2_EXE"
- exit 1
+ echo "ERROR: hl2.exe not found at $HL2_EXE" >&2
+ exit 1
fi
fi
if [ ! -d "$GE_PROTON" ]; then
if [ ! -d "$GE_PROTON" ]; then
- echo "ERROR: GE-Proton10-34 not found at $GE_PROTON"
- exit 1
+ echo "ERROR: GE-Proton not found at $GE_PROTON" >&2
+ exit 1
fi
fi
-# Build connect args if IP/PORT provided
CONNECT_ARGS=""
CONNECT_ARGS=""
-if [ -n "$1" ] && [ -n "$2" ]; then
- CONNECT_ARGS="+connect $1:$2"
+if [ "${1:-}" != "" ] && [ "${2:-}" != "" ]; then
+ CONNECT_ARGS="+connect $1:$2"
fi
fi
-echo "Launching OpenVibe: Source..."
-echo "NOTE: Proton Windows hl2.exe will not load Linux client.so; Electron launcher remains the reliable custom UI."
-echo " Game: $GAME_DIR"
+echo "Launching OpenVibe: Source via Proton..."
+echo " Game: $GAME_DIR"
echo " Proton: $GE_PROTON"
echo " Proton: $GE_PROTON"
+echo " HL2: $HL2_EXE"
[ -n "$CONNECT_ARGS" ] && echo " Connect: $CONNECT_ARGS"
[ -n "$CONNECT_ARGS" ] && echo " Connect: $CONNECT_ARGS"
+if [ -f "$CLIENT_DLL" ] && command -v strings >/dev/null 2>&1 && strings -a "$CLIENT_DLL" | grep -Fq "ov_join"; then
+ echo " Client DLL: patched OpenVibe client.dll detected"
+elif [ -f "$CLIENT_DLL" ]; then
+ echo " WARNING: client.dll exists, but ov_join string was not found. It may be stock/old." >&2
+else
+ echo " WARNING: client.dll missing. Proton will not have OpenVibe client commands." >&2
+fi
+
+if [ ! -f "$SERVER_DLL" ]; then
+ echo " WARNING: server.dll missing for Windows listen/server use." >&2
+fi
+
mkdir -p "$STEAM_COMPAT_DATA"
mkdir -p "$STEAM_COMPAT_DATA"
export DISPLAY="${DISPLAY:-:0}"
export DISPLAY="${DISPLAY:-:0}"
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$STEAM_PATH"
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$STEAM_PATH"
export STEAM_COMPAT_DATA_PATH="$STEAM_COMPAT_DATA"
export STEAM_COMPAT_DATA_PATH="$STEAM_COMPAT_DATA"
-export SteamAppId=243750
-export PROTON_LOG=0
-export OPENVIBE_PROTON_FALLBACK=1
-export DXVK_ASYNC=1
+export SteamAppId="${SteamAppId:-243750}"
+export PROTON_LOG="${OPENVIBE_PROTON_LOG:-${PROTON_LOG:-1}}"
+export DXVK_ASYNC="${DXVK_ASYNC:-1}"
exec "$GE_PROTON/proton" waitforexitandrun \
exec "$GE_PROTON/proton" waitforexitandrun \
- "$HL2_EXE" \
- -game "$GAME_DIR" \
- -console -condebug -dev -novid -sw -w 1280 -h 720 \
- -port 27115 -clientport 27105 +con_enable 1 +developer 1 \
- $CONNECT_ARGS
+ "$HL2_EXE" \
+ -game "$GAME_DIR" \
+ -console -dev -condebug -novid -sw -w 1280 -h 720 \
+ -port 27115 -clientport 27105 \
+ +developer 1 \
+ +con_logfile openvibe_proton_console.log \
+ +exec openvibe_proton_client.cfg \
+ $CONNECT_ARGS
new file mode 100755
new file mode 100755
@@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+set -euo pipefail
+ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
+CLIENT="$ROOT/game/openvibe.games/bin/client.dll"
+SERVER="$ROOT/game/openvibe.games/bin/server.dll"
+
+ok=0
+fail=0
+
+line() { printf '%s\n' "--------------------------------------------------------------------------------"; }
+check_file() {
+ local label="$1" file="$2"; shift 2
+ line
+ echo "[$label] $file"
+ if [[ ! -f "$file" ]]; then
+ echo "[missing] $file"
+ fail=$((fail+1))
+ return
+ fi
+ file "$file" || true
+ stat -c '[size] %s bytes' "$file" || true
+ sha256sum "$file" | awk '{print "[sha256] "$1}' || true
+
+ local missing=0
+ for needle in "$@"; do
+ if strings -a "$file" | grep -Fq -- "$needle"; then
+ echo "[ok] contains string: $needle"
+ else
+ echo "[miss] does not contain string: $needle"
+ missing=1
+ fi
+ done
+
+ if [[ "$missing" -eq 0 ]]; then
+ ok=$((ok+1))
+ else
+ fail=$((fail+1))
+ fi
+}
+
+check_file "Windows/Proton client.dll" "$CLIENT" \
+ "ov_join" \
+ "ov_auth_steam" \
+ "ov_menu" \
+ "OpenVibe"
+
+check_file "Windows/Proton server.dll" "$SERVER" \
+ "ov_js_status" \
+ "ov_js_cmd" \
+ "OpenVibe"
+
+line
+if [[ "$fail" -eq 0 ]]; then
+ echo "[openvibe] DLL content check passed. Proton should load OpenVibe client/server commands if the mod path is correct."
+ exit 0
+fi
+
+cat <<'MSG'
+[openvibe] DLL content check failed.
+
+Meaning:
+ - client.dll/server.dll may exist, but they are probably old/stock/unpatched DLLs.
+ - If the in-game console says Unknown command "ov_join" or "ov_menu", this is the first thing to fix.
+
+Fix:
+ - Trigger the Windows GitHub Actions build, download its artifact, and install the resulting DLLs.
+ - Run: tools/gh-windows-build-and-install.sh
+MSG
+exit 2