Ritual Fantasy

Roles and Responsibilities:

  • Designed and implemented a complex interconnected level in Unity3D using the Probuilder suite of tools

  • Designed and implemented a modular dual-hand interaction system for intricate player expression and strategy

  • Developed challenging 3D combat against a variety of threatening enemies

  • Modeled and animated various enemies, creatures, and NPC characters

  • Contributed to worldbuilding with written dialogue, lore, and flavor loading screens

Game Overview:

Ritual Fantasy is a dungeon-crawling survival-horror RPG that takes place in an original dark fantasy setting. The world is ending, temples crumble to ashe, and yet instead of spending your last days on the surface watching the stars wheel and dance and wink out of existence, you will climb into a rotting gutter to save the only one you ever loved. Players must navigate a twisting underground level while fighting off ferocious enemies, managing a limited inventory, and ensuring that their torchlight never goes out - even for a second.

This was a solo project that I worked on over the course of 2 months. I wanted a chance to hone my skills with both 3D melee combat and level design, so creating a single, intense dungeoncrawler map felt like a thrilling way to do so.

Nearly all assets including scripts, models, animations, and writing were created and implemented by myself. Textures were either created in Photoshop or downloaded and manipulated from textures.com, and the sound effects were similarly sourced from freesound.org before being manipulated to suit my needs.

Development Process:

I wanted the combat to feel slow, considered, and visceral - like the original Dark Souls and classic Resident Evil, but in first-person. Fighting is not meant to be empowering but rather frightening, a tense challenge that requires thoughtful management of stamina and finite resources.

Classic survival horror games are able to intrinsically tie their resource management and combat together by forcing players to use ammo carefully and shoot with refined accuracy. I wanted to replicate this feeling with my melee combat, as without the need for some dedicated timing or accuracy skills, there was little reason to have weapon durability. Making the player’s axe break after 6 strikes is only interesting if there is a way to better manage those six strikes.

While working through the prototype phase, I tested several different core game loops in order to decide which best supported my desired atmosphere of violent unease. A clip of early test gameplay can be viewed below. I also created a handful of flavor screens as I explored options for the game’s narrative and thematic set dressing. I eventually refined the game’s vision to focus on the core principles of tense melee combat, challenging exploration, and thoughtful management of limited resources to create an experience of anxiety, challenge, and eventual satisfaction.

All combat logic is conducted through animation and collision, similar to Dark Souls or Monster Hunter. When the player “attacks” with a sword, for example, they are really just triggering an animation, which in turn activates weapon hitboxes during the peak of its swing. This ensures that combat feels dynamic and measured - when the player hits an enemy, it really feels like they hit them, because they did!

Dual Hand Interactions:

Even from the earliest prototype tests, I knew that I wanted a dual-hand combat and interaction system. I am most interested in games that provide constant tension, as if their machanics squeak and groan against one another. I thought that a dungeoncrawler where the player needs many tools to safely navigate, yet can only use two at a time, provided this type of tension - do you carry a torch for light, or a shield for safety? Sure, an axe is nice to have on hand, but are you sure you want to risk breaking it?

The dual system was created to be modular, with a parent class that carries generic variables for any type of item, such as durability and stamina values. Items are then split into 4 children classes: action, support, utility, and key. Each class can be equipped in either hand, and is used by clicking or holding the associated mouse button. Animation trees were created to be as generic as possible, allowing many different types of items to be called by the same triggers. Even though spears and shields differ in their use, they can be both be raised and lowered through the same functions.

Combat and Enemy AI:

One critical topic that I wanted to explore during this project was enemy design and AI. Enemy inteliigence was formed between a combination of state machine behavior, tradtional scripts, and the A* pathfinding plugin. The main enemy type created for the demo level was the whippler ghoul, a snarling proto-vampire that crawls on all fours and slashes at players in the dark. Whipplers are animation driven the same way weapons are, and can only do damage if they physically collide with with the player’s hitbox.

I felt that enemy design was a great chance to add more potential depth to the combat, so I included a stun and parry system that can be enabled on large enemies. This system allows the player to hit an enemy during vulnerable animation windows immediately before they attack. Doing so builds up a stun meter, and upon maxing out this meter, the enemy becomes momentarily frozen, taking double damage from all attacks. This works wonderfully with the weapon durability system, as careful players are able to make their tools last longer by attacking foes during vulnerable windows - risking a dangerous swing now, so that they can afford more swings later. Featured below is a clip of a whippler being stunned with WIP effects.

Lighting and Rigging:

All models for the game were all created, rigged, and animated in Blender before being exported to Unity. Blender proved to be a great place for testing composition, lights, and texturing because I could quickly model assets and see how their silhouettes would be framed from different camera angles. I experimented with multiple types of rigged player arms and weapons, finding the sweet spot between authored animations and modular movements. Ultimately, I created a system where the same bones for the bare arms can be applied to additional models that are children to, but not actually part of, the arm mesh. This means that generic animations can be re-used and quickly altered to fit a wide variety of weapon and item types, but when it’s time for a player to throw or drop a weapon, I can simply disconnect the weapon mesh from the rest of the object and apply a rigidbody for physics collision.

For this project, I wanted to achieve a crunchy, dithered, low-fidelity style reminiscent of Playstation 1-era games. While some amount of “physical” lighting is present, many of the models are unlit and simply hidden by black fog. This fog is affected by the player torch programmatically, and linked the torchlight animation. So, when players hold their torch out in front of them, they aren’t just lighting up the area but physicially unveiling previously occluded geometry!

Level Design:

Once the mechanics were (mostly) implemented, I was ready to make a demo level: the Whippler caverns, a series of collapsed tunnels surrounding an ancient underground castle that’s crawling with blind vampires and bloodsucking leeches. My primary inspirations for the level design were classic 90’s shooters like the original Doom. I wanted the caverns to feel vast and frightening, a gaping black pit infested with traps and horrible monsters - a labyrinth that must be conquered. After planning out a map in Photoshop and doing a bit of physical prototyping, I hopped into Unity and began constructing the first iteration. Every great level starts with a rough draft, getting feedback from testers, and making improvements where the opportunities present themselves. While the first draft of the level was okay, my testers noted that different sections of the level were too samey - if they are each seperate spokes from a central hub, they should have slightly different hazards, props, or geometry to prove unique from one another. And so during future iterationsI focused on dynamic geometry with twisting tunnels and lots of verticality in order to make different sections feel more memorable. This was during the greyboxing phase of development, and I wanted the level to be easily navigable even without textures.

Wrapping Up:

While the first alpha level is now complete, I am far from being done with these terrifying dungeons. This project has been an excellent chance for me to flesh out my individual development skills across a variety of disciplines, and I plan to add several more stages and features for a full release. In the meantime, you can play a small demo here.

Platform: PC, Mac

Engine: Unity

Production Time: 10 Weeks

Size of Team: Solo

Roles: Gameplay Designer, Art Designer, Programmer

Link to Game: Ritual Fantasy Itch.io