Skip to content

Repository files navigation

MiniQuake

MiniQuake application icon

MiniQuake is an unofficial Windows x64 port of the original GLQuake/WinQuake 1.09 engine to MiniLang. The project aims to preserve Quake's observable behavior, data formats, QuakeC semantics, and Protocol 15 while providing a smooth modern desktop experience.

Important

MiniQuake does not include Quake game data. You must own and supply a legal Quake installation containing id1/pak0.pak.

Screenshots

Attract mode and main menu E1M1 gameplay
The MiniQuake main menu over an original attract-mode demo MiniQuake running E1M1

The scaled in-game console

Complete level gallery

The gallery covers all 73 playable maps shipped with the original game and the two official mission packs supported by MiniQuake. Every image was rendered by MiniQuake at 1920x1080 with HQ2x texture scaling, enhanced lighting, and high-quality shadows. The JPEG previews are progressive and open at full resolution when clicked. Captures use each map's authored spawn viewpoint.

Quake — 38 maps
START
START
E1M1
E1M1
E1M2
E1M2
E1M3
E1M3
E1M4
E1M4
E1M5
E1M5
E1M6
E1M6
E1M7
E1M7
E1M8
E1M8
E2M1
E2M1
E2M2
E2M2
E2M3
E2M3
E2M4
E2M4
E2M5
E2M5
E2M6
E2M6
E2M7
E2M7
E3M1
E3M1
E3M2
E3M2
E3M3
E3M3
E3M4
E3M4
E3M5
E3M5
E3M6
E3M6
E3M7
E3M7
E4M1
E4M1
E4M2
E4M2
E4M3
E4M3
E4M4
E4M4
E4M5
E4M5
E4M6
E4M6
E4M7
E4M7
E4M8
E4M8
END
END
DM1
DM1
DM2
DM2
DM3
DM3
DM4
DM4
DM5
DM5
DM6
DM6
Scourge of Armagon — 18 maps
START
Scourge of Armagon START
HIP1M1
HIP1M1
HIP1M2
HIP1M2
HIP1M3
HIP1M3
HIP1M4
HIP1M4
HIP1M5
HIP1M5
HIP2M1
HIP2M1
HIP2M2
HIP2M2
HIP2M3
HIP2M3
HIP2M4
HIP2M4
HIP2M5
HIP2M5
HIP2M6
HIP2M6
HIP3M1
HIP3M1
HIP3M2
HIP3M2
HIP3M3
HIP3M3
HIP3M4
HIP3M4
HIPEND
HIPEND
HIPDM1
HIPDM1
Dissolution of Eternity — 17 maps
START
Dissolution of Eternity START
R1M1
R1M1
R1M2
R1M2
R1M3
R1M3
R1M4
R1M4
R1M5
R1M5
R1M6
R1M6
R1M7
R1M7
R2M1
R2M1
R2M2
R2M2
R2M3
R2M3
R2M4
R2M4
R2M5
R2M5
R2M6
R2M6
R2M7
R2M7
R2M8
R2M8
CTF1
CTF1

Highlights

  • Engine and game-facing behavior implemented in MiniLang.
  • Windows x64 platform bridges for Win32, audio, UDP, input, codecs, and GPU APIs.
  • Original Quake formats including PAK, WAD, BSP29, MDL6, SPR1, progs.dat v6, DEM, SAV, and Protocol 15.
  • Single-player, listen-server, dedicated-server, demo, savegame, console, menu, HUD, and QuakeC runtime paths.
  • Selectable OpenGL 1.1, Direct3D 9, and Vulkan renderers.
  • Resolution-aware classic UI, windowed/fullscreen switching, mouse input, controller support, and archived settings in config.cfg.
  • OGG soundtrack playback through the original CD-track command model.
  • Compatibility targets for Quake, Scourge of Armagon, and Dissolution of Eternity within the original engine and Protocol 15 limits.

Project status

MiniQuake is playable and under active development. The repository has broad source and subsystem coverage, plus deterministic tests for engine contracts, but it should not yet be treated as a defect-free replacement for every Quake mod or hardware configuration. Retail map traversal, renderer comparisons, network interoperability, and long-running soak tests remain important release gates.

See the current port status for the maintained summary. Historical implementation and acceptance records are retained under docs/archive.

Prebuilt Windows x64 packages are published on the GitHub Releases page. Release archives contain the engine executable and its native runtime bridges, but never include proprietary Quake game data.

Quick start

Build MiniQuake, then point it at the directory that contains id1:

$QuakeBase = "C:\Program Files (x86)\Steam\steamapps\common\Quake"
& .\build\MiniQuake.exe --play $QuakeBase

With only the directory argument, MiniQuake executes the original quake.rc startup sequence, opens the main menu, and runs Quake's attract demos behind it. A map may be supplied explicitly when a direct start is preferred:

& .\build\MiniQuake.exe --play $QuakeBase e1m1

The expanded command-line form is also supported:

& .\build\MiniQuake.exe `
  -basedir $QuakeBase `
  -game id1 `
  -window `
  -width 1280 `
  -height 720 `
  -renderer opengl `
  +map start

Use -game hipnotic or -game rogue for the official mission packs when their data is installed below the Quake directory.

Building

Requirements:

  • Windows x64 and PowerShell.
  • Python 3.
  • The Python MiniLang compiler and standard library. A sibling checkout named MiniLangCompilerPy is detected automatically, or paths can be supplied explicitly.
  • A Windows C/C++ toolchain only when rebuilding the native DLLs.

From the repository root:

.\build.ps1

Explicit compiler paths:

.\build.ps1 `
  -Compiler C:\path\to\MiniLangCompilerPy\mlc_win64.py `
  -StdLib C:\path\to\MiniLangCompilerPy

The release executable is written to build/MiniQuake.exe. The build compiles the repository-local MiniLang icon injector and embeds the multi-resolution icons/MiniQuake.ico automatically. Useful build switches include -Configuration Debug, -SkipTests, -NetworkTests, -RebuildNative, and -SkipIcon. Run Get-Help .\build.ps1 -Detailed or inspect the script's parameter block for the complete build interface.

Default controls

Action Default input
Move W, A, S, D or arrow keys
Look Mouse
Attack Left mouse button or Ctrl
Jump Space or right mouse button
Run Shift
Select weapon 1 through 8
Main menu Esc
Console `

Bindings can be changed through Options > Customize Controls or with the original bind console command. Persistent free-look is enabled by default; mouse sensitivity and vertical-axis inversion are available directly in the Options menu. The archived freelook cvar can restore classic hold-to-look behavior when set to 0.

Cheats

Single-player games and privileged multiplayer clients support the original commands god, notarget, noclip, fly, and give <item> <value>. The stock QuakeC cheats such as impulse 9 (all weapons) are also supported. MiniQuake additionally provides invisible, which toggles AI invisibility: standard monsters stop targeting the player and cannot acquire the player again until the command is disabled. The player model remains rendered. Enter cheats or cheatcodes in the console to display the complete in-game cheat reference, including command syntax.

Rendering and display

Choose a renderer from Options > Video Mode or on the command line:

-renderer opengl
-renderer direct3d9
-renderer vulkan

The aliases -opengl, -directx, -d3d9, and -vulkan are accepted. Display mode, resolution, renderer, and other archived settings are written to config.cfg. The console commands vid_renderer and vid_restart provide the same renderer selection without editing the configuration file manually.

OpenGL remains the compatibility fallback. Direct3D 9 uses the Windows runtime, and Vulkan is loaded dynamically from vulkan-1.dll when available.

The Lighting entry in Options > Video Mode switches between the original GLQuake-compatible presentation and MiniQuake's optional enhanced lighting on all three backends. Enhanced lighting adds per-pixel Protocol-15 dynamic lights while retaining Quake's original lightmaps and art direction. It also enables compact, camera-facing particles with perspective-correct world-space sizing and automatically uses standard QLIT v1 maps/<name>.lit sidecars when a selected game or mod supplies them. Invalid or mismatched sidecars are ignored safely. Water retains Quake's canonical sine warp but interpolates between table entries to avoid visible stepping. Shadows are independent of that lighting choice: opaque enemies, pickups, crates, doors, platforms, and other modelled objects cast geometry-projected shadows whenever the option is enabled. Shadow Quality selects low, medium, or high filtering. Classic lighting remains the compatibility fallback; set Shadows to Off as well for the unextended GLQuake presentation.

Model Smoothing interpolates animated alias-model poses, removing the characteristic low-frame-rate stepping from monsters, weapons, and projectiles without changing QuakeC timing or collision. Texture Filter selects 1x, 2x, 4x, 8x, or 16x anisotropic filtering for mipmapped 3-D textures. Unsupported levels are clamped by the active OpenGL, Direct3D 9, or Vulkan device.

Texture Scale optionally enlarges world, model, sprite, sky, and translated player textures when they are loaded. Available modes are Off, Nearest 2x, Scale2x, Scale3x, HQ2x, xBR2x, and xBR4x. The preprocessing is shared by all three renderers; HUD, menu/font art, lightmaps, and particle textures retain their original sizing. Changing the option rebuilds graphics resources without restarting the game and stores the choice in config.cfg.

The corresponding archived console variables are:

r_lighting 0       // 0 = classic, 1 = enhanced
r_shadows 1        // 0 = disabled, 1 = enabled
r_shadowquality 1  // 0 = low, 1 = medium, 2 = high
r_modelinterpolate 1 // 0 = original stepped poses, 1 = smooth poses
r_anisotropy 4       // 1, 2, 4, 8, or 16; hardware-clamped
r_coloredlightmaps 1 // use matching QLIT v1 sidecars in enhanced mode
r_textureupscale 0 // 0=off, 1=nearest2x, 2=Scale2x, 3=Scale3x,
                   // 4=HQ2x, 5=xBR2x, 6=xBR4x

Changes made in the menu are stored in config.cfg. If a backend cannot create its enhanced shader pipeline, MiniQuake keeps rendering through its classic path instead of making the game unavailable.

Music

Physical CD playback is replaced by OGG streaming. MiniQuake maps Quake's original track numbers to trackNN.ogg and searches these locations:

<Quake>/<game>/music/trackNN.ogg
<Quake>/rerelease/<game>/music/trackNN.ogg
<Quake>/rerelease/id1/music/trackNN.ogg

The Steam rerelease layout is therefore detected automatically. Use cd info or musicinfo in the console to diagnose soundtrack discovery and playback.

Tests and verification

The complete acceptance suite now has one entry point:

.\scripts\test.ps1

With no arguments it detects the standard Steam Quake installation, rebuilds the native bridges, runs every source/preflight and compiled MiniLang test, exercises UDP loopback and an independent two-process handshake, and performs asset, runtime, render and renderer-switch validation for every installed official game (id1, hipnotic and rogue). It also runs the retail-only QuakeC, movement, cheat, Chthon, telefrag, audio, save and demo evidence gates.

Use an explicit installation when Quake is elsewhere, or set the persistent MINIQUAKE_QUAKE_BASE environment variable:

.\scripts\test.ps1 -QuakeBase $QuakeBase

Focused retail validation without the full source suite remains available:

.\scripts\validate_real_game.ps1 -QuakeBase $QuakeBase

Source integrity, documentation coverage, and MiniLang syntax can be checked independently:

python .\tools\verify.py --root .
python .\tools\check_source_documentation.py --root .
python .\tools\check_minilang_delimiters.py --root .

After an intentional repository change, maintainers can refresh the integrity manifest with python .\tools\verify.py --root . --refresh-manifest.

Repository layout

Path Purpose
src/ MiniLang engine, client, server, renderer, audio, and platform logic
native/ Narrow Windows x64 native bridges and renderer backends
tests/ Deterministic, differential, and retail test programs
tools/ Verification, comparison, build, and evidence utilities
scripts/ Maintainer and retail-validation workflows
docs/ Current documentation and historical acceptance records
audit/ Machine-readable compatibility and performance evidence

Legal and licensing

MiniQuake is an independent project and is not affiliated with or endorsed by id Software or Bethesda Softworks. Quake names and game assets remain the property of their respective owners. Do not commit or redistribute proprietary PAK files, maps, music, or other retail data with this repository.

Quake-derived engine work is distributed under GPL-2.0-or-later; see COPYING. Independently authored platform and build components may carry Apache-2.0 notices; see LICENSES/Apache-2.0.txt and each file's SPDX identifier. Third-party components retain their own licenses.

About

Vibe-coded MiniLang Port of the original Quake

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages