A downloadable game for Windows
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.
- Custom physics solution
- Spacial partitioning using octrees
- 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 / Entity 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
- Text rendering for menu and instructions screen
- 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 to be instanced, since basically everything in the game is cubes except terrain.
- Transform / Entity system (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 just AABBs, 3 different collider types, and collision callback events, it still took tons of time, and never really worked 100%. I don't even care though, I am so proud of that code. It worked most of the time anyways... XD
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!
Thanks for reading.
If the game doesn't run make sure you are on windows and check the README.txt for a link to the microsoft redistributable your computer may be missing. If so, make sure to download the x86 version. Have fun!