Left Upon Read
Left Upon read is a – dark fantasy, fast-paced, multitasking, combat game, where you need to navigate dungeons, kill enemies with your sword and magic while balancing responding to text messages at the same time. We created this over 3 months or 36 days, I worked in a team of 9 people to create Left Upon Read for our 3rd year professional project, with 3 programmers, 3 designers, 2 artists and a project lead. We then got in to Abertay’s DARE Academy and continued development in hothousing, one month full time development in mostly the same team of 7 people where we focused on polish and making it a great EGX experience. We applied and were accepted to show off out game at the Glasgow Independent Games Festival alongside other indie projects and successful indie games, and has been selected by Abertay university for their submission for the Best student game category at the TIGA education awards.
My Contribution
All the programmers did what needed to get done so we all worked on all parts of the program and learned a lot about the full development cycle. I focused primarily on the phone mechanic, messaging mechanics, bug fixing and player experience. Because the phone mechanic was novel it was created from scratch with the help of Unreal’s UMG UI and other unreal components. All the programmers helped manage the git repo with unreal.
The rewrite
We are currently rewriting the game from scratch. We decided this because of a variety of reasons but mainly
because of the state of the codebase. There was a huge amount iteration to find the fun of the game so there
was a lot of code that was being used but in ways that weren't clean and necessary. we have been working on
this project for around three years now, and our code skills have increased dramatically since then.
We decided that it is time to pay back out technical debts and structure the codebase in a much better way
that will be able to carry a multiple hour experience game.
The messaging system - Designer tools, Data management and UI
My first task was to rebuild the phone messaging system. I crated a designer tool with Data assets so
designers can easily add characters and messages seamlessly. I seperated the data assets out by character to
work around the binary asset limitation. The data asset type consists of a character name, image and list of
messages. Each message consists of an FName ID, initial message, an array of a struct that consists of a
player reply option and a character reply to that option. each character data asset is added to a character
message manager data asset that is attached to the message widget. This makes it easier for designers to add
more characters without needing to dig in to the widget blueprint and lets me encapsulate message management
code. I created a validator that's called with a button in the manager data asset that prints log files with
any issues, it checks each character has a name and image, in each message it checks for a valid ID, and
that the initial message has been filled. Everything else is designer optional. This runs through each entry
sequentially so could slow down with size but is only used in editor.
On game load, in the message manager data asset, I organise all the characters in to a TMap with the
FName ID as the key and a struct of a pointer to the message, and a pointer to the character. Using an FName
is the standard way of creating an Unreal hashmap as FName has an integer key associated with it and
performs integer comparison, so when we have many messages it will continue to be snappy. The lookup should
have an average time complexity of O(1) and a worse case complexity of O(n) which is nearly impossible.
A collider was created that includes a designer input to add any FName ID. When the box is hit by
the player the referencer is used to get the phone which a function is called and the ID is passed. the
phone queries the message manager and the TMap is queried with .Find(ID) to get the message (if there is
one). This then goes to the widget and is displayed on the phone. The player can read the message and chose
an option, when an option is chosen the UI displays the chosen option and the characters reply to the
option.
Creating a studio
We are currently in the process of making this an official studio and plan to apply to the coming Tranzfuser.