pico8-0hh1/main.lua

148 lines
2.6 KiB
Lua

--
-- Utils
--
function custom_font()
poke(0x5f58, 0x81)
end
function standard_font(font)
poke(0x5f58, 0x80)
end
function idx_xy(idx, width)
return (idx - 1) % width + 1, (idx - 1) \ width + 1
end
function xy_idx(x, y, width)
return (y - 1) * width + x
end
function map(tbl, f)
local t = {}
for k, v in pairs(tbl) do
t[k] = f(v)
end
return t
end
function filter(tbl, f, keepindex)
local ret = {}
for k, v in pairs(tbl) do
if f(v) then
if keepindex then
ret[k] = v
else
add(ret, v)
end
end
end
return ret
end
function slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced + 1] = tbl[i]
end
return sliced
end
function rectfill2(x, y, w, h, col)
rectfill(x, y, x + w - 1, y + h - 1, col)
end
function roundedrect(x, y, w, h, col)
rectfill2(x, y, w, h, 0)
rectfill2(x + 1, y, w - 2, h, col)
rectfill2(x, y + 1, w, h - 2, col)
end
function rect2(x, y, w, h, col)
rect(x, y, x + w, y + h, col)
end
--
-- Overrides count() to accept a callback
--
-- local _count = count
-- function count(tbl, p)
-- if type(p) != "function" then return _count(tbl, p) end
-- local c = 0
-- for v in all(tbl) do
-- if p(v) then c+=1 end
-- end
-- return c
-- end
-- function tostring(any)
-- if (type(any)~="table") return tostr(any)
-- local str = "{"
-- for k,v in pairs(any) do
-- if (str~="{") str=str..","
-- str=str..tostring(k).."="..tostring(v)
-- end
-- return str.."}"
-- end
--
-- main loop
--
function _init()
-- pal({[0]=0,128,132,7,136,8,14,137,9,10,131,3,11,1,140,12},1)
-- poke(0x5f2e,1) --to keep colors
poke(0x5F2D, 1)
printh(" ")
printh("*************")
printh(" ")
local date = stat(80) .. stat(81) .. stat(82) .. stat(84) .. stat(85)
srand(date)
printh("seed " .. date)
frame_count = 0
draw_mouse = false
last_mouse_pos = { 0, 0 }
states = {
rules = state_rules(),
menu = state_menu(),
loading = state_loading(),
game = state_game(),
endgame = state_endgame()
}
set_state(states.menu)
end
function _update60()
frame_count += 1
if btnp() > 0 then
draw_mouse = false
end
-- update mouse coords
mouse_x = stat(32)
mouse_y = stat(33)
if mouse_x != last_mouse_pos[1] or mouse_y != last_mouse_pos[2] then
last_mouse_pos = { mouse_x, mouse_y }
draw_mouse = true
end
_coresolve()
gs._update()
end
function _draw()
gs._draw()
for overlay in all(overlays) do
overlay:_draw()
end
-- mouse cursor
if draw_mouse then
spr(1, mouse_x, mouse_y)
end
end