Data
Name: JRPG Battle System with Narrative Enhancements
Solo Graduation Project
Year: 4th year HKU | 2020-2021
Technical Engine: Unity
Language: C#
Difficulty: ★★★★
Target Audience Research
Target Audience Research Paper Format
Annex to Paper
About
On this page you will find programming excerpts, design document excerpts, a WebGL build of the prototype that can be played in browser and links to two research documents.
I started my graduation project with the research of the current JRPG market to see what the design building blocks were. After dissecting 16 JRPGs to their basics, I set up a research that told me about the target audiences' demographics, their consumer behaviour concerning games and their preference about general JRPG mechanics. The research garnered 300+ responses and has been turned into a research paper.
Using all of this info, I made a design for a retro inspired turn-based battle system that implements mechanics that interweave narrative into the traditionally not very narrative-based battles. Combining my results of player preferences in battle mechanics and non-battle mechanics, I have chosen to build upon an imitation of the first Grandia's battle system. This system is in-between turn-based and ATB. Afterwards, I made a paper prototype of the battle system in Adobe XD, which I tested with a couple of players, and then I started prototyping in Unity.
The design of the game goes beyond its battle system, however the playable prototype only incorporates one battle that poses as an example. The details of the system that do not come forward in the prototype have been meticulously documented.
The prototype has not been made to be "quick-and-dirty". It also served as a programming challenge for me, where I would keep in mind reusability. I have incorporated some slight Unity editor programming and have paid a lot of focus on keeping the scripts readable and logical.
Game
Here you can play the final version of the prototype that I made. (All art is also by me: read more here.)
Game Design
Here you can read an excerpt from my game design document. As written in the disclaimer, I have written both ideas and finalised decisions in the document. I did not add explanatory artwork because this document was meant for me and I knew what I meant by writing it down. In a group setting, I would absolutely add graphs and explantory art, as well as structure it more than I currently have.
Programming
I have done all the programming myself as well. Here you will find my largest script, the battle systems' core system. You can always e-mail me to see more (and more readable) scripts, in which case I will send you the Visual Studio solution files. I do not have a UML available (to see my UML skills, look at this core programming module).
Challenges
One of the biggest challenges for me regarding programming was keeping the scripts in such a way that it was only dealing with its own behaviour. The script I posted below, the core battle system, used to be a God script, which I later resolved by taking a good look at the structure of the system and delegating a lot of the functions either to the unit script or the actor script. For example, the function for an actor's behaviour like attacking used to be in this script. Moving functions was not always copy paste; sometimes lists containing the battle systems current alive units had to be updated and because actors turns are asynchronously, I had to be careful in changing these values.
Another challenge was the amount of attributes for actors. Actors (the playable characters) needed first-time only, initializing values (e.g. a character starting out on level 2 instead of 1). Then, it needed max values of every stat, based upon its current level. Lastly, it needed to have the current amounts, like current HP instead of the max HP of that level. Deciding what belonged to which script was sometimes quite confusing, naming these variables in a sensible way idem dito.
I had also never really tried Editor scripting, but because I was making a banter system to be used during the battles, I did end up doing some editor scripting; both so I could see the face graphic of each piece of banter, and so I could rearrange the dialogue sentences, which would make it easier to add or delete sentences.
You can see the editor scripting I did on the right.