Game Maker Language

Game Maker Language (GML) je skriptovací, objektovo-orientovaný programovací jazyk určený pre použitie v programe vytvorenom s cieľom vytvárať hry – Game Maker.

Existuje aj verzia G-java API, poskytujúca java vývojárom funkcie GML jazyka. Pôvodne ho (jazyk GML) vytvoril Mark Overmars ako základný jazyk programu Game Maker a je kompatibilný s jeho prostredím drag-and-drop (ťahaj a polož), ktoré používa rovnakú syntax.

Z drag-and-drop prostredia vyplýva objektovosť jazyka. Nepoužívajú sa pojmy ako "trieda" či "objekt", preferujú sa pojmy "objekt" a "inštancia".

Jazyk je syntaxou podobný C (programovací jazyk). Neobsahuje makrá. Nemá striktnú formu písania. Je veľmi podobný ostatným jazykom, jeho výhodou je, že každý môže použiť svoje zvyky z iných jazykov, napr. použitie "and" namiesto "&&", "!=" a "not", použitie zložených zátvoriek a i. Nepoužívajú sa veľké písmená, ale rozlišuje ich.

Rozšírenia 
Game Maker podporuje od verzie 7.0 "mechanizmus rozšírení". Rozšírenia je možné vytvárať (v jazyku GML) a zdieľať s ostatnými používateľmi na oficiálnych stránkach autora, alebo si ich tam zdarma stiahnuť. Často to bývajú rozšírenia nejakého miesta, pre určitý typ hier, napr. hra viac hráčov, vykresľovanie zložitých útvarov atď. Každá akcia/funkcia je skript v jazyku GML, ktorý môže užívateľ použiť vo vytváranej hre. Game Maker obshauje predvolený súbor knižníc (vstavaných rozšírení) obsahujúcich bežne používané akcie, ako napr. funkcie pre vykresľovanie, matematiku, prácu so súbormi a i.

Pre vytvorenie rozšírenia je možné použiť  Extension Maker.

Syntax 
GML má syntax veľmi podobnú ostatným jazykom (C) a tak je jednoduché si na ňu zvyknúť. Pre zoznam knižníc, ktoré Game Maker obsahuje, stačí stlačiť F1 a zobrazí sa pomocné okno.

Nerozkazuje ani v použití { a } či ;.
if x = 1 x -= 1
je to isté ako
if (x = 1)
{
  x -= 1;
}
tiež ako
if x = 1
  x -= 1

Operátory 
GML používa všetky bežné logické aj matematické operátory. Používa napríklad xor, or, ale pochopí aj &&.

x = x + 1;
je to isté ako
x += 1;
je v edícií Game Makera Studio to isté ako
x++;

Premenné 
Game Maker automaticky alokuje pamäť pre všetky premenné, ktoré sú použité/deklarované. Nie je potrebné ich ani deklarovať, stačí im rovno priradiť hodnotu. Inicializácia na určitú hodnotu pri deklarovaní sa dá nastaviť v rámci programu, pôvodná hodnota je 0. Používa typy Integer (aj keď má rozsah reálneho čísla), String a n-rozmerné polia. Vo forme objektov je možné používať aj vysoko-objektové typy ako mapy, zoznamy,... Obsahuje aj vstavané konštanty, ako napr. pi (3.14). Každý objekt má tiež istú sadu premenných, ako napr. x (koordináty objektu v sústave x) atď.
var x;
i = 0;
j = 15;
k = i + j; // k = 15
Premenné môžu byť globálne (použiteľné v celom programe), alebo lokálne (len v danom objekte).
global.globalnapremenna = 1;
lokalnapremenna = 1;
Použitie mriežky:
if global.PocetNabojov[Samopal] < 10
{
  draw_set_color(c_red);
  draw_text(360,53,"Ostava len" + string(global.PocetNabojov[Samopal]));
}

Cykly 
GML má vstavanú väčšinu bežných cyklov. Obsahuje aj jedinečný cyklus repeat. Chýba mu však často používaný for each. For each však ako dodatočný skript vytvoril jeden z používateľov a je možné ho stiahnuť na fórach YoYo Games.
// repeat (počet opakovaní)
i = 0;
repeat 5
{
  i += 1;
} 
// i = 5
Použitie vetvenia with. Ako objekt sa môže použiť all, self, noone, meno objektu atď.:
//with (objekt)
with (podlaha)
{  	
  if (player.x > podlaha[x] && player.x < podlaha[x] + 32)  	
  {
    player.z = player.z + 8;
  }
}
Použitie vetvenia switch:
switch druhjablk
{
  case 1: draw_sprite_stretched(spr_1,-1,320,20,50,50); druhjablk_text = "Jonagold"; break;
  case 2: draw_sprite_stretched(spr_2,-1,320,20,50,50); druhjablk_text = "Sungold"; break;
  case 3: draw_sprite_stretched(spr_3,-1,320,20,50,50); druhjablk_text = "Golden Delicious"; break;
  case 4: draw_sprite_stretched(spr_4,-1,320,20,50,50); druhjablk_text = "Silver Delicious"; break;
  case 5: draw_sprite_stretched(spr_5,-1,320,20,50,50); druhjablk_text = "Tehla"; break;
}

Príklady kódu 
Gravitačný systém v 3D hre:
if padam = 1
{
  if zspeed < rychlost rychlost = zspeed
  else if zspeed = 0
  {
    padam = 0;
    if ((rychlost < -7) and (rychlost >= -9))
    {
      obj_player.health += rychlost;
    }
    else if ((rychlost < -9) and (rychlost >= -10))
    {
      obj_player.health += 2 * rychlost;
    }
    else if ((rychlost < -10) and (rychlost >= -13))
    {
      obj_player.health += 3 * rychlost;
    }
    else game_end(); 
    rychlost = 0;
  }   
}
Klasický pohybový systém v 3D hre:
if keyboard_check(ord('W')) or keyboard_check(vk_up)motion_add(yaw    ,1)
if keyboard_check(ord('A')) or keyboard_check(vk_left)motion_add(yaw+90 ,1)
if keyboard_check(ord('S')) or keyboard_check(vk_down)motion_add(yaw+180,1)
if keyboard_check(ord('D')) or keyboard_check(vk_right)motion_add(yaw+270,1)
speed*=.75
Skript na náhodnú farbu:
return choose(c_black,c_red,c_navy,c_lime,c_yellow,c_dkgray,c_purple,c_gray,c_white);
Skript na demoverziu hry:
if global.demoverzia = 1
{
  registry_set_root(0);
  if registry_exists_ext('\Software\removethis','removethis')
  {
    show_message("This is only a demo version. To continue playing please download the full version.");
    game_end();
  }
  instance_create(0,0,obj_limitatorfunkcii);
}*Od verzie GameMaker Studio nie je možné pracovať s registrami a inými prvkami Windows, keďže nepodporujú multiplatformové ambície tvorcov.

Referencie 

Skriptovacie jazyky