The player’s objective is to navigate a submerged cave system, retrieve data from abandoned research equipment, and reach the exit to complete the mission.
The main challenge comes from the environment: it’s a dark, three-dimensional underwater labyrinth with few recognizable landmarks. Each time the player dies, the cave layout is regenerated which makes memorisation not an option. Additionally there's a hostile deep-sea creature roaming the area, adding an extra threat to exploration.
I gave the player several tools that, along with some context clues, would allow them to navigate throughout the environment and complete the game. For these tools I wanted to emphasize player skill, instead of handholding.
By holding Left-Click, the player opens a 3-dimensional map that has themselves at the center, and that always faces their own direction. This map shows all the passageways within a certain radius, allowing the player to navigate their way through the caves.
By holding Right-Click, the player gets an X-Ray view of all the research equipment they still need to retrieve the data from. This gives them the correct direction, but it has to be used in combination with the map to find the best route.
A personal goal I had for this project was to exercise my skills in procedural systems.
One aspect of Abyssal Cartography that added to it's large scope is that each environment needed to be handmade, narritively logical, and unique, while still having a maze-like feel to it. Simplifying this process and automating it seemed like the perfect fix.
I built a custom map generation system to meet some specific design requirements:
It needed to generate in hallway-based segments
It had to function in 3 dimensions
It had to support the inclusion of larger, handcrafted rooms
The system I created is semi-depth-based. It starts with a central room that has five exits. Each of these exits is added to a list of unconnected exits. At the end of each 'depth layer', the system checks all currently unconnected exits and generates a new room at each one, adding that room's new exits back into the list. This loop continues until no unconnected exits remain, resulting in a fully connected network of rooms and hallways.
As someone who isn't an animator, I've always been drawn to Inverse Kinematics (IK). It seemed like a powerful way to make simple animations more accessible, with the added benefit of allowing those animations to interact directly with the environment.
Unity’s built-in IK tools made the initial setup surprisingly straightforward. The real challenge, however, came from the math involved in creating a believable walking motion. To tackle this, I implemented a general WalkManager that handles the overall rhythm and timing of each step, while each leg object is responsible for its own movement and placement logic.