top of page

This project, created in a team of 8, was created as a student-led brief with Rockstar Games as our client. As Catalyst games, we've spent 4 months developing this project - working closely with our client. It was showcased as one of only 8 projects during Abertay Offer Holder Day.

In a team of 3 programmers, the project had few innate technical challenges; aside from the rhythm minigame and a large dialogue system, most systems were simple.

My core responsibilities on the project were UI functionality and implementing dialogue.

Technical Documentation

(25 pages)


Final Dialogue System

The dialogue system was one of the most technically challenging parts of the project. That's because after considering multiple solutions, we settled on a solution that could support long, non-linear dialogue by handling each dialogue screen as a node in a single-linked list.


The dialogue also had to be easy to trigger from various sources; event triggers, boss progression and various scripts. All while being easy to use by our writers, and ensuring the written dialogue would not be lost between various versions.


The graph editor tool was made by our team - while the first prototype was developed, I handled integration of its output into the GUI and all GUI functionality. Later, I expanded this tool to properly handle dialogue options and to process changing character sprites and character names. I also optimized dialogue data size 7-fold.


Branching dialogue was almost scrapped at one point.

4 weeks into development, we learned that the experimental graph-view library we were using was not yet build compatible. As a result, we had to separate the dialogue editor functionality; data retrieval could make no reference to any class using the library.

To make matters worse, the tool could output scriptable object files in a way that was not human-readable and non-accessible through other scripts.

I created a solution. By overhauling the save/load system to output both Scriptable Objects and .Json files, we had the flexibility of drag&drop functionality of SO's and simple script deserialisation of .json files. 

The DialogueTyper was the core coroutine handling typing out and displaying dialogue text retrieved from dialogue nodes created in the graph tool



While the development of the project took place between February and May 2023, ideation started in September 22 teambuilding back in March

One of our main goals was to make a game which all of us would be interested in. Using a questionaire, we figured out everyone's dealbrakers and slowly narrowed down the systems and gameplay we'd want to create.








Some of my early system ideation. I was a big proponent of using ranged combat rather than melee early on, but after some revisions the team settled on melee combat.

Before Jira was set up, I broke up the features needed by the game into a roadmap, so we could prioritise and divide tasks from day 1 of production.


Initially, the combat system was much more complex: we all liked the idea of a buff-steal mechanic, where after killing a given enemy, player would receive a specific temporary power-up. I've broken up the sub-systems required for implementation.

As pre-production continued, we realised we did not have the resources for fully animating many minor enemies. The idea was scrapped in favour of bossfights with single enemies, greatly simplifying the system.

Catalyst mechanics breakdownDark.jpg

UI implementation

UI implementation required a fair bit of fine-tuning and iterating, despite its simple appearance. With frequent changes from client feedback, fine-tuned art assets and evolving gameplay flow, it was constantly evolving.

Switching between various screens and pop-ups, while ensuring proper layering order and toggling many elements at once took a fair bit of bug-fixing.

As I was ahead of my backlog on multiple occasions, I've been permitted to add a handful of interface effects for a greater sense of polish.


Prototyping the UI

Since the wireframe of UI was implemented early, a lot of time was left for bugfixing and iterating on client feedback. Regrettably, there wasn't scope for additional UI effects or 'juice', making it feel quite static

Week 1


During week 7, I was ahead of the backlog so I could address client request of full controller support. I’m pleased with the result, particularly as I’ve never tackled controller input before.


Week 14

Week 7

If interacted with “normally”,  the UI flow would be smooth. However, by simultaneously using multiple toggles, undesired effects were prevalent.


Teamworking solutions

I was responsible for GitHub administration for the project for 3 programmers and 2 designers. I also handled most of art implementation, though that was done outside of GitHub as these were less iterative.

I decided on a rapid, weekly cycle, with a weekly main branch. Come Friday, we merge into each other's branches, verify feature stability, then merge into the weekly main. Monday we branch from last week's main onto feature branches.

This system meant we always had a stable backup of the game for each week and that everyone has a reasonably up-to-date version of the game that they add features on top of, reducing conflict errors and overwriting new versions with old versions.

Despite skepticism of my peers, I maintained a high pace throughout the project, only slowing down for spring break.


From the very start I kept weekly logs of what current priorities and known issues are. 

Whenever a bug was spotted, or a suggestion made, it was noted down, so we could come back to it when urgent issues were resolved.

Later, these were directly copied to Jira; no bug was stored in human memory and thus overlooked.


Polish & Fine-tuning

Thanks to establishing the game concept early and great pace of progress of the programming team, we had a fair bit of time for adding minor improvements to animations, effects, UI, dialogue combat and VFX. While small on their own, they compound into gameplay which is more satisfying and professional.

I found a way to greatly reduce file-size. The original design made shallow copies of each node's children, and unintentionally recursively their children. By changing it to a hash value reference, children data could be retrieved just as fast, while file size was reduced 7-fold.


I've edited the static shot to add motion, added the fire effects, SFX, crossing out animation and list scrolling effects to make the outro more engaging and dynamic.

While such effects helped a lot, lacking a designated UX designer, I made them in my free time

bottom of page