Wolfenstein 3D Shareware Episode 1 browser runtime ================================================= Engine source: ECWolf 1bff92d43bc1c1b6e9c4c03f0fd3c7ae9c972f9e Port reference: ecwolf-js 7a635c89225686bab870513e3c4441f07585b473 Compiler: Emscripten 6.0.8 Container: docker.io/emscripten/emsdk@sha256:8714ed3a9fb585e662c931259a996bac36a57a8dd34b81e8277436fd77364475 From the repository root, configure and build in the pinned rootless container: podman run --rm --userns=keep-id -v "$PWD:/workspace:Z" -w /workspace CONTAINER \ emcmake cmake -S third_party/ecwolf/upstream -B .cache/ecwolf-build \ -DCMAKE_BUILD_TYPE=Release -DNO_GTK=ON -DUSE_LIBTEXTSCREEN=OFF -DGPL=ON podman run --rm --userns=keep-id -v "$PWD:/workspace:Z" -w /workspace CONTAINER \ cmake --build .cache/ecwolf-build --parallel 1 The serial build avoids a known cache-lock race when Emscripten ports are populated in a disposable container. Outputs are ecwolf.js and ecwolf.wasm. The ecwolf.pk3 is a deterministic ZIP of upstream/wadsrc/static (sorted paths, timestamps omitted). Runtime names contain the first twelve characters of their SHA-256 values. Run scripts/verify-wolfenstein-artifacts.mjs before publishing. The eight WL1 files and 1wolf14.zip are unmodified shareware content, not build inputs for the engine binary. Their hashes and sizes are fixed in runtime-manifest.v1.json.