From d7d91dd3a71f6f67f1b254ec59b4f98f40a6e1f8 Mon Sep 17 00:00:00 2001 From: Nyeogmi Date: Sat, 10 Feb 2024 22:01:05 -0800 Subject: [PATCH] Restart menu --- engine.lua | 1 - main.lua | 1 + main.p8 | 3 +++ palette.lua | 17 +++++++++++++++++ state_gameround.lua | 24 ++++++++---------------- state_ironman.lua | 19 ++++++++++++++++--- state_restartmenu.lua | 21 +++++++++++++++++++++ tutorial.lua | 2 +- 8 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 palette.lua create mode 100644 state_restartmenu.lua diff --git a/engine.lua b/engine.lua index ca449ab..28c9405 100644 --- a/engine.lua +++ b/engine.lua @@ -2,7 +2,6 @@ modules={} function _init() - -- printh("restarting") _doall("init") end diff --git a/main.lua b/main.lua index 977873c..05c4644 100644 --- a/main.lua +++ b/main.lua @@ -13,4 +13,5 @@ end function main:draw() self.state_manager:draw() + apply_palette() end diff --git a/main.p8 b/main.p8 index b440b24..edb84cb 100644 --- a/main.p8 +++ b/main.p8 @@ -2,6 +2,7 @@ pico-8 cartridge // http://www.pico-8.com version 41 __lua__ #include engine.lua +#include palette.lua #include animator.lua #include board.lua #include board_animations.lua @@ -12,12 +13,14 @@ __lua__ #include layout.lua #include layout_hint.lua #include ruleset.lua +#include palette.lua #include progression.lua #include seed_constants.lua #include seeds.lua #include state_manager.lua #include state_gameround.lua #include state_ironman.lua +#include state_restartmenu.lua #include tutorial.lua #include text.lua #include watcher.lua diff --git a/palette.lua b/palette.lua new file mode 100644 index 0000000..4d03ba7 --- /dev/null +++ b/palette.lua @@ -0,0 +1,17 @@ + function apply_palette() + -- bg + pal(13,-3,1) + + -- arcana + -- pal(1,0,1) + pal(15,-9,1) + + -- suits + pal(4,-11,1) -- first suit + pal(12,12,1) + pal(2,-8,1) + pal(3,-5,1) + + -- pal(8,-9,1) + -- pal(14,8,1) +end \ No newline at end of file diff --git a/state_gameround.lua b/state_gameround.lua index c1fb3ed..ef88438 100644 --- a/state_gameround.lua +++ b/state_gameround.lua @@ -1,6 +1,7 @@ state_gameround=klass() function state_gameround:init(watcher,ruleset) self.board=board:new(watcher,ruleset) + self.outcome=nil self.restart_frames=0 end function state_gameround:enter() end @@ -18,6 +19,12 @@ function state_gameround:update() end local restart_progress=self.restart_frames/60 self.board:set_restart_progress(restart_progress) + + if restart_progress>=1.0 then + main.state_manager:push(state_restartmenu:new()) + return + end + if self.board:can_take_input() then if (btnp(0)) self.board.cursor:move_x(-1) if (btnp(1)) self.board.cursor:move_x(1) @@ -26,25 +33,10 @@ function state_gameround:update() if (btnp(4)) self.board.cursor:toggle_grab() if (btnp(5)) self.board:undo() end - if (self.board:is_won()) self.done=true + if (self.board:is_won()) self.outcome="win" self.done=true end function state_gameround:draw() cls(13) self.board:draw() - -- bg - pal(13,-3,1) - - -- arcana - -- pal(1,0,1) - pal(15,-9,1) - - -- suits - pal(4,-11,1) -- first suit - pal(12,12,1) - pal(2,-8,1) - pal(3,-5,1) - - -- pal(8,-9,1) - -- pal(14,8,1) end \ No newline at end of file diff --git a/state_ironman.lua b/state_ironman.lua index 12f052c..b7221d8 100644 --- a/state_ironman.lua +++ b/state_ironman.lua @@ -7,16 +7,29 @@ end function state_ironman:enter() self:on_enter() end function state_ironman:exit() end -function state_ironman:reenter() self:on_enter() end +function state_ironman:reenter(round) + printh("reenter "..round.outcome) + if round.outcome=="win" then + self.level+=1 + elseif round.outcome=="menu" then + self.done=true + elseif round.outcome=="restart" then + else + assert(false,"unrecognized outcome: "..round.outcome) + end + + self:on_enter() +end function state_ironman:suspend() end function state_ironman:on_enter() - self.done=true local level=self.level - self.level+=1 + if (self.done) return if level <= #self.sequence then local w=self.sequence[level]() main.state_manager:push(state_gameround:new(w)) + else + self.done=true end end diff --git a/state_restartmenu.lua b/state_restartmenu.lua new file mode 100644 index 0000000..e067307 --- /dev/null +++ b/state_restartmenu.lua @@ -0,0 +1,21 @@ +state_restartmenu=klass() +function state_restartmenu:init() +end +function state_restartmenu:enter() end +function state_restartmenu:exit(new_top) + new_top.outcome=self.outcome + new_top.done=true +end + +function state_restartmenu:reenter() end +function state_restartmenu:suspend() end + +function state_restartmenu:update() + if (btnp(0)) self.outcome="menu" self.done=true + if (btnp(4)) self.outcome="restart" self.done=true +end +function state_restartmenu:draw() + cls(13) + print("⬅️ back to menu",1,58,7) + print("🅾️ restart",1,64,7) +end \ No newline at end of file diff --git a/tutorial.lua b/tutorial.lua index 93f3ebb..889fc4b 100644 --- a/tutorial.lua +++ b/tutorial.lua @@ -1,5 +1,5 @@ tutorial={ - function() return watcher:new(progression[6]) end, + -- function() return watcher:new(progression[6]) end, function() return watcher:new(progression[1], 10,{ tutorial_grab:new(1,4),