- A first-person FPS in the style of games like Doom and Quake.
- The Dungeon Dave engine is built fully from scratch, ensuring optimal performance for all platforms.
-
Normal Mapping
-
Parallax Occlusion Mapping (heightmaps are generated at runtime based on objects' albedo textures - currently disabled though)
-
Exponential Shadow Mapping (for soft shadows)
-
Cascaded Shadow Mapping (with blended depth layers - this makes transitions between depth layers a smooth fade)
-
God Rays (based on this technique from Nvidia, but works in light-space rather than in screen-space, which allows for the light volumes to remain when the camera is turned away from the sun)
-
Precomputed Raytraced Ambient Occlusion (a shader traces rays from each point in the scene to compute a set of occlusion values - and caches this on disk - and at runtime, the main shader tricubically interpolates from a 3D texture to fetch these occlusion values)
- The renderer is fully physically based, and employs a metallic/roughness material system.
- The renderer is a typical forward renderer, and utilizes a depth prepass.
- Shadows and god rays work perfectly for translucent objects!
- Billboard sprites are fully animated.
- The voxelized world uses greedy meshing to minimize the size of the overall world mesh.
- Levels use a set of original soundtracks developed by Adam Winograd. In-game sound effects use OpenAL for a surround-sound effect.
- I drew most of the pixel art with Aseprite, including the skyboxes (which employ cylindrical projection).
- To install any dependencies, run
install.sh
. Note that only MacOS and Fedora Linux are officially supported.
- Simply run
build.sh
, passing the build type as the first argument (debug
orrelease
). - If you wish to run the project as well, you can specify the second argument to be
run
.
- Head movement: mouse/trackpad
- Use weapon: click mouse/trackpad
- Forward/backward: w/s
- Strafe: a/d
- Sprint for forward/backward movement: left/right shift
- Jump: spacebar
- Fly: 1
- Toggle wireframe mode: 2
- Print position: 3
- Print direction: 4
- Print SDL error: 5
- Print OpenGL error: 6
- Print OpenAL error: 7
- Print OpenAL context error: 8