diff --git a/0hh1.p8 b/0hh1.p8 index f0c1904..a671585 100644 --- a/0hh1.p8 +++ b/0hh1.p8 @@ -13,6 +13,7 @@ poke4(0x5700,unpack(split"0x0000.0000,0x0000.0000,0x0202.0202,0x0000.0200,0x0000 #include coroutines.lua #include ui.lua #include utils.lua +#include bg.lua #include states/menu.lua #include states/loading.lua #include states/game.lua @@ -20,21 +21,21 @@ poke4(0x5700,unpack(split"0x0000.0000,0x0000.0000,0x0202.0202,0x0000.0200,0x0000 __gfx__ 00000000110000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000171000000001711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00700700177100001111771100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00077000177710001777777100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00077000177771001777777100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00700700177710001111771100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000171771000001711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000010171000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000131000000001711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00700700133100001111771100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00077000133310001777777100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00077000133331001777777100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00700700133310001111771100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000131331000001711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000010131000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +55505550505050505050505055555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +50555055050505050500050055555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +55505550505050500050505050555055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +50555055050505050505000555555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +55505550505050505050505055555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +50555055050505050500050055000555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +55505550505050500050505050555055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +50555055050505050505000555555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/bg.lua b/bg.lua new file mode 100644 index 0000000..49efd19 --- /dev/null +++ b/bg.lua @@ -0,0 +1,43 @@ +function draw_animated_bg(startx) + if (amplitude <= 0) return + startx = startx or 0 + fillp(0b0101101001011010) + + local color = 4 + -- vertical lines + local t = t()+10 + for i=startx-1,127,11 do + local a=sin(i*t/512)*amplitude+64 + local b=cos(i*t/256)*amplitude+64 + line( + i, + a, + i, + b , + color) + end + + -- horizontal lines + for i=startx-1,127,11 do + local a=sin(i*t/512)*amplitude+64 + local b=cos(i*t/256)*amplitude+64 + line( + a, + i, + b , + i, + color) + end +end + +local players = { + {name="alice", hp=5}, + {name="anemone", hp=10}, +} +local current_player = players[2] + +for player in all(players) do + printh("Hello, my name is "..player.name.."and my hp is"..player.hp) +end + +printh("The active player is "..current_player.name) \ No newline at end of file diff --git a/board.lua b/board.lua index 20f6d0a..d6991ff 100644 --- a/board.lua +++ b/board.lua @@ -402,14 +402,19 @@ function Board.new() end, draw_bg = function(self) - local w = tile_width - fillp(▒) + fillp() for k,v in ipairs(tiles) do - local x,y = self:draw_coords(k) - rectfill2(x, y, w, w, 1) + self:draw_bg_tile(k) end end, + draw_bg_tile = function(self, k) + local w = tile_width + local x,y = self:draw_coords(k) + rectfill2(x+1, y, w-2, w, 1) + rectfill2(x, y+1, w, w-2, 1) + end, + draw = function(self) self:draw_bg() local w = tile_width @@ -423,15 +428,18 @@ function Board.new() local v = tiles[idx] if v > 0 then local x,y = self:draw_coords(idx) - local color = v == BLUE and 12 or 8 + local color = v == BLUE and 8 or 14 if color == 1 then fillp(▒) else fillp(█) end if self:is_locked(idx) then rectfill2(x, y, w, w, color) - line(x, y+w-1, x+w-1, y+w-1, v == BLUE and 13 or 2) - line(x+w-1, y, x+w-1, y+w-1, v == BLUE and 13 or 2) + line(x, y+w-1, x+w-1, y+w-1, color-1) + line(x+w-1, y, x+w-1, y+w-1, color-1) else roundedrect(x, y, w, w, color) end + else + fillp(█) + self:draw_bg_tile(idx) end end, } diff --git a/globals.lua b/globals.lua new file mode 100644 index 0000000..5372268 --- /dev/null +++ b/globals.lua @@ -0,0 +1 @@ +local amplitude = 128 diff --git a/main.lua b/main.lua index a5e3f9b..d4eaf8d 100644 --- a/main.lua +++ b/main.lua @@ -104,6 +104,9 @@ end local create = true 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 + printh(" ") printh("*************") printh(" ") diff --git a/states/game.lua b/states/game.lua index 39b29f3..a4e6944 100644 --- a/states/game.lua +++ b/states/game.lua @@ -4,23 +4,26 @@ function state_game() local selected_id = 1 local timer_clue = 0 + local clues = {} local function show_clues() local issues = board:get_issues(true) + clues = {} for issue in all(issues) do local type, err, row, pos, other = unpack(issue) - if err == "identical" and count(row,0)>0 then - goto continue - end printh(type .. " " .. err .. " " .. pos) - ::continue:: + add(clues, {type=type, pos=pos, t=0}) + if err == "identical" then + add(clues, {type=type, pos=other, t=0}) + end end end local function draw_selected_tile() local x, y = board:draw_coords(selected_id) local w = board:get_tile_width() - fillp(▒) - rect2(x-1, y-1, w+2, w+2, 6) + -- fillp(▒) + rect2(x-1, y-1, w+1, w+1, 6) + line() fillp(█) end @@ -36,15 +39,33 @@ function state_game() local function _draw() cls() + local x,y = board:draw_coords(1) + draw_animated_bg(x) + board:draw() draw_selected_tile() + + -- draw clues + for clue in all(clues) do + palt(0,false) + palt(5,true) + local x,y + if clue.type == "row" then + x,y = board:draw_coords((clue.pos-1) * board:get_size()+1) + x=0 + spr(19, x+clue.t%144, y+1+sin(t())*2) + else -- col + x,y = board:draw_coords(clue.pos) + spr(19, x+2+sin(t())*2, y+clue.t%144) + y=0 + end + pset(x, y, 5) + clue.t += 1 + end + palt() end local function _update() - timer_clue += 1 - if timer_clue % 120 == 0 then - show_clues() - end local size = board:get_size() local x, y = board:idx_xy(selected_id) if btnp(UP) then @@ -59,6 +80,7 @@ function state_game() if btnp(BTN_O) then board:try_flip_tile(selected_id) + show_clues() end if (x<1) x=size diff --git a/states/loading.lua b/states/loading.lua index 876761e..7561c83 100644 --- a/states/loading.lua +++ b/states/loading.lua @@ -58,12 +58,22 @@ function state_loading() yield() repeat solved = board:solve_step() + if solved == "valid" then + amplitude -= .125 + end until board:is_complete() or solved == "invalid" + if solved == "invalid" then deli(previous) end end -- end while printh("board generated in "..time()-start.." seconds") + startcoroutine(cocreate(function() + repeat + amplitude -= .5 + yield() + until amplitude <= 0 + end)) board:set_tiles(previous[#previous]) printh(board:tostring()) @@ -73,7 +83,6 @@ function state_loading() end) local function draw_tiles(board) - local w = board:get_size() local tiles = board:get_tiles_copy() for k,v in ipairs(tiles) do @@ -84,6 +93,7 @@ function state_loading() end local function _enter() + amplitude = 64 loaded = false local copy_messages = copy(loading_messages) @@ -109,19 +119,19 @@ function state_loading() end end - local function _draw() + local function _draw() cls() - board:draw_bg() + local x,y = board:draw_coords(1) + draw_animated_bg(x) + -- board:draw_bg() draw_tiles(board) local s = board:get_size()*board:get_size() local l = print(message, 0, -100) local y = 118+(removing_tile/s)*100/8 - local colors = {7,6,5,5} local ci = removing_tile\20+1 - local c = colors[ci] if not loaded then rectfill2(0,y-2,127,10,0) - print(messages_str, messages_x, y, c, 0) + print(messages_str, messages_x, y, 3, 0) -- print(spinner[t()\.25%4+1], 120, 120) end end