Skip to content

Dev tooling

Everything under tools/ is dev-only: it isn’t in release builds, and tools that drive the game need a dev build (BLUR_DEV=ON) and a display. Debug environment variables are listed in Debug and test flags.

Path What it does
tools/recomp/ Ghidra discovery scripts, the P-code to C++ emitter, runtime headers (pipeline)
tools/recomp/build/gen_tests.sh recompile our own guest test exes into the committed tests/recomp/gen.cpp
tools/modes/mdrive.py boot the game and drive a mode from a plan in tools/modes/plans (virtual keyboard and XInput pads, screenshots)
tools/host/race.sh drive the real game to a race with injected keys and dump backbuffers
tools/host/hostprof.py resolve a BLUR_HOSTPROF profile dump against blurhost
tools/host/gen_*.py generate host/D3D9 tables and status docs under docs/inventory
tools/replay/ native replayer for apitrace D3D9 traces on d3d9metal (replay <trace> --bench --headless)
tools/trace/ trace and shader-dump helpers for investigating the original game
tools/trackcards/ extract race loading cards for Discord Rich Presence art
tools/app/ app icon extraction and installer manifest generation
tools/ci/ release build, signing, R2 storage and recomp-input scripts (CI and releases)
tools/fj.sh Forgejo REST API wrapper used for the issue tracker

mdrive.py <plan> [out_dir] [max_seconds] matches screens against [lua] load <chunk> log lines (BLUR_LUA_DUMP) and sends keys through BLUR_KEYFILE and pads through BLUR_PADFILE. Only one game can use the display at a time, so runs are serialised.

Measure fps with nothing else running. BLUR_FPS=1 logs presents per second and renderer stats; BLUR_HOSTPROF plus hostprof.py shows where host time goes.

Runnable race scenarios will live in scripts/. The directory doesn’t exist yet; they’re documented here once they do.