MiniQuake2 is an unofficial Windows x64 port of the original Quake II 3.19
engine and baseq2 game to
MiniLang. The project aims to preserve
Quake II's gameplay, data formats, Game API v3 semantics and Protocol 34 while
providing a modern, self-contained desktop build.
Important
MiniQuake2 does not include Quake II game data. You must own and supply a
legal installation containing baseq2/pak0.pak.
Outer Base (base1) |
Receiving Center (fact3) |
|---|---|
![]() |
![]() |
The gallery covers all 39 single-player BSPs in MiniQuake2's canonical campaign matrix. Every image is a full 1920x1080 product frame captured at the authored level start after the view weapon has settled. The captures exercise the live server, Game API, snapshot, client, renderer and HUD path and contain no missing assets. JPEG previews are progressive and open at full resolution.
Quake II — 39 campaign maps
- Engine, client, server, renderer front end and
baseq2game logic written in MiniLang. - Original PAK, BSP38, MD2, SP2, WAL, PCX, CIN, WAV, DM2 and private-save format support.
- Single-player campaign, cooperative play, deathmatch, save/load, inventory, weapons, movers, monsters, cinematics, demos and attract mode.
- Protocol 34 networking with prediction, downloads, listen servers and dedicated servers.
- Classic lightmaps, sky, warp, flowing and translucent surfaces, inline brush models, MD2 interpolation, view weapons, particles and shadows.
- Native Windows x64 window, raw input, controller, UDP, PCM audio and OpenGL bridges behind MiniLang-owned runtime state.
- Resolution-aware menus and HUD, windowed/fullscreen modes through 4K, mouse
inversion, rebinding and persistent
miniquake2.cfgsettings. - OGG music discovery for classic and Steam rerelease layouts, plus original CIN and DM2 playback timing.
MiniQuake2 is playable and under active development. Its automated suite covers all 39 campaign maps, the stock spawn table, Game API behavior, networking, rendering, audio, persistence and long-running sessions. This is strong compatibility evidence, not a claim that every encounter, rendered pixel or hardware configuration is already identical to Quake II 3.19.
The concise maintained overview is the
parity audit. Detailed source comparisons and acceptance
evidence remain available under docs, while known limitations are
tracked in BLOCK_LEDGER.json.
Build MiniQuake2, then point it at the directory containing baseq2:
$Quake2Base = "C:\Program Files (x86)\Steam\steamapps\common\Quake 2"
& .\build\MiniQuake2.exe --data-root $Quake2Base--data-root validates and remembers the installation, then opens the main
menu. Later launches need no arguments:
& .\build\MiniQuake2.exeStart a map directly when required:
& .\build\MiniQuake2.exe --play $Quake2Base base1 0The final 0 keeps the interactive session open until the window is closed.
Unhandled runtime errors leave fullscreen and mouse capture before opening a
topmost crash dialog. The complete report is copied to the Windows clipboard
and written to miniquake2-crash.log; if the clipboard is temporarily busy,
focus the dialog and press Ctrl+C to copy its contents.
Requirements:
- Windows x64 and PowerShell.
- Python 3.
- The Python MiniLang compiler and standard library. A sibling checkout named
MiniLangCompilerPyis detected automatically. - A legal Quake II installation is required only for retail validation and playing, never for the asset-free build and unit suite.
From the repository root:
.\build.ps1The native Windows, OpenGL, audio, input, Ogg Vorbis and text bridges are fully source-owned by this repository. A normal build rebuilds both bridges before compiling MiniLang so the checked product cannot drift from the C sources:
.\build.ps1For a local MiniLang-only iteration, -SkipNativeRebuild explicitly reuses the
checked-in bridge DLLs; release and verification builds must not use it.
Explicit compiler locations can be supplied when the repositories are not siblings:
.\build.ps1 `
-Compiler C:\path\to\MiniLangCompilerPy\mlc_win64.py `
-StdLib C:\path\to\MiniLangCompilerPyThe release executable is written to build/MiniQuake2.exe.
| Action | Default input |
|---|---|
| Move | W, A, S, D |
| Look | Mouse |
| Attack | Left mouse button |
| Jump | Space |
| Crouch | C |
| Run | Shift |
| Use | E |
| Inventory | I |
| Previous/next weapon | Mouse wheel |
| Select weapon | 0 through 9 |
| Main menu | Esc |
Bindings, sensitivity, vertical-axis inversion, always-run, handedness,
controller input and display settings are available from the menus and persist
in baseq2/miniquake2.cfg.
The Video menu supports 640x480 through 3840x2160, windowed or fullscreen. Unavailable exclusive modes fall back safely to a supported desktop mode. Display changes rebuild the live window, OpenGL context and map resources without discarding gameplay settings.
MiniQuake2 searches for OGG music below both classic baseq2/music and Steam
rerelease layouts. Stock cinematics and demos are read directly from the
user-owned PAK files and follow their original timing and next-server chains.
The complete source, build and compiled MiniLang test suite has one entry point:
.\scripts\test.ps1Useful retail gates include:
.\scripts\campaign_smoke.ps1 -Quake2Root $Quake2Base
.\scripts\physical_campaign_smoke.ps1 -Quake2Root $Quake2Base
.\scripts\session_soak.ps1 -Quake2Root $Quake2Base -Frames 100000
.\scripts\hardware_acceptance.ps1 -Quake2Root $Quake2BaseRebuild the complete README gallery from authored gameplay starts with:
.\scripts\capture_level_gallery.ps1 -Quake2Root $Quake2BaseThe capture workflow never extracts or copies proprietary retail assets; only
rendered JPEG screenshots are written to docs/screenshots/levels.
| Path | Purpose |
|---|---|
src/ |
MiniLang engine, client, server, game, renderer and platform logic |
native/ |
Narrow prebuilt Windows x64 runtime bridges |
tests/ |
Deterministic unit, integration, protocol and retail test programs |
tools/ |
Verification, capture, comparison and evidence utilities |
scripts/ |
Build, packaging and retail-acceptance workflows |
docs/ |
Architecture, parity and release evidence plus screenshots |
- MiniDoc API reference for packages,
declarations, source metrics, and dependency graphs; the searchable offline
site starts at
docs/api/html/index.html. - Compatibility and asset contract
- Architecture
- Current parity audit
- Detailed original-source audit
- Playability matrix
- Release acceptance
- Retail FPS report
Regenerate the MiniDoc reference, or run the strict check without writing output:
pwsh .\tools\generate_minidoc.ps1
pwsh .\tools\generate_minidoc.ps1 -CheckMiniQuake2 uses //! file comments and /// declaration comments with
structured @param and @returns contracts.
MiniQuake2 is an independent project and is not affiliated with or endorsed by id Software, Bethesda Softworks or ZeniMax Media. Quake II names and game assets remain the property of their respective owners. Do not commit or redistribute proprietary PAK files, maps, textures, music, cinematics or other retail data with this repository.
Quake II-derived work is distributed under GPL-2.0-or-later. Independently
authored build and verification tooling may use Apache-2.0. See
LICENSE.md, NOTICE.md and each file's SPDX
identifier for the applicable terms and retained notices.






































