Build of wraitii/evnova-decomp for the browser with Emscripten.
The upstream repo is a git submodule in extern/evnova-decomp and is not
modified. Everything web-specific lives here.
git clone --recurse-submodules <this repo> # or: git submodule update --init
scripts/build.sh # installs emsdk into .emsdk on first run
scripts/serve.py # http://localhost:8080Needs cmake (3.25+), ninja, git, and Python 3. Output is
build/wasm-release/site/{index.html,index.js,index.wasm,ui/}; wasm-debug is the
other preset (scripts/build.sh wasm-debug).
The game data is not part of the build and is never fetched by the page. The user
supplies the EV Nova Community Edition zip from their own filesystem. The page
unpacks the files the engine needs into the in-browser filesystem (/EV Nova) and
persists them in IndexedDB, so later visits go straight to "Play". Pilots and
preferences persist the same way.
-
Async loop: the engine is a blocking loop with
SDL_Delay(16). It runs unchanged by suspending inSDL_Delay: JSPI by default, or-DWEBNOVA_JSPI=OFFfor ASYNCIFY. -
Exceptions: built with
-fwasm-exceptions. -
The probe harness is disabled; the game is built with
EVNOVA_WARNINGS_AS_ERRORS=OFF. -
Emscripten ports are prebuilt by
scripts/build.sh(embuilder), because parallel ninja jobs otherwise race on the port cache lock on a cold cache. -
UI: in-page dialogs are Preact + htm components in
web/ui/(ES modules, pinned inweb/ui/deps.js).web/ui/fs.jsholds the virtual-filesystem access, andsdl_dialog_web.cppjust callswindow.novaUI.
The engine is MIT-licensed upstream. No game assets are in this repo.