Skip to content

:suspect: C++ game engine built from scratch, based on OpenGL, side project for learning purposes

License

Notifications You must be signed in to change notification settings

adrienlucbert/redoom

Repository files navigation

ReDoom Engine

License: GPL v3 C/C++ CI CodeFactor Lines of code Files count

💡 Idea

ReDoom game engine is an unpretentious side project, conducted for learning purposes. The main goal is to develop a game engine from the ground up, bundling as many interesting features as possible, for me to learn as much as possible about the different concerned fields:

  • Computer graphics
  • Spatialized audio
  • Game physics
  • Networking
  • Artificial intelligence and predefined behaviours
  • Debugging, software profiling, benchmarks, optimization
  • ...

There is no fixed end goal, as this project aims to be a playground for any idea I would be interested in trying. However an unofficial goal is to recreate at some point one level from the first Doom game, mostly as a tribute to this game which is considered, alongside its older brother Wolfenstein 3D, to be the grandfather of first-person-shooter games.

🗺️ Roadmap

As this is a project with no fixed end goal, conducted only for learning purposes, it also has no clear roadmap. I am developing features to my liking.
For that reason, I describe herebelow not a complete roadmap, but only the current status of the project and what I plan to do next, in the short term.

You can also visit the project's open issues where I keep track of improvements I want to bring to my project, as well as the known bugs or performance issues I want to fix.

Domain Feature Status
Build system / CI
Use clang-format and clang-tidy to lint and perform static analysis on the code ✔️
Use thread-sanitizer to detect potential data races ✔️
Use ccache and ctcache to reduce build times in Github Actions ✔️
Core
Implement a data-oriented Entity Component System pattern ✔️
Support custom behaviours (as components) ✔️
Perform core allocations via an Object Pool to limit kernel calls ✔️
Perform thread spawns via a Thread Pool to limit kernel calls ✔️
Handle events via an Event Queue (keyboard, mouse) ✔️
Serialize and deserialize scenes ✔️
Asset pipeline 📅
User interface
Basic game engine UI and scene visualization/edition 🚧
Computer graphics
Perspective projection camera with free movements ✔️
Render textures ✔️
Render 3D meshes ✔️
Load and render 3D models ✔️
Render fonts 📅
Basic lighting (directional, specular, ambient) ✔️
Basic shadows 📅
Game physics
Gravity and movement forces ✔️
Hitboxes and debug wireframe visualization ✔️
Collision detection ✔️
Collision response 🚧

🔨 Build

To build the project, follow the steps below:

# Make sure you have the necessary system packages installed
# ⚠️ The following system packages installation commands may change depending on 
# your OS. Below example is for Ubuntu 20.04
sudo apt-get update -qq
sudo apt-get install -y cmake clang ninja-build
sudo apt-get install -y --no-install-recommends libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libgl1-mesa-dev

# clone the repository
git clone git@github.com:adrienlucbert/redoom.git
cd redoom

# clone git submodules
git submodule update --init --recursive

# apply patches (some submodules need patches to work with the project's build system
git apply .patches/system_includes.diff

# create the build directory and generate the build system
mkdir build
cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++

# build the project
ninja

Once the project is built, binaries are located in the following directories:

.
└── build/
    └── bin/
        ├── benchmarks/ # various benchmarks done to improve game engine's performance
        ├── tests/ # game enine tests
        ├── examples/ # game examples using the game engine
        └── redoom # game engine binary

About

:suspect: C++ game engine built from scratch, based on OpenGL, side project for learning purposes

Resources

License

Stars

Watchers

Forks

Releases

No releases published