Pico-8 implementation of Scale2x and Scale3x. Original algorithms by Andrea Mazzoleni
Scale2x:
--[[ sind : sprite index sz_x : x size sz_y : y size sx : screen pos x sy : screen pos y alpha: color to make transparent ]]-- function scale2x(sind,sz_x,sz_y,sx,sy,alpha) alpha=alpha or 0 local offx=sind%16 local offy=flr(sind/16) local soffx=offx*8 local soffy=offy*8 local sizex=sz_x-1 local sizey=sz_y-1 local a,b,c,d,e,f,g,h,i, e0,e1,e2,e3,x0,y0 for y=0,sizey do for x=0,sizex do e=sget(soffx+x,soffy+y) a=e b=e c=e d=e f=e g=e h=e i=e if y>0 then b=sget(soffx+x,soffy+y-1) end if y<sizey then h=sget(soffx+x,soffy+y+1) end if x>0 then d=sget(soffx+x-1,soffy+y) if y>0 then a=sget(soffx+x-1,soffy+y-1) end if y<sizey then g=sget(soffx+x-1,soffy+y+1) end end if x<sizex then f=sget(soffx+x+1,soffy+y) if y>0 then c=sget(soffx+x+1,soffy+y-1) end if y<sizey then i=sget(soffx+x+1,soffy+y+1) end end e0=e e1=e e2=e e3=e if b!=h and d!=f then if(d==b) e0=d if(b==f) e1=f if(d==h) e2=d if(h==f) e3=f end --draw x0=sx+x*2 y0=sy+y*2 if(e0!=alpha) pset(x0, y0, e0) if(e1!=alpha) pset(x0+1,y0, e1) if(e2!=alpha) pset(x0, y0+1,e2) if(e3!=alpha) pset(x0+1,y0+1,e3) end end end |
Scale3x:
--[[ sind : sprite index sz_x : x size sz_y : y size sx : screen pos x sy : screen pos y alpha: color to make transparent ]]-- function scale3x(sind,sz_x,sz_y,sx,sy,alpha) alpha=alpha or 0 local offx=sind%16 local offy=flr(sind/16) local soffx=offx*8 local soffy=offy*8 local sizex=sz_x-1 local sizey=sz_y-1 local a,b,c,d,e,f,g,h,i, e0,e1,e2,e3,e4,e5,e6,e7,e8, x0,y0 for y=0,sizey do for x=0,sizex do e=sget(soffx+x,soffy+y) a=e b=e c=e d=e f=e h=e i=e g=e if y>0 then b=sget(soffx+x,soffy+y-1) end if y<sizey then h=sget(soffx+x,soffy+y+1) end if x>0 then d=sget(soffx+x-1,soffy+y) if y>0 then a=sget(soffx+x-1,soffy+y-1) end if y<sizey then g=sget(soffx+x-1,soffy+y+1) end end if x<sizex then f=sget(soffx+x+1,soffy+y) if y>0 then c=sget(soffx+x+1,soffy+y-1) end if y<sizey then i=sget(soffx+x+1,soffy+y+1) end end e0=e e1=e e2=e e3=e e4=e e5=e e6=e e7=e e8=e if b!=h and d!=f then if(d==b) e0=d if((d==b and e!=c) or (b==f and e!=a)) e1=b if(b==f) e2=f if((d==b and e!=g) or (d==h and e!=a)) e3=d if((b==f and e!=i) or (h==f and e!=c)) e5=f if(d==h) e6=d if((d==h and e!=i) or (h==f and e!=g)) e7=h if(h==f) e8=f end --draw x0=sx+x*3 y0=sy+y*3 if(e0!=alpha) pset(x0, y0, e0) if(e1!=alpha) pset(x0+1,y0, e1) if(e2!=alpha) pset(x0+2,y0, e2) if(e3!=alpha) pset(x0, y0+1,e3) if(e4!=alpha) pset(x0+1,y0+1,e4) if(e5!=alpha) pset(x0+2,y0+1,e5) if(e6!=alpha) pset(x0, y0+2,e6) if(e7!=alpha) pset(x0+1,y0+2,e7) if(e8!=alpha) pset(x0+2,y0+2,e8) end end end |
[Please log in to post a comment]