A downloadable engine for Windows

Buy Now$14.79 USD or more

A general-purpose platform engine (Game Maker Studio 1.4 and 2.0 source file) that can be used to quickly get a platform game project up and running. Available for both GMS1 and GMS2! Pick the file of your fancy, or both!

  • Custom collision checking system that is faster than Game Maker's built-in pixel-by-pixel collisions.
  • Uses no platform-specific functions: can be used with any export module with only minor changes!
  • Power-up system: pick up power-ups from item blocks and lose them on damage; each power-up can be assigned its own code, letting you fire projectiles, fly, and more or less anything you can imagine.
  • Jump-through platforms; the custom collision checking system allows ANY object that uses them to treat jumpthrough platforms properly.
  • Moving platforms; can be jump-through or solid, moves both player, liftables, power-ups and enemies around, can crush all of them if they get trapped between a moving platform and a solid object, including another moving platform.
  • Moving platforms can be set to constantly patrol a path, with an arbitrary shift along the path in order to synchronize platforms with each other, or to wait at the start of a path, follow it once the player lands on it, and then drop off into the abyss.
  • Simple event system with NPCs that can be assigned arbitrary code to execute in each of their actions; comes prepackaged with simple message boxes.
  • Checkpoints that lets you restart where you died, even if it was in a different room.
  • Doors to transport the player between different locations, either in the same game room or between different rooms.
  • Extra lives, Game Over, and gaining 1UPs by comboing enemies or collecting 100 coins.
  • Liftable objects; very general and easy to customize. Lets you make portable platforms the player can carry around, shells to send sliding along the ground to knock out enemies, and other types of objects that can be carried.
  • Enemy system for walker enemies that can be easily customized.
    • Enemies can wander aimlessly or chase you.
    • Enemies can walk off edges, jump off edges, or turn around at edges.
    • Enemies can randomly jump while walking.
    • Enemies can jump and walk at different speeds, including being horizontally still during either and move during the other.
    • Enemies can be assigned an arbitrary shooting script with one line of code to set up, enabling simple or complex attack patterns. (They don't even technically need to spawn a projectile as part of their attack)
  • Surface-based light-and-darkness system with an arbitrary level of darkness ranging from pitch black to barely noticeable; can be set to glow around the player, items, and light sources independently of each other.
  • Item blocks that can be filled with arbitrary objects and do arbitrary things when the player hits them, including creating empty blocks or bursting into debris.
  • Ladders you can climb, including grabbing them mid-jump.
  • Water that can be swum in.
  • Support for multiple playable characters; just set up data and change the current character variable.
  • All scripts and objects has thorough comments that explains their functionality.
  • Easy to edit and extend to suit your needs.
  • 4 example levels to learn from!
  • 9 example enemies.
  • 3 example power-ups.
  • Includes custom-made, previously unreleased tilesets, backgrounds, sprites, sound effects and music that can be used in commercial games!
  • Credit appreciated but not mandatory.
  • Can be used in commercial games, but do NOT resell the source code itself, even if modified.
  • GMS2 source code is in fact a direct port of the GMS1 source code, converted using the GMS2 legacy import tools. While it has been checked for problems, there might be stuff I missed. Please report any problems you find with it.


Buy Now$14.79 USD or more

In order to download this engine you must purchase it at or above the minimum price of $14.79 USD. You will get access to the following files:

Source Code (GMS1) (v1.1) 4 MB
Source Code (GMS2) (v1.2) 5 MB

Download demo

Engine demo (.EXE) (GMS1) 4 MB
Engine demo (Compressed application ZIP) (GMS1) 5 MB
Engine demo (Compressed application ZIP) (GMS2) 4 MB
License Agreement 22 kB

Development log


Log in with itch.io to leave a comment.

Do you give lessons/take commissions?

Not really, I'm kinda busy and my schedule for doing indie programming stuff is very erratic. And I'm not a particularly good teacher either, for that matter :P I'd recommend just going to the GameMaker Community forum, there's plenty of tutorials and the programming questions board is still very active. (You can find me there as well, even if I'm not exactly active every day)

Do you have any plans to do a full conversion to GMS2, rather than just the autoport?

Not really. I'm not using GMS2 a lot and I don't really see the point in having two separate codebases to support and doing all development/bugfixing twice.

Hello, I just purchased this and tried to run it on GMS2 and am getting an error "index was outside the bounds of the array." Please help!

I'll check it out and see if I can narrow it down. Did you use the GMS2 source file or import the GMS1 source? I've seen a similar case for another project where import changes made the GMS2 source break but importing the GMS1 source solved the problem.

(1 edit)

I used the GMS2 source file, will try GMS1. (edit) Just tried this but I'm using a Mac and can only open GMS2 source file :/

Aw :/

Could you post the entire error message? Maybe there's some other clues in it (like WHICH array is out of bounds)

Also, did you try updating the player_score script? When investigating I found an error where it uses the wrong variables in two places, it worked in previous versions. You could try updating that and see if it solves the problem (it's a really small change)

Instead of this:

effect_spawn_textpopup(x,y,        ....

It should be this:

effect_spawn_textpopup(argument0,argument1,   ...

The error message only says "Index was outside the bounds of the array." I checked the player_score script and it was already like this:

effect_spawn_textpopup(argument0,argument1,   ...

I did some more investigations and found a thing in the GMS2 release notes: (this post). Seems to be broken in runtime, worked in runtime, and it works for me in runtime what's your GMS2 runtime version?

From what I gather there's an issue where valid GML becomes invalid C++/JavaScript code sometimes when a single GML statement becomes multiple instructions when parsed, which sounds like a nightmare to track down :/

(Since there's also an option to carry on and collect all errors that's possible before ending a compilation, it might be helpful in finding the resource that causes this to happen... perhaps?)

The issue mentioned in the GMC topic refers to an issue with for loops whose first statement isn't a variable assignment causing this error, I went through all for loops in the engine and none of them has it... only suspect thing is compatibility script __global_object_depths() having a "var i = 0" assignment, not sure if that would be a candidate with vars behaving different from ordinary variables? (The solution if this is the case would be moving the "var i" part outside the loop and then do a normal "i = 0" inside the for loop).

Geez, GMS2 still kinda feels like it's in beta sometimes :/

Tried importing the GMS2 version in GMS2.2.0.343 and it had one error, there's a mistake in player_score (Scripts-->Gameplay-->Player-->Score Lives Etc) where it uses the calling instance's x/y instead of argument0/argument1. The body of the script should look like this, then it compiled fine for me:

if(argument3 && argument2 > 8000){
    global.playerscore += argument2
(Alternatively you could use argument[2] instead of argument2 and so on for the other arguments, this might be why you get an array index error)

If this doesn't solve the problem for you, could you please copypaste the entire error message? Usually it hints at where the error occurs.

the player_score already looks identical to the one you just sent. the error message only says "GameMaker: Studio AssetCompiler encountered a problem. Index was outside of bounds of the array." Then, at the bottom of the Output log it says:

/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono exited with non-zero status (82)

elapsed time 00:01:25.4687960s for command "/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono" /Users/Shared/GameMakerStudio2/Cache/runtimes/runtime- -options="/var/folders/w4/215d0gjj3b7f5sql711p01jr0000gn/GameMakerStudio2/GMS2TEMP/build.bff"  -- Mac Run started at 11/03/2018 19:35:20
FAILED: Run Program Complete

p.s. let me know if you'd rather communicate via e-mail or whatever's easier

(1 edit)

"Support for multiple playable characters; just set up data and change the current character variable"

How, please? which object/script contains these? I would like to switch between two players at the start of a level, with the exact same data, just different sprites

Thanks so much in advance and great job creating all these fine assets. Keep up the good work :)

(1 edit)

Scripts-->Initialization-->init_characters, it's a tabbed script with init_character_maria as the only alternate tab at the moment. At the bottom you'll see the lines of code that initializes sprites. To fully add a new character, I guess what you should do is...

  • Make a new constant for the character's ID (must have a different value from char_MARIA)... you could use the existing constants char_LOUISE, char_PRINCE, char_FROG and char_SUNSHINE if you'd like to, of course.
  • Make a copy of init_character_maria (create a new tab and copypaste init_character_maria's code text into it) and use the search-replace feature to replace "char_MARIA" with the new character constant
  • Change the sprite assignments to the new character's sprites (they're at the bottom of the script).
  • Don't forget to call the script from init_characters, just how it calls init_character_maria.
  • To change the active character, just assign the character ID to the variable global.playerchar based on what the player selects - it's always assigned char_MARIA by default since the demo only has 1 character. You can make the menu any way you want~

I think that's all you need to do, hopefully I didn't forget anything :) Just hit me up with more comments if there's any problems~


Thanks so much for the swift and indepth reply. Awesome! Will try all of it soon, thanks again!

I got the following error msg in GMS2.  Any resolution for this?

Script: player_score at line 1 : no references to arguments 0,1 but references arguments 2,3

Good catch, I can't believe I've let this slip through. Replace x and y with argument0 and argument1 respectively (in the script) and it should work as intended. I'll get an updated version with this fixed uploaded.

Uploaded a "v1.1" version of both source files with this fix applied. Let me know if there's any more problems.


It worked properly after replacing it.  Thanks.  and love your work!

Added a new GMS2 version of the source code - the original version imported and ran just fine in GMS2 for me, but this should save you a bit of work. If you've bought MariaEngine previously, this new version should be downloadable at no additional cost.

It's still a bit experimental since GMS2 got released just a few days ago, so please report any problems with the new version here.

So from what I can tell, this is an addon / editor gui addition to GameMakerStudio?

If you manage to integrate an easy way to add busts for dialogue, it's probable I'll use this for PFC.


It's a GMS source file, so anything you see in the demo can be tweaked just by editing the code. The dialogue system basically just uses an array for text, shouldn't be too much work to add in another array for mugshots/busts to go with it.


Thanks for the info! Once I consider working seriously on PFC again I'll definitely grab this up.

Your ladders need a bit of work. Also standing on a one way block and an enemy jumps up through will damage you. I assume to hop on enemies you need to be in the air rather than just above them. There doesn't seem to be a pause or an exit out of game when you're in full screen (I guess alt + enter worked to get me into full screen, it can work to get me out.) What about controller support?


The sprite provided is dark. Do you have a brighter version of that sprite ? Thanks !



Blazes, this is better stuff than the best of what's on the GM market. o _O Genius work.

Thanks! ^__^

And yeah, the GM Marketplace is kinda clunky at the moment, so I can see why a lot of content creators don't use it... (especially the GM integration that makes just adding something to a project take ages). It's much nicer to just distribute/load a GMZ file IMO.