Thursday, 1 May 2014

Some background.



Throughout my life there has always been a common theme - I have always enjoyed creating more than I enjoyed using.

I began programming in year 9 at high school by automating math homework on my T83 calculator.
I learned the basic control structures and syntax common to most programming languages and created simple games like 'guess the number' or 'see how many button presses you can do in 10 seconds'.

In my spare time I enjoyed physics sandbox games such as "Incredi-bots" but I longed for more control and a 3d environment . Then I stumbled upon Roblox.

Roblox provides a basic game and physics engine where you build the environment with primitive shapes and control the environment through lua scripting.
By developing in Roblox I learnt my first scripting language through designing games.
Some of my games achieved strong levels of success where they topped the most popular game on the site several times and achieved recognition from the administrators as a "favorite" game. As of 2016 the games that I created in highschool have received over 3 million plays.

I also conducted a lot of prototyping on roblox.  I wrote my first path finding algorithm - the breadth first search, before moving on to more complicated algorithms such as A*.

A* demo in Roblox.  Final solution in blue. Closed nodes in red and open nodes in white. 

I wrote terrain generation algorithms implementing the diamond square algorithm before eventually implementing Perlin noise.

In Roblox, I wrote basic aerodynamic simulations and other more academic prototypes.  This included a 3d rasteriser using 2d UI elements arranged like pixels.  This was completely useless for an actual game but I learnt lot about how 3d rendering works and it was a whole lot of fun seeing it work.

At some point I had a flash of inspiration about the game that I needed to make.
I loved Orbiter, a free space flight simulator that implements full newtonian orbital physics and other phenomenon such as radiation pressure.
I would mount missions in Orbiter to the planets or moons and deploy bases,  however,  I always hit that point of  "what now?  I can't actually create or gather anything here".  Any mission was completely based in my imagination.

Titan (moon of Saturn) research base.


I also loved Minecraft, a game where you gather resources from your environment to create shelter, food and better tools in order to progress further through the game.
I realised that this is what Orbiter needed, the ability to modify the environment, to gather resources, build shelters and bases, consume and transport out of necessity rather than to just fulfill some imaginary situation.

A good example of a minecraft base. Source

I opened google and typed out those infamous sentences that so many have typed before. "How to make a game from scratch". I was done with Roblox - I was going to do this on my own.

Reality struck, hard and fast as it has a habit of doing.  The choices were staggering,  the terms foreign and the community hostile toward newcomers and I think that without a few algorithms under my belt from Roblox I would have given up right there and then.

It was like stumbling around in the dark.  I somehow put together a 'guess the number game'  in C++, and got myself hopelessly confused trying to understand OGRE before finally stumbling onto Riemers XNA tutorials.
C# with XNA turned out to be the middle ground I needed between the high level environment of Roblox and C++.

And here is where I begin my series where I describe my successes and my failures as I work ever closer to creating this game.