Venture
Two astronauts awaken on an alien planet. With only minutes of oxygen left, they must work together to scale staggering cliffs, study strange lifeforms, and search for a way home in this atmospheric co-op survival adventure.
Key Contributions:
The rope climbing system is our core mechanic, and getting its movement to feel snappy and responsive was one of the biggest challenges (and successes!) of the project. We wanted climbing to be easy to learn but with enough skill to challenge repeat players— and to top it off, it needed to work with any surface in the game.
I did this by focusing on the player experience first, then modifying the game feel to support the fantasy we wanted. All a player has to think about is clicking to throw two anchors, pressing a key to attach to the rope, and moving forward to climb. Behind the scenes, though, there's a bunch of situational movement code to make this work.
- When a player attaches, I snap their position to the rope, using a quadratic ease to prevent it from feeling jarring.
- Jumping off a rope propels you in the direction you're looking, while also pushing you away from walls so you don't slam into them.
- Horizontal ziplines need to feel fast, while vertical ropes should convey the weight of climbing upward. The system computes two different movement deltas—horizontal acceleration and constant-speed climbing—and seamlessly lerps between them based on the angle and direction of movement.
- You can both throw anchors and place them directly, depending on how close you are to a wall. A situational indicator appears to show you which mode is available, and where the anchor will appear.
The game is inherently co-op, so I had to build every feature in the game with multiplayer in mind. I used Unity's Netcode for GameObjects (NGO) for all of the multiplayer logic, and implemented Steamworks Lobbies so players could easily invite their Steam friends. I based the system on a server-authoritative peer-to-peer model, making one player the host and the other the client, and using RPCs to route all replicated behavior through the host.
This was especially relevant with the save system, where data needed to match exactly across both the host and client's save files. To solve this challenge, I built a central GameManager that tracks shared data, fetches player-specific data across the network on save, and verifies the same values are passed to both players.
I did both the UI design and implementation, with a focus on minimal, situational UI; the goal was to let the 3D world shine and have relevant keybinds appear only when you need them. One of my favorite UI-adjacent tasks was the scanner + journal system, which is how players learn more about the lifeforms they encounter:
This system was built to be fully modular, using a Scriptable Object for each lifeform and constructing the journal and scan results on runtime. This made it easy to add new lifeforms or edit their journal entries, allowing us to quickly iterate and create new lifeforms as we built additional areas.