Loading… Please Wait – a Postmortem

Posted by (twitter: @Adam_DBS)
December 18th, 2016 8:42 am

So how did LD37 go?

capture2

About a week before, I had an idea about a Stanley Parable-esque game where the player is led through a set of terrible minigames by the developer, who is trying hard (and utterly failing) to design something that the player can enjoy. This idea was still fresh in my head when the “One Room” theme was announced – I ended up adopting this idea to the theme, which fit well with the idea of being stuck in a room waiting for the game to load.

I had a lot of fun with this! Especially the voiceover – quite ameteurish, but I learned a lot about how add VO to the game pipeline. I also did silly voices enough to make it difficult to *not* speak in a silly voice for a day or two afterward.

Couple of interesting things I did:
*Render Textures*
Each wall segment is actually a seperate plane, with a render texture – this texture is generated from one of a half-dozen 2D scenes hidden below the level:
LoadingScreen_Peek
Each wall segment chooses randomly from one of these textures on startup, with enough render textures to ensure a certain degree of variance. I’m not sure of the benefits of doing things this way, but it certainly made it quicker to get to a playable concept, as I could just change the logic of the texture rendering rather than iterating through every wall section all the time. Perhaps this was too heavy-handed in hindsight.

*Scene-based state machine*

advance
Each scene’s logic was controlled by child nodes of a GameObject being activated, deactivated and advanced. This meant that I could activate scene 3, start the game in the editor, and the logic would run from that point. This meant I could iterate on the later parts of the game much faster than waiting 3-4 minutes between tests. It also means cleaning up anything used exclusively by one scene by simply parenting the object to the scene itself.

*Game Dialogue Serialization*
Each line of dialogue triggered by the game has a bunch of data – the UID, the audio clip to play, the subtitled text (I decided to not render this on-screen in the end), and even a callback function to call at a particular time during the dialogue piece. This was collected into a serializable struct, Which was then stored as an array inside a ScriptableObject:
dialoguedata

This allowed me to quickly setup all the required data from inside the inspector:
dialogueinspector

*Post-compo reflections*
I think I only spent about 18 hours total making this. Could I have spent more time on polish? Most definitely. Yet sleep and company are two things which one should never go without, and so I made sure to have ample amount of both during the weekend.
What I made is definitely niche, and humour is always subjective and divisive. But i’m hoping a few people will crack a smile or be utterly thrown off guard by this :)

Adam_DBS <3 <3


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]