glazunov999/Kwayk
Quake 1 in Qt Quick 3D with Jolt Physics. Contribute to glazunov999/Kwayk development by creating an account on GitHub.
24 stars · 3 forks · 0 watchers
README
Kwayk
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. ✨ Features
🎮 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 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
🗺️ Roadmap
Single Player (Episode 0 from LibreQuake) Multiplayer (Deathmatch, Co-op) Custom map support Mod support
🖼️ Screenshots
🎮 Live Demo ▶️ Play in browser (WebAssembly) 🚀 Getting Started Prerequisites
Qt 6.9+ with the following modules:
Qt QML Qt Quick Qt Quick 3D Qt Quick 3D Private Qt Spatial Audio
Qt Quick 3D Jolt Physics — physics plugin for Qt Quick 3D CMake 3.16+
Building
Clone the repository
git clone git@github.com:glazunov999/Kwayk.git cd KwaykConfigure and build
cmake -B build -DCMAKE_PREFIX_PATH=/path/to/Qt/6.9.3/gcc_64 cmake --build build --parallelRun
./build/appKwayk Building for WebAssemblyConfigure 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_singlethreadcmake --build build-wasm --parallel
Serve locally
cd build-wasm python3 -m http.server 8080Open http://localhost:8080/appKwayk.html
🛠️ Project Structure 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📦 Asset Conversion Converting Quake assets is a two-step process: Step 1: Extract and convert to Collada 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 Step 2: Convert to Qt Quick 3D format Use Qt's balsam tool to convert Collada files to Qt Quick 3D meshes and QML:
