GameMaker Studio · GML
Guardado en la nube
El guardado en la nube permite a un jugador conservar su progreso entre dispositivos. Cada guardado vive en una ranura numerada (1-10) y es un struct de forma libre validado contra el esquema que defines en el panel.
Definir un Esquema de Guardado
En el panel, declara los campos que puede contener un guardado y sus tipos. El servidor valida cada guardado contra el.
Las ranuras van de 1 a 10. Guardar en una ranura usada la sobrescribe.
Guardar
Envia un struct a una ranura y lee save_completed de la cola.
var data = { x: obj_player.x, y: obj_player.y, money: global.money, map: global.mapid };
gmda_saveGame(1, data); // ranura 1 -> save_completedEl struct se envia como JSON. Manten los guardados razonablemente pequenos.
Cargar
Solicita una ranura y lee save_loaded. Una ranura vacia no es un error: e.response.save es undefined; cuando la ranura tiene datos, e.response.save.data es tu struct, tal cual lo guardaste.
gmda_loadGame(1); // -> save_loaded
// en el bucle de poll:
case "save_loaded":
if (e.success && is_struct(e.response.save)) {
var data = e.response.save.data;
obj_player.x = data.x;
global.money = data.money;
}
break;// save_loaded -> e.response.save (undefined when the slot is empty):
{
"slot": 1,
"data": { "level": 5, "coins": 120 }, // your struct, verbatim
"updated_at": "2026-06-07T18:00:00.000Z"
}
// read it with: if (is_struct(e.response.save)) { var data = e.response.save.data; }Listar Guardados
Lista las ranuras usadas con sus metadatos (sin el contenido) y lee saves_listed.
gmda_listSaves(); // -> saves_listed (e.response.saves)# saves: Array, each used slot (metadata only, no data):
{
"slot": int,
"size_bytes": int,
"updated_at": String
}
# save_completed -> meta has the same shape (slot, size_bytes, updated_at).Eliminar un Guardado
Elimina una ranura y lee save_deleted.
gmda_deleteSave(1); // -> save_deleted