# The
# ██████╗ ██╗ ██╗██╗ ██╗ ██╗ ██████╗ ██╗ ███████╗
# ██╔══██╗╚██╗██╔╝██║ ██║ ██║██╔═══██╗██║ ██╔════╝
# ██████╔╝ ╚███╔╝ ██║ ██║ █╗ ██║██║ ██║██║ █████╗
# ██╔═══╝ ██╔██╗ ██║ ██║███╗██║██║ ██║██║ ██╔══╝
# ██║ ██╔╝ ██╗███████╗╚███╔███╔╝╚██████╔╝███████╗██║
# ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═════╝ ╚══════╝╚═╝
# project
# https://github.com/jacmoe/pxlwolf
#
# (c) 2020 - 2021 Jacob Moena
#
# MIT License
#
Seriously overengineered Wolfenstein-like raycast engine
Pxlwolf uses the LDtk Level Designer Toolkit to create and edit levels. First four levels of Wolfenstein 3D. Taking care of the details.
- Explore raycasting, including height-mapping and animated tiles.
- Learn how to use modern C++ features, and move from C++98 to C++17 and beyond.
- Create a complete game, and not just a tech demo.
- Use third-party code whenever possible, but keep things simple.
Here I will write the features of PixelWolf down as I implement them.
PixelWolf is being developed on Linux and Windows.
Compiled using MSVC 2019 on Windows, and GCC 9.3 on Linux.
Uses Visual Studio on Windows, and CMake on Linux.
Library | Description | License |
---|---|---|
Allegro 5.2 | A game programming library | Zlib license |
The easiest way to get Allegro on Windows is via Nuget, which is why this project uses Visual Studio for Windows.
The PixelWolf solution references two projects, Lua and PhysicsFS, which should be generated using CMake before opening the project.
Use the CMake script in 3rdparty
and choose 3rdparty/vsbuild
as the "where to build the binaries" folder.
Make sure win32
is chosen as the architecture, otherwise CMake will choose x64
(and that is not going to work).
After having generated the two projects, you can now open the PixelWolf solution. Maybe in the future, there will be a better way.
Allegro should be available from your package manager. On Ubuntu, perform a simple sudo apt-get install liballegro5-dev
On Linux PixelWolf is fully CMake'd. Simply open the main CMake script using CMake or a CMake-aware program, like VSCode or KDevelop.
Library | Description | License |
---|---|---|
cereal | C++11 library for serialization | BSD license |
enTT | C++ entity component system | MIT license |
Lua 5.4 | Scripting language | zlib License |
PhysicsFS | Archive support for games | zlib license |
PhysFS++ | C++ wrapper for PhysicsFS | zlib license |
RapidJSON | A fast JSON parser/generator for C++ | MIT license |
Sol | A C++11 Lua wrapper | MIT License |
spdlog | Logging library | MIT license |
stb_image | Image loader | Public domain |
The bundled dependencies are all header-only, and doesn't require building, except for Lua
, lgui
, and PhysicsFS
.
On Windows, you need to generate the projects simply by running the `` batch file from the 3rdparty
directory. You need CMake, Doxygen and the Graphviz tools (dot) installed.
On Linux, the CMake script handles all this for you.
This project is using code from the c-raycaster project - the raycaster and a lot of the pixel related functionality is borrowed from the project. It also uses code from Herrecito's 2.5D Raycaster engine in C. And the overall structure of the project is lifted from Balantkissdev's Raycaster engine.