Role: Lead Programmer (Backend Engineer)
Game Engine & Tools: Unity
Language: C#
Engineering Contributions Overview
Built a node-based Map Traversal System to allow seamless loading between Combat and Narrative Encounter scenes.
Designed and implemented class hierarchy to implement Enemy Behaviors from Design Team.
Developed unique Enemy Behaviors for three playable Boss Fights: The Sisters, The Lycan, and The Odds.
Created interactive dialogue system framework that plays audio and loads text using screenplay-formatted scripts from Writing team.
Grimm's Gambit is a roguelike card game with turn-based RPG combat, set in a hybrid environment combining 2D characters with a 3D world.
Early in development, the game required a system for navigating between levels. Since the player character was a 2D art asset traveling on a 3D plane, the navigation system needed to ensure the player remained visible without blocking the next map space.
Additionally, the system also had to handle scene transitions, namely loading and offloading the map scene upon entering and exiting levels. This would involve saving the player's location on the map without retriggering the event upon returning.
The resulting Map Navigation System was divided into multiple scripts:
-MapManager: Stores the scene's MapPlayer and enforces movement along the node-based map, such as preventing movement horizontally between spaces.
-MapEncounter: Represents a single node on the map.
Each MapEncounter node contains:
A List of MapEncounters, representing the possible next space to move to
A Boolean representing whether or not the space is a starting space
UI Elements for displaying the space name, icon, and information
This script manages hover-based UI visibility and player interaction with a node (see OnMouseDown())
-OnMouseDown()
Determines whether the selected node is a starting space or not, preventing horizontal movement or selecting multiple starting nodes.
If the node is not a starting space, it checks whether the node is a Campfire node, which is tracked by the save system. Otherwise, the player travels to their selected node.
-MapPlayer: Controls the player's behavior on the map, including selecting new locations, traveling between nodes, and loading scenes when entering narrative or combat encounters.
-SetPosition()
When the player selects a valid MapEncounter node, the SetPosition() method handles the following:
Sets the current MapEncounter to the newly selected node
Centers the player's location to target the center of the node
Resets the isAtLocation flag to indicate the player is traveling to the new location.
Stores the node's connecting locations for use after the encounter.
Saves the player's current location in save data
-LoadSceneLocation()
Additionally, given how loading was a significant factor of development, the MapPlayer script handles the player loading in and out of the scene upon colliding with a space, as follows:
Load the new scene additively
Toggle the current map scene to inactive
Determine whether the new scene uses the same fog rendering effects and toggle accordingly.