Unzip the downloaded ZIP-archive to a folder of your preference. Open your terminal program and browse to this folder. To start the game, type "sh Nebulinc_demo.run...
Remember the early days of computer gaming when all we needed was a one-button joystick to have a ton of fun? Nebulinc brings exactly that gaming experience to modern PC and mobile platforms.
In this 2D top down shoot 'em up action game, you embark on multiple space missions to defend planets against hostile alien forces that are invading your galaxy. Thanks to the advanced shield technology installed on your ship, you are the only one left who stands a chance against them.
Along your journey you can customize your ship with upgrades to fit your preferred playstyle. The upgrades range from different weapon systems to enhanced armor and shield.
This week's development log features the-making-off Ortox, which is the endboss for mission Nisab, and details regarding the online leaderboard solution.
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:
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.