Holo & Veil invokes the feeling of an old-school adventure JRPG with all the modern fillings. Features an ever-changing narrative, player-driven exploration, and snappy turn-based battles.
Designed, prototyped, and implemented gameplay mechanics, systems, and levels. (Turn-based combat, platforming physics, interactions, progression, UI)
Collected, analyzed, and applied playtester feedback during design iteration to improve the game experience. (Managed both private and public playtests—including one playtest with over 100 players)
Designed and balanced RPG mechanics including equipment, items, and abilities to increase strategic diversity. (For player controlled entities and non-player entities)
Designed a branching narrative and wrote dialog for world building, tutorials, and gameplay mechanics. (Character and enemy abilities, NPC conversations, system tutorials, etc.)
Handled various artistic tasks. (Visual illustrations, animation, UI design, music)
MY DESIGN PILLARS
Exploration is Progression. If the narrative drives progression, exploration drives the narrative. Nothing happens in this game unless the player discovers it.
It's a Metroidvania for Me. Backtracking, power-ups, a little bit of confusion here and there, and most importantly a sprawling interconnected world that unlocks non-linearly over time.
There's Something Behind that Rock. There's always something new to discover and there's always something missing. If a player finishes their first playthrough with 100% completion, then I have failed.
Interlude Village (lower)
Village Basement
BACKGROUND PARALLAX
To give each environment its own distinct flare, I drew various background and foreground objects: Plant life, clave walls, lighting fixtures, a giant tree, some planets, etc. I then separated them into layers and wrote a script to have each layer animate as the player moves from one location in a scene to another. The slower a background layer moves, the farther away it is perceived to be. You can see this in the GIF below.
Overview of various in-game enviroments.
UNDERGROUND AREAS
Interlude Village. The main hub. Connects to many other areas of the game. Stuck in a state of constant twilight and always raining.
Urban Area. The intro area. Introduces the basics of exploration and combat. Near the surface, partially outside the spacecraft's interior. An overgrown, jungle-like environment.
Village Basement. The area below Interlude Village. Rain from above trickles down.
Village Ruins. The ruins of an acient civilization of underground inhabitants. Dark and dingy.
Interlude Village (upper)
Urban Area
Partially Complete Map
Village Ruins
A NON-LINEAR METROIDVANIA
There are two components to exploration and progression in Holo & Veil:
Locks. Obstacles that temporarily prevent a player from progressing, like a ledge that is too high to jump over.
Keys. Exploration abilities, like a high jump that lets players jump over a high ledge. Mostly Physics-driven.
As players explore, they will find keys that increase the accessible areas they are able to travel. Each key unlocks multiple different pathways which will eventually lead to other keys. Along the way, players will discover events related to the narrative, progressing the story.
Map of the Urban Area
MY DESIGN PILLARS
Progression is the Narrative. If exploration drives the narrative, then the narrative is just a bunch of triggered events, scattered throughout the world. These events set the game world into motion and after each one, the world adapts.
Characters, Characters, Characters. The world is full of a diverse cast of characters, and those characters all have their own lives. They live in different places, establishing different communities with their own aspirations. Characters, controlled by the player, drive the narrative.
The Truly Meaningful Things in Life are Just Around the Corner. In life, we often chase after the wrong things. Unfortunately, we often only realize what truly matters after it's already too late. In many ways, Holo & Veil is a story about giving up, relinquishing those meaningless things and holding on to what truly matters.
WITH A NON-LINEAR STRUCTURE
I have split the narrative in Holo & Veil into chapters. Unlike a book, these chapters are non-linear. They can be experienced in different orders, some can be skipped, and the events within them will change depending on the order they're experienced in. No matter the path the player takes, their story will always culminate to the same climactic moment.
AND VARIABLE DIALOG
Due to the non-linear narrative, dialog (in cutscenes, character conversations, and NPC interactions) had to be implemented in such a way to handle various possibilities, without the need to write large amounts of alternative scenarios. My solution was to use characters to figure out what information is know and what lines should be spoken during any given dialog conversation.
This is possible for two reasons:
There are characters I know will always be in the player's party. These characters will always join the player on their adventure regardless of the path they take. They might join at different times, but they will eventually join because their story must conclude to reach the game's ending.
There are optional characters that only join after key events. Many chapters features a character that will join the player's party for the remainder of the game if the chapter's story is progressed enough.
With just these assumption in mind, dialog can be dynamically adjusted based on the characters currently in the player's party. If certain party members are present, certain sections of dialog will be added or skipped.
NPC conversations however, needed to be handled slightly differently. In addition to the variations described above, NPC dialog is adjusted in another way.
All NPC conversations are referenced with a Dictionary that stores the name of the NPC and an index to represent which of their dialog conversations will be queried after the player initiates a conversation with them.
public static Dictionary<string, int> NPCDialogTracker.Database {
{ "npc_name", index }
...
};
When the player triggers a conversation with an NPC, the dialog UI is set based on the above parameters
// function
public void DialogSystem.EnableNPCDialog(string npc_name, int index) {
// NPCDialog.Dialogs stores all NPC dialog data needed to set dialog UI
Dialog._dialog.Set(NPCDialog.Dialogs[npc_name][index]);
StartCoroutine(EnableDialog(npc_name));
}
protected virtual IEnumerator Conversation() {
// before dialog
index = Mathf.Min(index, NPCDialog.Dialogs[npc_name].Count - 1);
// function call
index = NPCDialogTracker.Database[npc_name];
dialog_system.EnableNPCDialog(npc_name, index);
...
// after dialog
NPCDialogTracker.Database[npc_name] = index + 1;
}
Before dialog, the index is checked to see if it is outside the bounds of the container. After dialog happens, the stored index is increased.
When certain story events occur, dialog may be added to or removed from NPCDialog.Dialogs. If added, the index remains the same. If removed, the index is adjusted down by the amount of dialogs removed from the container.
// function, same class as NPCDialogTracker.Database
public static void LowerDialogIndex(string npc_name, int dialog_removed) {
NPCDialogTracker.Database[npc_name] -= dialog_removed;
}
This way, the player is always shown dialog they have never viewed before. However, there is one exception. The final dialog conversation stored in NPCDialog.Dialogs will play repeatedly if all other dialog conversations have been played.
If an NPC has a new dialog conversation to view, a small indicator will appear next to the NPC's head.
Left NPC has new dialog, right NPC doesn't.
MY DESIGN PILLARS
Engage the Player way too Much. The player should always have something to do, just like in an action game. Sometimes thinking, sometimes reacting, always engaged.
No Time Wasted. Animations should be short and to the point. UI should be responsive and enemy actions should be snappy.
Endless Strategic Solutions. Battles are like a puzzle and the pieces are your characters, their equipment, and the enemies you face, leaving players with an endless number of combinations to experiment with.
Ah... It Never Gets Old. After 15 hours of gameplay, battles should be just as interesting as they were 15 hours ago. Constantly introduce new enemies, new characters, new abilities, new items, and new equipment to keep things fresh. New parameters should be competitive with existing ones, never strictly better.
What the Flip Was That? Battle should have an element of randomness, and feature hidden mechanics and synergies for the player to discover.
The Battle Scene
SO... COMBAT IS OPTIONAL?
I decided early on that combat and the entire level-up system would be almost entirely optional, baring a few boss encounters that progress the narrative. Though Holo & Veil is an RPG, I designed it like an real-time action game. I would consider it closer to Dark Souls than Pokemon. A fight is only won if the player is skilled enough to win. Sure, if a player's level is higher, combat is easier for them, but like Dark Souls nothing is guaranteed.
Choosing an action.
Completing an action event.
CORE COMBAT MECHANICS
There are two features in Holo & Veil's combat system that were the linchpin of its design:
Action Events. I designed action events to function like mini rhythm games in Holo & Veil. After choosing an attack to use, the player is given an action event to complete. How well they do in this mini rhythm game of sorts determines how much damage their attack does to the enemy. Every attack has its own unique action event.
Guarding. Similar to action events, guarding is also like a mini rhythm game. Guarding gives the player a chance to reduce or cancel an enemy's attack. They must time a button press to the exact moment an enemy's attack connects.
Attacking an enemy after a sucessful action event.
Attacking all enemies with a powerful attack.
This encourages players to stay alert at all times to effectively optimize combat. It also provides techniques for players to master, as each character has a wide variety of unique action events and each enemy has multiple different different attack patterns.
Due to these combat mechanics, a skilled enough player can play through the entire game without ever taking damage, just like in an real-time action game.
Guarding an enemy's attack, reducing its damage by 1.
Dodging an enemy's attack, reducing its damage to 0.
MY DESIGN PILLARS
Consistency. All UI should feel familiar using similar design patterns, shapes, controls, sounds, etc.
Clarity. Information should be presented in an easily understood way. Color scheme, text size, and animations.
Accessibility. Players should be able to quickly and easily retrieve any information they're looking for. About characters, enemies, mechanics, items, equipment, and the map.
Character Menu
Inventory Menu
Here are a few of the menus I designed:
Character Menu. Shows each character in your party, their stats, and relationship with other party members. The player can set their battle line-up here too.
Inventory Menu. Shows all of the payer's collected items and their function. Can consume certain recovery focused items here. Can sort the menu in various ways.
Tags Menu
Map Menu
Tags Menu. Shows all of the payer's collected tags and their function. To encourage experimentation, the player can equip and unequip tags as often as they like to any characters in their party. A tag can only be equipped to one character at a time. Can sort the menu in various ways.
Map Menu. Reveals previously explored sections of the map and key points of interest (shops and save spots). Areas are color coated.
If you've made it this far, I just want to let you know how awesome you are!