Here it is, tell me if you find any bugs.
function dediSave(%name, %desc){
%path = "base/saves/" @ MissionInfo.saveName @ "/" @ %name @ ".bls";
%file = new FileObject();
%file.openForWrite(%path);
%file.writeLine("This is a Blockland save file. You probably shouldn't modify it cause you'll screw it up.");
%file.writeLine("1"); // What does this mean?
%file.writeLine(%desc);
for(%i=0;%i<64;%i++){
%file.writeLine(getColorIDTable(%i));
}
%bricks = 0;
for(%i=0;%i<mainBrickGroup.getCount();%i++)
%bricks += mainBrickGroup.getObject(%i).getCount();
%file.writeLine("Linecount " @ %bricks);
for(%i=0;%i<mainBrickGroup.getCount();%i++){
%group = mainBrickGroup.getObject(%i);
for(%a=0;%a<%group.getCount();%a++){
%brick = %group.getObject(%a);
%print = (%brick.getDataBlock().subCategory $= "Prints") ? getPrintTexture(%brick.getPrintID()) : "NOPRINT"; // Possibly better way to check?
%file.writeLine(%brick.getDataBlock().uiName @ "\" " @ %brick.getPosition() SPC %brick.getAngleID() SPC %brick.isBasePlate() SPC %brick.getColorID() SPC %print SPC %brick.getColorFXID() SPC %brick.getShapeFXID());
if(isObject(%brick.audioEmitter)){
%file.writeLine("+-AUDIOEMITTER " @ %brick.audioEmitter.getProfileID().uiName @ "\" "); // Not sure if something else comes after the name
}
if(isObject(%brick.vehicleSpawnMarker)){
%file.writeLine("+-VEHICLE " @ %brick.vehicleSpawnMarker.uiName @ "\" " @ %brick.reColorVehicle);
}
if(isObject(%brick.emitter)){
%file.writeLine("+-EMITTER " @ %brick.emitter.emitter.uiName @ "\" " @ %brick.emitterDirection);
}
if(%brick.getLightID() >= 0){
%file.writeLine("+-LIGHT " @ %brick.getLightID().getDataBlock().uiName @ "\"");
}
if(isObject(%brick.item)){
%file.writeLine("+-ITEM " @ %brick.item.getDataBlock().uiName @ "\" " @ %brick.itemPosition SPC %brick.itemDirection SPC %brick.itemRespawnTime);
}
}
}
%file.close();
%file.delete();
}