pico-8 cartridge // http://www.pico-8.com version 29 __lua__ -- amico8 demo2 -- demoscene style t=0 mode=0 mode_t=0 mode_dur=300 -- plasma palette function make_pal() for i=1,15 do pal(i,({1,2,8,14,9,10,11,7,6,13,5,12,3,4,0})[i],1) end end -- mode 0: plasma function draw_plasma() for y=0,127,2 do for x=0,127,2 do local v=sin(x/32+t/20) +sin(y/24-t/15) +sin((x+y)/40+t/25) +cos(x/16-t/30) v=flr((v+4)*2)%16 rectfill(x,y,x+1,y+1,v) end end print("plasma",48,2,7) end -- mode 1: tunnel function draw_tunnel() local cx=64+sin(t/60)*20 local cy=64+cos(t/45)*20 for y=0,127,2 do for x=0,127,2 do local dx=x-cx local dy=y-cy local d=max(1,sqrt(dx*dx+dy*dy)) local a=atan2(dx,dy) local u=flr(128/d+t/5)%16 local v=flr(a*16+t/10)%16 local c=(u+v)%16 rectfill(x,y,x+1,y+1,c) end end print("tunnel",48,2,7) end -- mode 2: rotozoom function draw_rotozoom() local a=t/50 local s=sin(t/80)*2+3 local ca=cos(a) local sa=sin(a) for y=0,127,2 do for x=0,127,2 do local dx=x-64 local dy=y-64 local u=flr((dx*ca-dy*sa)/s) local v=flr((dx*sa+dy*ca)/s) local c=(u%8<4)==(v%8<4) and 12 or 1 if (u+v)%16<8 then c=c==12 and 7 or 2 end rectfill(x,y,x+1,y+1,c) end end -- scrolltext local msg="amico8 - pico-8 for amiga! greets to all amiga users! " local off=flr(t/2)%((#msg)*4) for i=1,#msg do local cx=i*4-off if cx>-4 and cx<132 then local cy=110+sin((cx+t*2)/80)*8 print(sub(msg,i,i),cx,cy,7) end end print("rotozoom",44,2,7) end -- mode 3: starfield 3d sx={} sy={} sz={} for i=1,80 do sx[i]=rnd(256)-128 sy[i]=rnd(256)-128 sz[i]=rnd(100)+1 end function draw_stars3d() cls(0) for i=1,80 do sz[i]-=2 if sz[i]<1 then sx[i]=rnd(256)-128 sy[i]=rnd(256)-128 sz[i]=100 end local px=sx[i]*128/sz[i]+64 local py=sy[i]*128/sz[i]+64 local r=max(0,3-sz[i]/30) if px>0 and px<128 and py>0 and py<128 then if r>1 then circfill(px,py,r,7) else pset(px,py,6) end end end -- 3d text local msg="amico8" for i=1,#msg do local cx=30+i*10 local cy=58+sin(t/20+i/3)*10 print(sub(msg,i,i),cx,cy,({8,9,10,11,12,14})[i]) end print("starfield",43,2,7) end -- mode 4: copper bars function draw_copper() for y=0,127 do local c=0 for b=1,5 do local by=64+sin(t/30+b*0.2)*40+cos(t/20+b*0.3)*20 local d=abs(y-by) if d<8 then local cols={1,2,8,14,7,14,8,2} c=cols[flr(d)+1] or 0 end end line(0,y,127,y,c) end -- big logo local lx=20 local ly=30+sin(t/25)*10 print("\142",lx,ly,7) print("amico8",lx+2,ly+12,7) print("pico-8 for amiga",26,ly+22,6) print("copper bars",40,2,7) end -- main function _update() t+=1 mode_t+=1 if mode_t>mode_dur then mode=(mode+1)%5 mode_t=0 end -- press z to skip if btnp(4) then mode=(mode+1)%5 mode_t=0 end end function _draw() cls(0) make_pal() if mode==0 then draw_plasma() elseif mode==1 then draw_tunnel() elseif mode==2 then draw_rotozoom() elseif mode==3 then draw_stars3d() elseif mode==4 then draw_copper() end pal() rectfill(0,120,127,127,0) print("z=next mode "..(mode+1).."/5",16,122,5) end