Overview

Fate: The Golden Tapestry is a first-person rogue-like platformer set in the underworld of ancient Greece. You play as a hero on a quest to slay the three fates and free the world from the tyranny of fate. You have stolen the lightning bolt of Zeus and use it to traverse the lands of the dead. The lightning bolt allows you to fling yourself across a procedurally generated level and fight the guardians of fate that reside there.

Credits: Robert Reckowsky, Jack Holt, Bryce Hui


The gameplay of Fate: The Golden Tapestry focuses on fast-paced movement across floating platforms while dodging the fiery projectiles of guardians. Some platforms give special buffs or debuffs that help or hinder the player as they try to reach the end of the level alive.

Combat:

The player’s primary tool for dealing with enemies is the lightning bolt they carry. The lightning bolt can fire off bolts of electricity that explode, in bursts of lightning, on contact with enemies, dealing damage. Enemies attack by throwing balls of fire at the player. The balls of fire move quickly and have a slight tracking effect, requiring the player to remain in motion to avoid taking damage. Platforms are small, allowing for limited maneuverability on the ground. These incentives players to stay in the air as much as possible, bounding between platforms, firing lightning from above as they come into land before taking off again. The bolts of energy the player fires can also target and destroy incoming enemy projectiles. Due to the projectile speed, this has a somewhat high skill ceiling, but it can allow the player to avoid damage if cornered.

Movement:

The movement of Fate: The Golden Tapestry relies on a charged jump that can fling the player across the map. By first aiming their lightning bolt and then charging a jump, the player can send themself soaring in the direction their bolt was pointing. I decided not to give the player much air control, so aiming your jump is critical to landing on the next platform. I added a little grace by also giving the player a double jump that can halt forward momentum, so that the player didn’t have to worry about overshooting a target. The charged leap and double jump would reset on landing, allowing the player to pick a new platform and send themself flying again.

Buffs:

In addition to combat and movement, I also decided to add buff platforms. These were special colored platforms that would either give the player a buff or a debuff. These buffs and debuffs were relatively simple, such as speed boost, speed reduction, health boost, health reduction, damage boost, or damage reduction. These platforms offered the player a choice of which platforms to land on and which to avoid. They were a simple risk and reward system that made navigation and route choice more relevant when traversing through the procedurally generated levels.


I designed five-level environments, each corresponding to a region of the Underworld. First was the River Styx, then the Fields of Mourning, followed by the Asphodel Meadows, next was Elysium, and finally was Tartarus. I wanted each region to evoke a distinct feel and give the player a sense of moving through a magical and strange place. Each environment recontextualizes the floating platforms the player bounds between in new and interesting ways, keeping each level from feeling too similar, despite the repeated use of the same basic chunks.

Chunk Creation:

I started by white boxing a series of chunks in Unreal Engine. I play-tested each chunk individually and ensured that they were on the same scale so that when they generated, there wouldn’t be any overlap of unexpected gaps. Once I had completed white boxing, I took the rock meshes our artist had made and replaced the primitive meshes I had been using while white boxing.

Procedural Generation:

The system my team and I developed for procedurally generating each level involved creating a simplified background environment and then generating the island chunks to fill out that environment with a playable level. This choice allowed us to fine-tune the appearance of each level’s background while still benefiting from the randomly assigned chunks to give us a vast array of potential play spaces. Once the system generated the necessary information for the level, it selected the appropriate materials to apply the generated chunks. Our system would then select enemies that belonged in the chosen level and populate the play space with them. It would then do the same for buff and de-buff platforms. Some levels required tree meshes to be spawned on the chunks to keep with the style of the background. As the player progresses through the game, each new level increases the number of chunks generated, increasing the length and difficulty. Each level would also have enemies that increased in difficulty and strength.