This project was made to learn about graphics and physics engine techniques along with audio play-back and mixing using SDL2, libsndfile and libao.
Works on macOS Mojave 10.14.6 and Ubuntu Bionic Beaver 18.04.4, not sure about portability on other operating systems. This project contains several submodules that you must initialize beforehand :
$> git clone --recurse-submodules https://github.com/kibotrel/42-Doom.git
$> cd 42-Doom && make
If you are running under macOS, you'll need brew
installed to compile the project since some dependencies are installed via this package manager.
Once the program is compiled, run it with the following command line :
$> ./doom-nukem
If you don't pass any argument to the program, it will allow you to play in an hard-coded map used as a tutorial that explains some of the mechanics implemented in the engine. You can play any well formatted map by passing it as argument like :
$> ./doom-nukem map.data
This program contains a three different sub-menus accessible through the main one :
- Game Test-play either the tutorial or any map.
- Editor Build levels and tweak parameters in real-time.
- Settings Update game-rules and modify engine's behaviors.
For more information, click on each sub-menu to be redirected on its wiki or here for the main wiki page.
Whenever one error occurs during the process, it leads to a complete memory free before exit()
with an error code and the correct error message displayed on the standard output. You can retrieve the code by running :
$> echo $?
More information available in the Error management wiki page of this project.
- Audio
- Fonts
- Animations
- Images
- 2D Raycasting - Texture mapping.
- Build Engine (Duke-Nukem 3D) review.
- Partial Duke-like engine demonstration.
- Frame by frame animation.
- Sound mixing with clipped frequencies.
- Point in Polygon algorithm.
- Multithread implementation.
- Pulse Code Modulation format (.PCM).
- SDL2, SDL2_ttf, libsndfile and libao APIs.