Skip to content

comeChaslerie/Doom93

Repository files navigation

Doom93

CI C++20 Build system: xmake

A recode of id Software's original Doom (1993), built on top of the Engine² (Engine Squared) engine.

Doom93 is a learning project focused on modern C++ (C++20) and the ECS (Entity Component System) paradigm. The gameplay is rebuilt piece by piece on top of Engine², which provides the Core, the entity registry (powered by EnTT) and the system scheduler.

Table of contents

Requirements

  • xmake (build system and dependency management)
  • A C++20 compiler (recent Clang or GCC)
  • clang-format and clang-tidy (≥ 22) for style checking and linting
  • On Linux: libglu1-mesa-dev freeglut3-dev mesa-common-dev mesa-utils

C++ dependencies (entt, glm, spdlog, fmt, tinyobjloader, gtest) are fetched automatically by xmake.

Installation

The Engine² engine is included as a Git submodule. Clone the repository together with its submodules:

git clone --recurse-submodules git@github.com:comeChaslerie/Doom93.git
cd Doom93

If the repository was already cloned without its submodules:

git submodule update --init --recursive

Build & run

xmake            # configure and build the project
xmake run Doom93 # launch the game

Testing & quality

The project is tested with GoogleTest: every source file in src/ has a mirrored test target in tests/.

xmake test                  # run the full test suite
xmake format -c             # check formatting (clang-format)
xmake check clang.tidy      # static analysis (clang-tidy)
xmake check_leaks           # memory leak detection (macOS)

The GitHub Actions CI (.github/workflows/ci.yml) runs on both Linux and macOS: repository cleanliness check, clang-format, clang-tidy, multi-platform build, tests, coverage (gcovr) and memory leak detection.

Architecture

The code follows a strict ECS organization:

  • Components (src/game/component/) — pure data attached to entities: Health, Armor, Stat, Ammo, Damage, TextureHandle
  • Systems (src/game/system/) — stateless logic operating on components: ComputeDamage, ApplyDamage, AmmoInventory.

Systems are registered on Engine²'s scheduler (Startup, Update) from src/main.cpp.

Repository layout

.
├── src/
│   ├── main.cpp              # entry point: Core and systems setup
│   └── game/
│       ├── component/        # ECS components (data)
│       └── system/           # ECS systems (logic)
├── tests/                    # GoogleTest suites (mirror of src/)
├── assets/                   # game resources (see below)
├── EngineSquared/            # submodule: the Engine² engine
├── xmake.lua                 # build definition and test targets
└── .github/workflows/        # CI pipelines

Assets

Resources are organized by category under assets/: audio/, engine/, entities/, environment/, levels/, ui/.

They come from the free Freedoom project — see assets/FREEDOOM-CREDITS.txt and assets/FREEDOOM-COPYING.txt.

About

Doom93 recode project based on cpp and EngineSquared

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors