(local sprite _G.app.activeSprite)
(local colors {"#000000" :0
"#b00258" :1
"#1e2bff" :2
"#ce2dff" :3
"#007e28" :4
"#808080" :5
"#00a9ff" :6
"#9eabff" :7
"#615400" :8
"#ff5600" :9
"#ff81d7" :b
"#31d200" :c
"#e1d400" :d
"#4ffda7" :e
"#ffffff" :f})
(fn hex->rgb [rgb]
{:r (tonumber (rgb:sub 2 3) 16)
:g (tonumber (rgb:sub 4 5) 16)
:b (tonumber (rgb:sub 6 7) 16)})
(fn alist-len [alist]
(accumulate [len 0 k v (pairs alist)] (+ 1 len)))
(when sprite
(let [pal (Palette (alist-len colors))
image (Image sprite)]
(set app.clipboard.text
(accumulate [acc "" it (image:pixels)]
(let [raw (it)
{: x : y } it
r (app.pixelColor.rgbaR raw)
g (app.pixelColor.rgbaG raw)
b (app.pixelColor.rgbaB raw)]
(.. acc (or (. colors (string.format "#%02x%02x%02x" r g b)) "") (if (= x 15) "\n" "")))))
(var len 0)
(each [color _ (pairs colors)]
(pal:setColor len (Color (hex->rgb color)))
(set len (+ 1 len)))
(sprite:setPalette pal)
(app.refresh)))