Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon
9. January 2018


Back in 2015 I found myself in the market for a new laptop for game development and I put together this guide on how to chose a laptop ideally suited for game development.  Fast forward to today and it’s time to choose another, so I’ve decided to update the guide.


Designing a laptop is an exercise in trade-offs, a mix and match of the following attributes:

  • cost
  • power
  • battery life
  • size/weight/portability

Cost, size, weight and battery life are all pretty self explanatory and tend to be linked.  For example, better batteries cost more and increase the weight.  Shrinking the size of a laptop while retaining the power tends to have a huge impact on cost.

Power is perhaps the most confusing and arbitrary trait so we can start there.  Power is a product of the CPU, GPU, Hard Disk and RAM available in the machine.  In this day and age in all honesty, the CPU and RAM are rarely the bottlenecks, even the lowliest laptops on the market tend to have good enough specs in this regard.  GPU on the other hand is a very different story and we will discuss that in depths shortly.


How Much Power Do You Need Anyways?

This is a good question and frankly it depends a great deal on what you intend to to do with your computer.  Are you developing simple 2D titles?  If that is the case just about any laptop will be sufficient.  On the other hand, and this is the big difference from the last revision of this guide, if you intend to develop for Virtual Reality that imposes strict limits on you.


As a general rule, I recommend the following tiers.


Good Enough

This is a machine that is capable of running most modern games and game development tools, the bare minimum I recommend buying, even though you could certainly use more.  The base I recommend is at least 8GB of RAM, an i5 or i7 processor and a dedicated GPU at least a 940m or better.  We will discuss this point in more detail in a second.  I also STRONGLY recommend an SSD (Solid State Drive), at least for the OS partition.  This will add to the cost, but will also make your computer feel several times faster.  It’s easily the best upgrade bang for buck you can make.


Even Better

This is ultimately the tier I will be buying in.  The sky is not the limit budget wise, so we need to keep costs under control.  Recommendations stay very similar to the good enough category.  An i5 or i7 CPU, RAM is cheap these days so go at least 16GB and an SSD is mandatory in my opinion.  The biggest difference from the Good Enough category, the dedicated GPU.  In my opinion the modern baseline future proof VR ready GPU is a nVidia 1060 or better.  You will find this limitation is really going to bump the price up while knocking the available options down.


Best

Perhaps you aren't as budget restrained as me?  In that case I will make a few recommendations for really amazing computers.   Truth is, they aren’t really that much better than the middle category.  However the fit and finish and quality of components is often a tier up.  The newest highest spec GPU and CPU, or the smallest possible form factor.


Other Factors


I have imposed some limitations on what I consider “portable” and this is a big gotcha when it comes to game development laptops.  First is weight.  Anything over 6 or 7 lbs in my opinion is not portable, not in the throw it in a backpack and lug it around all day sense.   I also view battery life as essential.  Almost every single laptop I am listing here will be a battery hog, so 2-3 hours on battery is about the norm.  Many “desktop replacement” laptops however will struggle to even last an hour on battery.  There is nothing against these machines, they are portable in the sense that they are easier to move from room to room for example, but not portable in the traditional laptop sense.  The size factor is also going to be important here.  In the goal of 6lbs or less, that is going to leave us mostly looking at 15” and smaller laptops. 


The good news is, if portability and battery life aren’t that important to you, there are a ton of 17” laptops available with a dedicated GPU and a much lower price tag.  The bad news is, I wont be discussing them here.


About GPUs

This is perhaps the most important part of your decision, which GPU (Graphics Processing Unit) to chose.  Basically you have two options, Integrated graphics -- graphics provided by your CPU or a dedicated GPU.  Almost universally a dedicated GPU will out perform an integrated graphics chipset by an order of magnitude.  I don’t really view integrated graphics as a viable option for any but the most casual game developers.  Don’t get me wrong, modern game engines such as Unity or Unreal will run on a modern integrated graphics chipset, they just wont run well!

Now we enter the incredibly confusing world of dedicated GPUs.  The one nice thing here is, nVidia basically have a monopoly, so you are mostly choosing WHICH NVidia card to chose and this is where it gets confusing.  First lets look at the short hand way do determining which cards are better.  You will often see an alphabet soup of numbers when it comes to nVidia GPUs and they all have meaning.  You will see names like 765m, 980 or 1060.  The first number(s) reference the generation, while the remaining numbers represent relative power.

So for example 980 is a 9th generation chip, while 80 represents it’s capability.  A 980 for example is a generation newer than an 880 and more powerful than a 970.  The most current generation of GPUs are the 10 series, such as the 1060, 1070 etc.  Generally each generation is faster than the previous generation, but not always.  The 10 series however seem to be about 40% faster than their peer.

The big difference for this year though is VR capability.  Be aware, you can buy several of last years models still, such as 960/970/980 powered laptops.  That said, often these chips were not compatible with VR due to a technology called Optimus.  If VR development is your priority, make absolute certain that your GPU is VR Ready.  Any current generation 1060 or newer should be capable of VR.

Microsoft just recently announced their recommended developer specs for mixed reality development:

image

Keep in mind, these specs are actually a fair bit lower than other headset providers.  For example, here are the recommendations for the Oculus Rift:

image


Another point of confusion is the recent release of Max-Q GPUs from NVidia.  Max-Q versions of the 1070 and 1080 currently exist.  This isn’t really a technology, more of a standard.  The idea behind Max-Q designs is to strike the right balance point between performance, noise and power consumption.  As a result, these devices are often underclocked but better on the battery life and have lower heat output.  As a general rule of thumb, a Max-Q GPU performs somewhere in between it’s own and the previous series.  For example, a 1080 Max-Q runs slower than a 1080 and faster than a 1070.

One final thing to be aware of is that mobile versions of GPUs tend to be about 20% slower than their desktop equivalent.  A GTX 970 is a desktop card, the mobile equivalent would be a 980m.  Again, if buying from that generation of GPUs be certain that it is in fact VR compatible, most aren’t!  Or be safe and buy a 10 series card.

You will on occasion run into a desktop card like the GTX 970 in a laptop…. this is exactly what it sounds like, a desktop card that has been installed in a laptop.  Generally this means that laptop will have horrible battery life and weight.  Again, it’s all about trade-offs.  With improvements in mobile tech, desktop GPUs being used in laptops is becoming increasingly less common.

Just as I was about to publish this, perhaps one of the most inconceivable things occurred…  Intel and AMD teamed up on a Intel CPU, AMD GPU powered single chip solution aimed at ultra portable systems.  It is not yet available in any shipping laptops, but is expected to have performance comparable to a GeForce 1060 mobile GPU.  We live in interesting times!


About CPUs

The CPU used to be the most important part of the computer, but in recent years the GPU has taken it’s crown.  These days you have a plethora of options and choosing the correct version isn’t simple.  In most cases, an ultra low power CPU such as an ARM or Atom CPU will no be sufficient.  This is also true, but slightly less so, of any i3 series of processors.  When it comes to choosing between i5 and i7 it gets much trickier.  You generally think higher the number the better the performance, but this isn’t necessarily true.  In most cases either choice will work for you, just be sure to note core clock speeds and number of cores/threads.  Get the highest clock rate/core count combo you can afford is generally the safest solution.  Most i5/i7 4 core solutions will be sufficient for most of your needs.

One thing to be aware of however is the generations of chips.  Intel has been resting on their laurels of late and each new generation ( with names like Kaby Lake, Coffee Lake and Broadwell ) being very similar to the previous generation.  For the 8th generation ( most recent ) there is a HUGE difference though…  generally 8th gen chips are slower but run at a massively lower ( 1/3! ) wattage requirement, leading to battery life.  They make up for the slower clock speeds by being boostable.  For most tasks, gaming included, the new chips will perform as well but require much less power.  That said, for tasks that max out a CPU, such as rendering or video processing, you will actually see better performance from earlier generation chips.  If battery life is your priority though, you definitely want to get a 8th generation processor.  Most computer companies switched to 8th gen chips nearing the end of 2017.


4K or FHD

When it comes to displays, other than size, this is going to be your next most common question… 4K and FHD.  Truth is, this is a very hard decision to make.  I tend to lean toward FHD (full HD, 1080p) for several reasons.  First, it’s generally cheaper, requires less power so battery life improves and frankly most games struggle to run at 4K resolutions.  On a 15” screen, that’s a lot of trade-offs for a relatively small benefit.

On the other hand, once you get used to using a 4K display, it’s hard to go back.  It’s easier on your eyes and generally makes for a nicer experience with daily computing.  However some (far too much sadly) software does a bad job of dealing with high DPI displays and you will need a magnifying glass trying to read these applications at a 4K resolution on a tiny screen.

A few years ago, I would have said FHD hands down.  These days HDPI support is improving and GPUs are getting fast enough to handle that many pixels.  It really is a coin toss here.


60 or 120 Hz

With the rise of more and more powerful laptops, the refresh rate of the screen is also frequently becoming more important.  Keep in mind the refresh rate of your monitor corresponds to the maximum framerate that can be displayed.  So if your GPU is putting out 135 FPS but your display is 60hz, its only showing you 60 frames of animation.  120hz displays are becoming increasingly common, but are only really useful if you can pump out that many frames of animation.  As a point of reference, NTSC (North American TV) runs at 24hz, while movies normally run at just under 30hz, so this isn’t a HUGE deal, but is certainly noticeable to some.


Are Solid State Drives Worth It?

You will commonly see machines advertised as having a Solid State Drive (SSD) and often a slower “storage” drive.  Is it worth it to get an SSD?   In a word…. yes.   In two words…. hell yes.

To be honest, I am starting to think a SSD might actually be the single most important aspect of a computer.  A good solid state drive will result in boot times that are literally measured in a handful of seconds.  It goes well beyond that too.  Programs load faster, much faster.  Tasks that repeatedly access the disk, such as compiling game code, will performance several times quicker than on a traditional hard drive.

When it comes to traditional hard disks, beyond size of course, the only thing that really matters is speed.  You will have a choice between 5400 and 7200 RPM.  The difference is about as clear as the numbers show, a 7200 RPM drive will load data about 30% faster, and it is noticeable.  This is an area where many laptop developers have tried to shave costs and I regret it.  Personally the first thing I do is remove the traditional HD and replace it with a SSD.


Ports

As you will see (spoiler alert!) the ports in a machine are increasingly important as well.  These days USB 3 is the normal baseline and you will generally want at least 2 USB ports on a laptop.  USB-C is the future, you’ve probably got one on your phone if it’s a reasonably current device, and some USB-C ports are Thunderbolt.  These ports enable you to do a heck of a lot more, including running multiple external 4K displays, etc.  Keep in mind that different ports have different functionality and it isn’t often easy to find out these details.  For example, some devices can actually charge over USB-C, enabling you to plugin an external battery pack for a quick charge.  Thunderbolt also is confusing, as you can get a 2 lane or 4 lane device.  A 2 lane device is capable of running most external GPUs for example, but will struggle to then send the information BACK to the laptops internal display, because it’s running out of room on the Thunderbolt cable.  Four channel thunderbolt devices have all the room in the world to do some pretty amazing things, like running multiple 4K displays off a single port!  It’s also becoming increasingly common for machines to not ship with HDMI or Ethernet ports.


Ok, enough background, let’s get to the machines.  I am going to break these down by manufacturer, in no particular order.

Dell/Alienware

The Dell XPS series are perhaps among the very best laptops available today, but sadly they aren’t sporting the greatest GPU options.  This is probably due to their ownership of Alienware gaming focused laptops.  Alienware sadly are huge ugly bricks of a machine, barely qualifying to makeDellXPS this list.

Dell XPS 15

The Dell XPS 15 is an exceptionally well made laptop with one of the nicest screens and smallest bezels available.  The biggest downside to the XPS series is that the best GPU you can get is a nVidia 1050, an OK GPU, but perhaps the bare minimum if you are looking to do VR development.  Most XPS laptops, 13 and 15” have a Thunderbolt 3 port, although often limited to 2 channels.  The XPS 15 battery is good for 5 or 6 hours on typical usage.


Alienware 13"

The 13” Alienware is the most portable in the line, but still weighs in at a muscle building 6lbs.  The 13” model can support a GPU up to a 1060 in size and a large amount of RAM and storage.  Battery life is on the rather low end, lasting only a couple of hours.


Dell Inspiron

The cheap and cheerful option on this list, Inspiron’s are available with up to a 1060 GPU, a variety of CPU, HD and RAM options and a number of different screens.  Pushing the 6lb limit, the Inspiron is pushing the heavy side of the list, but budget friendly is always nice.  Battery life is also surprisingly good, 6+ hours on average load.


AcerPredator

Acer makes a few different game development capable laptops that are also portable.  The two primary lines are the Predator line of dedicated gaming laptops and the Inpsire line of general laptops that have decent GPUs available.


Acer Predator Helios

Again pushing that 6lb limit, this is not a light laptop.  That said, a 1060 GPU, advertised 7 hour battery life, solid SSD and CPU options, if you can handle the weight and “gamer” styling, this could be an option for you.  Please keep in mind, there are several machines in the Predator line-up, including massive 17” and larger machines loaded with power but lacking portability and battery life.


Acer Aspire (Nitro Black)

Acer also have the Aspire line of laptops, with the Nitro series targeting gamers.  They are available with up to a 1060 class GPU, weight in at 5.5lbs and have a stated 6 hour battery life.  Not the lightest or most portable option, but with a decent balance of capabilities at a reasonable price.


Asus

Asus makes a number of gaming capable laptops, especially under their Republic of Gamers moniker.  Several of these are huge and most are extremely “gamer” styled… bright lights and racing stripes.  The do however have some exceptional options available across the budget range.Zeph


Asus Generic Gaming Laptop

Asus have a variety of non-branded laptops aimed towards gamers that are the definition of OK.  They have OK power, an OK CPU, OK storage, OK screen at an OK price.  Most importantly they can sport a 1060 GPU and weight an OK 5lbs.


Asus ROG Zephyrus

This one isn’t cheap but otherwise it’s absolutely stunning.  A 1080 Max-Q GPU makes it one of the best performing options on the list.  A 0.7” thickness and 4.9lbs weight makes it extremely portable and the rest of the specs are pretty awesome too… everything except a pretty disappointing battery life that is.  Even the styling is pretty muted by Asus ROG standards.  Oh yeah, and the price tag!


Asus ROG Strix

Striking a balance between the generic Asus laptops and the top tier Zephyrus, their is the Strix line of laptops.  Available with up to a 1070 GPU, slightly over an inch thick and weighting 4.8lbs, its a good balance of power and portability.  Battery life in reviews seems to come in around 4+ hours, a reasonable amount.


Razer

Razer is perhaps the company that made thin but powerful laptops a possibility when they launched the Razer Blade laptop several years ago.  I had one of the original Blades and I will say at it’s time it was hands-down the best option that existed for a powerful portable laptop with goodRazer battery life if you were willing pay the steep price tag.  Sadly they seem to be resting on their laurels and today’s Razer Blade is almost unchanged except internal spec bumps and high price tag.  With the bump to 8th gen Intel CPUs, Razer Blades are highly discounted right now however.


Razer Blade 14”

In many ways you can think of the Razer Blade 14, as the Windows powered MacBook Pro with a solid GPU.  It’s premium, high quality, well put together and the price reflects all of that.  Sadly it also has only a 1060 GPU option available and the chassis has remained pretty much unchanged since launching.  Battery life is around 5 hours, depending on the screen option chosen.


Razer Blade Stealth + Razer Core

Let me say right up front, the Razer Blade Stealth is NOT a gaming laptop.  In fact it’s got no dedicated GPU at all!  So why is it on the list?  Well, it’s an ultrabook designed to be hooked up to an external GPU.  If the idea of light and portable laptop, that can be brought home and hooked up to an external GPU appeals to you, this may be an option! That said, with the price tag on the Core dock and the cost of a high spec Stealth, you may be wondering… why not just have a dedicated desktop at home? 


GigabyteGigabyte

At this point in time I think Gigabyte is the single best manufacturer for balancing power and form factor.  In the last round-up, it was ultimately a Gigabyte P34W laptop I chose and it has served me well that last two years.  Gigabyte laptops are not cheap, but are well made, powerful and come with an exceedingly rare 2 year warranty.


Gigabyte Aero 15X

This laptop nails it.  A long battery life, a 1070 Max-Q GPU, large SSD, lots of RAM and a fast CPU in a 4.5lb package.  Price tag is on the high side, but still cheaper than many on this list.  Even the styling is muted but not boring.  The only major problem?  It’s backordered… everywhere!  Earlier non-X versions are available for a lower price tag and a slightly weaker GPU.


Gigabyte P56

Slightly cheaper, slightly bigger and with worse battery life, there is also the P56 series of laptops from Gigabyte.  Capable of up to 1070 GPUs, these are another solid choice and are actually available for purchase.



Microsoft

A few years ago who would every have expected Microsoft to be on this list?  In fact, they make one of the single best options out there if you are willing to make two very large sacrifices, money and power.SurfaceBook2

Microsoft Surface Book 2

Available in 13 and 15” sizes, the Surface book is a very unique concept.  It’s a full computer in tablet form, but also has a keyboard with an additional battery and most importantly a 1050 (13”) or 1060 (15”) GPU!  This machine offers a staggering 10+ hours of battery life and VR capable graphics but there is a catch.  It’s expensive, very expensive.  Actually there is another major catch and the biggest reason I didn’t personally consider the Surface Book.  Under load, the battery drains even when plugged in.  For most people this isn’t a big deal, but for people running game engines all day, this is a huge deal breaker, especially at such a premium price!  Also unfortunately the Surface Book does not have a Thunderbolt connector.



MSI

Founded over 30 years ago as a motherboard manufacturer, MSI have an increasingly large presence in the gaming laptop market.  At this point they make so many laptops that could be eligble for this list it’s almost impossible to list them all.  Most of their 15” machines are reasonably portable with good power and middling to poor battery life.  They have a mind boggling 7 different series of laptops, GT, GS, GE, GP, GL, GF and GV, which also have a product name such as Apache, Stealth, etc.  MSI

GE63VR Apache

This series is available in both 15 and 17” and is probably the upper limit of power while still being a fairly reasonable weight.  Packing an i7-7700 and 1070 GPU in under 5lbs.  Battery life however is not it’s strong suit, lasting only a couple hours of moderate use.

GP62MVRX Leopard

The Leopard series is less powerful and thus less expensive than the Apache line.  Available with either a GTX 1050 or 1060 and an i7-7700 CPU, this machine is VR capable while a fair bit cheaper, also in an under 5lb package.  Sadly the battery life is also pretty much terrible on this machine.


Apple

I would be remise to not mention Apple in this lineup, although frankly their machines are often poorly suited for game development unless you are willing to spend a fair bit of money.  Only the upper range of the MacBook Pro line ship with a suitable GPU for game development.  On the other hand, build quality is excellent, battery life is also excellent and they are fairly compact portable machines.  Unfortunately Apple also recently removed the F row of keys from their machines, a huge annoyance to developers particularly.  On the flipside, if you want to develop for Apple based devices, a Mac is pretty much a required purchase.

15.4" MacBook Pro with R9 M370X GPUMBP

MacBooks are powered by the same Core i7 CPUs as most other machines on this list.  The MBP weighs in at an impressive 4.5lbs and advertises a 9hour battery life.  The biggest downside is price, generally about 50-100% higher than comparable Windows based laptops.  The most recent Macbook Pro’s ship with an Radeon 555, which is roughly comparable to a GTX 1050.


One major advantage to MacBook’s however is their early and prominent adoption of Thunderbolt, meaning a cheaper Macbook + a External GPU may be an option to overcome the relatively awful GPU situation.


Lenovo

One generally doesn’t think of Lenovo and gaming in the same thought, but this is a bit of a mistake.  Lenovo actually make a few very capable laptops with a really high build quality.

Lenovo Yoga 720

This is a 2 in 1 format machine, designed so the screen can fold back in a tablet like form factor, or tented for watching videos, it also somewhat shocking contains pretty solid Yoga720hardware, including a 1050 GPU and an i7-7700 CPU, but also a full touch screen and stylus.   With an 8 hour battery life and > 4.5lb weight, this is a very portable machine.

Lenovo Legion Y720

Legion is the gaming line from Lenovo, offering a 1060 GPU and a core i7-7700 CPU.  It’s got a bit of gamer styling going on (red lights galore) and pushes the weight a bit at 5.5lbs.  It also has a relatively modest price tag considering the GPU contained.  Also a 6+ hour battery life is certainly solid, while packed with ample ports including Thunderbolt.


HP

The HP Omen line is often a great option for a capable game development laptop.  Unfortunately the very best GPU option currently available from HP comes with a 1050 which is somewhat underwhelming, at least as the top tier option.   They did however just announce an upcoming Radeon Vega powered Spectre x360 coming soon, which could prove to be an excellent option.



Ultrabook + eGPU

Another possibility is pairing an ultrabook with an external GPU.  Basically an external GPU is an encasement that allows you to put a desktop class GPU that you plug into when you are home.  Obviously you will only gain the speed benefits when you are plugged in, but if you spend the majority of time at home, this might be the ideal setup for you.  Examples of eGPUs include the extremely expensive Razer Core or the Aorus Game Box which ships with either a 1070 or 1080.


So Then, What Did I Select?

Given that this entire process, all of this research, was ultimately about be selecting my new primary develop machine… what did I ultimately purchase?  If you are interesting in learning what I chose and why I chose it, be sure to click here. [Coming Soon]

General Programming


6. December 2017


GameMaker is a seminal game engine, with roots dating back to the late 1990s.  It is a cross platform 2D game engine with tools that run on Windows and Mac machines while capable of targeting both desktop operating systems as well as Ubuntu Linux, Android, iOS, UWP, HTML5, XBox One and PlayStation 4 consoles.  GameMaker is commercial software with a free trial available, we will discuss pricing shortly. 

The closer look series is a combination of overview, review and getting started tutorial aimed at helping you decide if a given engine is the right choice for you.  As always, there is an HD video version available here and embedded below.

Let’s jump right in with GameMaker Studio 2!


The Tools

GameMaker Studio is an all in one integrated environment for creating games.  It includes everything you need in a single application with a tabbed working environment and a unique virtual desktop style approach supporting multiple editing windows at once.  The all in one all tools at hand nature of GameMaker is probably one of it’s greatest selling points.


The Main Interface

image


Side and bottom panels can be collapsed down to give more room:

image


The primary work area is tabbed, supporting multiple open views at once:

image


As mentioned earlier, GMS has a workspace setup that enables you to work with and pan between multiple editors at once, like a giant virtual desktop.

GMSDesktop


The resource panel is commonly used across the various editors and contains the various assets that make up your game.  You can also drag and drop assets onto this window to import them for use in your game.  For example, dropping in an image file will create a new Sprite entity for you.

image


You can also create new entities via the dynamic right click menu.  For example, right clicking the Tile Sets area will bring up this menu:

image


The Room Editor

image

This is your traditional level editor, where you can create various layers of entities that compose your game level.  A top left you have the layers controls, enabling you to create/delete/hide the various layers that make up your game.  Layers can be composed of instances (objects), backgrounds, tile maps and paths.  The editors below the layer controls change dynamically based on what kind of layer is selected.


Selecting a tile layer brings up the tile map editing tools, including a palette of tiles you can paint with.

image

GMS even has support for auto tiling, if your tileset is compatible.


The Sprite Editor

image

This editor enables you to define how a sprite is imported, the various frames of animation if any as well as a preview of the sprite or animation.  Additionally, clicking Edit Image brings up a full blown image editor within GameMaker.

image

This is a full blown sprite editing package with a variety of brushes available, full layer support, the ability to paint across frames, several tools such as text tools, polygon tools, a magic wand selection tool, mirroring tools and more.  Pretty much all the functionality you would expect for creating or editing sprites is available directly in GMS.


Sound Editor

image

You also have control over sound effect details via the sound editor/mixer.  Supported audio files include wav, mp3, wma and ogg.


Tileset Editor

image


As mentioned earlier, the room editor has full support for tileset layers.  There is an editor for defining tilesets as well as defining auto tiling support.  There are also editors for defining tile animations and creating predefined tile brushes.


Path Editor

image

This editor is used to define paths, either straight line or curves.  Often used for AI paths, the generated paths can be used and editing directly in the room editor.


Script Editor

image


This is the built in editor for developing games using GameMaker Script.  It has syntax highlight, code suggestions and a selection of other features.

image

The code editor is also used for shaders.


Drag and Drop Editor

In addition to GMS scripting, GameMaker also provides a drag and drop programming option.

image

You can use drag and drop from the toolbox to script your programs behaviour.  We will cover both programming options in more detail shortly.


Font Editor

image


Enables you to import and preview fonts for use in your game.  Fonts can be in either true type or open font formats.


Object Editor

image

The Object Editor is where you will start to tie your various resources together.  For example, your main character will be an object that connects to a sprite, while handling various different events.  Objects are created in the Object Layers in the room editor and generally represent the entities that make up your world.  We will look at objects in a bit more detail later.


Programming In GameMaker

You may be wondering at this point how exactly you implement gameplay logic in your GameMaker game?  Essentially you attach logic to objects in the game world.  When you edit an object you will notice there is an Events option.

image


Click the Add Event button and you will see the various events you can respond to in your game:

image


These are called at various points by the game engine and are analogous to the game loop in other engines.  Step is called once per pass through the game loop and is most commonly where you will handle update logic.  There are also events for when the object is created, destroyed, etc… as well as various options for responding directly to events such as collisions, touches, etc.


You can also wire up code to be called when a Room is created, via the Creation Code button:

image


Next it’s a matter of deciding HOW you want to program in GameMaker, via Drag and Drop as well as directly using GameMaker scripting.


Scripting

Scripting is done using Game Maker Language, or GML, which is a C like scripting language.  The syntax is fairly simple and if you’ve had any prior C, Python, C++ or similar language experience, picking the language up should be fairly simple.  There are built in methods for most functions you would want to perform such as graphics drawing, audio code, networking, platform specific tasks like in app purchases etc.  There are also built in data types such as Stacks, Lists, Maps and Queues.  Actually teaching GML is beyond the scope of this document but you can access the language reference here.

If functionality is lacking it may be available on the GameMaker Market Place or you can add it yourself by creating a native extension.  You can add new functions to GML in this manner.


Drag And Drop

Programming via drag and drop in GameMaker is your other option and is a great choice for people that just want to jump in and figure things out on their own.  Don't worry too much about performance as the DnD code is ultimately generating GML script so performance should be roughly the same.  In fact, you can switch freely between the two programming methods at will within the same project or call GML directly in your DnD script.

Creating scripts in DnD is as simple as dragging in predefined functions to create a flow chart of sorts that occurs top down, like so:

GMLDnD

Once again, you can freely switch between the two methods.  Additionally, in any script your can right click and select Convert To Drag and Drop.  A reference of all the drag and drop tiles is available here.


The Price

GameMaker is commercial software, so that means there is a price tag attached.  There are multiple versions available for GameMaker as well as addition platforms coming with an additional price tag.  Pricing (as of today, 12/6/17) breaks down as follows:

image

image


In addition to these various different platforms, there is also now a new $39 per year ( most of the above non-console licenses are permanent buy once ) Creator Edition aimed at hobbyist developers.  It is fully featured but requires you to choose Windows or Mac and also requires your game display a splash screen.  There is also a heavily limited free trail available.  For more information on pricing or to download the trial visit here.


Community and Documentation

As you might expect for such a long lived game engine, there is also a very well established community.  The forums are available here.  With almost 20K registered users and 230K posts, the forums are quite active and contain a wealth of knowledge, although much of it is for earlier 1.x versions.  Questions seem to be answered fairly quickly.  In addition to the forums there is also the YoYoGames help desk containing several guides and how-tos.

There is also a fairly comprehensive GameMaker Studio manual available online which can be opened directly within Studio.

Additionally, there are several books available for GameMaker Studio such as:


In addition there are several tutorials and start kits available on the online marketplace, which we will talk about…


Online Marketplace

Quickly becoming the must have feature of modern game engines, GameMaker has an online store available, containing free and commercial assets including demos, scripts, sprites, shaders, extensions and more.

image

You do not need to have GameMaker Studio installed to access the marketplace, you can browse it in your browser here.


Conclusion


At the end of the day, GameMaker Studio faces a challenging new world as it is facing increasing competition from free and free to start game engines.  Is it worth it?  That is impossible for me to answer, as value is very subjective.  Game Maker is certainly a very complete 2D engine with a vibrant community and tons of resources.  Compared to the previous versions, the 2.x editor contains a great deal more polish and most every tool you would need is included out of the box.   Game Maker has certainly proven itself a production capable engine, having powered such titles as Hotline Miami, Undertale and Spelunky, all titles that have seen commercial success.

A proven catalog of game is always a strong selling point.

Personally, if you are working on a 2D title using Windows or Mac, Game Maker is certainly worth considering.  Do keep in mind however that as you add more platforms, you also add more cost.  In many cases though, this means you are ready to commercialize your title, so hopefully cost isn't as much of a concern.  I do think however they are making a mistake in charging for the Creator Edition.  Personally I would do away with the trial completely, make Creator free and charge people to deploy to additional platforms.  If this was the case it would be a great deal easier for me to recommend you check out GameMaker yourself.  Without a free option, its hard to recommend in the face of so many free/free to start options out there.  The engine is great, productive, proven and easy to learn… just saddled with a bit of a dinosaur business model.


The Video

Programming General Design


6. June 2017


There are several game engines out there that present a code free option such as Stencyl and Construct.  Today we are looking at an open source alternative, GDevelop.  It is a cross platform, open source 2D game engine with a visual programming interface that requires no previous experience.  However there is also the ability to extend the engine using the C++ programming language if desired.  If you are new to the Closer Look series, it is a combination of game engine review and getting started tutorial helping you decide if a game engine is right for you.


As always, there is a video version of this tutorial available here and embedded below.


Without further ado, let’s jump into GDevelop.


Meet GDevelop

As mentioned above, GDevelop is an open source 2D game engine.  It is released under the MIT license for the core engine, while the editor is available under the GPL v3 open source license.  The code is available on Github.

Of course you don’t ever have to touch the source code to work with GDevelop.  You can download binaries for Windows, Mac, Linux as well as Browsers, iOS and Android in the form of GDevApp.  I will not be covering GDevApp today however.  GDevelop is able to compile native applications, HTML5 pages as well as Android applications, which is currently an experimental feature.

The vast majority of your time is going to be spent in the GDevelop editor, shown below.

image

The center of the screen is currently showing the Scene editor.  There is where you can compose scenes.  It is a tabbed view that can contain multiple open scenes as well as Events, the programming model of GDevelop, which we will discuss more shortly.

On the right hand side is the Objects Editor, which contain the building blocks of your game.  On the left hand side is the Project Manager containing the assets and scenes that make up your game.


Let’s walk through creating a sprite in a game.  In the Objects editor, right click objects and select Add an object.

image

This will show us a list of possible objects:

image


For every object except the Sprite you need to enable it before you can use it (thus why they are grayed out).  It’s as simple as double clicking a grayed out object to enable it however, like so:

image


In this case however we are going to use the Sprite object, which is already enabled.  Simply double click Sprite.  Double clicking the newly created object in the Object editor will open up the sprite editor screen:

image


At the top right corner of the editor window you will see the Images bank’s editor, click the plus icon and add the images you will use for your sprite.  Next drag the selected images down to the images section, like so:

GIF


You can rename and configure the animation (if any) under the Animations panel.

image


Now you can create an instance of your Sprite object by simply dragging it into the scene.

GIF2


As we saw earlier, there are several built in objects in addition to the Sprite object, including Admob integration, a Text object, a tiled sprite (spritesheet), etc.   Next lets move on to adding some logic to our newly created object.


Scripting in GDevelop

Logic in GDevelop are implemented using Events.  Let’s look at an example of moving the sprite around when the mouse moves.  Click on the Events tab.

image


In the Events ribbon, click Add an Event:

image


In this case we have no conditions, we want this to happen every single frame.  Hover over No actions, then select Add an Action.

image


This is where the building block aspect of GDevelop programming comes into play.  Select All Objects->Position->Position of an object.

image


Now we can set the parameters for positioning our object.  First select the object to modify, then set each parameter.  In this case we set the X and Y values to those of the mouse cursor, like so:

GIF3


Upon completion, you will see we now have an event defined:

image


In this particular case we have no condition, so our event will fire every pass through the event loop.  We could however have set a condition which causes our event to fire or not.  Here for example is a condition that will start playing some music once the scene is loaded.

image


Beyond conditions, there are other control structures you can add to events:

image


Link enables you to break link to another event sheet, enabling you to modularize your code.  It is also possible to define variables, both globally, to the scene and at the object level.  For example, right click the Project and select Modify Global Variables.

image


This now enables us to define new variables:

image


This can also be done at the object level, right click an object and select Other Properties.  Then in the resulting panel select Click to Edit...

image


While we are here, notice the Behaviors option?  This enables us to add new functionality to game objects.  Click the Add... button:

image


You will notice once again, by default all behaviors are disabled.  Double click a behavior to add it in.  Let’s go ahead and add Top-down movement as an example.  You can now edit properties of the new behavior in the same dialog:

image


This will instantly add arrow key navigation abilities to your object.  When you play your game, arrow keys will cause your object to move around screen.  Speaking of playing your game, hit the Preview button in the Scene ribbon to launch your game in your browser.

image


You can control application level settings of your project by right clicking your project and selecting Edit the property of the game.

image


This will bring up the next dialog.

image


Finally, if your project has Native extensions enabled, under the File menu you have the option to build a native version of your application.

image


Then simply click the Compile button.

image



Documentation and Community

GDevelop is reasonably well documented, with a Getting Started tutorial, several other tutorials and a decent number of starter templates to choose from.

image 


There is also a manual available online.  If you are intending to extend GDevelop using C++ however, the documentation is almost non-existent.  However being an open source project, all of the code is available.  All of the behaviors and objects we used in this example are available in source form on Github in the extensions folder:

image


GDevelop has a dedicated forum available here.  It is reasonably active with a decent sized community.  Forums are available in both English and French.


Conclusion

If open source, free and a visual programming interface are important to you, GDevelop is definitely an engine to consider.  The documentation is adequate, the engine is mostly feature complete, although annoyingly some features such as Tiled support are only available for native targets.  The entire thing is designed around extensibility and if you are willing to dive into C++, the sky’s the limit on what you can do.  My biggest complaint is a lack of polish on the UI layer, experiencing a few crashes, some UI glitches that went away on a reload and some buttons that simply do nothing.  Most annoyingly, the engine is basically unusable on a high DPI display.

It is however an easy engine to jump into and use if you are willing to deal with some UI warts.  An MIT license around the core engine is always an excellent feature.


The Video

Programming


1. June 2017


Ever wish you could go back in time to the days of 8bit computing, when coding was simple and pixels were large?  Thanks to the rise of Fantasy Consoles, this process is easier than ever before.

So what exactly is a fantasy console?  Basically it’s a virtual console with a complete development environment.  The console is designed to be Pico3intentionally limiting, much like the primitive retro computers of the 8bit era.  Generally each also comes with a code editor, programming language (Lua), tile and world editor and some form of music composer.  This gives you a very focused, simple and constrained programming environment to work with.  You’d be surprised how striping away all the modern trappings enables you to focus on a single concept... fun.


So without further ado, let’s take a quick look at 4 virtual consoles available today.


PICO-8

PICO-8 is the application that seemingly launched the entire fantasy console movement.  The hardware it emulates provides a 128x128 pixel display, support for 4 channel audio, 128 8x8 sprites and 32k console/disk sizes.  It is PICO-8 illustrated in the image to the right.  In addition to the virtual machine, it also provides a code editor, sprite editor, map editor as well as music and sound editors.  It is available for $15 USD.


TIC-80

TIC-80, or Tiny Computer, is very similar in concept to PICO-8, with slightly less restrained virtualized hardware.  In this case it provides a 240x136 display, up to 256 8x8 foreground and 256 8x8 background sprites, 4 channels of audio and a 64kb disk/console size.  Tic is open source with the code available here.  TIC-80 also provides a VM, code editor, sprite editor, map editor and music/sound editors.


LIKO-12

Another open source option, LIKO-12 is heavily inspired by PICO-8, built on top of the LOVE game framework.   LIKO is currently less feature complete than the others, lacking many of the editors others provide.


PixelVision 8

Perhaps the most interesting of the options out there, certainly the most polished from a UI perspective, PixelVision 8 is heavily inspired by PICO-8 witha  major twist.  PixelVision aims to emulate the development experience of real world hardware such as the NES, Gameboy and SEGA Master System.  It also enables you to customize the capabilities of your target platform.  It also contains several built in editors for graphics, music and code.  Currently it is only available for purchase for $15USD, although a free version is in the works.


You can learn a bit more about fantasy consoles and go hands on with PICO 8 in this video, which is also embedded below.


Programming


15. December 2016

 

Welcome to the next part in the ongoing Closer Look At game engine series.  The Closer Look series combines a review, overview and getting started tutorial in one and aims to give a developer a good idea ofs2closerlook a given game engine is a good fit for them or not.  Today we are looking at the S2Engine, which is a commercial game engine available for purchase on Steam.  Right off the hop the S2Engine is going to have two major strikes against it for many game developers.  First, it’s Windows only.  Figured I’d get the out of the way right up front as if you are looking to create cross platform games, this is not the engine for you.  Second, it’s commercial and closed source, although the price tag is quite low at around $20USD.

 

As always there is an HD video version of this review available here.

 

Without further ado, let’s jump in to the S2Engine.

 

The Tools

The entire development experience in the S2Engine takes place in the S2EngineHD Editor.  Here is the editor in action running the included sample scene:

s1

 

The S2Engine Editor is absolutely loaded with tools, lets take a guided tour.  First off we have the scene window where you can see a live rendering of your game in action:

sceneoptimized

 

Please keep in mind the fuzziness in the picture above comes from the animated gif process, the real-time viewport looks vastly superior to the image above.  The Scene view is where you place entities in your scene and preview the results.

 

You can switch between the various available tools using the following toolbar:

image

Or via menu:

image

 

The Project Window

image

 

This is where the various assets of your game are organized.  It’s an analog to the underlying file system of your project.  The buttons across the left enable you to filter the various different objects ( Animations, Models, FSMs, etc ).

 

The Class Window

image

 

This is where you can instance various game objects.  Select an object, click Create and then click within the scene to place the entity.  The newly created entity (or a selected entity) can then be configured using the lower Params window, which is context sensitive to the selected object.

 

Terrain Tools

image

 

S2Engine has a full terrain editing system in.  The Terrain tool enables you to interactively edit the scenes landscape (height map).  There are tools for raising/lowering, flattening, stepping and painting terrain as well as drawing roads and vegetation.  The actual editing is done in the scene window:

terrain

 

Model Window

image

 

S2Engine supports 3D animated models of FBX format, simply click the Import button in the Project view:

image

 

There are multiple different panels for configuring models, setting and handling animations, managing joints/bones and even vertex level manipulations.

image

 

There is also an animation panel.

image

This enables you to blend animations together, set and remove animation keys and of course, preview animations.

 

Material Window

imageimage

 

A detailed material system allowing multiple layers.  You can control diffuse and normal maps, UV tilting, lighting properties and more.  You also have control over detailed material attributes like alpha blending, animations, scattering, light emission and more.

 

Special FX

image

 

Fine tuned control over multiple special FX of types weather, post processing and environmental.  Fine tune control over all aspects, including water fx, sky, weather, lens effects, etc.  You also have fine tune control over day/night cycles using a keyframe system:

image

 

Cutscene Tool

image

 

S2Engine has a complete system in place for authoring cut scenes.  Includes a curve editor:

image

 

As well as a detailed timeline:

image

 

Hierarchy

image

This is essentially your scene graph.

 

Font Tool

image

Enables you to create png textures for fonts of varying dimensions with font preview.  Fonts are imported in fnt format created using the BMFont tool.

 

GUI Editor

image

Currently in Beta, there is a UI editor available.  You can create a hierarchy of UI widgets and configure them using the Params class panel.

 

imageimage

Currently supported widgets include button, slider, frame, input box, combobox, label, checkbutton, colorbox, image, listbox, groupbox, tabbox and rangeinputbox.

 

Publishing

When you are complete publishing is a pretty straight forward process.  This is one of the advantages of only supporting a single platform publishing is as simple as choosing a file name, starting scene, main script (entry point) and a few other settings and clicking the Publish button.

image

 

Coding

There are two ways to code in S2Engine.  You can use their own scripting language or the visual FSM (Finite State Machine) visual programming language.  The scripting language has the sc2 extension and has a C like syntax.  You can read the language reference here while the API documentation is available here.  Scripts are simply connected to (and thus control) game objects.  Here is an example script that controls a jeep found in the demo game.

#message TakeControl
#message LeftControl
#message LockWaypoints
#message UnlockWaypoints

#use "engine.wav"

var float acc;
var float steer;
var bool brake;
var bool control;
var float steerAng;
var string steerNode;
var string handsNode;
var float oldsteerAng;
var bool _on;

function void Init()
{
	_on=false;
	control=false;
	steerAng=0.0;
	steerNode="steer";
	handsNode="hands";
	AICreateObject(false,false,205.0,200.0);
	resetNodeFlags("camera","visible");
	resetNodeFlags("hands","visible");
	SetSource(10.0,15000.0);
}

function void PostInit()
{
	SetPerObjectMaterialData(3,0.0);
	resetNodeFlags("light01","visible");
	resetNodeFlags("light02","visible");
	_on=false;
}

function void update()
{
	if(control==true)
	{
		acc=0.0;
		steer=0.0;
		brake=false;
		RotateNode(steerNode,"rgt",-steerAng);
		RotateNode(handsNode,"rgt",-steerAng);
		
		SetSourcePitch((PhysicsGetVehicleRPM()*0.0025)+1.0);
		/*LOG( string(PhysicsGetVehicleRPM()) );*/
		
		if(IsKeyPressed("w"))
		{
			acc=1.0;
		}
		if(IsKeyPressed("s"))
		{
			acc=-0.5;
		}
		oldsteerAng=steerAng;
		if(IsKeyPressed("d"))
		{
			steerAng=steerAng+(frametime);
			steer=-1.0;
		}
		else
		{
			if(IsKeyPressed("a"))
			{
				steerAng=steerAng-(frametime);
				steer=1.0;
			}
			else
			{
				steerAng=0.0;
			}
		}
		if(IsKeyPressed(" "))
		{
			brake=true;
		}
		if(steerAng>=35.0)
		{
			steerAng=35.0;
		}
		if( steerAng<=(-35.0) )
		{
			steerAng=-35.0;
		}
		steerAng=ScalarInterpolate(oldsteerAng,steerAng,(frametime/200.0));	
		RotateNode(steerNode,"rgt",steerAng);
		RotateNode(handsNode,"rgt",steerAng);
		PhysicsVehicleControl(steer,acc,brake);
		
		if(acc!=0.0)
		{
			var vec3 fwdaxis;
			fwdaxis=GetWorldAxis("fwd");
			SendMessageMulti("pushOut",string(fwdaxis),400.0,"null");
		}
	}
	else
	{
		PhysicsVehicleControl(0.0,0.0,true);
		if(ObjectIsInRange("player01",300.0))
		{
			SendMessageSingle("player01","DriveVehicle","");
		}
	}
}

function void message()
{
	if( ReceivedMessage("TakeControl") )
	{
		/* lights control */
		var float tod;
		tod=float(GetLevelParam("TimeOfDay"));
		LOG("tod"+string(tod));
		if( (tod>=18.0) && (tod<=24.0) )
		{
			SetPerObjectMaterialData(3,1.0);
			if(!_on)
			{
				SetNodeFlags("light01","visible");
				SetNodeFlags("light02","visible");
				_on=true;
			}
		}
		if( (tod>0.0) && (tod<6.0) )
		{
			SetPerObjectMaterialData(3,1.0);
			if(!_on)
			{
				SetNodeFlags("light01","visible");
				SetNodeFlags("light02","visible");
				_on=true;
			}
		}
		if( (tod>6.0) && (tod<18.0) )
		{
			SetPerObjectMaterialData(3,0.0);
			ResetNodeFlags("light01","visible");
			ResetNodeFlags("light02","visible");
			_on=false;
		}
	
		/*=======================================0*/
		control=true;
		SetNodeFlags("hands","visible");
		PlaySound("engine.wav",true);
	}
	
	if( ReceivedMessage("LeftControl") )
	{
		control=false;
		ResetNodeFlags("hands","visible");
		StopSound();
		SetPerObjectMaterialData(3,0.0);
		ResetNodeFlags("light01","visible");
		ResetNodeFlags("light02","visible");
		_on=false;
	}
}

 

It’s a straight forward enough language, but I generally prefer that engines use an off the shelf scripting engine instead of rolling their own.  This gives the community access to a much larger source of expertise, sample code and generally is much more time tested and stable.  As you can see from the script above, much of the logic and communication is implemented via message passing.

The majority of in game programming however is done using FSM (Finite State Machines ) via the FSM graph.

s2

If you’ve ever worked in Blueprints in Unreal Engine or Flowgraph in CryEngine you should have a pretty good idea how FSM programming works.  You’re code responds to various events and creates program flows using a series of connecting cables to other states.  Each node can have multiple actions, configured like so:

s3

There are dozens of states available, and new ones can easily be created.

image

Variables are easily created as well.

image

In addition to local variables, parameters and globals can also be defined.

image

 

 

The Documentation, Community and Content

The S2Engine has a decent amount of documentation, reference materials, getting started videos and beginner projects.  There are however a few issues, the first of which is English.  The developers primary language is not English and it shows on occasion in the documentation.  The actual UI is very well translated but some of the documentation  is certainly a tad “Engrish”.  Worse, some of the linked starting videos aren’t in English at all.  I have no issue with non-English videos, but I would recommend not linking them directly from an English localized application.

In terms of actual available documentation, there is a Wiki available here, a very solid reference manual available here, and a series of video tutorials available here.  S2Engine also comes with the beginner scene you’ve seen throughout this review.

The community for S2Engine isn’t huge but there is an active forum.  There is also a Trello bug tracking board available on Trello as well as a few other community options.  One impressive thing about the engine is the engine developer is very responsive to user requests and feedback.

One interesting aspect of the S2Engine is the existence of Content DLC.  These are themed content packs you can download and use in your game.  Currently the only content pack is the Medieval content pack shown in the video below. There is another content DLC pack in the works.

 

 

Conclusion

I pointed out the two biggest negatives to this game engine in the very first paragraph.  It’s Windows only, both for tooling and target platforms.  It’s closed source and commercial.  For many those are going to be big enough deal breakers that nothing else really matters.  For the rest though, is this a worthwhile engine?  For a small team effort, there is a massive amount of functionality included in this engine, it’s capable of some staggeringly pretty results and the workflow, once understood, is pretty accessible to people with limited programming experience.

My biggest recommendation to the developer behind this engine is to make a proper demo available.  What will get people to use this engine over the other options is that they prefer the workflow, the tools, the built in assets, etc.  The lack of a current demo is going to vastly limit the potential audience.  Even with a low price tag, few people will spend money to evaluate an engine and having a previous weaker version of your engine available as the trial is certainly a mistake.  When you go to the download section of the website, you are greeted by this text:

NOTE: The version to be downloaded here (1.4.5) is a previous, very old, FREE BETA version. It is useful just for letting you to view How S2ENGINE HD is organized and How it works. It doesn’t represent the final quality of the 1.4.6 Steam version.

This is quite simply a mistake.  A demo is about selling people on your engine, so having them experience a “very old” version is a bad idea.  Always put your best foot forward when showing an engine.  I would recommend creating a version of the current engine that is full featured but either time locked, save limited or publish limited.  You will have a great many more developers willing to give your engine a try. 

I have found the performance to be a bit inconsistent.  I was running consistently at 70+ FPS, then struggled to hit 15FPS for a while with a ton of UI glitches.  Upgrading to the newest nVidia drivers didn’t help.  Then oddly, switching Optimus to use the integrated GPU, then back to dedicated seemed to fix the problems.  Hopefully these problems are localized to me and not widespread.  I wish the developers used a standard UI toolkit like Qt, as their custom implementation can be a bit buggy or not perform as you’d expect.  I also unfortunately experienced a half a dozen crashes while evaluating the engine, including one while making the video version of this review.

 

The Video

Programming


See More Tutorials on DevGa.me!

Month List