WIP: sprintf #21
106
chameleonic.p8
106
chameleonic.p8
@ -33,6 +33,44 @@ function gsv(s)
|
|||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function cycle(tbl,period)
|
||||||
|
period = period or 1
|
||||||
|
return tbl[t()%period*#tbl\period+1]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fake sprintf function
|
||||||
|
-- %~ for literal "%"
|
||||||
|
-- %v for param
|
||||||
|
-- %! for tostring(param)
|
||||||
|
-- which dumps tables
|
||||||
|
function fmt(f, ...)
|
||||||
|
local out, i = "", 0
|
||||||
|
for s in all(split(f,"%")) do
|
||||||
|
if i == 0 then
|
||||||
|
-- before first format directive
|
||||||
|
out ..= s
|
||||||
|
i = 1
|
||||||
|
else
|
||||||
|
local m = s[1]
|
||||||
|
if m == "~" then
|
||||||
|
out ..= "%"
|
||||||
|
else
|
||||||
|
local p = select(i,...)
|
||||||
|
i+=1
|
||||||
|
if m == "v" then
|
||||||
|
out ..= p
|
||||||
|
elseif m == "!" then
|
||||||
|
out ..= tostring(p)
|
||||||
|
else
|
||||||
|
assert(false, tostr(m).."is not a formatting directive")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
out ..=sub(s,2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return out
|
||||||
|
end
|
||||||
|
|
||||||
mnames={}
|
mnames={}
|
||||||
function names(root)
|
function names(root)
|
||||||
local n=mnames[root]
|
local n=mnames[root]
|
||||||
@ -241,14 +279,12 @@ function kbd:release(i)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function tostring(any)
|
function tostring(any)
|
||||||
if type(any)=="table" then
|
if (type(any)!="table") return tostr(any)
|
||||||
local str = "{ "
|
local str = "{ "
|
||||||
for k,v in pairs(any) do
|
for k,v in pairs(any) do
|
||||||
str=str..tostring(k).."->"..tostring(v).." "
|
str..=tostring(k).."->"..tostring(v).." "
|
||||||
end
|
|
||||||
return str.."}"
|
|
||||||
end
|
end
|
||||||
return tostr(any)
|
return str.."}"
|
||||||
end
|
end
|
||||||
|
|
||||||
-->8
|
-->8
|
||||||
@ -264,7 +300,7 @@ function title:draw()
|
|||||||
print("pyrex",32,73,7)
|
print("pyrex",32,73,7)
|
||||||
print("[nyeogmi]",62,73,7)
|
print("[nyeogmi]",62,73,7)
|
||||||
print("kistaro",32,79,7)
|
print("kistaro",32,79,7)
|
||||||
local lvlstr = "⬅️ "..start_level.." ➡️"
|
local lvlstr = fmt("⬅️ %v ➡️",start_level)
|
||||||
print(lvlstr,50,91,1)
|
print(lvlstr,50,91,1)
|
||||||
print(lvlstr,51,90,blinkcol)
|
print(lvlstr,51,90,blinkcol)
|
||||||
end
|
end
|
||||||
@ -434,8 +470,7 @@ function level:recollide_reanchor()
|
|||||||
not self:mcoll(mx1,my0) and
|
not self:mcoll(mx1,my0) and
|
||||||
not self:mcoll(mx1,my1)
|
not self:mcoll(mx1,my1)
|
||||||
) then
|
) then
|
||||||
local key="GEOM"..mx0..","..my0..","..dx..","..dy
|
anch_new[fmt("GEOM%v,%v,%v,%v",mx0,my0,dx,dy)]= {
|
||||||
anch_new[key]= {
|
|
||||||
max(mx0,mx1),max(my0,my1),adx=-dx,ady=-dy
|
max(mx0,mx1),max(my0,my1),adx=-dx,ady=-dy
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@ -443,10 +478,9 @@ function level:recollide_reanchor()
|
|||||||
end
|
end
|
||||||
|
|
||||||
for _,cr in pairs(self._crates) do
|
for _,cr in pairs(self._crates) do
|
||||||
local key="CRATE"..cr.id..","..dx..","..dy
|
|
||||||
local mx0,my0=cr.mx,cr.my
|
local mx0,my0=cr.mx,cr.my
|
||||||
local mx1,my1=mx0+dx,my0+dy
|
local mx1,my1=mx0+dx,my0+dy
|
||||||
anch_new[key]={
|
anch_new[fmt("CRATE%v,%v,%v",cr.id,dx,dy)]={
|
||||||
max(mx0,mx1),max(my0,my1),adx=-dx,ady=-dy
|
max(mx0,mx1),max(my0,my1),adx=-dx,ady=-dy
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@ -1054,7 +1088,7 @@ function rope:draw(artificial_px,artificial_py)
|
|||||||
if (anch.ady>0) y-=1
|
if (anch.ady>0) y-=1
|
||||||
end
|
end
|
||||||
rectfill(x-1,y-1,x+1,y+1,12)
|
rectfill(x-1,y-1,x+1,y+1,12)
|
||||||
print("ax="..n1.ax..",ay="..n1.ay,72,sy)
|
print(fmt("ax=%v,ay=%v",n1.ax,n1.ay),72,sy)
|
||||||
sy+=7
|
sy+=7
|
||||||
|
|
||||||
local n0=n1.prev
|
local n0=n1.prev
|
||||||
@ -1787,8 +1821,6 @@ function hints:init()
|
|||||||
end
|
end
|
||||||
menuitem(1,"get hint",function() level.hintlevel+=1 end)
|
menuitem(1,"get hint",function() level.hintlevel+=1 end)
|
||||||
menuitem(2,"hide hints",function() level.hintlevel=0 end)
|
menuitem(2,"hide hints",function() level.hintlevel=0 end)
|
||||||
-- debug mode: enable mouse
|
|
||||||
poke(0x5f2d,1)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function shdprint(txt,x,y,c)
|
function shdprint(txt,x,y,c)
|
||||||
@ -1796,16 +1828,10 @@ function shdprint(txt,x,y,c)
|
|||||||
print(txt,x,y,c)
|
print(txt,x,y,c)
|
||||||
end
|
end
|
||||||
|
|
||||||
hintflicker={7,10,9,8,8,9,10,7}
|
hintflicker=split"7,10,9,8,8,9,10,7"
|
||||||
function hints:draw2()
|
function hints:draw2()
|
||||||
pal()
|
pal()
|
||||||
local c=hintflicker[t()%1*#hintflicker\1+1]
|
local c=cycle(hintflicker)
|
||||||
-- debug mode: mouse coord display
|
|
||||||
if stat(34) != 0 then
|
|
||||||
local mousex, mousey = stat(32), stat(33)
|
|
||||||
print("x ("..mousex..", "..mousey..")",mousex,mousey,c)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
for i,h in ipairs(self[level.ix]) do
|
for i,h in ipairs(self[level.ix]) do
|
||||||
if (i > level.hintlevel) return
|
if (i > level.hintlevel) return
|
||||||
@ -1815,6 +1841,32 @@ function hints:draw2()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-->8
|
||||||
|
-- debug mouse support
|
||||||
|
|
||||||
|
debugmouse = {}
|
||||||
|
|
||||||
|
-- comment this out to disable debug mode
|
||||||
|
add(real_modules, debugmouse)
|
||||||
|
|
||||||
|
function debugmouse:init()
|
||||||
|
poke(0x5f2d,1)
|
||||||
|
end
|
||||||
|
|
||||||
|
debugflicker=split"5,6,7,15,14,8,2,4,9,10,11,3,12,13"
|
||||||
|
debugchs = split" ,x, ,□"
|
||||||
|
|
||||||
|
function debugmouse:draw3()
|
||||||
|
if (stat(34) == 0) return
|
||||||
|
pal(15,cycle(debugflicker,1.5))
|
||||||
|
local x, y, c = stat(32), stat(33), cycle(debugchs,2)
|
||||||
|
if (c == " ") spr(50,x,y)
|
||||||
|
print(c,x,y,15)
|
||||||
|
local px, py = mid(0,x,89), mid(0, y > 111 and y - 12 or y + 6, 117)
|
||||||
|
print(fmt("(%v, %v)\n[%v, %v]",x,y,x\8,y\8),px,py,15)
|
||||||
|
pal()
|
||||||
|
end
|
||||||
|
|
||||||
__gfx__
|
__gfx__
|
||||||
000030000000002200003000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff1ff1ff1fffffff1ffffff1fffffff1dddddddd111111110005000000000000
|
000030000000002200003000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff1ff1ff1fffffff1ffffff1fffffff1dddddddd111111110005000000000000
|
||||||
003333300000332200333330eeffffffffffffffffffffeee5e555e55e555e5eff1ff1ffffffffffffffffffffffffffdddddddd111111110000500000000000
|
003333300000332200333330eeffffffffffffffffffffeee5e555e55e555e5eff1ff1ffffffffffffffffffffffffffdddddddd111111110000500000000000
|
||||||
@ -1840,10 +1892,10 @@ eeee0000cc04405500444400efeeee5e11111111e5eeeefeeeeeeeeeeeeeeeeeffffffffffffffff
|
|||||||
0a000aa4441a91a1bbabbbbbeffeeeeeeeeeeeeeeeeeeffeff1ff1ff11111111ff1111ff00000000000000000000000000000000000000000000000000000000
|
0a000aa4441a91a1bbabbbbbeffeeeeeeeeeeeeeeeeeeffeff1ff1ff11111111ff1111ff00000000000000000000000000000000000000000000000000000000
|
||||||
00a0044449a110a1bbbbbbbbeeffffffffffffffffffffeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
00a0044449a110a1bbbbbbbbeeffffffffffffffffffffeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
||||||
000aa111991111103bbbbbb3eeeeeeeeeeeeeeeeeeeeeeeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
000aa111991111103bbbbbb3eeeeeeeeeeeeeeeeeeeeeeeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
||||||
00000000991000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111999999111111111
|
0000000099100000f765000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111999999111111111
|
||||||
00000000990000000000000000000000000000000000000000000000000000000000000000000000000000000000000019911991999999911999999119999999
|
00000000990000007700000000000000000000000000000000000000000000000000000000000000000000000000000019911991999999911999999119999999
|
||||||
00000000990000000000000000000000000000000000000000000000000000000000000000000000000000000000000019977991999999911999999119999999
|
00000000990000006060000000000000000000000000000000000000000000000000000000000000000000000000000019977991999999911999999119999999
|
||||||
00000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999
|
00000000090000005005000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999
|
||||||
00000000aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999
|
00000000aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999
|
||||||
0000000077a000000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911997799119999999
|
0000000077a000000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911997799119999999
|
||||||
00000007777a00000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911991199119999999
|
00000007777a00000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911991199119999999
|
||||||
|
Loading…
Reference in New Issue
Block a user