`        (((000888@@@HHHPPPYYYaaaiiiqqqyyy
0          2TvͫgE#2Tv2Tv                                 ̬̬̬̈̬̬̬̬̈̬̬                                                                                                                                                                                                                                                                                                                                                                                                ̬̬ ̬ ̪쬪 ̬̬ ̬ ̪쬪 	>                                                                ? """"""""""""2333333333333333333CDDDDDTUeVUUUUUUUUUUvDpffUUUUUUUUUUUefffffffvww """""""""""23333333333333333333CDDDDDDTUffUUUUUUUUUeftffVUUUUUUUUUUefffffffvwww	
	"""""""""""23333333333333333333CDDDDDDTUffUUUUUUUUUeftffVUUUUUUUUUUefffffffvwww	
	"""""""""""33333333333333333333CDDDDDDTUegfUVUUUUUUevgfVUUUUUUUUUUfffffffffwwwǻ̛
	*"""""""""2333333333333333333333DDDDDDDTUevfffUUUUeffwgffUUUUUUUUUUfffffffffwwww Лٚݪڛ"333333333333333333333333333333DDDDDDTUUevwfwfVUUUefffffVUUUUUUUUffffffffffwwwww	 3333333333333333333333333333333DDDDDDTUUevhffUUUfffwpffffUUUUUUUeffffffffffwwwww̻ ̻3333333333333333333333333333333DDDDDDTUUevhffUUUfffwpffffUUUUUUUeffffffffffwwwww̻ ̻733333333CD3333333333333333333CDDDDDDTUUvM pffVUeffvwzgffffUUUUUUfffffffffffwwwww ܻ
 T43333333Ct4333333333333333333DDDDDDDUUUfvwfffffffvgfffffUUUeffffffffffffwwwwwp   F4333333TED4333333333333333DDDDDDDDUUUffwffvfff wffffffffffffffffffffvwwwww      
 DH33333CDtFDDDDD43333333333DDDDDDDDTUUUefwlywgvxww wffffffffffffffffffffvwwwww  	   ݻ˫
CeFD333DDDTEDDDDDEDDDDDDDDDDDDDDDDDDUUUUefywwwyww׻wffffvgfffffffffffffvwwwww   
CeFD333DDDTEDDDDDEDDDDDDDDDDDDDDDDDDUUUUefywwwyww׻wffffvgfffffffffffffvwwwww   
3dFDDtDDDDdWDDDDTGDDDDDDDDDDdDDDDDDTUUUUvwwwwxwxwwffvwgffffffffffffvwwwwwݸ		 
 .CdfHDDDDUumUUDDUWDDDDDDDDDDUEDDDUUvfffv 	xwwww|gfffffffffafvwwwww𛙫ʰݐ ޽     CdVUeEDUujfVUUeVDDDDDDDDDDeUUUUUUhffvw	 	xwwwwyffffffffffffwwwwww  ʼ    DdgwwUUewǋkU vWfUVDDDDDDTeVUUUUUjfwDywwxffffffffffffwwwwww۫
޻   DdgwwUUewǋkU vWfUVDDDDDDTeVUUUUUjfwDywwxffffffffffffwwwwww۫
޻   e֜gUe НfwxfUXDDDDDTUeVUUUUUfxw P`ͻ ˉwywgffffffffffvwwwwwwwͻ      dy  f{	   wgUUUUUUUeVUUUUUf	  ϻ  ̉xwwffffffffffwwwwwwww̻ݻ"   / e wݐpVUUlUufhvfVUUfД  PPݻʻ wwwwgffffffvwwww www ͻ޼  g  f  gfv fwwhfhfv ffUefʠ      ̪ wwwwwwffffvwwwwwwwwww ݽ"       j VvݻgUuvUUieUU ww 
wfvgvw        P vx ̊wwwwwwwwwwwwwwwwwwww          j VvݻgUuvUUieUU ww 
wfvgvw        P vx ̊wwwwwwwwwwwwwwwwwwww           WUUf`fXUUe3UTU]EDUq gvw
M       `  xwwwwwwwwwxwwwwwwww       pXDDeUWUPDDUfEDDEDDTugv  www؝I @  P    `wwwwwwwwxwwwwwwww          emVVDDDDeWEDDDTEDDDDDDTUڛٙ	    ݽ pxwwwwwwwxwwwwwww ̽   /        [EdDDDDTEDDDDDwDDDDDDDDTUFww	ݙ	 f mxwwwwwwНxwwwww             dEDD33DDtEDDDDDUDDDDDDDDDUhfvDڜ   ̯  pۨwwwwww|xwwwww                dEDD33DDtEDDDDDUDDDDDDDDDUhfvDڜ   ̯  pۨwwwwww|xwwwww                D43333DtEDD33333CDDDDDDDTlVeUu ]   
  wwwwwww)                  4333333E43333333 3CDDAdVUQUev    m Uհμʻ wwwwwݙ	                M3333333d43333333333333@D$ETUUe P   нڑ	ʝ xwwww	
ꙙ                   h3333333C333333333333333CDDDTUepw空  Э  Аxwww}ݽ                  h3333333C333333333333333CDDDTUepw空  Э  Аxwww}ݽ                  3333333333333333333333333DDDDDff  Эwwqw wɼ                     33333#"333333333333333333CDDDDUUUvwwwݛ                 """""""""23333333333333333DDDDTUUf헉ݝxwwxwwwwwwл˙)
                   """"""""""2333333333333333DDDDTUUv {xwwwwywwwwww ̫yzǝ                  """""""""""333333333333333DDDDDUfww	wfwxwwwww ̠랉욙                     """""""""""333333333333333DDDDDUfww	wfwxwwwww ̠랉욙                     """""""""""233333333333333DDDDDUUvywgfẇ fffxgvpwwww                    !"""""""""""33333333333333CDDDDUUv{fgffg fbfgfffvww˫
 м                   !"""""""""""23333333333333CDDDDUUmfeff|fffffffffffwwͽ 
   "                  """"""""""""2333333333333CDDDTefvgUUUfpfffffffffffvw ۀ Э                       """"""""""""2333333333333CDDDTefvgUUUfpfffffffffffvw ۀ Э                       """"""""""""2333333333333CDDDuVUUUUUfyfffUUUfffffv                      """""""""""""333333333333CDDUewUUUUUUeyffUUUUefffffw   뻫                      !""""""""""""233333333333CDTfcUUUUUUUkfUUUUUUeffffww  ͻ	                  !""""""""""""233333333333CDTfUUUUUUUepgUUUUUUUeffffwww ͻ˻ ݽ            !""""""""""""233333333333CDTnUDDDDTUUUfVUUUUUUUeffffww  ͻϻ /               !""""""""""""233333333333CDTnUDDDDTUUUfVUUUUUUUeffffww  ͻϻ /               !"""""""""""""333333333333CPUUEDDDDDDDUUUUUUUUUUeffffww  ߽            "  ̻  !"""""""""""""333333333333CDDUDDDDDDDDDUUUUUUUUUefffvw   ݼ           / ̼"!"""""""""""""333333333333DDDDDDDDDDDDTUUUUUUUUefffvw         ݼ+              ͼ"!"""""""""""""333333333333DDDDDDDDDDDDDTUUUUUUUefffww	          ݼ̼               !"""""""""""""333333333333DDDDDDDDDDDDDTUUUUUUUefffww	          ݼ̼               !"""""""""""""333333333333CDDDDDDDDDDDDDUUUUUUUefwww                           ͼ!"""""""""""""3333333333333DDDDDDDDDDDDDTUUUUUUefߪ                "           ݽ !"""""""""""""23333333333333DDDDDDDDDDDDTUUUUUUev                          ݼѼ!""""""""""""""233333333333333DDDDDDDDDDDDUUUUUUUxxxww
                             ݼ۽!""""""""""""""233333333333333CDDDDDDDDDDDUUUUUUUfwgvwwww                        ͻ۾!""""""""""""""233333333333333CDDDDDDDDDDDUUUUUUUfwgvwwww                        ͻ۾!""""""""""""""2333333333333333DDDDDDDDDDDUUUUUUUfffffwww                        ͻ !""""""""""""""23333333333333333DDDDDDDDDDUUUUUUUeffffvww                     
ͻ+!""""""""""""""23333333333333333CDDDDDDDDDUUUUUUUefffffww                     

ͻ   !""""""""""""""233333333333333333DDDDDDDDDUUUUUUUUfffffww                       ݠͻ
"""""""""""""""""33333333333333333CDDDDDDDDUUUUUUUUfffffww                           ̻ 
 """"""""""""""""33333333333333333CDDDDDDDDUUUUUUUUfffffww                           ̻ 
 """"""""""""""""33333333333333333CDDDDDDDDUUUUUUUUeffffv                    	 ̻	 """"""""""""""""333333333333333333CDDDDDDDUUUUUUUUeffffvٙ                       ݼ  ܐ	"!""""""""""""""""333333333333333333CDDDDDDDUUUUUUUUeffffvw                   ͼ  !"""""""""""""""23333333333333333333DDDDDDDUUUUUUUUeffffwww"                   м۽	!"""""""""""""""23333333333333333333DDDDDDDUUUUUUUUeffffwww"                   м۽	!"""""""""""""""23333333333333333333DDDDDDTUUUUUUUUeffffwww                   ﰻ 	""""""""""""""""23333333333333333333DDDDDDUUUUUUUUUffffvwww           /     ͼ	""""""""""""""""23333333333333333333DDDDDTUUUUUUUUefffwwwwww            ᚙ""""""""""""""""23333333333333333333DDDTUeUUUUUUUefwwwwwww	             ͻ˙""""""""""""""""23333333333333333333DDTUUegffffffwwwwww"            Р""""""""""""""""23333333333333333333DDTUUegffffffwwwwww"            Р""""""""""""""""3333333333333333333CDDTVff{fffffffwxww
۽           ̻ ͼ݉""""""""""""""""3333333333333333333CDDT wwwffffw ̻     λ ̻ݼݎ޻˚˙""""""""""""""""333333333333333333CDDDTU뙻 gfvww ˻            ͻ˻wǻ""""""""""""""""333333333333333333CDDDDUvww]yww"         ͻ ̫""""""""""""""""333333333333333333CDDDDUvww]yww"         ͻ ̫"""""""""""""""3333333333333333333DDDDDTugfwwɈح     -"    w罻"""""""""""""""333333333333333333CDDDDDDUUewfffw          w̼""""""""""""""233333333333333333DDDDDDDDUUUUffff w          ܻ˰ xwww""""""""""""""23333333333333333DDDDDDDDDTUUUefffw
 

            
w {wwwww""""""""""""""33333333333333DDDDDDDDDDDTUUUUeffvwƼ뻫
           ݼ۫߰wwwww""""""""""""""33333333333333DDDDDDDDDDDTUUUUeffvwƼ뻫
           ݼ۫߰wwwww"""""""""""""2333333333CDDDDDDDDDDDDDDDDTUUUUUffvwݼ            ̻z    λxwwwwww"""""""""""""2CDDDDDDDDDDDDDDDDDDDDDDDDDTUUUUUUev ܻ,           ̻*{pxwwwwww""""""""""""23CfJDDDVDDDDDDDDDD DDDDDDDUUUUUUUew              }  Лxwwwwww""""""""""""333DeTDDVDDDDDDDDDDDDDDDDDDDUUUUUUUUffwww                  ̻p ๝wwwwwww""""""""""""333DeTDDVDDDDDDDDDDDDDDDDDDDUUUUUUUUffwww                  ̻p ๝wwwwwww"""""""""""2333DT8UUXDDDDDDDDDDDDDDDDDDDUUUUUUUUffvwww                  }wwwwwwww
"""""""""""33333Tww`UDDDDDDDDDDDDDDDDDTUUUUUUUUfffwww               ݻ	ʽ wwwwwwww""""""""""233333DzwUeFDDDDDDDDDDDDDDUUUUUUUUUfffvww̾              ɚwwwwwwwww"""""""""3333333Du fUvWDDDDDDDDDDDDDDUUUUUUUUefffvw                     xнݚxwwwwwwwwww """"""""23333333Dgfwwg]UDDDDDDDDDDDDDTUUUUUUUUffffvwٙ                         wڈ
Њxwwwwwwwwwww""""""""23333333Dgfwwg]UDDDDDDDDDDDDDTUUUUUUUUffffvwٙ                         wڈ
Њxwwwwwwwwwww"""""""333333333TUUU=gVEDDDDDDDDDDDUUUUUUUUUfffffv                         fֽwxwwwwwwwwwwww"""""23333333333CDDT`VUDDDDDDDDDDTUUUUUUUUefffffvw                    ݼxwwwxɉwwwwwwwwwwwww""""333333333333CDDTvfwpgSUEDDDDDDDTUUUUUUUUUffffffww         "   "    ݻrwwwwwwwwwwwwwwwwwwwwwx"233333333333333CDDTWUvVUUUUUEUUUUUUUUUUUUeffffffw                 g̫wwwwwwwwwwwwwwwfffffvwwww"233333333333333CDDTWUvVUUUUUEUUUUUUUUUUUUeffffffw                 g̫wwwwwwwwwwwwwwwfffffvwwww3333333333333333CDDDUUegUUUUUUUeUUUUUUUUUUffffffvqwww                 wwwwwwwwwxwwwwffffffffwww3333333333333333CDDDDDflUUUUUUUVUUUUUUUUfwwfffwwwww̼                  wwwwwwwwwxwwwfffffffffvww33333333333333333DDDDDTUeVUUUUUUzWUUUUUUefvlwwwwwwww               p  ֽxwwwwwwwwywwfffffffffffww33333333333333333DDDDDDUUvwgUUUUvhfUUUUUefwwwww	      	     f xwwwwwwwwxwgffffffffffffw3333333333333333DDDDDDUU{gwfUUfvjfUUUUUffvxww        fxwwwffffwxgffffffffffffv3333333333333333DDDDDDUU{gwfUUfvjfUUUUUffvxww        fxwwwffffwxgffffffffffffv33333333333333333DDDDDDUUepfVefvhfVUUUUUfffx     ͼ˻    wgffffffǼ܍fffff`fffffff33333333333333333DDDDDDUUuЄffffgffUUUUefffvw    p̼ } Лwfffffffwxffffffffffffff33333333333333133DDDDDDUUevpwwwwwgfVUUeffffvww 	        ̼  xwwffffffffvwxwffffbfffffff33333333333333333DDDDDDTUUv׌̇x	pgfffffffffvww    ۻ ՚xwwwffffffffv
xgffffffffafff33333333333333333DDDDDDTUU˭xwfvgffffffvww       ݽpޫۻ wwwgffffffffv׸Ѝgff`ffffff&fff33333333333333333DDDDDDTUU˭xwfvgffffffvww       ݽpޫۻ wwwgffffffffv׸Ѝgff`ffffff&fff33333333333333333DDDDDDTUUvoռUxwzgffffffvww          wwwgfffffffffv}wffffffffffff3333333333333333CDDDDDDTUfv  P wgffffffwww  	      `xwwgffffffffffjfffffffffffffff333333333333133DDDDDDTevϰ xwffafvwww(
 "ݻ	      ̻̚)໚wwgffffffffffvgffff`ffffffffffCDDDD43333333333!DDDDDDex׍ ܀wwgffffww w      ̻ګ̠|wgffffffffffiffffffffffffffCDDDD43333333333!DDDDDDex׍ ܀wwgffffww w      ̻ګ̠|wgffffffffffiffffffffffffffDDDUDD43333033D@DDDDDUUffv 	m wwwgv wwww  ݪ         ̼ xwgffffVUUUffffffUUUUUeffffffv@DTZDDDD3333333DDDDDDDDUUeffЊqwwww ww!(
          ݫ
 𼫟xwwffVUUUUUUUUUUUUUUUUUUfffffvDDTwADD433333CDDD DDDTUUUefwywwywww  
      ͫ`MwfUUUUUUUUUUUUUUUQUUUffffADd`UDDDDD433CDDDDDDDDTUUUUewww	xw xww       p     ݼx   fUUUUUUUUUUUUUQUUUUUUfffwxDTeaDDDDADDDDDDDDDDDUUUUUefwwxpp  ,       p    ݽwwxgfVUUUUUUUUUUUUUUUUUUUUefvwDTeaDDDDADDDDDDDDDDDUUUUUefwwxpp  ,       p    ݽwwxgfVUUUUUUUUUUUUUUUUUUUUefvwTUuWDDDDDDDDDDDDDDDDDUUUUUUeffrwww     ppw   ϚwwwwyffVUUUUUUUUUUUUUUUUUUUUefUUeVU@DDDDDDDDdUEDDDUUUUUUefffww x(   p    `wwwwwwywffVUUUUUUUUUUUUUUUUUUUefvwU`UUDDDDDDDDDUwUEUUUUUUUffffw	  	    ͼ    
wwwwwxwwxffVUUUUUUUUUUUUUUUUUUUUefffw VUEDDDDDDDDUUUUUUUUUeffff(ྐ       wݻwwwww xwwHyffVUUUUUUUUUUUUUUPUUUUUefffw VUEDDDDDDDDUUUUUUUUUeffff(ྐ       wݻwwwww xwwHyffVUUUUUUUUUUUUUUPUUUUUefffwV -- title:   Smooth Mandelbrot set explorer
-- author:  Sava
-- desc:    Runs at 60 fps on my PC, pretty optimized. Uses a double buffer approach
-- license: MIT License
-- version: 0.1
-- script:  lua

w=240
h=136

zoom = 2
zoomFactor = 1.02
centerX, centerY = -1.3499999, 0.0695077

nextProg = 0
iter = 5
maxIter = 75
nextFrame = {}
curFrame = {}
oldZoom = 2
curZoom = 1

function BOOT()
 for i=0, w do
  curFrame[i] = {}
  nextFrame[i] = {}
  for j=0, h do
   curFrame[i][j] = 0
   local x, y = (i-w/2)/h, (j-h/2)/h
   x, y = x*zoom, y*zoom
   x, y = x+centerX, y+centerY
   nextFrame[i][j] = {x=x, y=y, re=0, im=0, stopP=0}
  end
 end
end

function TIC()
 vbank(0)
 cls(0)
 vbank(1)
 cls(0)
 if nextProg >= maxIter then
  oldZoom = zoom
  for i=0, maxIter, iter do
   oldZoom = oldZoom / zoomFactor
  end
  curZoom = 1
 end
 zoom = zoom / zoomFactor
 curZoom = curZoom * zoomFactor
 for i=0, w do
  for j=0, h do
   mandelbrot(i, j)
  end
 end
 if nextProg >= maxIter then
  nextProg = 0
 end
 nextProg = nextProg + iter
 for i=0, w do
  for j=0, h do
   mandelPixel(i, j)
  end
 end
end

function mandelPixel(i, j)
 x, y = (i-w/2)/h, (j-h/2)/h
 x, y = x/zoom, y/zoom
 x, y = x+centerX, y+centerY
 local col = get_pixel(i, j, w/2, h/2, curZoom)/maxIter*31
 if col >= 16 then
  vbank(1)
  col = col + 1
 else
  vbank(0)
 end
 pix(i, j, col)
end

fl = math.floor

function get_pixel1(x, y, centerX, centerY, zoomD) -- slow, doesn't look as good as i expected
 local nextX, nextY = fl((x-centerX)/zoomD+centerX), fl((y-centerY)/zoomD+centerY)
 local pix1 = curFrame[nextX][nextY]
 if nextX+1 < w then
  local pix2 = curFrame[nextX+1][nextY]
 else
  local pix2 = curFrame[nextX][nextY]
 end
 local pix3 = curFrame[nextX][nextY+1]
 if nextX+1 < w then
  local pix4 = curFrame[nextX+1][nextY+1]
 else
  local pix4 = curFrame[nextX][nextY+1]
 end
 local lerp1 = lerp(pix1, pix2, x/zoomD%1)
 local lerp2 = lerp(pix3, pix4, x/zoomD%1)
 local lerp3 = lerp(lerp1, lerp2, y/zoomD%1)
 if lerp3 == nil then
  lerp3 = 0
 end
 return lerp3
end

function get_pixel(x, y, centerX, centerY, zoomD) -- much less flicker and faster
 local nextX, nextY = fl((x-centerX)/zoomD+centerX), fl((y-centerY)/zoomD+centerY)
 return curFrame[nextX][nextY]
end

function lerp(a, b, t)
 if b == nil then return a end
 return a+(b-a)*t
end

function mandelbrot(x, y)
 local curPix = nextFrame[x][y]
 if curPix.stopP > 0 then
  if nextProg >= maxIter then
   curFrame[x][y] = curPix.stopP
   local x1, y1 = (x-w/2)/h, (y-h/2)/h
   x1, y1 = x1*zoom, y1*zoom
   x1, y1 = x1+centerX, y1+centerY
   nextFrame[x][y] = {x=x1, y=y1, re=0, im=0, stopP=0}
  end
  return
 end
 local z_re, z_im = curPix.re, curPix.im
 local c_re, c_im = curPix.x, curPix.y
 for i = nextProg, nextProg+iter do
  z_re, z_im = z_re^2 - z_im^2 + c_re, 2 * z_re * z_im + c_im
  if z_re^2 + z_im^2 > 4 then nextFrame[x][y].stopP = i; return end
 end
 nextFrame[x][y].re = z_re
 nextFrame[x][y].im = z_im
 if nextProg >= maxIter then
  curFrame[x][y] = maxIter
  local x1, y1 = (x-w/2)/h, (y-h/2)/h
  x1, y1 = x1*zoom, y1*zoom
  x1, y1 = x1+centerX, y1+centerY
  nextFrame[x][y] = {x=x1, y=y1, re=0, im=0, stopP=0}
 end
end