I'm going to make a game in Construct! This is going to be a bit of an experimental part-time project with the aims of showing how far Construct can go, providing a big example of JavaScript coding, "dogfooding" Construct, and hopefully even ending up with something fun to play.
What kind of game?
I've always been fascinated by real-time strategy (RTS) games. Long ago I spent countless hours playing Total Annihilation, including long multiplayer LAN games. When I was just a teenager I made the classic mistake of trying to build a large-scale RTS with little experience, and unfortunately that didn't really work out. Now I have something like 10 year's professional programming experience, I think I can probably do a better job!
Networking has always been a strength of the web, and for a real challenge, I'm going to try building it with multiplayer support. It would be cool to share a link and instantly start playing with someone else, and maybe I could relive some of those multiplayer games in a new modern way.
RTS games can be huge, sprawling things, and given this is a part time project with just me working on it, I'll have to scope it realistically. So it will be fairly basic compared to commercial RTS games - just one set of units for all players, just land units, and a simple resource model. But who knows, if things go well it could go further.
Game development can be challenging. I genuinely don't know if this will work out. But you can follow me along the way! The project will be shared on GitHub and you'll be able to see every change I make, and I'm hoping to regularly blog about it, the design, code, and problems along the way.
I don't know what the game market is like for this kind of thing, but it'll be free and could have several benefits regardless of its popularity - as I'll explain shortly. I'm basically just going to go ahead and make the game I wish I had to play, which is probably not a bad philosophy, as while RTS games might not be for everyone there are probably some like-minded people out there!
Why make a game?
OK, I'll admit, part of this is just because I think it'll be a fun side project. But there are potentially valuable outcomes too.
Dogfooding is a (somewhat curious) term for using your own products. It's widely seen as a good idea in the tech industry. If you're using your own product to get something done, and something isn't working well, you have a much keener insight in to the problem and a more urgent incentive to sort it out. As the product developer, you can then jump right in to the code and try to sort it out straight away. This helps see things from the point of view of users, quickly understand problems, and fix them on the spot. Those improvements will benefit all Construct users!
Tech demos are one thing, but a real, playable game that pushes Construct right to the limits of what is possible is a much more convincing demonstration of the technology. I know what Construct is capable of, but I still occasionally see people dismiss it as toy-like. Sure, it might not be Unity, but it can still be used as a serious game development tool. In particular JavaScript is a hugely underrated language for game development, with incredible features and extraordinary performance that far surpasses any custom-made programming languages used in other tools. RTS games are highly complex and so are a good way to demonstrate the ability to handle advanced code and lots of gameplay action. So I'll be writing a lot of the game logic using JavaScript coding in Construct, and with the aim to prove the point that Construct and JavaScript can do impressive things together.
I'll also be developing the project in the open on GitHub. This means you can download the project yourself and try it out at any stage of development. You can see all the code, how I write it, and how it is changed over time. This could be an interesting window in to the game development process, at least by someone with lots of programming experience, if not game development specifically. With my experience of JS code I'm sure there will be lots of interesting code patterns, useful snippets, performance tricks, and much more, that others can learn from. I also intend to blog regularly covering interesting parts of the code and explaining how and why it's done certain ways. I'll also endeavor to write as clear and understandable code as possible, with lots of comments. In that sense it could be a sort of super example project.
Are you giving up on Construct?
I know someone will ask this so I just want to emphasise: I'm absolutely not giving up on Construct! Developing Construct itself will continue to be my main focus and take up the majority of my time - it's what pays the bills after all. This game development project will be at most a 20%-time project, and any more done in my personal spare time.
Open development
As I mentioned, this is a bit of an adventure - I genuinely don't know where this will go or how it will work out! I've literally pressed 'New project' and uploaded an empty project to a GitHub repository, and will take it from there. I've decided to somewhat cheekily call this project Command & Construct as a working title for the time being. I figure I'll probably have to rename it at some point, but that will do for now.
So you can find the Construct project on its GitHub repository. An easy way to try it out is to click the green Code button and choose the Download ZIP option, extract the files, and open it as a folder project. The commit list provides a list of every change I make, including a description, and line-by-line listings of what was changed. You can also watch, star, or even fork the repository. There's more information about using this development process in the tutorial How to collaborate on Construct projects with GitHub.
While this approach is suitable for collaboration, for now it will just be me working on it. It's also not really "open source", as that term usually refers to community development. I won't be accepting contributions from others, at least at first, as that itself can be a complicated and time-consuming process, and there needs to be a strong initial focus about which direction the development goes in. I also want to preclude the possibility that someone rips the game and sells it somewhere for a few bucks, and not all open source licenses prohibit that. So with all that in consideration, I've opted for a Creative Commons Attribution-NonCommercial-ShareAlike license. I'd call this process "open development", by which I just mean the project files are shared in public and you can view the changes, and the Creative Commons license means others can make copies to experiment with and learn from, but not exploit it commercially.
The one thing I might need help with though is artwork - maybe I can find some free art packs somewhere with a compatible license, or if I have to I could commission something. If anyone has any pointers on that let me know!
Here goes nothing
So this is all a bit of an experiment! But hopefully it will be interesting, useful to others, lead to improvements in Construct, and demonstrate what's possible with Construct and JavaScript. I have to accept the risk that for one reason or another it might not be possible to finish it - game development is hard, after all - but I'll do what I can to get at least a minimal playable game done, and I'll blog about it whatever happens. And if the finished game gains even a small degree of popularity, that would be a nice bonus.
I'll post future updates on this blog - click the subscribe button on this blog to get notifications when I post updates here, or follow me on Twitter at @AshleyGullen. So, here we go, and stay tuned for more updates!