Export Aseprite Sprites
From F256 Foenix
Jump to navigationJump to search
This LUA script file needs to be placed in Aseprite's "scripts" folder.
-- export_sprite_256.lua
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