Game Engine Analysis

Most of the games I’ve written have been for Facebook. The graphical frontend elements are very bare and the backend written in PHP to tie everything together. I’ve also written a game for iPhone called “Puzzle Zone” which used an engine based on the LUA programming language. This allowed me to easily write the game without a deep knowledge of the native iPhone language OBJ-C.

It made the development much faster, but I had to made tough decisions around the design of the game based on the limitations of that engine. The physics were not great and the UI didn’t have hooks into the native iPhone UI elements, so it was clunky and didn’t feel like an iPhone game. Also, at the time, there were no hooks into ads or in-app purchases so I was forced into an upfront purchase model which I really don’t like for social and mobile games. But making these concessions was the difference between a 6 month development cycle versus a 2 month cycle so it seemed worth it.

When I began designing this new game I’ve had rolling around in my head for the last few months, I decided it was going to be a 2d social game, had to look good, have great sound, and although I’d like it to be supported on many platforms if it’s successful, I’m happy with a Facebook-only game right now. With these elements in mind, I began researching engines to help create it.

My background is in 3d graphics. Throughout college, most of my work was in Artificial Intelligence and 3d graphics, so I’m fairly comfortable with that. However, I’ve never done much in the 2d space, which seems flip-flopped to me. So when I am considering a game in 3d, there are many choices, but two engines tend to rise to the top; Unity3d or the Unreal Engine. This is a sweeping, broad statement, but in general if you are a smaller studio, and your game isn’t going to need the latest and greatest graphics, go with Unity3d. If you are an established studio making a AAA title and have some experience with game development, the Unreal Engine is usually the choice. Again, there are many, many factors that go into this decision but this is a good rule of thumb.

My game is going to be in 2d, so the above engines aren’t for me (well, kind of, more on that later)For 2d engines, the decision isn’t as easy. There are dozens of 2d engines, all completely different, supporting different platforms, and taking much different approaches to game development.

After much research, I’ve whittled it down to three engines: Construct 2, GameMaker and Unity2d. They all provide a free version so it was easy enough to download and dive in and get your hands dirty. Here’s what it came down to.

Unity2d

This is a 2d version of their popular, and excellent, 3d engine. In the past, developers loved Unity3d so much that they came up with all kinds of tricks, such as playing around with projections, to make 2d games out of a 3d engine. In reality, it was cumbersome to do since it wasn’t made for that. Seeing the need for 2d, Unity released full 2d support with their latest version 5.

I was very excited to play around with it since I’m proficient in Unity3d. The 2d tools were great. Things that you used to have to fiddle with, or purchase 3rd party tools for, were now baked right in! The sprite editors, the way you orchestrate scenes, are all very good, and Unity-like.

However, there was one thing I couldn’t get over: there is no HTML5 support. HTML5 is now supported in all major browsers (with some implementations more spotty than others) and has replaced Flash for browser based games.

There are ways to export your game to HTML5, and 3rd party libs to do it, but there is no native way to do it and this is very dicey. I’m not quite sure why they haven’t yet supported this. Their response has always been that their browser plugin will run the game. This means the user has to install this plugin on each browser, and most users won’t do this. Also, with Chrome now disabling their NPAPI support, the plugin won’t even work in Chrome, one of the most popular browsers. Their response has been, ‘Well, just use another browser.’ Since my game needs to run inside of a Facebook frame, I need HTML5 support. So even though Unity2d should be great, and I really want to use it, this is a deal breaker.

Construct 2

Construct 2 is getting a lot of buzz lately, mainly because it’s the latest 2d engine and it’s not half bad, but also because it’s very good at what it does. I was impressed enough after playing around with the free version to purchase the professional version just to try everything out. I can see why it’s becoming popular. It’s easy to use, the interface is very clean and intuitive, and people like it because you don’t need to be a programmer to make a game. Everything can be done via the UI so you can quickly pump put a game. On the flip side, there are no practical ways to get down to the coding level with it, you HAVE to use the UI. There are ways to do it, such as creating javascript plugins but it’s tedious work to do it, and I wasn’t successful in doing this in such a way that it wasn’t simply a distraction. Simply put, it wasn’t feasible to get down to the code level.

I’m a professional developer and have been for many years. I think in code, and when the UI fails I can always fall back to code. When I’m on a Mac and get frustrated with the desktop, I drop to a Linux shell. It’s just the way I think. So not having that fallback is frustrating.

For some, this may be ideal. I can see someone with little or no coding background eating up Construct. After prototyping a simple game with it, after jumping through many hoops I was able to get the prototype running. But in the end, so much of it could have been made so much easier with code. Also, and this may be because I’m learning it and don’t know the best practices, but the very small prototype was very confusing to follow once done. There were screens and screens of scripting and goto’s and functions. It was almost like to old days of procedural programming and that’s something I don’t want to go back to.

I’m choosing the engine for my needs, and for my game, and for me, this isn’t going to work. There are enough good things here where perhaps sometime in the future if I need a very simple game, and need it fast, this engine might work. But not now. So I moved onto the next one….

GameMaker

Most developers know of GameMaker. It’s been around a long time and many games have been produced from it. But it’s also the whipping boy for poorly written games, thrown out there and quickly forgotten. I myself fell into this line of thought when I was researching engines. I’ve heard so many bad things about it that I was reluctant to try it. I’m glad I did though.

First of all, it looks BAD. It’s GUI has really shown it’s age so right from the start the skepticism began. However, once I began playing around with it, it was actually very intuitive. I ran through some of the tutorials on the site, which were outdated and from an older version, but I quickly had the games up and running. That skepticism started to fade when within an hour I had a modified version of the tutorial game running, with my own modifications of course.

I tried this engine out after Construct 2, and it was very clear that Construct took a good majority of GameMaker’s concepts and put it in their engine. As such, I was quickly up to speed since it wasn’t so foreign to me after running through Construct’s tutorials.

And best of all, you can drop down to the code level. It’s not ideal though. You have to use their built-in editor which is lacking a lot of features I’ve come to expect from IDE’s. Also, the code language is called GML for GameMaker language. I wasn’t looking forward to learning yet another programming language, however, it was very intuitive and very much like Java, or C. Without even reading any tutorials on GML I was coding scripts right away. But still, a migration towards a more standard language would be nice.

Feeling excited that this could actually be the one, I began prototyping the same game I prototyped in Construct. It was so much easier to do than in Construct. Sure, it could be because I learned the similar concepts in Construct and just applied them here. But I really think it’s just more intuitive and dropping down to the code level was a game changer, so to speak.

They were recently bought by another company, so many people are anxious to see if this is a good or bad thing. Apparently it’s simply an influx of cash and they are letting the original team proceed and before. Hopefully this is the case.

They are working on the next version of their engine right now. Hopefully the GUI is modernized, and GML is replaced with a more common language. But as it stands, I’m very impressed.

Lastly, there have been several very successful games made with GameMaker. “Hotline Miami” has sold hundreds of thousands of copies and made millions of dollars, and it was created with GameMaker. This shows that professional-level games are possible with it.

So as you can probably guess, I’ve chosen GameMaker to make my next game. I will continue to update the blog as I progress with it. I’m planning on doing frequent development blogs on the progress of the game. For games I’m waiting on, I always like keeping up to date on their progress with development blogs. Also, sometimes games come out I’ve never heard of so it’s fun to go on their website and see their dev blog going back months or years where you can read the history of it.

Now, back to GameMaker…..

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s