-- Export MAR files
-- Thanks to Jerzy Kut for the num_to_char function
function num_to_char ( number )
return ( string.char ( math.mod ( math.mod ( number, 256 ) + 256, 256 ) ) )
end
function writeShortLSB ( file, number )
file:write ( num_to_char( number )) -- x>>0
file:write ( num_to_char( number / 256 )) -- x>>8
end
function main ()
if mappy.msgBox ("Export MAR files", "This will export all layers as consecutive .MAR files.\nEnter the base filename WITHOUT the number or .MAR extension (??.MAR is added)\n\nRun the script (you will be prompted for a filename to save as)?", mappy.MMB_OKCANCEL, mappy.MMB_ICONQUESTION) == mappy.MMB_OK then
local w = mappy.getValue(mappy.MAPWIDTH)
local h = mappy.getValue(mappy.MAPHEIGHT)
if (w == 0) then
mappy.msgBox ("Export MAR files", "You need to load or create a map first", mappy.MMB_OK, mappy.MMB_ICONINFO)
else
local isok,asname = mappy.fileRequester (".", "MAR layer files (*.mar)", "*.MAR", mappy.MMB_SAVE)
if isok == mappy.MMB_OK then
local isok,adjust = mappy.doDialogue ("Export MAR files", "Start file number:", "0", mappy.MMB_DIALOGUE1)
if isok == mappy.MMB_OK then
adjust = tonumber (adjust)
-- open file as binary
local l = 0
while l < mappy.getValue(mappy.NUMLAYERS) do
outas = io.open (asname..string.format("%02d.MAR", l+adjust), "wb")
local y = 0
while y < h do
local x = 0
while x < w do
writeShortLSB (outas, mappy.getBlock (x, y, l))
x = x + 1
end
y = y + 1
end
outas:close ()
l = l + 1
end
end
end
end
end
end
test, errormsg = pcall( main )
if not test then
mappy.msgBox("Error ...", errormsg, mappy.MMB_OK, mappy.MMB_ICONEXCLAMATION)
end