Downtown Bazooka
Overview
Downtown Bazooka is a 3D action exploration game inspired by Tron and Mad Max. It was developed with members from the Video Game Development Club at UCI over the course of the 2015-2016 school year. I was the main programmer and was accompanied by a gameplay programmer, sound designer, and producer.
Instructions
The goal of the game is to get to each waypoint and then defeat the final boss.
Certain buildings provide healing
BEWARE OF LAVA!!
Controls
WASD / Arrow keys - Move
Space - Jump
Left Click - Shoot (can shoot at feet to launch yourself)
Engine Features
- Custom physics solution
- Spacial partitioning using quadtrees
- Collision events sent to Entity system for gameplay programming
- Axis-aligned bounding box collisions
- static, dynamic, and trigger colliders
- triggers will pass through dynamics but still call collision events
- dynamics will collide with everything even while moving (enemy stacking)
- Heightmap terrain collisions
- Debug rendering system
- Transform system with support for 3D position, rotation, scale, and parenting
- Noise generation and Math utility classes
- supports simplex and worley (cell) noise generation with fractal variants
- used to procedurally generate city and terrain
- Flexible particle system
- Bloom shader and full screen shader support
- Sound effect and music playback system
What I Learned
The primary reason of this project was to learn more about C++ and actually make my own game engine with it. In the process I also learned much about OpenGL and physics. While the engine was mostly from scratch, I did use SFML for the OpenGL bindings, 2D UI rendering, and audio support.
Oh boy was this challenging. So many things I took for granted with Unity ended up being huge hurdles and roadblocks during development. Here's a short list of the most time consuming parts of the engine:
- Rendering code (mesh handling, shaders, particles etc), so many different ways to handle this. Ended up just super optimizing cube drawing using instancing, since basically everything in the game is made of cubes (except the terrain).
- Transform / Entity system, required TONS of matrix math making sure they combine in correct order to have proper parent child relationships
- Physics... even as basic as it was with one collider shape (AABB), 3 different collider types, and collision callback events, it still took tons of time, and never really worked 100%. Regardless, I am very proud of that code specifically and how far I was able to get.
Overall it was a very rewarding experience, despite the pain and torment of not using an engine. It really made me appreciate Unity and everything it does for you. But man, there's nothing like seeing your game boot up super fast as a raw C++ app, feels so badass, haha!