From 4a61d8afd33503396d42960d8e6891d8708e5732 Mon Sep 17 00:00:00 2001 From: Nyeogmi Date: Sun, 11 Feb 2024 17:28:41 -0800 Subject: [PATCH] Archaeology feature --- completion_tracker.lua | 19 +++++++++++ liturgy.lua | 8 ++--- main.p8 | 1 + state_archaeology.lua | 74 ++++++++++++++++++++++++++++++++++++++++++ state_wonround.lua | 3 +- 5 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 state_archaeology.lua diff --git a/completion_tracker.lua b/completion_tracker.lua index cdcf041..fc69024 100644 --- a/completion_tracker.lua +++ b/completion_tracker.lua @@ -17,6 +17,25 @@ end function completion_tracker:advance_completion_level(clevel) dset(0,max(dget(0), clevel)) end +-- TODO: Bitfield instead +function completion_tracker:mark_seen(text_id) + local ix,bit=self:_unpack_text_id(text_id) + dset(ix,dget(ix)|bit) +end + +function completion_tracker:was_seen(text_id) + local ix,bit=self:_unpack_text_id(text_id) + return dget(ix)&bit !=0 +end + +function completion_tracker:_unpack_text_id(text_id) + assert(text_id>0) + assert(text_id<120) -- max 120 texts for now + -- using bytes 1 through 15 + local ix,bit=1+text_id\8,text_id%8 + assert(ix<16) + return ix,1<1) self.full_text..="\n" + self.full_text..=lines[i] + end +end + +function state_archaeology:_censor(src,line) + if (completion_tracker:was_seen(src)) return line + local line2="" + for i=1,#line do + local c=sub(line,i,i) + if ("a"<=c and c<="z") c="?" + line2..=c + end + return "\f6"..line2.."\ff" +end + +function state_archaeology:update() + local vel=0 + if (btnp(0)) vel-=1 + if (btnp(1)) vel+=1 + if (btnp(5)) self.done=true + if (vel!=0) self:select_book((self.selection+vel-1)%self.n_holy_books+1) +end +function state_archaeology:draw() + local fullw,fullh=measure_text(self.full_text) + local total_height=fullh+16 + + cls(13) + local y=64-total_height\2 + local tw=measure_text(self.title)-1 + local x=64-tw\2 + local tx=x + print(self.title,x,y,15) + y+=6 + line(x,y,x+tw-1,y,15) + y+=3 + + local x=64-fullw\2 + rectfill(x-1,y-1,x+fullw,y+fullh-1,4) + print(self.full_text,x,y,15) + y+=fullh+1 + + line(tx,y,tx+tw-1,y,15) + y+=2 + + print("⬅️",tx,y) + print("➡️",tx+tw-7,y) + print("❎ go back",1,122,15) +end \ No newline at end of file diff --git a/state_wonround.lua b/state_wonround.lua index 9068787..6139fe0 100644 --- a/state_wonround.lua +++ b/state_wonround.lua @@ -5,9 +5,10 @@ function state_wonround:init(board) self.frames=30 self.progress=0.0 self.card=self.board:get_endgame_card() - self.verse_name,self.verse=liturgy:suggest_verse(self.board.ruleset,self.card) + self.verse_id,self.verse_name,self.verse=liturgy:suggest_verse(self.board.ruleset,self.card) end function state_wonround:enter() + completion_tracker:mark_seen(self.verse_id) completion_tracker:advance_completion_level(self.board:get_completion_level()) end function state_wonround:exit(new_top) end