I guess you could say that Project GoldScript began when I discovered a fairly low-key yet cool open source HTML5 isometric rendering engine called sheetengine. After a brief look at the examples and source code, my mind began to race, I thought, holy crap I can make proper RPG combat with this thing using JavaScript!
In truth, I actually was not aware of how far HTML5, and its ability to create fairly nice graphics in the browser, had progressed.
I was deep in the world of web development, working with front end and back end technologies together with various APIs / frameworks to deliver web development services for clients (which of course, I still do to pay the bills). I was working with HTML5, but not so much with canvas and while I have some experience with Flash and Actionscript 3, again this was for client work.
I got to work with sheetengine, and with a bit of help from its awesome creator Levente, modified the source code in many areas. I built my own ways to add textures to tiles, map sprites to sheet objects (as they are called in the engine) and wrote a json read / write class which combined PHP and JavaScript to read a level matrix and load it based on its data. I developed methods to quickly add blocks of varying heights (there's no geometry methods in sheetengine, a cube is made of 6 separate objects which need to be positioned individually in x, y and z coordinates as well as euclidian rotations), integrated pathfinding and got a proof of concept done as fast as I could. It was arduous work, but it was pretty rewarding and I got heaps of JavaScript experience points.
But I got to a point where I was pushing the limits of what the renderer could do. There were a few hacks that were necessary to achieve what I wanted, and these were causing other issues. I got a sinking feeing that I desperately needed a different solution, and it was around that time that I began reading up on node-webkit. I quickly realised that this solved a multitude of issues for me
- This meant that my game would no longer need to exist online
- I could now ship the game as an executable for PC, ie., Windows, Mac & Linux
- It meant I had access to the client's file system, meaning file size limits were now basically meaningless
- Since the WebKit engine was being used, browser differences disappeared and Web GL was now fully available to me
I continued with sheetengine for a little while, developing a new, more refined iteration of the level builder. Soon enough though, I realised that I didn't need to care about my game being purely HTML5 and with Web GL now accessible, I could basically do whatever I wanted.
Here comes a new challenger! Three Js == Shenglong
So I started looking around for different rendering engines and of course found three.js, which I had known about for a while, but thought was just too difficult for me to learn. Well, it looks like I had levelled up considerably and gained some OP skills, because after a day of mucking around with it, I had an almost identical isometric level created. At that point, I knew that this was the right decision and began, once again, refactoring all my code to work with this new, awesome renderer.
Fast forward to today and we are very close to being right back on track, and have of course added things that were not present in the previous codebase like the ability to rotate and tilt the camera.
While I don't plan on changing the renderer for this iteration of the engine, I'm trying to make the code as modular as possible so that swapping it out for another would not be as painful as it was before (although in all honesty, it has only taken about 2-3 weeks of hobby-time development to get back to this point).
The engine is stronger and better placed to deliver games to better platforms now so I'm pretty happy with how it has all turned out really. Just goes to show you that while change might seem scary at first, if you are confident that you are moving towards something that is definitively better, you should probably take the plunge. You'll thank yourself later (and maybe get some OP skills).