The Arcanist


ICT290 Project

The Arcanist


ICT290 Project

C++ | CMAKE | GITHUB

A diablo inspired dungeon crawler


Development Team

Matthew Davis
Michael John
Chase Percy

Project Planning and Tools

  • Weekly meetings
  • Kanban Board
  • Git with GitHub for source control
  • Peer code review
  • CI/CD
    • GitHub Actions
    • Static Analyzer (CPPCheck)
    • Automated unit tests (Gtest)
    • Clang-format
  • Doxygen


Overview

For this unit we were given complete freedom to create a game and game engine as we pleased using C++. As a group of three we had a lot of work cut out for us, but we managed to pull through delivering AI, random level generation, high-fidelity graphics, and a fun game. We were also tasked with fixing another students code and engine from 2006 and incorporating it into our game. Instead of fixing the students game engine we decided to black box it and extract the positional data and basic rendering calls. This decoupling meant we could design our game engine as we wanted without catering for the mess of the other student’s engine.


Features developed by me

Game Engine

  • OFF, OBJ, and MTL Loader
  • VBO Support
  • Support for multiple game scenes (Menu, Shays-world, The Arcanist)
  • Skybox
  • Audio (irrKlang)
  • Persistent settings
  • GUI (ImGui)

The engine was primarily developed through the first 4 weeks of the project and was the foundation for black-boxing Shays-world and creating our game, The Arcanist. Vertex Buffer Support (VBO) was what allowed us to achieve greater visual fidelity while maintaining good performance using legacy OpenGL.

GUI

Designed by me using the ImGui Library.

Arcanist Game Implementation

This included the game logic for the arcanist (excluding AI). Object events such as model updates, basic enemy animations, input handling, level transitions, shadows, collision particles, etc…

Collision Detection

Basic collision detection was used with data provided from map generation. This ensured the AI stayed within the bounds of the map or walk through obstacles, and that projectiles would explode on impacting something.

Seeded Map Generation

A room generation and Map generation algorithm I made was used to generate a map with a set amount of rooms randomly and a place range of possible obstacles within.

Further Reading

Connection Between Game State & AI

The AI and game state were associated through game objects which were updated to match the location and rotation of AI entities. Appropriate associated models were mapped to these objects and were kept independent of the AI entities themselves. If an AI entity was killed, the object would still exist but now represent a dead enemy at the AI entity’s last location. I also helped adjust the AI to navigate better around the rooms and refined features such as collisions and tweaking movement values.