Play as a nameless protagonist that confronts physical manifestations of their inner turmoil within a casino and gamble your life through an intimate Russian Roulette styled card game.
Solo Final Student Project
Engine: Unity 6​
Duration: 7 Weeks
Genre: Visual Novel, Psychological Horror
With tight time constraints, I had to keep in mind the complexity of coding multiple systems and creating reasonable time estimates based on those systems. I also would be needing to take on the roles, such as narrative, art and audio. Thus, I chose a Visual Novel approach as I concluded it could be achieved in time, and I had dabbled in programming elements from other small-scale projects that I can transfer over.
Most importantly, I wanted to create a game that felt personal to me with its emotions and theming at the time through its story.
Core
I utilized Singletons and an Event Bus for scripts to communicate with each other. I used Singletons for specific use cases, such as handling audio for this game with its small scale and it not needing many sound effects.
​
I used an Event Bus to better handle communication between scripts and to allow event management to be centralized for easier debugging and readability across scripts. I also created a base interface for all specific events to inherit from.


Text System
I outlined for my text system that I wanted a maximum of two option buttons that could change dialogue for a single dialogue branch though not changing the linear story. I also wanted to ensure the text system only reads data meant to be displayed as text on screen.
​
To make the text system flexible enough for all the use cases I would be needing for this game, I implemented scriptable objects. This allowed for dialogue to be easily swappable across different screens and for dialogue to be edited individually. ​
​
Below is the data structure for a single dialogue branch to be read by the text system:
​
​


For dialogue that would iterate when progressing through the card game, I made a new scriptable object to make the story branching unique based on the player's actions in the card game while keeping the overall story linear.
This scriptable object is to connect the text system and card system together.
I chose to make unique dialogue branching from the card game to develop characterization for the protagonist the more the player replays the game and performs different actions in the card game.
Card System
I understood at the beginning of this project I would be creating all the art to achieve the exact look I wanted and that I could change symbols on cards instead of an entire art asset for each unique card time.
​
To connect the text system and card system together for needing to change dialogue based on the player's actions from the card game, I needed to ensure there was a way for either systems to recognize the card played by the player to then choose the matching dialogue branch for the text system.
Therefore, I outlined for my card system I only needed four card types, a type to identify the card type and a sprite for the symbol of that card. The card type is checked by the card system.
​
​

Conclusion
I leant about a more advanced event system to decouple scripts and allow more flexibility, gained more confidence when having to work with events, gained more confidence when needing to debug problems, honing more of my understanding of scriptable objects and understood the use case better of singletons. I also grew more into the practice of documenting my code externally.
I also understood my workflow when under a tight time schedule, recognizing I'm an efficient worker and have strong time management skills.
​
What I would have done differently is extending the planning time more before jumping into engine, specifically with understanding the type of the card game I wanted to make and picking core themes for the story.


