-- -- 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