Handmade-style voxel engine & game. Currently working on a re-write privately :^).
Objective is to create a featureful low-level programming environment & voxel game engine with minimal libraries, to dig into and perfect its systems, and to create a modded-minecraft-like game on top of the engine.
Goals:
- High quality graphics (lighting, render distance, fast movement, large worlds)
- Interesting and variable procedural terrain & feature generation
- Powerful & complex player-managed systems (e.g. modded minecraft/factorio)
- Smooth multiplayer and efficient servers
- Flexible & powerful modding support
Install meson and ninja if necessary.
Commands are run in the repository root.
Windows:
meson build
meson configure build -D buildtype=debugoptimized
ninja -C build
Linux - ubuntu/debian (probably works, but only with clang):
sudo apt install clang libclang-dev libsdl2-dev ninja-build
pip3 install meson
CXX=clang++ meson build
meson configure build -D buildtype=debugoptimized -D platform=sdl
ninja -C build
In the top level directory:
cd data
..\build\main.exe
- Engine & Game:
- C+: C with member functions, function/operator overloading, lambdas, and templates (no STL, no exceptions, minimal RAII, minimal inheritance)
- Custom standard library (data structures, threading, type info, serialization, platform, allocators)
- Win32/Unix APIs
- SSE4.2
- Assets:
- STB media libraries
- C++14/STL
- Metaprogram:
- libclang for C++ parsing
- C++14/STL
See todo.txt for plans.
-
Game
- World generation
- Parallelized chunk generation, updates, and voxel lighting
- Rendering
- Hybrid voxel terrain meshing
- Static voxel-based light propagation
- Dynamic directional/spot/point lights
- Modern OpenGL deferred renderer with light volumes
- Effect pipeline, gamma
- Diffuse, specular, and normal block textures
- MSAA
- Future: dynamic shadow mapping, bloom, HDR, screen-space AA
- Time and environment assets
- Block data framework
- Player movement
- World generation
-
Engine
- Assets
- Images
- Fonts, font atlases
- Debugging
- Debug message system
- Profiler
- Timing
- Calls/call locations
- Allocations/memory safety
- Threaded timing/work delegation
- Debug console and command system
- Runtime variable inspection interface
- Input
- Event parsing from the platform layer
- Context state machines
- Interface
- Dear ImGui implementation and reflection-based add-ons
- [depreciated] Custom immediate mode GUI system
- Log
- Thread safe log formatting and output
- HTML and custom output
- Rendering
- Textures
- Shaders
- Meshes
- Command lists
- State management
- OpenGL setup
- Async
- Atomics
- Thread pool
- Futures
- Assets
-
Lib
- Allocators
- General
- Arena
- Pool
- Array
- Buffer
- Queue
- Hash Map
- Stack
- Vector
- Strings
- Thread pool and futures
- Reflection
- Type info
- Serialization
- SIMD vector and matrix math
- Allocators
-
Platform Layer
- Windowing
- Input
- Filesystem
- Threading
- OpenGL
- Dynamic code compilation/loading
- Architectures
- Win32
- SDL2
-
Meta
- Metaprogram to generate reflection data
- Asset bulider to generate asset packs
- Batch build system for asset builder, metaprogram, engine, tests, game