Skip to content

Repository files navigation

MiniQuake2

License: GPL-2.0-or-later Language: MiniLang

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.

Screenshots

Outer Base (base1) Receiving Center (fact3)
MiniQuake2 running base1 MiniQuake2 running fact3

Complete campaign gallery

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
BASE1
BASE1
BASE2
BASE2
BASE3
BASE3
BIGGUN
BIGGUN
BOSS1
BOSS1
BOSS2
BOSS2
BUNK1
BUNK1
CITY1
CITY1
CITY2
CITY2
CITY3
CITY3
COMMAND
COMMAND
COOL1
COOL1
FACT1
FACT1
FACT2
FACT2
FACT3
FACT3
HANGAR1
HANGAR1
HANGAR2
HANGAR2
JAIL1
JAIL1
JAIL2
JAIL2
JAIL3
JAIL3
JAIL4
JAIL4
JAIL5
JAIL5
LAB
LAB
MINE1
MINE1
MINE2
MINE2
MINE3
MINE3
MINE4
MINE4
MINTRO
MINTRO
POWER1
POWER1
POWER2
POWER2
SECURITY
SECURITY
SPACE
SPACE
STRIKE
STRIKE
TRAIN
TRAIN
WARE1
WARE1
WARE2
WARE2
WASTE1
WASTE1
WASTE2
WASTE2
WASTE3
WASTE3

Highlights

  • Engine, client, server, renderer front end and baseq2 game 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.cfg settings.
  • OGG music discovery for classic and Steam rerelease layouts, plus original CIN and DM2 playback timing.

Project status

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.

Quick start

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.exe

Start a map directly when required:

& .\build\MiniQuake2.exe --play $Quake2Base base1 0

The 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.

Building

Requirements:

  • Windows x64 and PowerShell.
  • Python 3.
  • The Python MiniLang compiler and standard library. A sibling checkout named MiniLangCompilerPy is 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.ps1

The 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.ps1

For 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\MiniLangCompilerPy

The release executable is written to build/MiniQuake2.exe.

Default controls

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.

Media and display

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.

Tests and verification

The complete source, build and compiled MiniLang test suite has one entry point:

.\scripts\test.ps1

Useful 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 $Quake2Base

Rebuild the complete README gallery from authored gameplay starts with:

.\scripts\capture_level_gallery.ps1 -Quake2Root $Quake2Base

The capture workflow never extracts or copies proprietary retail assets; only rendered JPEG screenshots are written to docs/screenshots/levels.

Repository layout

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

Documentation

Regenerate the MiniDoc reference, or run the strict check without writing output:

pwsh .\tools\generate_minidoc.ps1
pwsh .\tools\generate_minidoc.ps1 -Check

MiniQuake2 uses //! file comments and /// declaration comments with structured @param and @returns contracts.

Legal and licensing

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.

About

Playable MiniLang port of Quake II 3.19 for Windows x64, preserving Game API v3 and Protocol 34 compatibility.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages