estoy diseñando los niveles de mi juego con un programa externo llamado Ogmo editor pero solo maneja el formato json
como podria importarlo a Game Maker o existe algun editor que exporte mapas en formato .gmx........
lo unico que encontre fue este script que lee y almacena la data en ds_grids pero mejor usare Tiled otro editor que exporta tus mapas directamente a room.gmx
[gml]
///loadLevel
if(objMain.extFiles==true){
dir = program_directory + "maps\";
background_replace(tileset0, program_directory + "/maps/tileset_test.png",0,0);
}
else{
dir = working_directory + "maps\";
}
var str = "";
var file = "";
var hey = "";
var lineCount = 0;
var tilemapWidthCountFlag = false;
global.mapWidth = 0;
if(ds_exists(objMain.levelData,ds_type_grid)){
ds_grid_destroy(objMain.levelData);
}
if(ds_exists(objMain.levelDataLayer2,ds_type_grid)){
ds_grid_destroy(objMain.levelDataLayer2);
}
file = file_text_open_read(dir+argument[0]);
var mapHeader = file_text_readln(file);
for(k=1; k<=string_length(mapHeader); k++)
{
if(string_char_at(string(mapHeader),k)=='"')
{
var j = "";
k++;
while(string_char_at(string(mapHeader),k)!='"'){
j += string_char_at(string(mapHeader),k);
k++;
}
if(global.mapWidth<=0){
global.mapWidth=real(j)/16;
}
else{
global.mapHeight=real(j)/16;
}
j = "";
}
}
global.tileWidth = 16;
global.tileHeight = 16;
objMain.levelData = ds_grid_create(global.mapWidth, global.mapHeight);
objMain.levelDataLayer2 = ds_grid_create(global.mapWidth, global.mapHeight);
global.tilesetIndex = 0;
for(var i=1; i<=global.mapHeight ;i++;)
{
for(var j=1; j<=global.mapWidth ;j++;)
{
var hey = file_text_readln(file);
var commaCount = 0;
var tileBuffer = "";
var tileID = "";
for(var k=1; k <= string_length(hey); k++)
{
if(global.tilesetIndex==0)
{
var q="";
if(string_char_at(string(hey),k)==' ')
{
k+=23;
while(string_char_at(string(hey),k)!='"' && k<57){
q += (string_char_at(string(hey),k));
k++;
}
global.tilesetIndex = background_get_name(asset_get_index(q));//argument[1];
k+=19;
}
if(k==string_length(hey)){
i++; j--;
}
}
tileBuffer = tileBuffer+string_char_at(string(hey),k);
if(string_char_at(string(hey),k)==',')
{
tileID = string_delete(tileBuffer,string_length(tileBuffer),1);
if(tileID="-1"){
tileID=0;
}
ds_grid_set(objMain.levelData, j-1, i-1, tileID);
tileBuffer = "";
j++;
}
else if(j>=global.mapWidth){
tileID="";
while(string_char_at(string(hey),k)!='<') && (k<string_length(hey)){
tileID += string_char_at(string(hey),k);
k++;
}
if(tileID="-1"){
tileID=0;
}
ds_grid_set(objMain.levelData, j-1, i-1, tileID);
break;
}
}
}
}
/*
//overlay tileset
global.overlayTilesetIndex=0;
for(var i=1; i<=global.mapHeight ;i++;)
{
for (var j=1; j<=global.mapWidth ;j++;)
{
var hey = file_text_readln(file);
var commaCount = 0;
var tileBuffer = "";
var tileID = "";
for (var k=1; k <= string_length(hey); k++)
{
if global.overlayTilesetIndex==0
{
var q="";
if (string_char_at(string(hey),k)==' ')
{
k+=20;
while (string_char_at(string(hey),k)!='"' && k<57)
{
q += (string_char_at(string(hey),k));
k++;
}
global.overlayTilesetIndex=background_get_name(asset_get_index(q));//argument[1];
k+=19;
}
if k==string_length(hey)-1 {i++;j--;}
}
if j>=string_length(hey)-1 {i++;break;}
tileBuffer = tileBuffer + string_char_at(string(hey),k);
if (string_char_at(string(hey),k)==',')
{
tileID = string_delete(tileBuffer,string_length(tileBuffer),1);
if (tileID="-1"){tileID=0;}
//tileID is the tile we want to store here. Let's store it into the ds_grid.
ds_grid_set(objMain.levelDataLayer2, j-1, i-1, tileID);
tileBuffer = "";
j++;
}
else if(j>=global.mapWidth)
{
tileID="";
while (string_char_at(string(hey),k)!='<') && (k<string_length(hey))
{
tileID += string_char_at(string(hey),k);
k++;
}
if (tileID="-1"){tileID=0;}
ds_grid_set(objMain.levelDataLayer2, j-1, i-1, tileID);
break;
}
}
}
}
*/
/*
hey = file_text_readln(file); //<entities>
hey = file_text_readln(file); //first sprite
//entities layer
if(ds_exists(objMain.levelDataSprites,ds_type_grid)){
ds_map_destroy(objMain.levelDataSprites);
}
objMain.levelDataSprites = ds_map_create();
var q = 0;
while(string_char_at(string(hey),5)=="<")
{
//loop through every sprite and draw them properly
var dataPart = 0;
var spriteIndex = "";
for(var k=6; k<=string_length(hey); k++)
{
valueBuffer="";
while(string_char_at(string(hey),k)!=' ') && (spriteIndex=="")
{
valueBuffer+=string_char_at(string(hey),k);
k++;
}
if(spriteIndex==""){
spriteIndex = valueBuffer;
}
valueBuffer = "";
if(string_char_at(string(hey),k)=='"'){
k++
while(string_char_at(string(hey),k)!='"')
{
valueBuffer+=string_char_at(string(hey),k);
k++;
}
switch(dataPart)
{
case 0: spriteID = real(valueBuffer); break;
case 1: spriteXPos = real(valueBuffer); break;
case 2: spriteYPos = real(valueBuffer); break;
default: break;
}
dataPart++;
}
}
var b = string(q);
ds_map_add(objMain.levelDataSprites, "spriteIndex" + b, spriteIndex);
ds_map_add(objMain.levelDataSprites, "spriteID" + b, spriteID);
ds_map_add(objMain.levelDataSprites, "spriteXPos" + b, spriteXPos);
ds_map_add(objMain.levelDataSprites, "spriteYPos" + b, spriteYPos);
q++;
hey = file_text_readln(file);
}
spawnSprites();
*/
//Close the text document to avoid memory leaks
file_text_close(file);
global.tilesetWidth = 16;
global.tilesetHeight = 16;
global.currentMap = argument[0]; //Let the game know which map is currently loaded
objMain.switchingMaps = false;
[/gml]