Base10 @ Moonberry Studios during a summer internship
When:
In August 2012
Made during my summer internship at Moonberry Studios
Role:
Gameplay & Network Programmer
Made With:

Summary
During my intership with Moonberry Studios I got to build an experimental multiplayer online top-down shooter called Base10. This was my first attempt at truly doing real time online.
Base10 is a top-down multiplayer class-based shooter where your goal is to survive waves and waves of enemy units using teamwork and multiple types of weapons. The levels are randomly generated to improve re-playability.
As of now, Base10 is an unfinished game, as unfortunately the project was cancelled due to lack of time, money and unrealistic scope.
Art was never produced for the game the, screenshot is of the implemented programmer placeholder art.
My Contribution
I learned a lot during this month and got to implement some textbook systems such as client-side prediction and lag compensation. I was also tasked with thinking and implement anti-cheat systems.
Base10 uses a familiar MVC architecture in its code to better organize all the moving parts.
During my time developing Base10, I worked on:
- AI System, I worked on a horde AI system, composed of sub-routined behaviours, put into action depending on the bots current desires. An AI start out as idly looking for players randomly around the map, as soon as a player is spotted the AI enters pursuit mode, attacking the player as soon as he is in range. If the player breaks line of sight with the AI, it’ll save the last seen position of the player and move in that direction looking for him, upon arriving at the last seen position, the AI will look around, returning to random search mode if the player is gone for good. The AI runs entirely on server side.
- Server Code and Communication, I worked on the server client communication, in which I learned about common real-time multi-player issues such as state synchronization and lag compensation. During the time where no messages are received a client predicts what is happening on the other side by continuing all players actions. If a player started moving forward, the client will make that player moves forward to infinity until a new message is received. The AI’s function similarly.
- Anti-cheat. Seeing as this was a small production and therefore very unlikely to have many users, the anti-cheat solution was based more on making it difficult to discover the vulnerabilities of the system rather than trying to implement complex authentication or encryption. What I did was create a system of quorum between clients. Upon receiving current state messages from the clients the server will only “approve” a new state if all clients agree upon what happened. In case clients are not in agreement the server will default to the state with more “votes”.