Custom Game Engine

Work-in-progress game engine for personal use

Overview

This project is a modular game engine written in modern C++ with a focus on clean architecture, flexibility, and long-term maintainability. Rather than relying on an existing engine, the project was built from the ground up to explore engine design, rendering, audio, resource management, and application architecture. Though it is built as a lightweight game engine, it is made to be usable as a general-purpose program engine.

The engine is organized into independent modules that can be included or excluded as needed, also allowing the separation of core functionality from platform-specific implementations. This modular design makes it easier to extend, test, and replace components without affecting the rest of the engine.

It currently includes the following modules:

  • Core: Common utilities, data structures, and shared engine functionality
  • Math: Various mathematical structures, such as Vector, Position, Quaternion, etc.
  • Rendering: Window management, 2D sprite and image rendering, and text management with a backend-agnostic interface
  • Audio: Audio playback and management with support for seeking, pitch-shifting, panning, and audio groups
  • ECS: An Entity Component System architecture for performant, multithreaded management of many overlapping systems
  • Dialogue: A custom dialogue system for managing dialogue flow and events

The engine emphasizes modern C++ design and development principles, including RAII for resource management, strong type safety, templates and concepts where appropriate, and clear ownership semantics. SDL currently serves as the primary backend, and the engine architecture intentionally minimizes dependencies on third-party libraries to simplify future backend replacements or additional platform support. It is also made to be easily extensible, allowing the addition of subsystems and additional features for specific purposes.

Though I plan to use the engine for several projects in the future, one of the primary goals of this game engine has been educational. Many systems have been designed from first principles, including resource management, rendering abstractions, mathematical types, and engine infrastructure. This approach has provided practical experience in software architecture, API design, and performance-conscious programming while creating a reusable foundation for future programs.

The project is under active development, with ongoing work focused on expanding the rendering system, asset pipeline, editor tooling, and gameplay framework.