Show HN: Kwayk – Reimplementing Quake in Qt Quick3D with Jolt Physics Kwayk, a modern reimplementation of the classic 1996 Quake game engine using Qt Quick 3D and QML, has been released as an open-source project on GitHub, supporting desktop platforms and WebAssembly browsers. The engine features single-player and multiplayer modes, custom map and mod support, and integrates Jolt Physics for collision detection, with development requiring Qt 6.9+ and CMake 3.16+. Kwayk is a modern reimplementation of the classic Quake 1996 game engine using Qt Quick 3D and QML . It runs natively on desktop platforms and in web browsers via WebAssembly . - 🎮 Single Player campaign — monsters, weapons, items, and level progression - 🌐 WebAssembly support — play directly in your browser - 🎨 Modern rendering — Qt Quick 3D with decals, particles, and view-model rendering - 💡 Color lightmaps — Quake lightmaps with animated light styles and fullbright textures - 🔊 3D spatial audio — positional sound using Qt SpatialAudio desktop and Web Audio API WASM - ⚡ Physics engine — Qt Quick 3D Jolt Physics https://github.com/glazunov999/qtquick3djoltphysics for accurate collision detection - 🧩 Classic entity logic — doors, platforms, teleporters, push/hurt triggers, secrets, pickups, and monster AI - 🖥️ Cross-platform — Linux, Windows, macOS, and WebAssembly - 📺 Retro aesthetics — faithful recreation of the original look and feel - Single Player Episode 0 from LibreQuake - Multiplayer Deathmatch, Co-op - Custom map support - Mod support Qt 6.9+ with the following modules:- Qt QML - Qt Quick - Qt Quick 3D - Qt Quick 3D Private - Qt Spatial Audio — physics plugin for Qt Quick 3D Qt Quick 3D Jolt Physics https://github.com/glazunov999/qtquick3djoltphysics CMake 3.16+ Clone the repository git clone git@github.com:glazunov999/Kwayk.git cd Kwayk Configure and build cmake -B build -DCMAKE PREFIX PATH=/path/to/Qt/6.9.3/gcc 64 cmake --build build --parallel Run ./build/appKwayk Configure with Emscripten Qt kit cmake -B build-wasm \ -DCMAKE TOOLCHAIN FILE=/path/to/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ -DCMAKE PREFIX PATH=/path/to/Qt/6.9.3/wasm singlethread cmake --build build-wasm --parallel Serve locally cd build-wasm python3 -m http.server 8080 Open http://localhost:8080/appKwayk.html Kwayk/ ├── Assets/ Game assets textures, sounds, maps │ ├── images/ UI and texture images │ ├── maps/ Qt Quick 3D level data converted from BSP │ ├── progs/ Model files .mdl │ └── sounds/ Sound effects ├── Backend/ C++ backend modules │ ├── mdl. Quake MDL model loader │ ├── cmd. Console command system │ ├── lightstyletexture. Animated Quake light styles │ └── webspatialaudio/ Web Audio API implementation ├── id1/ Intermediate converted Quake data used by the asset pipeline ├── Kwayk/ │ ├── Core/ Core game systems rendering, audio, particles │ ├── Game/ Game logic entities, triggers, monsters │ ├── Ui/ User interface menus, HUD, console │ └── js/ JavaScript utilities └── tools/ └── q1pak/ PAK file extractor and BSP converter Converting Quake assets is a two-step process: The q1pak tool extracts PAK files and converts BSP maps to Collada .dae format: cd tools/q1pak qmake && make ./q1pak /path/to/id1/pak0.pak -o ./output Use Qt's balsam tool to convert Collada files to Qt Quick 3D meshes and QML: Convert a map balsam ./output/maps/lq e0m1/lq e0m1 map.dae -o ../../Assets/maps/lq e0m1 The output includes: - meshes/ .mesh binary mesh data - .qml Qt Quick 3D scene - maps/ .png textures Note: Some manual adjustments to the generated QML may be required for proper material setup.