diff --git a/chameleonic.p8 b/chameleonic.p8 index 6dca504..dc215ff 100644 --- a/chameleonic.p8 +++ b/chameleonic.p8 @@ -26,10 +26,10 @@ function music_off() menuitem(3, "music: off", music_on) end -function gsv(s) - local ret=split(s,"\n") +function gsv(s,sep1,sep2) + local ret=split(s,sep1 or "\n") for i,v in ipairs(ret) do - ret[i] = type(v) == "string" and split(v,"`") or {v} end + ret[i] = type(v) == "string" and split(v,sep2 or "`") or {v} end return ret end @@ -293,7 +293,7 @@ function level:init() end function level:reinit(n) - self.hintlevel = 0 + self.hintlevel=255 self.ix=n self.todo={} self.bigx,self.bigy=n%8,n\8 @@ -1754,8 +1754,10 @@ end -- [3] y coord -- [4] message line 1 (rot13) -- [5] message llne 2 (rot13) +-- [6] arrow (semicolon separated list: each element is two comma-separated integers) -- row 5 can be omitted -- for a 1-line hint +-- row 6 can be omitted if there is no arrow -- -- multiple hints for the same -- room are revealed in order @@ -1765,19 +1767,21 @@ add(real_modules,hints) function hints:init() local h = gsv[[0`42`57`πŸ…ΎοΈ yVPX` β–  -0`42`73`❎, ❎ cHYY -1`35`34`⁘ sVYY -1`99`82`β–  cHYY -1`42`98`⁘`VTABER -2`75`65`i <`⁘ -2`104`73` β– `cHYY -2`27`42`⁘ -3`51`106`β–  cHYY -3`27`81`⁘ HAOYBPX ZR -3`91`33`β–  FGNAQ` URER]] +0`42`73`❎, ❎ cHYY``69,67;55,67 +1`35`33`⁘` cHYY`62,35;41,35 +1`79`82`cHYY β– ``100,94;100,88 +1`42`98`⁘`VTABER`66,99;52,99;52,75;28,75;28,120 +2`75`65` `⁘`86,67;76,67;76,71 +2`104`73` β– `cHYY`81,75;86,75 +2`27`42`⁘``36,16;36,44;31,44 +3`51`106`β– ``52,97;52,104 +3`-1`-1```28,78;28,45 +3`-1`-1```65,35;83,35 +3`-1`-1```97,35;105,35]] for rec in all(h) do rec[4]=rot13(rec[4]) if(rec[5]) rec[5]=rot13(rec[5]) + if(rec[6]) rec[6]=gsv(rec[6],";",",") local lh = self[rec[1]] if lh then add(lh,rec) @@ -1791,11 +1795,6 @@ function hints:init() poke(0x5f2d,1) end -function shdprint(txt,x,y,c) - print(txt,x-1,y+1,1) - print(txt,x,y,c) -end - hintflicker={7,10,9,8,8,9,10,7} function hints:draw2() pal() @@ -1807,12 +1806,34 @@ function hints:draw2() end - for i,h in ipairs(self[level.ix]) do - if (i > level.hintlevel) return - local _,x,y,txt,txt2=unpack(h) - shdprint(txt,x,y,c) - if (txt2) shdprint(txt2,x,y+8,c) + local function body() + for i,h in ipairs(self[level.ix]) do + if (i > level.hintlevel) return + local _,x,y,txt,txt2,arrow=unpack(h) + + print(txt,x,y) + if (txt2) print(txt2,x,y+8) + + if arrow then + line() + local x0,y0,x1,y1 + for i=1,#arrow do + x0,y0,x1,y1=x1,y1,unpack(arrow[i]) + line(x1,y1) + end + local dir=atan2(x1-x0,y1-y0) + local function _ahead(d,r) + line(x1+r*sgn0(cos(dir+d)),y1+r*sgn0(sin(dir+d))) + end + _ahead(0.375,2) _ahead(0.625,2) _ahead(0,0) + end + end end + + color(7) + camera(1,-1) pal(7,1) body() + camera() pal(7,c) body() + pal() end __gfx__