diff --git a/pal_from_spr.p8 b/pal_from_spr.p8 new file mode 100644 index 0000000..05db86d --- /dev/null +++ b/pal_from_spr.p8 @@ -0,0 +1,101 @@ +pico-8 cartridge // http://www.pico-8.com +version 41 +__lua__ +-- sprite-sampled palette +-- kistaro@gmail.com + +function _init() + -- lock top 16 rows to default palette + pal({[0]=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, 2) + poke(0x5f5f, 0x10) + poke2(0x5f70, 0xffff) +end + +function _update() +end + +function _draw() + cls() + draw_hud() + draw_bars() +end + +function draw_hud() +end + +function draw_bars() + for i=0,15 do + local i7 = i * 7 + rectfill(0,16+i7,128,i7+22,i) + end +end +-->8 +-- palette structure + +palette = { + -- cols: table. identical + -- format to table-type + -- pal call + + -- tr: transparency table. + -- keys: [0]..[15] + -- (color indexes) + -- vals: true/false/nil + -- for transparency of + -- that color. false + -- sets opaque, nil + -- means "do not set". + -- tables with no absent + -- values can be compiled + -- for faster do_palt. + + -- cpl_tr: compiled tr. set by + -- compile_palt iff all + -- tr values in range + -- are nonnil. do_palt + -- is faster this way +} +palette_mt = {__index=palette} + +function palette.new(x) + x = x or {} + if (not x.cols) x.cols = {} + if (not x.tr) x.tr = {} + setmetatable(x, palette_mt) +end + +function palette:do_pal(p) + pal(self.cols, p) +end + +function palette:do_palt() + if (self.cpl_tr) return palt(self.cpl_tr) + local tr = self.tr + for i=0,15 do + if (tr[i] ~= nil) palt(i, tr[i]) + end +end + +function palette:do_both(p) + self:do_palt() + self:do_pal(p) +end + +function palette:compile_palt() + self.cpl_tr = nil + local bits, tr = 0, self.tr + for i = 15,0,-1 do + if (tr[i] == nil) return + bits <<= 1 + if (tr[i]) bits += 1 + end + self.cpl_tr = bits + return bits +end +__gfx__ +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000