I'm going to make a game!

32
Official Construct Team Post
Ashley's avatar
Ashley
  • 23 Sep, 2022
  • 1,385 words
  • ~6-9 mins
  • 3,190 visits
  • 10 favourites

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!

Subscribe

Get emailed when there are new posts!

  • 33 Comments

  • Order by
Want to leave a comment? Login or Register an account!
  • A bit of a weird choice to pick full JS when the majority of the people use the renowned event sheets with blocks of condition-> action, on the other hand I've started to move more towards using JS in the event sheets rather than actions, so I can learn a lot from this.

  • Was super excited at first, but then realised that you will simply skip all the main issues Construct has, by coding it mainly in javascript.

    Unfortunately that's not how the majority of your customers use Construct.

    I beg you to force yourself into using your product with its built-in features (Event Blocks and Editor ), not just mainly javascript.

    Otherwise you won't even have a glimpse what it means to truly use Construct as a user and stay in your javascript programmer bubble. Yes, you want to show the true capabilities (performance) of Construct by utilizing javascript as much as possible. But it won't show you the smaller and bigger issues Construct users run into.

    Eitherway, i'm excited to see the results, and hopefully many editor improvements that evolved from it.

    Will be a good experience for everyone, that's for sure. Looking forward to it :)

  • I think this is a great idea.

    Though using mostly JS isn't Doogfooding your engine IMO, it's mostly dodging the engine and it's shortcomings rather then finding and fixing them.

    "No coding required" is literally the #1 feature on the homepage, and "Coding optional" the 2nd.

    Excited to see some gamedev from you none the less.

  • Disappointed you plan to go full JS and to work on a non built-in multiplayer project. That whole JS multiplayer part won't be useful for any of us.

    I 100% agree with Everade. This game project could be the best opportunity ever for you to understand your users if you use mainly eventsheets and editor features instead. (Families/Event Search/Variables worfklow). You could quickly think to tiny improvements that would make stuff easier for your whole userbase, push updates that matters to the game you're making but that would also benefit for all of us.

    Regarding the 2 main objectives : actually dogfooding and making a great demo of C3 capabilities, this kind of project doesn't seem to be the best choice. Probably half of the devtime will be related to make that (non builtin) multiplayer working well.

    Is there any chance to make this project Singleplayer instead ? This way at least the JS/Events mix could be inspiring

    Interested to see where it goes nonetheless, and good luck!

  • Why not make the game the same way the majority of your userbase does and follow your #1 selling point: No coding needed!

  • Seems like an awesome idea, but I think it would be better if you focused on using Construct's visual coding system instead of java script whenever it's possible, otherwise it wouldn't really help the development of the engine itself that much.

  • - Makes game engine, sells it as "no coding needed"

    - Says will demonstrate game engine using coding, instead of all the things built-in and sold as positives to avoid coding, claims will prove power of engine

    I'm sorry, what?

  • This is a fantastic idea, and I wish you the best in seeing it through to completion.

    I agree with the other comments here suggesting that you use the event sheets as much as possible and only resort to JS when absolutely necessary; not only would this push you to engage with the strengths and weaknesses of the system, it provides a great opportunity for users to see how you go about organising your projects and problem solving using the built in tools - plus the optics are far better: "Construct creator builds this amazing FPS using no coding" vs "Construct creator dodges using own tools to make game"

    I appreciate your decision to include multiplayer - it's a daunting feature to implement so it will be educational to witness your hands-on experience - and at the end we all get to enjoy playing your game together!

  • I second every positive comment on this thus far. Super excited to see what you and c3 can do :) I have to also agree with Everade though to some degree. I was hoping to learn more about events that only the man himself could teach but perhaps one of the reasons you've opted to use js, other than it's 2nd nature to you I'm sure and the fact that it'll probably be more ideal in terms of optimization I'm supposing, is that everything we need to know about events and almost any application of them is already out there and requires no further input from you. I've read almost all the documentation C3 has to offer and then some and I don't see many new insights on these sorts of things after hitting a year threshold now. I could be wrong but you seem like a very smart gentleman and I would bet you've already taken these things into account. Well wishes on the project!

    Also, I'm a 2d artist and musician by trade. Let me know if you'd like help with either!

  • I don't know where you want to go with all this making a game using JS, but I tell you the truth, 90 percent of those who use Consturct do so because they don't want to complicate their lives using JS to create a simple video game, In my Humble opinion I think it's a mockery on your part to show how to make a game with Construct using JS , People who are using Construct do it because they don't have the time to learn a fairly complicated language like JS , It doesn't make sense what you do knowing that Construct users are just looking for a way to not complicate their lives using Construct, Here's a good example of what you're doing >>How dare you sell a Nintendo console and then want them to play Sega games on that same console, Do you understand me brooo, how dare you!!? It's disrespectful to us who use Construct. I'm sure your strategy in all of this is to want to change the usage to how Construct was truly meant for use with JS. It's a shame all this

      • [-] [+]
      • 2
      • Ashley's avatar
      • Ashley
      • Construct Team Founder
      • 2 points
      • (4 children)

      Since the introduction of JavaScript coding in Construct back in 2019, we've been aiming to make Construct also good for coding, in addition to the event sheet system. We haven't, and aren't, neglecting the event sheet feature. We know lots of people use event sheets. But we'd like to draw some more attention to the coding feature and show what it's capable of. That's what this project is about.

      • Then let those people play with a JS engines and not with Construct cause that experiment of yours will take us time to US the real users of Construct engine. Take that time to created a Game for us the users of Construct engine with real legit mechanics events sheet from Construct. We need to grow up this engine of Construct but using it the real way it is meant to be , using Events time sheet , groups, ect ect

        Load more comments (3 replies)
  • Load more comments (13 replies)