2023-10-01 17:55:51 +00:00
|
|
|
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)
|
2023-10-01 19:00:14 +00:00
|
|
|
|
|
|
|
mode = "boxes"
|
|
|
|
active = "sprite"
|
|
|
|
scx = 0
|
|
|
|
scy = 0
|
|
|
|
dcx = 0
|
|
|
|
dcy = 0
|
2023-10-01 19:32:56 +00:00
|
|
|
|
|
|
|
init_box_pals()
|
2023-10-01 20:15:40 +00:00
|
|
|
init_rows_pals()
|
|
|
|
end
|
|
|
|
|
|
|
|
function boxspr(x, y)
|
|
|
|
return 1+x+16*(y\2)+(y%2*0.5)
|
2023-10-01 19:32:56 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function init_box_pals()
|
|
|
|
box_pals = {}
|
2023-10-01 20:15:40 +00:00
|
|
|
for x=0,box_cols-1 do
|
2023-10-01 19:32:56 +00:00
|
|
|
local pal_col = {}
|
2023-10-01 20:15:40 +00:00
|
|
|
for y=0,box_rows-1 do
|
|
|
|
pal_col[y] = load_box_palette(boxspr(x,y))
|
2023-10-01 19:32:56 +00:00
|
|
|
end
|
|
|
|
box_pals[x] = pal_col
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2023-10-01 20:15:40 +00:00
|
|
|
function init_rows_pals()
|
|
|
|
rows_pals = {}
|
|
|
|
for x=0,rows_cols-1 do
|
2023-10-01 19:32:56 +00:00
|
|
|
local pal_col = {}
|
2023-10-01 20:15:40 +00:00
|
|
|
for y=0,rows_rows-1 do
|
2023-10-01 19:32:56 +00:00
|
|
|
pal_col[y] = load_row_palette(
|
|
|
|
8+16*x,
|
|
|
|
16+2*y
|
|
|
|
)
|
|
|
|
end
|
2023-10-01 20:15:40 +00:00
|
|
|
rows_pals[x] = pal_col
|
2023-10-01 19:32:56 +00:00
|
|
|
end
|
2023-10-01 17:55:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function _update()
|
2023-10-01 19:00:14 +00:00
|
|
|
if (btnp(🅾️)) mode = (mode == "boxes") and "rows" or "boxes"
|
|
|
|
if (btnp(❎)) active = (active == "sprite") and "draw" or "sprite"
|
|
|
|
if active == "sprite" then
|
|
|
|
if (btnp(⬆️)) scy -= 1
|
|
|
|
if (btnp(⬇️)) scy += 1
|
|
|
|
if (btnp(⬅️)) scx -= 1
|
|
|
|
if (btnp(➡️)) scx += 1
|
|
|
|
else
|
|
|
|
if (btnp(⬆️)) dcy -= 1
|
|
|
|
if (btnp(⬇️)) dcy += 1
|
|
|
|
if (btnp(⬅️)) dcx -= 1
|
|
|
|
if (btnp(➡️)) dcx += 1
|
|
|
|
end
|
|
|
|
scx %= (mode == "boxes") and box_cols or rows_cols
|
|
|
|
dcx %= (mode == "boxes") and box_cols or rows_cols
|
|
|
|
scy %= (mode == "boxes") and box_rows or rows_rows
|
|
|
|
dcy %= (mode == "boxes") and box_rows or rows_rows
|
2023-10-01 17:55:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function _draw()
|
|
|
|
cls()
|
|
|
|
draw_hud()
|
2023-10-01 20:15:40 +00:00
|
|
|
local pals = (mode == "boxes") and box_pals or rows_pals
|
2023-10-01 19:32:56 +00:00
|
|
|
pals[scx][scy]:do_both(0)
|
|
|
|
pals[dcx][dcy]:do_both(1)
|
2023-10-01 17:55:51 +00:00
|
|
|
draw_bars()
|
|
|
|
end
|
|
|
|
|
|
|
|
function draw_hud()
|
2023-10-01 20:15:40 +00:00
|
|
|
pal(0)
|
|
|
|
pal(1)
|
2023-10-01 19:00:14 +00:00
|
|
|
if (mode == "boxes") return draw_box_hud()
|
|
|
|
draw_rows_hud()
|
|
|
|
end
|
|
|
|
|
|
|
|
function print_shadow(s,x,y,c)
|
|
|
|
print(s,x+1,y+1,1)
|
|
|
|
print(s,x,y,c or 7)
|
|
|
|
end
|
|
|
|
|
2023-10-01 20:15:40 +00:00
|
|
|
function lpad(str,w)
|
|
|
|
str=tostr(str)
|
|
|
|
while (#str < w) str = " "..str
|
|
|
|
return str
|
|
|
|
end
|
|
|
|
|
2023-10-01 19:00:14 +00:00
|
|
|
box_rows = 4
|
|
|
|
box_cols = 4
|
|
|
|
|
|
|
|
function draw_box_hud()
|
2023-10-01 19:22:52 +00:00
|
|
|
spr(1,3,0,4,2)
|
2023-10-01 19:00:14 +00:00
|
|
|
local toff = time() * 4 \ 1 % 2
|
|
|
|
spr(107 + (active == "sprite" and toff or 0),
|
2023-10-01 19:22:52 +00:00
|
|
|
3+8*scx,4*scy,1,0.5)
|
2023-10-01 19:00:14 +00:00
|
|
|
spr(109 + (active == "draw" and toff or 0),
|
2023-10-01 19:22:52 +00:00
|
|
|
3+8*dcx,4*dcy,1,0.5)
|
2023-10-01 19:00:14 +00:00
|
|
|
|
2023-10-01 20:15:40 +00:00
|
|
|
print_shadow("spr",42,1,12)
|
|
|
|
print_shadow(lpad(boxspr(scx,scy),3),42,9,6)
|
2023-10-01 19:22:52 +00:00
|
|
|
sspr(8+8*scx,4*scy,8,4,55,4,16,8)
|
2023-10-01 19:00:14 +00:00
|
|
|
|
2023-10-01 20:15:40 +00:00
|
|
|
print_shadow("draw",73,1,14)
|
|
|
|
print_shadow(lpad(boxspr(dcx,dcy),3),77,9,6)
|
2023-10-01 19:22:52 +00:00
|
|
|
sspr(8+8*dcx,4*dcy,8,4,91,4,16,8)
|
|
|
|
end
|
|
|
|
|
|
|
|
rows_rows = 8
|
|
|
|
rows_cols = 2
|
|
|
|
|
|
|
|
function draw_rows_hud()
|
|
|
|
spr(33,0,0,2,2)
|
|
|
|
spr(35,22,0,2,2)
|
|
|
|
local toff = time() * 4 \ 1 % 2
|
|
|
|
spr(103 + (active == "sprite" and toff or 0),
|
|
|
|
17 + 22*scx, 2*scy, 0.25, 0.25)
|
|
|
|
spr(105 + (active == "draw" and toff or 0),
|
|
|
|
17 + 22*dcx, 2*dcy, 0.25, 0.25)
|
|
|
|
|
|
|
|
print_shadow("spr",48,0,12)
|
|
|
|
sspr(8+16*scx,16+2*scy,16,2,61,2,32,4)
|
|
|
|
|
|
|
|
print_shadow("draw",44,8,14)
|
|
|
|
sspr(8+16*dcx,16+2*dcy,16,2,61,10,32,4)
|
2023-10-01 17:55:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function draw_bars()
|
|
|
|
for i=0,15 do
|
2023-10-01 19:00:14 +00:00
|
|
|
local i6 = i * 6
|
|
|
|
rectfill(0,16+i6,128,i6+21,i)
|
|
|
|
end
|
|
|
|
for i=0,15 do
|
|
|
|
for y=16,120,8 do
|
|
|
|
spr(i+112,9+i*7,y,0.625,1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
for y=16,120,8 do
|
|
|
|
spr(111,120,y)
|
2023-10-01 17:55:51 +00:00
|
|
|
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)
|
2023-10-01 19:49:03 +00:00
|
|
|
return x
|
2023-10-01 17:55:51 +00:00
|
|
|
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
|
2023-10-01 20:15:40 +00:00
|
|
|
for i = 0,15 do
|
2023-10-01 17:55:51 +00:00
|
|
|
if (tr[i] == nil) return
|
|
|
|
bits <<= 1
|
|
|
|
if (tr[i]) bits += 1
|
|
|
|
end
|
|
|
|
self.cpl_tr = bits
|
|
|
|
return bits
|
|
|
|
end
|
2023-10-01 19:47:57 +00:00
|
|
|
-->8
|
|
|
|
-- load palettes
|
|
|
|
|
|
|
|
function load_box_palette(sidx)
|
|
|
|
local sint,sfrac=sidx\1,sidx%1
|
|
|
|
local x0,y0=sint%16*8,sint\16*8+sfrac*8\1
|
2023-10-01 19:48:31 +00:00
|
|
|
local cols,tr={},{}
|
2023-10-01 19:47:57 +00:00
|
|
|
for i=0,15 do
|
|
|
|
local x,y=x0+i%4,y0+i\4
|
|
|
|
local c,f= sget(x,y),sget(x+4,y)
|
|
|
|
if (f&0x1 ~= 0) c += 128
|
|
|
|
if (f&0x2 ~= 0) tr[i]=true
|
|
|
|
if (f&0x4 ~= 0) tr[i]=false
|
|
|
|
if (f&0x8 == 0) cols[i] = c
|
|
|
|
end
|
|
|
|
local ret=palette.new{cols=cols,tr=tr}
|
|
|
|
ret:compile_palt()
|
|
|
|
return ret
|
|
|
|
end
|
|
|
|
|
|
|
|
function load_row_palette(sx, sy)
|
|
|
|
local cols,tr={},{}
|
|
|
|
for i=0,15 do
|
|
|
|
local c,f = sget(sx+i,sy),sget(sx+i,sy+1)
|
|
|
|
if (f&0x1 ~= 0) c += 128
|
|
|
|
if (f&0x2 ~= 0) tr[i]=true
|
|
|
|
if (f&0x4 ~= 0) tr[i]=false
|
|
|
|
if (f&0x8 == 0) cols[i] = c
|
|
|
|
end
|
|
|
|
local ret=palette.new{cols=cols,tr=tr}
|
|
|
|
ret:compile_palt()
|
|
|
|
return ret
|
|
|
|
end
|
2023-10-01 17:55:51 +00:00
|
|
|
__gfx__
|
2023-10-01 20:15:40 +00:00
|
|
|
00000000012300000123111101230000012311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000456700004567111145670440456711110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0070070089ab000089ab111189ab024089ab11980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00077000cdef0000cdef1111cdef0000cdef11990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 19:00:14 +00:00
|
|
|
00077000012324440123355501232444012335550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 20:15:40 +00:00
|
|
|
00700700456744444567555545674004456755550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000089ab444489ab555589ab420489ab55ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000cdef4444cdef5555cdef4444cdef55ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 20:27:43 +00:00
|
|
|
00000000077700000123242401232424113324240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000077770000456724244567acacddff24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
000000007777000089ab353589ab3535113335350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000077770000cdef3535cdefbdbdddff35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000083425440055242400552424001124240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
000000001dd54544667724246677acac22ee24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000068ba44540055353500553535001135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000cac75444667735356677bdbd22ee35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 19:22:52 +00:00
|
|
|
000000000123456789abcdef0123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 20:42:49 +00:00
|
|
|
00000000000000000000000011111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 19:22:52 +00:00
|
|
|
000000000124456789abcdef0124456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 20:42:49 +00:00
|
|
|
00000000244444444444444435555555555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000007777777777777770123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000024242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000008341dd568bacac700556677005566770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000254445444454544424242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
000000000123456789abcdef11dd66ff11dd66ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000355555555555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000005678bc005678bc0022eeaa0022eeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000244444443555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000fedcba98765432100123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000244444444444444433333333444455550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
0000000000aabb88441111880123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000010101010101898944442222555533330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 19:00:14 +00:00
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 17:55:51 +00:00
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
2023-10-01 19:00:14 +00:00
|
|
|
000000000000000000000000000000000000000000000000000000000c00000007000000e0000000700000000c0c0c0c07070707e0e0e0e07070707001230123
|
|
|
|
00000000000000000000000000000000000000000000000000000000c0000000700000000e00000007000000c0000000700000000000000e0000000745674567
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000007e00000007000000089ab89ab
|
|
|
|
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0c0c0707070700e0e0e0e07070707cdefcdef
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001230123
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045674567
|
|
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089ab89ab
|
|
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdefcdef
|
|
|
|
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
|
|
|
|
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
|
|
|
|
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
|
|
|
|
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
|
|
|
|
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
|
|
|
|
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
|
|
|
|
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
|
|
|
|
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
|