* Nombre del creador: Twister
* Breve descripci?n de su funci?n: Estos scripts se dividen en 2 partes, Guardado y Cargado. Est? todo explicado dentro de los scripts.
Nota: El script de cargado se divide en 2 partes.
Nota2: Cuando guarda los objetos, el objeto deber? tener 2 variables. Guardar: Deber? ser True si quieres que este objeto se guarde. Y Objeto: Contendr? el nombre de la instancia que quieras cargar luego en el mapa. En caso de no tener variable Objeto se guardara el nombre de la instancia.
* Versi?n GM utilizada: :GM8: GM8 PRO, no se si funcionar? en otras versiones.
* C?digo del Script:
Guardado de Mapa:
//SCRIPT GUARDADO DE MAPAS
//------------------------------------
//EJEMPLO DE USO: scr_GuardarMapa(1000)
//------------------------------------
//ESTE SCRIPT BUSCA TODOS LOS OBJETOS Y TILES Y LOS GUARDA EN UN ARCHIVO .map
//EL ARGUMENT0, ES LA TOLERANCIA DE SALTO, LOS ID DE LOS OBJETOS Y TILES VAN DESDE 100000 ? 10000000 RESPECTIVAMENTE, HASTA EL NUMERO DE OBJETOS QUE HAYA EN EL MAPA
//EL PROBLEMA QUE SURGE ES QUE SI CREAS UN OBJETO/TILE EN EL EDITOR DEL GM, Y LUEGO LO BORRAS, SE QUEDA UN HUECO EN EL ID, LA TOLERANCIA COMPRUEBA SI HAY UN SALTO HACIENDO UNA COMPROBACION
//DE X SALTOS EN LA LINEA DE LOS ID.
//------------------------------------
//AUTOR: Twister (Gameart) :: Contacto: twister_cgm@hotmail.com
//------------------------------------
var Tolerancia, ToleranciaMax, ID, TileID;
Tolerancia=0;
ToleranciaMax=argument0;
ID=100000-1;
TileID=10000000-1;
//ABRIR ARCHIVO
Archivo=file_text_open_write((get_string("Nombre del Escenario","Map001"))+".map")
//GUARDADO DE PROPIEDADES DEL MAPA
file_text_write_string(Archivo,"MAPA") file_text_writeln(Archivo)
file_text_write_string(Archivo,string(room_width)) file_text_writeln(Archivo)
file_text_write_string(Archivo,string(room_height)) file_text_writeln(Archivo)
file_text_write_string(Archivo,string(background_get_name(background_index[0]))) file_text_writeln(Archivo)
file_text_writeln(Archivo)
//GUARDADO DE OBJETOS
file_text_write_string(Archivo,"OBJETOS")
file_text_writeln(Archivo)
do
{
ID+=1
if !instance_exists(ID) {Tolerancia+=1}
if instance_exists(ID)
{
Tolerancia=0
if variable_local_exists("Guardar")
{
if ID.Guardar=true
{
file_text_write_string(Archivo,"instance_create("+string(ID.x)+",")
file_text_write_string(Archivo,string(ID.y)+",")
if variable_local_exists("ID.Objeto") {file_text_write_string(Archivo,string(ID.Objeto)+")") }
if !variable_local_exists("ID.Objeto") {file_text_write_string(Archivo,string(object_get_name(ID.object_index))+")") }
file_text_writeln(Archivo)
}
}
}
}
until (Tolerancia>=ToleranciaMax)
Tolerancia=0;
file_text_writeln(Archivo)
//GUARDADO DE TILES
file_text_write_string(Archivo,"TILES")
file_text_writeln(Archivo)
do
{
TileID+=1
if !tile_exists(TileID) {Tolerancia+=1}
if tile_exists(TileID)
{
Tolerancia=0
file_text_write_string(Archivo,"tile_add("+string(tile_get_background(TileID))+",")
file_text_write_string(Archivo,string(tile_get_left(TileID))+",")
file_text_write_string(Archivo,string(tile_get_top(TileID))+",")
file_text_write_string(Archivo,string(tile_get_width(TileID))+",")
file_text_write_string(Archivo,string(tile_get_height(TileID))+",")
file_text_write_string(Archivo,string(tile_get_x(TileID))+",")
file_text_write_string(Archivo,string(tile_get_y(TileID))+",")
file_text_write_string(Archivo,string(tile_get_depth(TileID))+")") file_text_writeln(Archivo)
}
}
until Tolerancia>=ToleranciaMax
file_text_writeln(Archivo)
//CERRAR ARCHIVO
file_text_close(Archivo)
show_message("Mapa Guardado")
exit;
Cargado de Mapa 1/2:
//SCRIPT CARGADO DE MAPAS 1
//------------------------------------
//EJEMPLO DE USO: scr_CargarMapa(room_Carga)
//------------------------------------
//EL SCRIPT DE CARGADO DE MAPAS SE DIVIDE EN 2 PARTES, ESTA PRIMERA PARTE SETEA EL ANCHO/ALTO Y BAGCKGROUND DEL ROOM QUE SE VA A CARGAR.
//ES RECOMENDABLE CREAR 2 ROOMS. room_InicioCarga ,DONDE IR? ESTE SCRIPT, Y room_Carga QUE SER? EL QUE SE EJECUTE LA SEGUNDA PARTE DEL SCRIPT.
//EL ARGUMENT0 ES EL ROOM DONDE SE CARGAR? EL MAPA.
//------------------------------------
//AUTOR: Twister (Gameart) :: Contacto: twister_cgm@hotmail.com
//------------------------------------
//VARIABLES TEMPORALES
var Room;
Room=argument0
//ABRIR ARCHIVO
Archivo=file_text_open_read((get_string("Nombre del Escenario","Map001"))+".map")
//LEER EL ARCHIVO
//LEER MAPA
file_text_readln(Archivo)
room_set_width(Room,file_text_read_real(Archivo)) file_text_readln(Archivo)
room_set_height(Room,file_text_read_real(Archivo)) file_text_readln(Archivo)
global.Background=string(file_text_read_string(Archivo))
file_text_close(Archivo)
room_gotot(Room)
Cargado de Mapa 2/2:
//SCRIPT CARGADO DE MAPAS 2
//------------------------------------
//EJEMPLO DE USO: scr_CargarMapa2()
//------------------------------------
//2? PARTE DE LA CARGA DE MAPAS, EN ESTA PARTE SE CARGAN TODOS LOS TILES Y OBJETOS EN EL ROOM ACTUAL.
//------------------------------------
//AUTOR: Twister (Gameart) :: Contacto: twister_cgm@hotmail.com
//------------------------------------
//VARIABLES TEMPORALES
var Objeto;
var Tile;
execute_string('background_index[0]=' + global.Background)
//LEER OBJETOS
//VARIABLES OBJETO
Archivo=file_text_open_read((get_string("Nombre del Escenario","Map001"))+".map")
do
{
file_text_readln(Archivo)
}
until file_text_read_string(Archivo)="OBJETOS"
file_text_readln(Archivo)
do
{
Objeto=file_text_read_string(Archivo) file_text_readln(Archivo)
execute_string(string(Objeto))
}
until Objeto=""
//LEER TILES
file_text_readln(Archivo)
do
{
Tile=file_text_read_string(Archivo) file_text_readln(Archivo)
execute_string(string(Tile))
}
until Tile=""
file_text_close(Archivo)
show_message("Mapa Cargado")
No hace falta dar cr?dito, pero se agradecer?a.
Adjuntado ejemplo para facilitar el entendimiento del Script. :)
Buen?simo. Te recomiendo dos cosas.
1: En el script de guardado, hac? que antes de comprobar la variable NoGuardar se compruebe si esta existe, y si no, que se tome por falsa. As? s?lo habr? que asignar la variable en los objetos que no se guarden.
2: En el primer script de cargado, que la ?ltima l?nea sea esta room_goto(argument0) en vez de room_goto_next().
Como dije antes, buen?simo. Muchas gracias por compartir tu trabajo :).
EDIT: Algo m?s... en vez de la variable Objeto, pod?s obtener el nombre del objeto as?: object_get_name(ID.object_index).
Muchas gracias Wadk, te comento.
El script en un principio lo us? para un editor de niveles que estaba desarrollando, por lo que se me escapa alg?n fallito al pasarlo a un script general.
Lo de la variable NoGuardar, no comprobaba si existe porque ten?a en settings declaradas todas las variables no declaradas como 0.
Lo 2? de cargado, es un fallo de imprenta xD.
y lo de la variable Objeto lo hice porque si es como mi caso, en el editor de niveles no usaba los objetos que queria cargar, sino un representante, algo como obj_IconoJ1 y luego la variable Objeto era obj_Player.
Muchas gracias de nuevo, actualizar? el c?digo en cuanto pueda. :)
Hmmm, ya veo.
Sobre la variable Objeto, creo que ser?a lo mejor que se compruebe si existe y si no, que se use lo que dije antes. Es que andar declarando variables objeto por objeto es algo tedioso xP.
el script es bastante bueno...pero opino lo mismo que wadk por que si no es muy muy tedioso declara las variables a todos los objetos :-[
salu2
Ya hice los cambios oportunos, no lo he probado pero espero que funcione jeje :-[
Ahora si quieres guardar un objeto debes ponerle una variable Guardar=true y si este no tiene una variable Objeto, se guardara el nombre de la instancia.
Gracias de nuevo, un saludo!
una imagen vale mas que mil palabras: :P :D :-* XD ;)
en este caso ser?a mas que 5000 palabras...