This was my first month-long project, where i tried to implement various RPG mechanics in Unity, and learn a bit of Blender along the way.


As my first large project, I thought it would be nice to make something insipred by Pokemon, as Pokemon Soulsilver was one of my first games, and ignited my passion for games and game development.


The work I did in Blender was all of the character modeling, texturing, rigging and animating

Dialog

The first thing i made was a dialogue system, which seemed pretty integral to the RPG experience.


I wanted a system that would allow me to quickly edit the text and manage dialogue tree's in the editor, so I opted to use scriptable objects as the basis of this system.


It was a great opportunity to learn how to work with scriptable objects so it felt like the right decision. Though I would likely use a more conventional dialog system if I had the choice, I was able to make something that suited my needs.


The main functionality I built it on was SerializeReference, which allows you to add Serializable classes to an object in whatever order you need (stored in a list).


These classes would contain the data for the dialog, and all I would have to do would be to iterate through the list, take the class and the data attached, and excecute the appropriate behaviour.


This does a pretty good job at providing the functionality I needed without requiring me to develop a whole visual editor for my dialog. One issue I found is that all of the raw text data for the dialog is stored in the scriptable objects, which could be problematic if you are trying to get all the text in one place to localize it, or if the scriptable object class is mishandled it could cause the held data of all the scriptable objects to be lost.


Otherwise though, pretty handy.

Turn Based Combat

For the turn based combat I decided to go with coroutines to manage the turn states and handle the step by step nature of the system.


This system was a lot simpler so there isn't much for me to explain, it was a very systematic and straightforward process, the only challenges I found with it were in managing the references so it could get and set all the data it needed without making a dependency hell.


Because I was storing creature data in scriptable objects this was a bit easier to manage.

Creature Data

Each of the creatures and their data are stored as instances of a scriptable object class, But changes to scriptable object instances are not saved across play sessions so I had to save the data manually.


Creature save data stores the essential serializabe information like their level, name, nickname and current health.

When the game is started the array holding all of the data is iterated through and each creature is reconstructed as an instance of the scriptable object class.


This is only required for the creatures that the player has access to, as NPC's have fixed teams that do not need to retain changes in data.


There's also the matter of generating new creatures with new data, but it was a very similar process to the reconstruction from save data, just using some randomized values for those essential values like level and gender.

3D Menu

I also wanted to make a little menu inspired by the pokedex to manage creature data, and act as a sort of diegetic UI.

And while I love how it turned out, I made it in a single day and never want to look at the code behind it ever again.

So that's it for what I plan on showing off or talking about. As of writing it has been half a year since i worked on this and looking at my old code I feel very confident that I have improved, and I'm starting to get the itch to make another big project so stay on the lookout for that.