diff --git a/completion_tracker.lua b/completion_tracker.lua index e6bbd71..cdcf041 100644 --- a/completion_tracker.lua +++ b/completion_tracker.lua @@ -5,6 +5,12 @@ function completion_tracker:init() cartdata("pyrex_fortunesfoundation_1") end +function completion_tracker:reset() + for i=0,63 do + dset(i,0) + end +end + function completion_tracker:get_completion_level() return dget(0) end diff --git a/democrap.lua b/democrap.lua index 0d43ef3..cb4e70b 100644 --- a/democrap.lua +++ b/democrap.lua @@ -20,9 +20,9 @@ democrap={ function democrap:distort_screen(progress) if (progress <= 0) return progress=min(progress,1) - for src=0x6002,0x7fc2,64 do + for src=0x6004,0x7fc4,64 do dst=src+sin(t()+src/0x800)*(4*progress)+0.5 - memcpy(dst,src,60) + memcpy(dst,src,56) end local ps=democrap.patterns local p=ps[1+flr(progress*#ps)] or ps[#ps] diff --git a/main.p8 b/main.p8 index 84a7f22..e018781 100644 --- a/main.p8 +++ b/main.p8 @@ -19,16 +19,19 @@ __lua__ #include progression.lua #include seed_constants.lua #include seeds.lua +#include state_excavate_menu.lua #include state_manager.lua #include state_menu.lua #include state_gameround.lua #include state_ironman.lua +#include state_reset_menu.lua #include state_restartmenu.lua #include state_wonround.lua #include tutorial.lua #include text.lua #include watcher.lua #include main.lua + --[[ srand(2) for i=1,10 do diff --git a/state_excavate_menu.lua b/state_excavate_menu.lua new file mode 100644 index 0000000..22be6d3 --- /dev/null +++ b/state_excavate_menu.lua @@ -0,0 +1,23 @@ +-- todo: actually display a level picker or something +state_excavate_menu=klass() +function state_excavate_menu:init(prior_menu) + self.prior_menu=prior_menu + self.frame=0 + self.frames=4 + self.progress=0 +end +function state_excavate_menu:enter() end +function state_excavate_menu:exit(new_top) end + +function state_excavate_menu:reenter() end +function state_excavate_menu:suspend() end + +function state_excavate_menu:update() + self.frame+=1 + self.progress=self.frame/self.frames + if (self.progress>1) self.done=true main.state_manager:push(state_ironman:new(tutorial)) +end +function state_excavate_menu:draw() + self.prior_menu:draw() + democrap:distort_screen(self.progress) +end \ No newline at end of file diff --git a/state_menu.lua b/state_menu.lua index 6517d9f..983e4ef 100644 --- a/state_menu.lua +++ b/state_menu.lua @@ -3,27 +3,32 @@ function state_menu:init() self.selection=1 self.options={ menu_option:new(function() return "excavate" end,function() - main.state_manager:push(state_excavate_menu:new()) + main.state_manager:push(state_excavate_menu:new(self)) end), menu_option:new(function() return "archaeology" end,function() + main.state_manager:push(state_archaeology:new()) end), menu_option:new(), menu_option:new(function() return "music" end,function() + -- todo: music manager end), menu_option:new(function() return "reset data" end,function() + main.state_manager:push(state_reset_menu:new(self)) end) } end function state_menu:enter() end -function state_menu:exit(new_top) end +function state_menu:exit() end function state_menu:reenter() self.selection=1 end -function state_menu:suspend() end +function state_menu:suspend() + self.selection=nil +end function state_menu:update() - if (btnp(0) or btnp(4)) self.options[self.selection]:cb() + if (btnp(1) or btnp(4)) self.options[self.selection]:cb() local vel=0 if (btnp(2)) vel-=1 diff --git a/state_reset_menu.lua b/state_reset_menu.lua new file mode 100644 index 0000000..4747607 --- /dev/null +++ b/state_reset_menu.lua @@ -0,0 +1,61 @@ + +state_reset_menu=klass() +function state_reset_menu:init(prior_menu) + self.prior_menu=prior_menu + self.options="⬅️➡️⬆️⬇️🅾️" + self.code={} + self.code_i=1 + for i=1,5 do + local i=flr(rnd(#self.options)) + add(self.code,i) + end +end +function state_reset_menu:enter() end +function state_reset_menu:exit(new_top) end + +function state_reset_menu:reenter() end +function state_reset_menu:suspend() end + +function state_reset_menu:update() + for o=0,5 do + if btnp(o) then + if self.code_i>#self.code then + run() + end + if self.code[self.code_i]==o then + self.code_i+=1 + if (self.code_i>#self.code) completion_tracker:reset() + else + self.done=true + end + return + end + end +end + +function state_reset_menu:caption() + if (self.code_i > #self.code) return "savedata reset!" + + local caption="to reset your\nsavedata, type\nthis code\n\n" + local code="\f7" + for i=1,#self.code do + local o=self.code[i]+1 + local c=sub(self.options,o,o) + if (i-1=self.code_i) code..="\ff" + if (i!=1) code..=" " + code..=c + end + return caption..code +end + +function state_reset_menu:draw() + self.prior_menu:draw() + local caption=self:caption() + local w,h=measure_text(caption) + h-=1 + local x=64-w\2 + local y=64-h\2 + rect(x-2,y-2,x+w+1,y+h+1,15) + rectfill(x-1,y-1,x+w,y+h,4) + print(caption,x,y,15) +end \ No newline at end of file