GameMaker to Godot: rebuild your GML game in Godot 4

By Eduardo Orellana · Updated

A GameMaker game moves to Godot as a rebuild: objects become scenes, events become callbacks and signals, rooms become scenes, and every per-frame number becomes a per-second one. Flockbay's AI reads your GML and room files, rebuilds the game in a Godot 4 project, and you play it against the original.

AppImage, x86_64. Ubuntu 22.04, Debian 12, Fedora 39 or newer.

Intel or AMD Chromebook, with Linux turned on.

Download for macOSDownload for Windows

GameMaker counts in frames, Godot counts in seconds

The first thing that breaks in a GameMaker port is speed. A GML Step event runs once a frame, so hsp = 4 means four pixels a frame and grv = 0.3 means a third of a pixel a frame, every frame. Godot's _physics_process hands you delta, the seconds since the last tick, and its physics speaks in pixels per second.

So every number in a Step event gets multiplied by the room speed, once for a speed and twice for an acceleration. At a room speed of 60, a walk speed of 4 is 240 pixels a second, a gravity of 0.3 is 1,080 pixels a second squared, and a jump speed of 7 is 420 pixels a second. Miss one and the game runs at the wrong speed in a way that is hard to see until you play both.

We checked that arithmetic on a small GameMaker platformer rebuilt in Godot 4.7.2: walk, gravity, a jump and a coin. The Godot version walked at exactly 240 pixels a second and its jump peaked at 85.2 pixels, against 85.1 for GameMaker's own frame-by-frame jump, and the coin scored. The numbers were right because they were converted, not copied.

More on this: A GameMaker Studio alternative for people who never wanted to write GML

What maps to what

An object becomes a scene with a script. Its Create event becomes _ready, Step becomes _physics_process, a Collision event becomes an Area2D's body_entered signal, an Alarm becomes a Timer node, and Draw becomes either a Sprite2D or AnimatedSprite2D child or a _draw() override. instance_create_layer becomes instantiating a scene and adding it to the tree; instance_destroy becomes queue_free.

The place_meeting loop, the one that inches a player pixel by pixel until it touches a wall, is what CharacterBody2D's move_and_slide() does for you, floors and slopes included. global variables become properties on an autoload, with() becomes a loop over a group, and parent objects become inherited scenes or a shared script.

Both engines put the origin at the top left with y pointing down, so positions from a room carry across unchanged.

What carries across as files

GameMaker Studio 2.3 and later keep a project as readable files: the .yyp, a .yy JSON file per object, sprite and room, and a .gml file per event. Rooms list their instances and layers with positions; sprites are folders of PNG frames with their origin and speed. The AI reads all of it, so a level is rebuilt where it was.

Sprites become SpriteFrames for an AnimatedSprite2D, with the same frames and speed. Tile layers become TileMapLayer nodes from the same tileset image. Sounds copy across. Art you made is yours to move; Marketplace assets come under their own licences.

How Flockbay rebuilds it

Put the GameMaker project where Flockbay can read it and open a new game. Tell Flockbay what you are bringing and how it plays. It reads the objects, events and rooms, writes a brief of what it rebuilds first and what changes on the way, and builds nothing until you approve it.

It rebuilds each object as a scene, converts every per-frame value at your room speed, imports the sprites and tiles, and checks its own work by playing: input events, stdout, the debugger and viewport captures. Then you play both versions and say what feels off. Feel is where a port drifts, and GameMaker games are often tuned to the pixel.

Questions

Is there a GameMaker to Godot converter?
Not one that carries a game across. GML and GDScript differ in shape, not just syntax: events against callbacks, frames against seconds. The game is rebuilt, which is what Flockbay's AI does from your project files.
Does my game keep its speed and feel?
Its speed, if every per-frame value is converted at the room speed. Its feel needs playing: you judge the jump and the movement against the original and ask for changes.
Can it read an older GameMaker project?
Projects from GameMaker Studio 2.3 on are JSON and GML files. An older .gmx project is XML and is read the same way.
What happens to my sprites and rooms?
Sprites become animated sprites with the same frames, tile layers become tile map layers, and rooms become scenes with every instance where it was.
Is the result tied to Flockbay?
No. It is an ordinary Godot 4 project on your disk, which opens in plain Godot.