Overview

The Oracle is an evolving rules visual novel where you play as an oracle, but with every truthful prophecy you tell, you gain a restriction on your speech. As you tell more truths it will become more and more difficult to tell the truth, but you can avoid that by lying about the prophecies instead.

I wanted this to play on peoples' emotions and morality so I had to be sure to create convincing characters and interconnecting storylines. I also have these consequences affecting the player character's own wellbeing, so the player is balancing both themselves and others.

Trailer

My Role

This was a solo project I had worked on during my first senior studio class at Savannah College of Art and Design (SCAD). The original goal of this was to actually work on my systems design alone, but as I got further into the project I realized I wanted to focus on narrative design. But I was too late into the project to change my scope, so the narrative design of this has been moved to a side personal project.

For this project, I had created the dialogue system that handled the customer's question, their portrait, the player's answers, and the customer's reactions. I also included reactionary answers where you would see specific encounters later on based on answers you may have told to previous customers. I also had created the rules system that made sure the answers were following the rules the player gained, whether that meant changing how the answers looked or removing answers entirely from being an option.

Gameplay screenshot
Case Study

Development Breakdown

Concept

The Oracle is an evolving rules visual novel where you have been chosen by the gods to bear the Gift of Prophecy. Everyone around the world comes to you seeking advice on their futures, but with every truthful prophecy you reveal, your speech becomes more restricted. You must decide what is worth losing your speech over and what can be fabricated at the cost of your conscience.

Basic Narrative Outlined

I began with laying out a basic linear narrative progression with 5 encounters for the player in order to test the tone of the overall story and the dialogue system in the prototype. When writing out these characters and their encounters with the player, I wanted to make sure that their situations were not only diverse between them but also played at the player's moral compass — a little girl who believes her cat is magical and immortal, and a woman who is very sick asking what to do about her little boy.

twine layout

Prototype

I started by making a prototype in Processing to get an understanding of the overall system and the flow between encounters, then transferred to Unreal Engine 5. The system is composed entirely of Widget Blueprints, using Data Tables to easily modify dialogue strings and store values — such as whether a specific encounter would trigger a reactionary scene later on.

twine layout

I set up a data table for the encounters, with a row for each one holding the question and the four possible responses. A separate data table stores the characters' reactions — one for each answer the player can give. From there, encounters play out with the question and responses displayed, and clicking a response triggers the correct character reaction before moving to the next encounter.

Adding Detail to the Narrative

Once the initial dialogue system was set up, I added finer narrative detail throughout. I chose specific encounters that could have a reactionary scene depending on the player's answer. For example — the little girl who believes her cat is magical: if you go along with her and tell her he is truly magical, an angry mother comes by later yelling at you for filling her daughter's head with false hope. Small scenes like this deepen the moral weight of each decision and affect how the player approaches future encounters.

Data tables and text document original setup

I originally had reaction scenes set up to play two encounters later, but I'd like to adjust this to a random number between 2 and 4 to give some unpredictability to the player's experience.

Rules System

The last major step was designing and implementing the rules system. Not only did this mean designing all the rules themselves, but also checking and applying them after the player has earned them. Some rules change the player's available responses, some completely rule out certain responses, and some change the visual appearance of the game — building tension the further the player progresses.

rules blueprint

Rules are ranged in difficulty, and the options for gaining a new rule scaled with the player's progression. Rules were randomly selected from a difficulty-tiered Data Table, then removed once assigned to avoid repeats. Each new encounter then processes the player's full rule set in the order they were received — so if the player first got "Your responses are scrambled" and later "You can no longer use the word 'you'", the answers would be scrambled first, then each scrambled response would be checked for the word "you" and visually crossed out if found.

I'd like to redesign the rule scaling to account not only for story progression but also for how many rules the player currently has accumulated.

Gameplay Loop

The player receives their first encounter and is presented with a question. One of the available responses is labeled as the truth of the customer's future. If the player chooses the truth, they gain a rule. If they don't, they move to the next encounter without a new rule. If their answer triggered a reaction, that scene plays out shortly after. If not, the next encounter begins immediately.

Player Feedback / UX / UI

To support the player experience, I added a few key feedback elements. First, a visual indicator marks which response is the truth versus the alternatives — making the decision feel deliberate and morally weighted rather than arbitrary. Second, a toggleable rules popup was added after playtesting revealed that players were getting lost once they had accumulated more than 3–5 rules. This gave players a clearer understanding of their current constraints and encouraged more strategic thinking about whether each new rule was worth gaining.

Reflection

While I'm very proud of getting the game's functionality working, I would like to both reamp the narrative design to do a true branching narrative structure and redo the systems to be more optimized and cleaner. I'm already planning out the branching narrative structure with different routes based on the player's gameplay/choices, and then different endings for each route as well. For this game to be successful, the immersion has to be done very well or the goal of the game won't come across.