scr_RoomSave( string );
Codice: Seleziona tutto
///scr_RoomSave(String); ( String = <[percorso]+file.ext> )
///scr_RoomSave: numero instance uByte, x instance uWord, y instance uWord
var fileID=file_bin_open(argument0,1), nObj=0, MSBx, lsBx, MSBy, lsBy; // Dichiarazione variabili ed apertura del file per la scrittura
file_bin_rewrite(fileID); // se il file esiste viene ricreato vuoto
show_message("Select data for "+argument0); // messaggio di inizio scrittura
while (object_exists(nObj)) // inizio ciclo di scrittura (finchè esistono oggetti da salvare)
{
if (show_question("Save data for (n."+string(nObj)+") "+object_get_name(nObj)+" x"+string(instance_number(nObj))+"?")) // richiesta salvataggio oggetto
{
file_bin_write_byte(fileID,instance_number(nObj)); // scrittura numero instance dell'oggetto
with(nObj) // inizio ciclo instance dell'oggetto
{
MSBx=(x >> 8); // calcolo Byte più significativo per la x dell'instance
lsBx=(x & 255); // calcolo Byte meno significativo per la x dell'instance
file_bin_write_byte(fileID,MSBx); // scrittura Byte più significativo per la x dell'instance
file_bin_write_byte(fileID,lsBx); // scrittura Byte meno significativo per la x dell'instance
MSBy=(y >> 8); // calcolo Byte più significativo per la y dell'instance
lsBy=(y & 255); // calcolo Byte meno significativo per la y dell'instance
file_bin_write_byte(fileID,MSBy); // scrittura Byte più significativo per la y dell'instance
file_bin_write_byte(fileID,lsBy); // scrittura Byte meno significativo per la y dell'instance
}
} else {
file_bin_write_byte(fileID,0); // scrittura 0 (nessuna instance dell'oggetto verrà salvata)
}
nObj++; // incremento contatore prossimo oggetto
} // fine ciclo di scrittura
file_bin_close(fileID); // chiusura del file
show_message(argument0+"...Saved!"); // messaggio di avvenuto salvataggio
return 1; // ritorno al codice
Codice: Seleziona tutto
///scr_RoomLoad(String); ( String = <[percorso]+file.ext> )
///scr_RoomLoad: numero instance uByte, x instance uWord, y instance uWord
var fileID=file_bin_open(argument0,0), nObj, n, slcObj=0, MSBx, lsBx, MSBy, lsBy; // Dichiarazione variabili ed apertura del file per la lettura
while (file_bin_position(fileID)<file_bin_size(fileID)) // inizio ciclo di lettura (finchè non viene raggiunta la fine del file)
{
nObj=file_bin_read_byte(fileID); // lettura numero instance dell'oggetto
for (n=1;n<=nObj;n++) // inizio ciclo di lettura delle instance dell'oggetto
{
MSBx=(file_bin_read_byte(fileID) << 8); // lettura Byte più significativo per la x dell'instance
lsBx=file_bin_read_byte(fileID); // lettura Byte meno significativo per la x dell'instance
MSBy=(file_bin_read_byte(fileID) << 8); // lettura Byte più significativo per la y dell'instance
lsBy=file_bin_read_byte(fileID); // lettura Byte meno significativo per la y dell'instance
instance_create(MSBx+lsBx,MSBy+lsBy,slcObj); // creazione instance dell'oggetto
}
slcObj++; // incremento contatore prossimo oggetto
} // fine ciclo di lettura
file_bin_close(fileID); // chiusura del file
return 1; // ritorno al codice
Entrambi gli script accettano, come unico argomento, una stringa contenente il nome del file con eventuale percorso ( [percorso]+file.ext ) e accettano valori di 1 Byte massimo per il numero delle instance di un oggetto e 2 Bytes massimo sia per la x che per la y di ogni instance.
In altre parole, potete salvare un numero massimo di 255 instance per ogni oggetto ed avere cordinate per la x e per la y non superiori a 65535px rispettivamente.
Questi limiti si adattano perfettamente alle mie necessità ma voi potete modificare gli script secondo le vostre.
Spero possano tornare utili a qualcuno.