This week's development log features the-making-off Ortox, which is the endboss for mission Nisab, and details regarding the online leaderboard solution.
Mission Nisab completed
The second mission in the game is set around planet Nisab. A big chuck of this mission was already completed and available in the demo version of the game. This week I managed to finalize this mission. This included fine-tuning the mission's medal challenges, fine-tuning the unlockable ship upgrades and most importantly polishing the graphics of the endboss named Ortox.
When designing a new enemy type, such as this endboss for mission 2, I always start out with a prototype. First I come up with an idea of how the endboss should function and then I derive its form, following the recipe of form-follows-function. Coming up with the polished grapics for the endboss is quite time consuming so the prototype always features very simple graphics just to test if the endboss functionality actual works as a concept. Getting a working prototype (as all elements of game development) is an interative process. Along the way you come up with new ideas and improvements, which sometimes even requires a complete rebuild of the enemy prototype.
Once the prototype is to my liking (both form and functionality), I create a 3D model of the enemy in Blender. This sounds like a lot of work, since the final graphics will just be 2D, however this works best for me. I am more comfortable with modeling and texturing in 3D than digitally drawing in 2D. With the 3D model completed, I make a 2D top-view render and throw in some GIMP magic to create the final 2D game graphics. The image below illustrates the steps from sketch to 2D game graphics for Ortox:
I wrapped up this week's development work by coming up with some ideas for the online leaderboard. I definitely want to support this feature because it adds a whole new challenge to the game. It's one thing to make it through the missions and beat the game, but how good are you compared to the rest of the players in the world?
My requirements are that the communication with the online leaderboard is kept to a minimum, that there is no additional input required from the user and that the user can still play when he or she is offline. This is all I need:
- At game startup determine if a connection can be established with the online leaderboard.
- Once connected, push the latest locally stored mission highscores to the leaderboard and obtain ranking information for each mission.
- When a new highscore is achieved, post the new highscore to the online leaderboard and obtain updated ranking information for the mission.
Intially I assumed I should be able to make use of a standard online leaderboard service such as Swarm or Scoreloop. Unfortunately, I did not find a fitting one for my needs. After doing some research, I decided to roll out my own online leaderboard solution tailored to my needs.
The online leaderboard will run on a webserver that supports PHP and the data will be stored in a MySQL database. Communication between the game and the leaderboard will be through HTTP request and response sequences and the communication data will be JSON formatted.
At this point I have a raw test version working with a Linux LAMP server running inside VirtualBox. I also did some load testing on the webserver of my shared hosting account. I concluded that it can handle at least 100 concurrent connections to the online leaderboard at the same time, which is sufficient for now. Once I sold 1000+ copies of the game I'll consider scaling it up by moving from my shared hosting account to a virtual private server with 1 or 2 GB of RAM.