{"slug": "show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics", "title": "Show HN: Kwayk – Reimplementing Quake in Qt Quick3D with Jolt Physics", "summary": "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+.", "body_md": "**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**.\n\n- 🎮\n**Single Player campaign**— monsters, weapons, items, and level progression - 🌐\n**WebAssembly support**— play directly in your browser - 🎨\n**Modern rendering**— Qt Quick 3D with decals, particles, and view-model rendering - 💡\n**Color lightmaps**— Quake lightmaps with animated light styles and fullbright textures - 🔊\n**3D spatial audio**— positional sound using Qt SpatialAudio (desktop) and Web Audio API (WASM) - ⚡\n**Physics engine**—[Qt Quick 3D Jolt Physics](https://github.com/glazunov999/qtquick3djoltphysics)for accurate collision detection - 🧩\n**Classic entity logic**— doors, platforms, teleporters, push/hurt triggers, secrets, pickups, and monster AI - 🖥️\n**Cross-platform**— Linux, Windows, macOS, and WebAssembly - 📺\n**Retro aesthetics**— faithful recreation of the original look and feel\n\n- Single Player (Episode 0 from LibreQuake)\n- Multiplayer (Deathmatch, Co-op)\n- Custom map support\n- Mod support\n\n**Qt 6.9+** with the following modules:- Qt QML\n- Qt Quick\n- Qt Quick 3D\n- Qt Quick 3D Private\n- Qt Spatial Audio\n\n— physics plugin for Qt Quick 3D[Qt Quick 3D Jolt Physics](https://github.com/glazunov999/qtquick3djoltphysics)**CMake 3.16+**\n\n```\n# Clone the repository\ngit clone git@github.com:glazunov999/Kwayk.git\ncd Kwayk\n\n# Configure and build\ncmake -B build -DCMAKE_PREFIX_PATH=/path/to/Qt/6.9.3/gcc_64\ncmake --build build --parallel\n\n# Run\n./build/appKwayk\n# Configure with Emscripten Qt kit\ncmake -B build-wasm \\\n  -DCMAKE_TOOLCHAIN_FILE=/path/to/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \\\n  -DCMAKE_PREFIX_PATH=/path/to/Qt/6.9.3/wasm_singlethread\n\ncmake --build build-wasm --parallel\n\n# Serve locally\ncd build-wasm\npython3 -m http.server 8080\n# Open http://localhost:8080/appKwayk.html\nKwayk/\n├── Assets/           # Game assets (textures, sounds, maps)\n│   ├── images/       # UI and texture images\n│   ├── maps/         # Qt Quick 3D level data converted from BSP\n│   ├── progs/        # Model files (.mdl)\n│   └── sounds/       # Sound effects\n├── Backend/          # C++ backend modules\n│   ├── mdl.*         # Quake MDL model loader\n│   ├── cmd.*         # Console command system\n│   ├── lightstyletexture.*  # Animated Quake light styles\n│   └── webspatialaudio/  # Web Audio API implementation\n├── id1/              # Intermediate converted Quake data used by the asset pipeline\n├── Kwayk/\n│   ├── Core/         # Core game systems (rendering, audio, particles)\n│   ├── Game/         # Game logic (entities, triggers, monsters)\n│   ├── Ui/           # User interface (menus, HUD, console)\n│   └── js/           # JavaScript utilities\n└── tools/\n    └── q1pak/        # PAK file extractor and BSP converter\n```\n\nConverting Quake assets is a two-step process:\n\nThe `q1pak`\n\ntool extracts PAK files and converts BSP maps to Collada (.dae) format:\n\n```\ncd tools/q1pak\nqmake && make\n./q1pak /path/to/id1/pak0.pak -o ./output\n```\n\nUse Qt's `balsam`\n\ntool to convert Collada files to Qt Quick 3D meshes and QML:\n\n```\n# Convert a map\nbalsam ./output/maps/lq_e0m1/lq_e0m1_map.dae -o ../../Assets/maps/lq_e0m1\n\n# The output includes:\n# - meshes/*.mesh    (binary mesh data)\n# - *.qml            (Qt Quick 3D scene)\n# - maps/*.png       (textures)\n```\n\n**Note:** Some manual adjustments to the generated QML may be required for proper material setup.", "url": "https://wpnews.pro/news/show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics", "canonical_source": "https://github.com/glazunov999/Kwayk", "published_at": "2026-08-03 04:45:59+00:00", "updated_at": "2026-08-03 04:52:21.979916+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure"], "entities": ["Kwayk", "Qt Quick 3D", "QML", "Jolt Physics", "WebAssembly", "LibreQuake", "GitHub", "Qt SpatialAudio"], "alternates": {"html": "https://wpnews.pro/news/show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics", "markdown": "https://wpnews.pro/news/show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics.md", "text": "https://wpnews.pro/news/show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics.txt", "jsonld": "https://wpnews.pro/news/show-hn-kwayk-reimplementing-quake-in-qt-quick3d-with-jolt-physics.jsonld"}}