Export Aseprite Sprites
From F256 Foenix
local sprite = app.sprite -- Check constraints if sprite == nil then app.alert("No Sprite...") return end if sprite.colorMode ~= ColorMode.INDEXED then app.alert("Sprite needs to be indexed") return end local function getPaletteData(palette) local ncolors = #palette local res = string.format(";%i\n", ncolors) for i=0, ncolors-1 do local color = palette:getColor(i) res = res .. " .byte " .. string.format("$%x,$%x,$%x,$%x\n", color.blue, color.green, color.red, color.alpha) end return res end local function getIndexData(img, x, y, w, h) local res = "" for y = 0,h-1 do res = res .. " .byte " for x = 0, w-1 do if x > 0 then res = res .."," end px = img:getPixel(x, y) res = res .. string.format("$%x", px) end res = res .. "\n" end return res end local function exportFrame(frm,sFlag) if frm == nil then frm = 1 end local img = Image(sprite.spec) img:drawSprite(sprite, frm) if frm == 1 or frm == nil or sFlag == 1 then io.write(";Palette Indexed Picture\n") io.write("CLUT:\n") io.write(";begin palette\n") io.write(getPaletteData(sprite.palettes[1])) io.write(";end palette\n\n") end io.write("sprite") io.write(frm) io.write(":\n") io.write(";begin Sprite\n") io.write(getIndexData(img, x, y, sprite.width, sprite.height)) io.write(";end Sprite\n\n") end local dlg = Dialog() dlg:file{ id = "exportFile", label = "File", open = false, save = true, --filename= p .. fn .. "pip", filetypes = {"txt", "pip" }} dlg:check{ id="onlyCurrentFrame", text="Export only current frame", selected=false } dlg:modify{ title = "F256 Export Sprite" } dlg:button{ id="ok", text="OK" } dlg:button{ id="cancel", text="Cancel" } dlg:show() local data = dlg.data if data.ok then local f = io.open(data.exportFile, "w") io.output(f) if data.onlyCurrentFrame then exportFrame(app.frame.frameNumber,1) else for i = 1,#sprite.frames do exportFrame(i,0) end end io.close(f) end