Runtime patches for Echo VR (echovr.exe) that let it connect to
echovrce community game services. Both the game
client and the dedicated server load these DLLs to talk to the Nakama-based
backend.
Part of the nEVR project — keeping Echo VR alive.
Working in this repo as an agent? Start at
AGENTS.md.
src/runtime/ → BugSplat64.dll, deployed under that same name.
The game statically imports BugSplat64.dll (the original crash reporter), so
replacing it gives the earliest possible hook point — it loads before WinMain.
It carries the boot hooks, CLI flags, headless/server mode patches, crash
recovery, config and service redirection, the module and plugin loaders, the
built-in log filter, and the in-process game server
(src/runtime/server/).
Hooking is MinHook-based.
Built from src/modules/, loaded from modules/ next to the game binary before
plugins. Required, not optional — they use NvrModuleContext, not the plugin
interface.
| Module | Output | Purpose |
|---|---|---|
platform-compat |
platform_compat.dll |
Schannel TLS modernisation, WinHTTP→libcurl bridge, Wine _temp fix |
token-auth |
token_auth.dll |
Device-code auth, token cache |
The bridge is why the game never negotiates TLS for its WebSocket traffic: it speaks plaintext to a local proxy, and the proxy terminates TLS outbound.
Optional, discovered from a plugins/ directory next to the game binary and
loaded via the NvrPluginInterface lifecycle.
| Plugin | Output | Purpose |
|---|---|---|
log-filter |
log_filter.dll |
Superseded by the built-in filter; the loader refuses it |
example |
example.dll |
Reference implementation for new plugin authors |
Gameplay and tooling plugins live in the separate nevr-runtime-plugins
repository.
src/nevr_api/— protobuf, generated intogen/cpp/(just proto)src/abi/→libnevr_abi.a— the echovr.exe ABI surface: game types, function pointers, symbol IDs, CSymbol64 hashingsrc/core/→libnevr_core.a— our own primitives: logging, globals, base64, hooking, auth-token model,pch.h(linksnevr_abi)src/extension/— header-only published C ABI for third-party plugins/modulessrc/launcher/→ thinCreateProcesswrapper spawningechovr.exe -server -noconsolesrc/libovr-stub/→LibOVRPlatform64_1.dll— Oculus platform stubsrc/legacy/— frozen v1 implementations, self-contained; do not modify
Requires CMake 3.20+, Ninja, and MinGW (x86_64-w64-mingw32-g++) to
cross-compile from Linux. Dependencies come from the vcpkg manifest.
just # list recipes
just build # build everything
just verify # THE GATE — build + tests under Wine + invariant sensors
just dist # distribution packages
just dist-lite # stripped, no debug symbolsPresets: mingw-debug, mingw-release (Linux default), debug, release
(Windows). Output lands in build/<preset>/bin/.
just verify is the only gate that means anything — just build filters its own
output and always exits 0.
From build/mingw-release/bin/:
| Artifact | Destination |
|---|---|
BugSplat64.dll |
game directory (replaces the crash reporter) |
modules/*.dll |
modules/ next to the game binary |
plugins/*.dll |
plugins/ next to the game binary |
src/runtime/ BugSplat64.dll — hooks, modes, crash recovery, gameserver
src/modules/ runtime-loaded modules (platform-compat, token-auth)
src/abi/ libnevr_abi.a — the echovr.exe ABI surface
src/core/ libnevr_core.a — our own primitives (links nevr_abi)
src/extension/ header-only C ABI published to third-party DLLs
src/nevr_api/ protobuf target
src/legacy/ FROZEN v1
src/legacy-compat/ two forwarding headers; frozen legacy needs them
plugins/ optional plugins
tools/ build and verify tooling
tests/ Go system suites (not part of `just verify`)
extern/ submodules: minhook, breakpad, lss
gen/ generated protobuf — do not hand-edit
docs/ see docs/README.md
AGENTS.md |
Entry point for agents — what binds, and the gate |
AGENTS.md |
Project conventions, build/test commands, guardrails |
docs/ |
Standards, guides, reference, design, audits |
vcpkg manifest (vcpkg.json): curl, gtest, ixwebsocket, nlohmann-json,
miniupnpc, minhook, opus, protobuf.
Submodules in extern/: minhook, breakpad, lss.
| Project | Description |
|---|---|
| nevr-runtime (this repo) | Runtime patches for echovr.exe |
| nevr-runtime-plugins | Gameplay and tooling plugins |
| nakama | echovrce game service backend |
| revault | Reverse-engineering data warehouse for the game binaries |
cmake/local.cmake is auto-included when present (the include is currently
commented out in the root CMakeLists.txt). Use it for local install rules:
set(GAME_DIR "/path/to/echovr/bin/win10")
add_custom_command(TARGET nevr_runtime POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:nevr_runtime> "${GAME_DIR}/BugSplat64.dll")