Nombre del creador: Kirs (yo)
Versi?n de GM utilizada: :GM8: Pro
Informaci?n y utilidad: Bien explicada justo aqui abajo:
[gml]
/*************** TILESET JOINING SCRIPT *********************/
// //
// Este script sirve para crear un tileset sin separaci?n //
// entre sus tiles a partir de su correspondiente im?gen //
// con los tiles separados. //
// //
// Por 'Kirs' //
/*************************************************************/
//Argumentos: Imagen original, Offset en X, Offset en Y, separacion en X, separaci?n en Y, tama?o de tile
//Inicializar variables:
var back,width,height,xoff,yoff,xsep,ysep,tsize,sizeX,sizeY,numTX,numTY,bx,by,sx,sy,res;
back = argument0;
xoff = argument1;
yoff = argument2;
xsep = argument3;
ysep = argument4;
tsize = argument5;
bx = xoff;
by = yoff;
sx = 0;
sy = 0;
sizeX = background_get_width(back)
sizeY = background_get_height(back)
numTX = sizeX div tsize
numTX-= numTX div tsize
numTY = sizeY div tsize
numTY-= numTY div tsize
width = (numTX)* tsize;
height = (numTY)* tsize;
//Creamos la superf?cie y la asignamos como canvas
res=surface_create(width,sizeY);
surface_set_target(res);
//Primero vamos a unir la imagen horizontalmente
//Para esto cogemos rect?ngulos de 'anchura = tama?o del tile' y 'altura = altura de la imagen'
//y origen bx,by, y lo dibujamos sobre la superficie en la posicion sx,sy.
//Luego asignamos a by un nuevo valor teniendo en cuenta el tama?o del tile y la separaci?n vertical 'ysep',
//y para que vaya quedando unido, sumamos el tama?o del tile a la coordenada vertical de dibujo en la superf?cie 'by'
repeat numTX{
draw_background_part(back,bx,by,tsize,sizeY,sx,sy)
sx+=tsize;
bx+=tsize+xsep;
}
surface_reset_target()
//Ahora vamos a coger la superficie creada como nueva imagen para ajuntar, esta vez verticalmente, y creamos una nueva
//superf?cie con el tama?o correcto
back=background_create_from_surface(res,0,0,width,sizeY,0,0)
surface_free(res)
res=surface_create(width,height);
//Al crear la nueva imagen desde la superf?cie anterior, el offset en 'x' y en 'y' son nulos, asi es necesario hacer
//algunos reajustes de variables
sx = 0;
bx=0;
by=0;
//Y lo mismo de antes, solo que con rect?ngulos 'altos', lo hacemos con rect?ngulos 'anchos'
surface_set_target(res);
repeat (numTY){
draw_background_part(back,bx,by,width,tsize,sx,sy)
sy+=tsize;
by+=tsize+ysep;
}
//Reiniciamos el canvas a la salida del monitor, gurdamos la superf?cie en un .png y listo
surface_reset_target()
surface_save(res,"newTileset.png");
// TADA!!
[/gml]
Ejemplo:
Entrada:

Salida:
Versi?n de GM utilizada: :GM8: Pro
Informaci?n y utilidad: Bien explicada justo aqui abajo:
[gml]
/*************** TILESET JOINING SCRIPT *********************/
// //
// Este script sirve para crear un tileset sin separaci?n //
// entre sus tiles a partir de su correspondiente im?gen //
// con los tiles separados. //
// //
// Por 'Kirs' //
/*************************************************************/
//Argumentos: Imagen original, Offset en X, Offset en Y, separacion en X, separaci?n en Y, tama?o de tile
//Inicializar variables:
var back,width,height,xoff,yoff,xsep,ysep,tsize,sizeX,sizeY,numTX,numTY,bx,by,sx,sy,res;
back = argument0;
xoff = argument1;
yoff = argument2;
xsep = argument3;
ysep = argument4;
tsize = argument5;
bx = xoff;
by = yoff;
sx = 0;
sy = 0;
sizeX = background_get_width(back)
sizeY = background_get_height(back)
numTX = sizeX div tsize
numTX-= numTX div tsize
numTY = sizeY div tsize
numTY-= numTY div tsize
width = (numTX)* tsize;
height = (numTY)* tsize;
//Creamos la superf?cie y la asignamos como canvas
res=surface_create(width,sizeY);
surface_set_target(res);
//Primero vamos a unir la imagen horizontalmente
//Para esto cogemos rect?ngulos de 'anchura = tama?o del tile' y 'altura = altura de la imagen'
//y origen bx,by, y lo dibujamos sobre la superficie en la posicion sx,sy.
//Luego asignamos a by un nuevo valor teniendo en cuenta el tama?o del tile y la separaci?n vertical 'ysep',
//y para que vaya quedando unido, sumamos el tama?o del tile a la coordenada vertical de dibujo en la superf?cie 'by'
repeat numTX{
draw_background_part(back,bx,by,tsize,sizeY,sx,sy)
sx+=tsize;
bx+=tsize+xsep;
}
surface_reset_target()
//Ahora vamos a coger la superficie creada como nueva imagen para ajuntar, esta vez verticalmente, y creamos una nueva
//superf?cie con el tama?o correcto
back=background_create_from_surface(res,0,0,width,sizeY,0,0)
surface_free(res)
res=surface_create(width,height);
//Al crear la nueva imagen desde la superf?cie anterior, el offset en 'x' y en 'y' son nulos, asi es necesario hacer
//algunos reajustes de variables
sx = 0;
bx=0;
by=0;
//Y lo mismo de antes, solo que con rect?ngulos 'altos', lo hacemos con rect?ngulos 'anchos'
surface_set_target(res);
repeat (numTY){
draw_background_part(back,bx,by,width,tsize,sx,sy)
sy+=tsize;
by+=tsize+ysep;
}
//Reiniciamos el canvas a la salida del monitor, gurdamos la superf?cie en un .png y listo
surface_reset_target()
surface_save(res,"newTileset.png");
// TADA!!
[/gml]
Ejemplo:
Entrada:

Salida:
