As a group of programmers, we often ask ourselves “can I make this?” when playing a game online. That was our inspiration, we wanted to see if we could do it. Develop a fully networked, scalable and most importantly enjoyable game.
What it does
Land of Mesa is a battle-royale styled tower defence game. Allowing lobbies of 1-4 players, it immediately pits players against each other and forces each to implement a strategy. The game uses a two phase system:
Build phase; Preparation time in between rounds, to allow players to build structures, upgrade existing structures, and stabilize their economy
War phase; This is when the round starts, leaving each player to fend for themselves against an algorithmically generated crowd. Players can see other players' builds, analyze weaknesses, then purchase units of their own to attack!
Land of Mesa was built using the Unity Game Engine, with the server running n Linux and the clients running on WebGL. With so many moving parts, it is best to split up the technologies by categories.
Networking: To connect players, a strict server-client system was designed and implemented using the Mirror networking library. The transport was then changed to a web socket transport, so that the clients can run in Webgl. This allows the game to be playable from anywhere once the server is hosted.
Enemy System: To implement the enemies, we used low level algorithms to efficiently generate waves as well as pathfinding. The pathfinding was made especially efficient due to the custom tool we made to help place “nodes” relative to a map, and then generate an enemy path based on that. For the versatile features, such as enemies creating more enemies, we implemented strong Object Oriented principles with overarching interfaces.
Tower System: The placement was done through Unity raycasting, run entirely on the client. Once a purchase was verified by the server and the tower instantiated, the tower starts independently interacting with Enemy objects and creating Projectile objects. The towers then implemented a strategy design for choosing which units to attack.
UI: The UI was designed by us using the Kenny Kits 1-3. We built onto the sprites to create custom tiles for structures and units.
The first challenge we ran into was the difficulty of testing and debugging. Having to build an entire application to test the networking could drag a simple debug to half an hour. We used plugins to keep a clone of the unity file and run multiple editors, but even that was not easy to test with.
The second challenge was the complexity of the networking. Having to design a network that allows any number of players into a lobby then initiates a strategy game and implements good practices for all communications.
Perhaps the biggest challenge was connecting our work. With each member working on a separate part, we had to communicate and plan the design of our individual implementations to avoid complications down the road. Even then, connecting separate branches of work without destroying either proved challenging.
Fortunately, we were able to overcome these challenges. All three came down to being rigorous, and we are happy to have become stronger through these hardships.
We are proud of our end result. There's so much we want to expand upon, but we can also take a moment to stand back and appreciate how much we implemented in just a couple days. With more time on the game balancing and unit design, we could host the server and launch the game to play with friends. The most exciting part is that we were able to enjoy what we made, which speaks to how it all came together. That makes us proud.
What we learned
Through proper planning, any problem can be tackled. We did not expect to get this far at the start, as much of the networking and pathfinding seemed tedious for all our propositions. Yet we were able to accomplish all of our original goals, which is why its important to tackle problems rather than avoid them.
As mentioned above, we enjoyed playing our game. We’d like to expand upon it and make it easily accessible, hopefully within a few weeks once college becomes less demanding. Ideally, the next step is a proper matchmaking system to allow players to play other relatively skilled players, as well as create custom rooms to enjoy the game with a few friends.