top of page
Logo.png

Dragon Heist

In Dragon Heist, two dragons join forces to reclaim their stolen treasure from an evil sorcerer’s fortress. In this two-player online multiplayer cooperative game, each player plays as one of two dragons: a stealthy dragon thief or a powerful dragon warrior. Using brains and brawn in conjunction, players must solve puzzles, evade guards, and recover as much treasure as they dare in this thrilling 2D side-scrolling heist game.

Gameplay.gif

This project was a part of a Games Production course as part of my Master's program in Game Design and Development at Rochester Institute of Technology. It was developed by a team of 5 people over the course of one semester.​

​

In this two-player online multiplayer cooperative game, each player plays as one of two dragons: a stealthy dragon thief or a powerful dragon warrior. Using brains and brawn in conjunction, players must solve puzzles, evade guards, and recover as much treasure as they dare in this thrilling 2D side-scrolling heist game.
 

My Contribution

I worked as the network programmer for this game and was responsible for establishing the network architecture and game netcode synchronization for the two players. I also played a role in developing the game's concept and designing it to meet the course requirements.

Network Architecture

One of the constraints for this course's project was that the game had to be a WebGL game hosted on itch.io. I decided to go with a dedicated server architecture, as WebGL games are incapable of receiving incoming network connections and, as such, would not work for a peer-to-peer/host-client network architecture. 

For this course, we decided to host our game's server build using Edgegap. Edgegap is a service that provides an edge-computing hosting & orchestration platform aimed primarily at multiplayer/real-time games.
We decided to go with this service because it offered quick deployment through its Unity plugin, which lets you build, push, deploy, and manage your dedicated game server directly from the Unity Editor. This would allow us to get started quickly, bypassing the time required to set up a cloud infrastructure from scratch.

After completion of the course, I shifted the server to be hosted on an Oracle Cloud instance so that we could have a dedicated server running 24/7 instead of Edgegap's Just In Time deployment strategy. Since this is a small non-commercial demo project that will not have many concurrently active users, we do not need to worry about infrastructure scalability. 

Server-Client Architecture.png

Networking Library

For this project I decided to use the Mirror Networking Library for Unity.

Mirror is a high-level networking library for Unity that makes building multiplayer games simpler and more efficient. Since I was already familiar with Photon PUN and Unity Netcode for GameObjects, I wanted to explore Mirror to see if it offered advantages for my 2-player co-op project.

One key strength of Mirror is its flexible transport layer. Unlike some other networking libraries, Mirror allows easy switching between transport protocols, including TCP, UDP, and WebSockets. This flexibility is especially useful for browser-based or WebGL deployments, where UDP may not be available.

Using Mirror, I was able to implement a stable client-server architecture while gaining firsthand experience with a networking library that balances simplicity, performance, and transport flexibility.

Screenshot 2025-10-07 003429.png

Custom Network Manager

Since my game is asymmetrical, with each player having a unique character prefab, I extended Mirror’s NetworkManager to create a custom network manager. This manager tracks which player selects which character and ensures the correct prefabs are spawned only after the actual game scene is loaded, preventing conflicts and ensuring proper game state synchronization.

Character Selection Thief.png
Character Selection Warrior.png
Screenshot 2025-10-07 004711.png
Screenshot 2025-10-07 004726.png

Central RPC System

To further streamline networking, I implemented a central RPC manager. Instead of making every object a networked object, all Remote Procedure Calls are routed through this single manager. This keeps the code organized, reduces network overhead, and makes it easier to maintain and extend multiplayer functionality without cluttering game objects with network logic.

Central RPC manager.png
Screenshot 2025-10-07 010007.png
image1.gif
image2.gif

©2025 by Ashank Rajendran.

bottom of page