Big Balls Roll


ICT289 Project

Big Balls Roll


ICT289 Project

C | LUA | CMAKE | GITHUB

A Marbles and monkey ball inspired game


Development Team

Peter Crabbe
Matthew Davis
Chase Percy

Project Planning and Tools

  • Weekly meetings
  • Kanban Board
  • Git with GitHub for source control
  • CI/CD
    • Travis CI (1/2 the unit)
    • Jenkins (1/2 the unit)
    • Static Analyzer (CPPCheck)
    • Automated unit tests
  • Doxygen
  • LLVM Style Guide


Overview

This was the first unit in my games technology major and a large step up from anything I had done in my first year at university. I was fortunate to be in a group with Peter Crabbe who at the time was a third year student completing this unit. His knowledge and best practices really helped shape me as a developer and problem solver. Matt and I used this knowledge as the basis from which we structured our future groups and taught other team members. In this unit we had to design a game engine in C and create simple linear physics. We also had to create our own math library and a game to demonstrate all these features.


Features developed by me

Texture Manager

A simple texture manager that was responsible for loading textures dynamically during runtime and through preloading at engine start up. The manager was responsible for storing texture IDs and providing them when a texture was requested. STB_IMAGE was used to load textures from PNG and JPG filetypes.

Physics Debug Renderer

This debug renderer shows the Bounding boxes of the physics objects within the scene. A vector data structure was implemented so that debug data could be inserted dynamically without first checking the number of collision bodies in the scene.

GUI

The GUI was implemented using the Nuklear immediate mode GUI library. With minimal documentation, it was quite a challenge to implement, and multiple times I was required to read through hundreds of lines of source code to figure out why something wasn’t behaving as expected.

Skybox

The skybox was implemented by creating a 1x1 cube applying a texture to its internal faces. This cube was then placed around the camera with its location translated with the camera every frame so that the player could always see it. The final requirement was to render the cube first per frame and with the depth buffer disabled so that all other objects drawn appear in front of it.

Game Logic (Partial)

The game logic was implemented using LUA and allowed us to use LUA’s table structures to form class-like data structures. I helped Peter implement game logic, such as level transitions and ball movement/control. I also created scripts for in-game menu interactions/HUD, scoring, and polish such as models in the game.