Hi guys! I recently transferred from GameMaker Studio to Godot due to the open-source as well as support for every type of PC! Even though I use Windows, I still admire that. Anyways, since Godot 2.1 won't start on my machine, as I wait for the issue to be resolved I will ask here:

Does anyone have advice for transferring from GML (GameMaker Language) to GDScript? I know that the concept of nodes and scenes ks a little different from GameMaker's objects, events, and rooms, so I would really appreciate if anyone who has used GameMaker and Godot can provide input on how to transfer my skills and how the two engines do the same things differently, such as object events, inheritance, and rooms. Thank you! If I need to clarify more, please say so.

Really the easiest way to transfer over is to read the introduction in the docs: https://godot.readthedocs.io/en/stable/learning/step_by_step/scenes_and_nodes.html

I've played around with GameMaker in the past but its been a while so forgive me if I'm missing something.

In Godot, rooms and objects are the same thing, both are represented as scenes. A scene could be the room, it could be the player, it could be a projectile, it could be an enemy, it could be the UI. A scene can have scenes to make some super-scene. To make a particular kind of object, you compose a scene made up of nodes; your player, for example, might have a KinematicBody to give it some movement functionality, a ShapeCollider to give it a hitbox.

You can add a script to any node in a node hierarchy, but you'll probably want to add this script to the base node, since it most represents the object you've made. Both GML and GDScript are typeless, you just declare 'var' then whatever variable name you want. You'll want to read up on GDScript, but it's basically a lot like python. To get variables, you usually have to type something like get_variable(), do your magic, then set_variable(variable) to apply it; you can't just modify variables like you can in GML, they're all protected with getters and setters.

You should program your game with the idea that there might not be a room for your objects to be in; each scene should depend only on itself. This makes it easy to test each of your objects in isolation, but also because of how Godot works, there's just not going to be any sort of level to test for by default (I'm sure you could program something that works this way if you wanted.) You should have some sort of base room which exists outside of any of your actual levels, which can hold game-wide variables--alternatively (even preferably) you can use Godot's Autoload feature for game-wide variables: https://godot.readthedocs.io/en/stable/learning/step_by_step/singletons_autoload.html

Godot comes with a built-in tilemapper but it's not on by default; you'll need to define a tileset and also add a TileMap node to the scene you want a tilemap in: https://godot.readthedocs.io/en/stable/learning/features/2d/using_tilemaps.html?highlight=tilemap

Each node type comes with their own signals, which is basically how you would call events. You can hook up a signal to a node and add a function which is called once that signal is fired. Signal = event. You can also define your own signals if you want. https://godot.readthedocs.io/en/stable/learning/step_by_step/scripting.html#handling-a-signal

Rather than scripting for each event, a single script can hold several events (signals.)

You'll notice that not every event available in GameMaker will be available from a node; for example, what if you want the step event? This is handled in Godot similarly to like it's handled in Unity3D:


func _ready():
	set_process(true)

func _process(delta):
	pass

As you can see, _process(delta) is where you would define your step logic. Initialization happens in func _ready(); remember there you need to set_process(true), or else your step event won't fire.

Collision handling occurs on objects which have some sort of body node attached to them, such as RigidBody2D; that has signals which can handle collision, such as body_enter( Object body )

You can inherit from scenes, which gives you all the nodes from the base scene, and updates them in the child scene if the base scene changes. I don't recall if GameMaker had this functionality, but there it is. Inheriting from scripts is also possible: you would extends "path_to_script.gd" A node can also have a built-in script, when you don't want a named script in your file system; this saves the script to the scene itself, mostly useful for one-off logic. The downside is that you cannot apply this script to anything else and also cannot inherit from it.

I am not a game make user, but I got started reading the docs and scouring the Q&A part of the Godot website. I can also recommend the kidscancode channel on youtube. I wish I had found it months ago, as he's a very good teacher. Start out with his video Godot 101 - Part 1: Introduction to Godot and just follow along. It won't take you long to get the hang of it.

Thanks for all the answers. They really helped. I read on the Godot Reddit on a post dated half a year ago that there was going to be improvements to the documentation. But right now it still seems that if you Google Game Maker Studio's documentation there's more examples of the code and comments in the code in the documentation. Will Godot ever have as good documentation that explains more things than it does now? I really prefer written tutorials to video series tutorials so that's why I'm asking. Thanks!

@P-Star7 said: Thanks for all the answers. They really helped. I read on the Godot Reddit on a post dated half a year ago that there was going to be improvements to the documentation. But right now it still seems that if you Google Game Maker Studio's documentation there's more examples of the code and comments in the code in the documentation. Will Godot ever have as good documentation that explains more things than it does now? I really prefer written tutorials to video series tutorials so that's why I'm asking. Thanks!

I couldn't answer that, as what you're asking for sounds pretty vague, as more documentation depends on the user's skill level. Speaking for myself what is there is fine to get going, but if you haven't done any programming before, it might not be enough, so I really couldn't say.

However, I have seen discussions on improving the documentation and the GDQuest guy also said he will work on the Godot docs if a certain stretch goal is reached, but I can't tell what that would be from his description here: https://www.kickstarter.com/projects/gdquest/make-professional-2d-games-godot-engine-online-cou/description

The next goal he has to hit for an official tutorial to happen is 24,000, and currently he is at 21,500, so perhaps watch for that?