Important notes about the visual showcases:
Left gif: I made everything you can see except the dialogue stored in the data table I show.
Top right gif: I made the level selection menu entirely, excluding the leaderboard connection (not shown). I also made the zoom effect into the blackhole.
Bottom right gif: I made the lightning effect and the rain effect.
This section goes more in depth about how everything works, reasons why we did what we did and also shows some code.
For the dialogue system, we decided to keep it all in a data asset for easy access and editing. However, after the first prototype we realised it would be very messy and difficult to work with, mostly because I didn't (and still don't) know if you can edit the way the data assets look. Everything felt a bit too cramped together. It still worked for what we needed it to do but with a slight change. Instead of writing the dialogue in the data asset directly, it would be written in excel and imported into unreal. This would allow us to easily change a lot of dialogue very quickly, and all we'd have to do was connect the correct voicelines to each dialogue item.
Our workflow looked like this:
Write out the dialogue in the excel sheet
Download the excel sheet as a .csv file and import it into unreal. Replace the existing .csv file.
Click the button I added through an editor script to load all data from the .csv file into the data asset we were using.
The process was very simple and ended up working very nicely, saving us a bunch of time. All dialogue in the game was based on this data asset, so everything updated once the data asset was updated.
The struct used for each item in the data asset. I store things as what character is speaking, what their message is and the audio file for that message.
The struct used for dialogue regions. Each region is basically the entire conversation that should be played when the dialogue is triggered. I stored a list of dialogue items in each region for that purpose. The data asset itself only stored a list of regions.
This is what the data asset for all dialogue looked like. We assigned a tag to each region which is what gets used to fetch all dialogue when it should be displayed.
This entire editor tool was a big learning process for me. I had no prior knowledge about tool creation, neither any knowledge about editor modules, etc. I was basically starting from scratch and it was quite enjoyable but also frustrating at times. Finding out how to actually add a new tab and button to unreals menu took way longer than I'm willing to admit.
This is where the button to update the dialogue data asset was located. Easy access and quick to use.
The initialisation of the module. It tells unreal to add a new menu after the Help menu.
The add menu function tells unreal things like what the menu should be called and the tooltop when you hover over it. Then it calls the function FillMenu which explains what should be in the menu. I give the button a name and a tooltip and then connect a function to it which gets called whenever the button gets pressed.
I load the data table by finding the specific reference in unreal, which is why the system requires that you replace the previous one. Otherwise it wouldn't be able to find the data table. Then, after filling an array of structs, I send that in to one last function that fills the dialogue data asset.
This is the function that fills the dialogue data asset. It tells unreal that the data asset is being modified and also clears the current state of the data asset. Then it reads all the information from the structs I sent in to the function and sends that to the data asset. Finally, I mark the data asset as "dirty" followed by saving the asset to keep the changes.
Helper function to turn an FName into the corresponding GameplayTag.
This data asset is another almost essential tool for us to edit the dialogue. It simply connected a character tag to some information about the character, being the displayed name and the color. However, without this asset we would've had to hard code the color of the character in some probably hard to find location.
I also made the entire dialogue system in the game, however it's in blueprint. Apart from that I made the pause menu, level selection menu (minus the API calls for the leaderboard stuff), coyote jump and the thunderstorm effect and logic in memory 1.
In this project I learnt how to make a new module, as well as how to add extra tabs and buttons to Unreal Engines ui. I also understood the particle system a bit better. The most important thing though might be how important good structure is. We spent a bit of time on making the dialogue stuff easy to work with and easily editable, and it definitely paid off in the end as we could make changes very quickly.
Narrative Design, Level Design, Product Owner
Gameplay Design, Tech Design, Sound Design, Scrum Master
Gameplay Design, System Design
Level Design, Narrative Design
Backend Programmer, Perforce Advisor
Physics Programmer
Graphics Programmer
Gameplay, UI & VFX Programmer, Perforce Advisor