Top 3 GameMaker Udemy Courses

I bought and watched a bunch of courses, but If I had to choose only 3, these would be the absolute best GameMaker Studio 2 courses on Udemy.

Precisely because I bought quite a handful of GameMaker courses on Udemy (and I still buy the occasional new shiny one) I feel confident enough to say that if I had to choose only three of them, these would be the absolute top 3 GameMaker Udemy courses I’d buy again!

These are referral links so if you decide to sign up, you will support me and this blog while learning from the very best courses available on Udemy right now!

Be a Game Maker with GameMaker Studio 2

  • Instructor: Benjamin Anderson, Aaron Craig
  • Duration: 9.5 Hours
  • Link

This course holds a sentimental value to me. I remember coding Super Cave Boy (the platformer game shown in this course) with GameMaker Studio: 1.4, following Ben’s original course (always on Udemy).

It’s been my first introduction to serious, thoughtful and structured game development in GML. Since then I watched every single video of Ben (aka Heartbeast) on YouTube. He’s one of the best known and deservedly respected GM:S and GMS2 instructors.

This course is a solid course and this time Aaron Craig (@beyondusgames) does a terrific job by teaching the Super Cave Boy part (the platformer game) in this GMS2 course while Ben’s teaching the Blaster Faster part (a revised version of his old course’s space shooter game). You get to code two games in one single course and you understand a lot of fundamental concepts here.

How to Make Tile Based Platform Games in Gamemaker Studio 2

  • Instructor: Peter Morgan
  • Duration: 11 Hours
  • Link

This is a surprise. It’s a bestseller course and yet I don’t know who this Peter Morgan is. I never saw a youtube video of his and that’s odd. You’d think that a Udemy instructor this good, should, at least, have dozens of published courses and a gazillions of videos on YouTube!

It turns out that Peter Morgan is a Math teacher. That’s precisely why this course is so good: he knows how to teach and he knows what he teaches. While I don’t find his own games that interesting (sorry Peter) this course is a real gem.

Right now it’s the best selling GMS2 course on Udemy and it surely deserves it. He just teaches stuff you don’t learn in other courses. There’s tile collision, lighting, particle effects and much more.

Making an Action-Adventure Game Using GameMaker Studio 2

  • Instructor: Gurpreet Singh Matharoo
  • Duration: 2.5 Hours
  • Link

I didn’t think I could learn so much stuff in 2.5 hours but I was wrong. Gurpreet has a gift! He’s concise yet complete in his lessons. He knows your time is precious so instead of doing stuff on screen, typing letter by letter, he explains what he already coded (and in great detail).

For this reason, watching his courses is a very different feeling; once you know your way around GameMaker, you crave such brevity. Because you can’t stand typing boilerplate collision code again and again, you start seeking these “to the point” courses. For instance, you don’t want someone to hold your hand line by line, but someone who can show you how stuff’s done and why it’s done in such a particular way.

This course is precisely that kind of course. It’s like a shot of condensed GML knowledge right into your brain. Pair this course with the previous two and you’re going to have enough knowledge to be dangerously skilled in GameMaker Studio 2.

Closing thoughts

I know there are many other GameMaker courses on Udemy but these are what I believe to be the most in-depth, well thought, well planned and well taught courses out there, right now.

I’ve been entertaining the idea of writing a book and make tutorials myself for quite some time now (for well over a year). Unfortunately my day job (I’m a Laravel/Vue developer) really took a toll on me and I’ve been mostly occupied with other things. I steered away from my original plans and I put everything on hold… but… lately… I’ve been collaborating with Zingot on something.

2D Platformer in GameMaker Studio 2

Free GameMaker Platfomer Tutorial Soon

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

I’m working on a free basic platformer tutorial. I’ll post a youtube video and a blog post as soon as I manage to complete it, edit the video and voice-over it. For this project I’ll be using freely available tiles and sprites:

I’ve just made some minor edits to the player sprite to allow up/down aiming and two different jump styles so I can work a little with the physics. I’ll talk about basic world design and very basic camera movement/confinement. Here’s a very early prototype I put together last Sunday evening.


I’ll release the code for free along with the video tutorial and the blog article. Of course if you want to help, check out my ko-fi page and support my projects; otherwise just enjoy and leave a comment!

Blog update

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

I’m currently working on this blog; fine tuning WordPress and the theme so it might look a bit off for a while. I got to the point where it took 10 seconds to load the homepage so I’m now considering switching theme, changing layout and I’m even considering using another platform. If you know any good alternative to a self-hosted WordPress, please let me know.

Book Update – 2018-09-01 – It’s taking shape

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

So I found an artist willing to collaborate with me on my GameMaker Studio 2 book. Thank God I can work with him once again! He’s the most talented Pixel Artist around. He knows about game development and the whole process and he can draw pretty much everything you throw at him.

I love this new graphics

I bet you can recognize his style! “Guess who’s back…” nudge nudge wink wink

What this means for the project

This will have a major impact over the whole project as the entire graphic assets will be distributed along the complete source code of the game. It will be freely modifiable and it will be freely available to be used in commercial projects as well as long as the original art credits will be included (you know, he remains the father of the original pixels).

You won’t be able to redistribute the graphics in reusable formats though. But this is to be expected. Your customers or your game’s players should not be able to export the graphics and re-use it for other projects. They will have to buy the book if they want to do so.

You’re also free to use the graphics for other game engines as well. You’re not restricted to GameMaker Studio 2… and to be honest some of the book’s concepts apply to other engines as well.

I’m rewriting the whole book from scratch and I hope to have the initial draft for review by December.

Video tutorials

The book will come with the complete development process on video. You’ll have free access to the complete development process. I’m recording everything I do and I will be editing it once the book is being finalized.

Like the idea? Support us

If you like the idea about what we’re doing here, please buy us a coffee. It will send us a strong support message. Also the more coffee, the more content we will be able to fit into the project in terms of both assets and development contents.

Buy Me a Coffee at

Thank you!

P.S. just in case you didn’t get it, the artist is obviously Darftey!

Dark Titan – Battle Over Fire

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

So, in response to this hilarious tweet by Burrito Tim, I’m officially naming my 2D Sci-Fi Action Adventure Platformer, Dark Titan – Battle Over Fire!

Here it is in all its glory. Well… more or less…

I’ve added the energy pickup, the exploding blocks, the “bombable” blocks and enemy spawners that resets upon re-entering the zone. Also added Gamepad support. Next up:

  • refactoring and optimization
  • save slots
  • menus (main and option)
  • triggers
  • cutscenes
  • powerups
  • visual effects here and there

Updates as of 2018-08-22 – The Metroid-like project(s)

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

So I was working on a small Metroid-like game in GameMaker Studio 2. Then one day I thought: what if I wrote a book about how I made it? Maybe I could attach the whole GameMaker Studio 2 source project to the book. It might be useful to others and it might even pay some of my bills (and make me an author as a nice side effect).

Small gif of the project

And so I decided to write an ebook. I’m aiming for less than 200 pages but as of now I can’t be sure about that. There’s a lot to write about. But there’s one issue with this grandiose plan.

If I want to release the source project, I cannot use this graphics.

One thing I need to take care of, is the graphics. I took the graphics from another project I bought on the Scirra store (the Construct software developers) because:

  1. I thought I was just going to build a game in GMS2 and release it
  2. I loved this graphics
  3. I asked the authors and they told me the Construct project could be dissected to be re-purposed in GameMaker Studio 2 as long as I didn’t redistribute the graphics in any reusable way.

So it’s still ok to use that graphics for a complete game but it’s not ok for me to redistribute it in a reusable way (i.e. I can’t sell/give away the source code with that graphics). Which is expected, reasonable and correct.

In short, as soon as I will finish the game (using that graphics), I will need to re-make the whole project with either more permissive-licensed assets or with brand new graphics (made specifically for the book project).

I’m inclined to hire an artist and make brand new graphics but we’ll see how it all pans out.

I’ll post more updates soon.

P.S. The doors/hatches graphics I’m using is made by Luis Zuno aka ansimuz. His Warped Caves asset pack can be downloaded for free. Check his Patreon page as well as his page. He makes lovely pixels.

Screen Tearing / Wavy Effect in GameMaker Studio 2 (using Surfaces)

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

After playing Environmental Station Alpha, I decided I wanted to implement the screen tearing effect Hempuli is using in his game. I didn’t know how he achieved it so I had to start from scratch and think about different approaches.

Knowing nothing about shaders, I was left with surfaces. I jotted down some code and immediately hit a wall; after asking around in the yoyogames forums, reading other’s comments, I could finally come up with a pretty decent solution.

Actual Code

I wrote the code so it could be easily hackable. This goes into the create event of your game controller object.
// handy shorter names
dw = display_get_width()
dh = display_get_height()

tearings_surface  	= surface_create(dw, dh)    // We'll draw on this surface
tearings_y          = 0
band_num            = 16                        // How many bands you want on screen
band_height         = dh / band_num
tearings_x_offset   = 32                        // How much you want to displace the bands horizontally
tearing_speed       = 4                       	// Change this to speed up/slow down the tearings
I place the following code inside a draw_post event of my controller.
// Create surface if it doesn't exits
if !surface_exists(tearings_surface)
	tearings_surface = surface_create(display_get_width(), display_get_height())
// Let's set the target to our surface
draw_clear_alpha(c_black, 0)

// We draw parts of our application surface on tearings surface
for (var current_band = 0; current_band < band_num * 2; current_band++)
	draw_surface_part(application_surface, 0, band_height * current_band - tearings_y, dw, band_height, sin( (degtorad(360) / band_num ) * current_band) * tearings_x_offset , band_height * current_band - tearings_y)

// Always reset the target surface

// Draw the actual surface
draw_surface_stretched(tearings_surface, -tearings_x_offset, 0, dw + tearings_x_offset * 2, dh)

// Move the Tearings
tearings_y = (tearings_y + tearing_speed) % (band_height * band_num)

That's it.

And this is how I make that effect. I will implement a similar version for vertical tearings (for underwater levels? maybe?). Hope you find it useful.

A note about surfaces: remember to free the surfaces if you don’t need them anymore, otherwise it will lead to memory leaks.

Guide to develop low resolution 2D platformers with smooth movement and pixel perfect collisions in GameMaker Studio 2 (with slopes)

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

Low resolution is great. It saves CPU power, especially with the collision code I talk about in this article, and it makes it easier to work with the project (like when building huge rooms or making edits to sprites). You’ll see that sometimes there’s little to no reason to scale up your sprites. It’s just a waste of resources.

With the collision code I use objects move by whole pixels. This makes for perfect collisions but it usually leads to jittery movements. Luckily there’s a simple solution.

The Movement and Collision Code

This is the most practical collision code I ever came across on the web. I read about it some time ago on Zack Bell‘s blog and I subsequently adapted it slightly to suit my needs. It basically remains the go-to code for 2D low res platformers. It’s like… unbeatable. Think holy grail of platformer movement and collision.

I’m using the following hierarchy.

  |_ obj_slope

You can use a different hierarchy for your collisions, just adapt the scr_platformer_move code. I’m using fall through platforms so I use the obj_solid_top.

This script must be called from the create event of your active/moving objects.

/// @desc       Initialize Platformer Vars
/// @func       scr_platformer_init()

/// This script is usually called in the create event

// Initialize the variables used for movement code
xVel = 0                // X Velocity
yVel = 0                // Y Velocity

xVelSub = 0             // X Sub-pixel movement
yVelSub = 0             // Y Sub-pixel movement

This code should run at the end of your movement velocities calculations. Ideally at the end of your object’s step event (normal step event is fine).

(open in pastebin)

Collision Masks

It’s of fundamental importance that you take extra care when dealing with collision masks. Make sure they behave the expected way especially when flipping your objects around. Most of the times the error lies in the origin or in the symmetry of a mask.

Wrong Collision Mask

Here’s a sample of a wrong collision mask. Counter intuitively I placed the origin in the exact middle of the mask. It will result in asymmetric mask behavior when mirroring it (i.e. when turning left or right in the game). This mask will create collision issues and probably get objects stuck inside walls or slopes. 

This mask is wrong.

Correct Collision Mask

It took me a while to understand how the origin pointer looks and behaves. This is a centered, symmetric collision mask… I’ll be honest: it absolutely doesn’t look like that to me. But trust me, this is the right one.

This mask is correct.

Let's fix the jittery movement!

It’s all about surfaces. We need to:

  1. Disable the automatic drawing of the application surface.
  2. Resize the application surface to the correct, hi resolution size.
  3. Draw our sprites with sub-pixel offsets.
  4. Draw the stretched application surface manually in a post_draw event.


Can you see what’s going on here? Objects still move by whole pixels. Their collisions are still being calculated for whole numbers only. Still, we draw the sprites with sub-pixel precision!

The loops for collision checks have to run for very low numbers/distances. This means ultra-smooth movement, ultra high performances and very low disk/ram resource usage (compared to up-scaled pixel art).

Still jittery on slopes? Let's fix it

If you download the attached project you’ll see how I solved the slopes jittery movement. 

I’m using simple trigonometry to find the Y position given the X position on a slope. I’m still using whole pixels to compute collisions but I use the following snippet just to draw the sprite of the player.

// Check for slope offset
slope = collision_rectangle(bbox_left, bbox_bottom +1, bbox_right, bbox_bottom + 1, obj_slope, true, true)

if slope
    var slope_height    = abs(slope.bbox_bottom - slope.bbox_top)
    var slope_base      = abs(slope.bbox_right - slope.bbox_left)
    var angle           = arctan(slope_height / slope_base)

    // Slope to the right
    if object_is_ancestor(slope.object_index, obj_slope_rx)
        if bbox_right < slope.bbox_right slope_spr_y = slope.bbox_bottom - (bbox_right + xVelSub - slope.bbox_left) * tan(angle) else slope_spr_y = slope.bbox_top } // Slope to the left else if object_is_ancestor(slope.object_index, obj_slope_lx) { if bbox_left > slope.bbox_left
            slope_spr_y = slope.bbox_top + (bbox_left + xVelSub - slope.bbox_left) * tan(angle)
            slope_spr_y = slope.bbox_top
    slope_spr_y = 0    // Not on slopes
And so in the draw event of the player I use the following:
// Slope Y Position
if (slope_spr_y != 0)
    var yspr = slope_spr_y
    var yspr = y + yVelSub

draw_sprite_ext(sprite_index, image_index, x + xVelSub, yspr, image_xscale, image_yscale, 0, c_white, image_alpha)


This system might not be perfect and I’m open to new solutions. Let me know if you have a better system to obtain smooth movements using low resolution assets.

A little update

This blog post is older than a year. Keep it in mind when reading it. Content might be outdated or no longer valid.

Since I now have a full-time job, I removed my Patreon page and my silly “donations” form. I also ordered a brand new notebook; it’s ridiculously powerful so I can run GameMaker Studio 2 with no lag (and in Full HD resolution).

Lately I found myself willing to create content but the very same job that gave me financial freedom, is kind of keeping me from making progress on my own projects. I guess I should stop planning ahead and just go with the flow.