Zmienne Zmiennych w GameMakerze nie trzeba definiować, są one tworzone poprzez pierwsze przepisanie na zasadzie zmienna = wartosc. GML posiada dwa typy zmiennych - łańcuch tekstowy (string) oraz liczby rzeczywiste (real). Typ zmiennej zostaje ustalony przy przypisaniu wartości (typ może się więc zmieniać w trakcie), nie można jednak porównywać dwóch typów zmiennych - jest więc to typowanie silne. Język nie posiada typów boole'owskich (true/false), tak więc za prawdę przyjmuje się każdą wartość >= 0.5, za fałsz wartości < 0.5;
Duża liczba zmiennych i stałych jest w język wbudowana. Część zmiennych jest lokalna dla każdej instancji obiektów (jak "x" czy "speed"), część jest wspólna i globalna (jak "score"), a część jedynie do odczytu (jak "fps"). Stałe są zawsze dostępne globalnie.
Użytkownik może definiować własne stałe, zmienne globalne (poprzedzając je przy użyciu prefiksem global., lub bez niego jeśli wcześniej zadeklaruje listę po wyrażeniu globalvar), zmienne lokalne (w obiektach, po prostu przypisując im wartość), oraz zmienne tymczasowe (w każdym fragmencie kodu, o zasięgu danego bloku, definiując listę za słowem var).