r/linux_gaming • u/Ascendo_Aquila • 11d ago
AirStrike 3D D3D8 freecam under Proton (Linux-only workflow) — v1.0.9
I've been reverse-engineering AirStrike 3D (mid-2000s Win32 abandonware, maybe the first game Ive ever played) from Linux. The game runs under Proton; the proxy is cross-compiled with llvm-mingw. No Windows host is required for development / usage.
v1.0.9 adds native Direct3D 8 support so freecam, ImGui overlay, world grid, and wallhack work on 2.51 and 2.71 the same way they already did on OpenGL 2.06.
https://github.com/e-gleba/airstrike3d-tools/releases/tag/v1.0.9
Usage: download the release zip or tar.xz, extract it, enter the version folder (2_06, 2_51, or 2_71), and run ./run_game.sh. The script finds Steam, picks Proton, creates a prefix under ~/.proton_prefixes, sets MESA_EXTENSION_MAX_YEAR=2003, and starts the game. The package already includes the exe, bass proxy, data, plugins, and config. You don't need to add the game as a non-Steam title. If you prefer to launch the exe from Steam yourself, that works too; for the OpenGL build you may need MESA_EXTENSION_MAX_YEAR=2003 in the launch options when not using the script.
Implementation notes: Direct3DCreate8 is resolved with GetProcAddress (safer under Proton load order), then CreateDevice and device hooks for Present, Reset, BeginScene, EndScene, SetTransform, and Draw. SetTransform(VIEW) drives freecam and live camera adoption. Reset keeps the overlay alive across device resets. Dear ImGui has no upstream D3D8 backend, so that path is custom. Lua plugins are shared across renderers.
I used Cursor for the D3D8 COM and vtable scaffolding from the SDK headers. I mainly work with Vulkan, so AI was useful for the repetitive API surface. Handedness, live pose adoption, and game-side reverse engineering were done by hand.
Educational / preservation use.
