Personal Project
Modern Engine: Enigma
Enigma Engine is a C++ game engine designed from the ground up for voxel game development. It features a modular architecture with runtime DLL loading/unloading, a plugin system, and multi-configuration builds. The engine ships with a complete project scaffolding toolchain — from project creation to shipping — all driven by the BuildTool CLI.
Features
- Modular architecture: engine, game logic, and plugins run as independent DLL modules with dynamic loading and dependency management
- Plugin system: plugins defined via
.eplugindescriptors with loading phase control, auto-discovery, and dependency checking - Project scaffolding: one-command creation of projects, modules, and plugins with auto-generated template code and configuration
- Multi-configuration builds: Debug / DebugGame / Development / Shipping / Test
- Visual Studio integration: auto-generated
.slnand.vcxprojproject files - Unreal-style API: familiar naming conventions and architectural patterns (ModuleRules, TargetRules, GameInstance)
- Core math library: FVector, FMatrix, FQuat, FRotator, FTransform and more, right-hand Y-up coordinate system, constexpr-friendly
Planned Features
- Game Editor with hot-reload support for game module and plugin DLLs
- ASCII-based 720p renderer
- Integration of
create-module,create-pluginand other build actions into the Game Editor
Building
Prerequisites
- C++26 compiler (MSVC 17 2022 or later)
- CMake 3.20+
- .NET 9.0 SDK (for BuildTool)
BuildTool
BuildTool is a C# .NET 9 CLI that handles project scanning, dependency resolution, CMake generation, compilation, and packaging.
# Build project (defaults to Development configuration)
BuildTool build <project-path>
# Specify build configuration
BuildTool build <project-path> -c DebugGame
BuildTool build <project-path> -c Shipping
# Clean / Rebuild
BuildTool clean <project-path>
BuildTool rebuild <project-path>
# Generate Visual Studio solution
BuildTool generate-project-files <project-path>
# Package for distribution (forces Shipping configuration)
BuildTool package <project-path> -o <output-path>
Project Scaffolding
# Create a new game project
BuildTool create-project --name MyGame --location ./Games
# Create a game module
BuildTool create-module <project-path> --name GameUtils
# Create a plugin
BuildTool create-plugin <project-path> --name MyFeature --category Gameplay
# Remove a module (with dependency checking)
BuildTool remove-module <project-path> --name GameUtils
# Remove a plugin
BuildTool remove-plugin <project-path> --name MyFeature
Build Configurations
| Configuration | Description | Link Mode | Optimization |
|---|---|---|---|
Debug | Full debug, no optimization | Modular (DLL) | /Od |
DebugGame | Engine optimized, game debuggable | Modular (DLL) | /O1 |
Development | Development build, moderate optimization | Modular (DLL) | /O1 |
Shipping | Release build, full optimization | Monolithic (static) | /O2 |
Test | Automated test build | Modular (DLL) | /O2 |
Modules
| Name | Description | Status |
|---|---|---|
Enigma::Core | Foundation module providing the module system, logging, assertions, HAL platform abstraction, and core math types (FVector, FMatrix, FQuat, FRotator, FTransform) | stable |
Enigma::Engine | Engine core providing FEngineLoop, FGameEngine, FGameInstance, and module loading phase management | stable |
Enigma::Launch | Entry point module providing GuardedMain and platform-specific launch logic (main / WinMain) | stable |
Third Party
| Name | Description | Link |
|---|---|---|
nlohmann::json | JSON for Modern C++ | Github |
Google Test | C++ unit testing framework (git submodule) | Github |
Project Structure
EnigmaEngine/
Engine/
Source/Runtime/ Runtime modules (Core, Engine, Launch)
Source/ThirdParty/ Third-party libraries (nlohmann_json, googletest)
Templates/ Project / Module / Plugin code templates
BuildTool/ C# .NET build tool
Games/
EnigmaArcade/ Example game project
Source/ Game module sources
Plugins/ Game plugins
Tests/
CoreMathTests/ Core math unit tests (GoogleTest)