pico-8 cartridge // http://www.pico-8.com version 42 __lua__ function _init() mymap={ w=32, h=9 } initcoins() initplayer() end function _update() updateplayer() if btn(4) then reload() _init() end end function _draw() cls() camera(player.x-20,-20) map(0,0,0,0,mymap.w,mymap.h) drawcoins() drawplayer() end -->8 function initplayer() player={ x=8, y=56, dir=false, vv=0, vh=2, w=8, h=8, image=3, timer=0, walking=false, jumping=false } v0=-4.5 gravity=0.5 end function updateplayer() local dx=0 local dy=0 --walk if btn(⬅️) and player.x>=10 then dx=-player.vh player.dir=true for i=1,player.vh do local new_x,new_y,_,_=trymove(player.x,player.y,-1,0) player.x=new_x if isonground() then sfx(2) end walking=true end elseif btn(➡️) and player.x<=mymap.w*8-player.w-10 then dx=player.vh player.dir=false for i=1,player.vh do local new_x,new_y,_,_=trymove(player.x,player.y,1,0) player.x=new_x if isonground() then sfx(2) end walking=true end else walking=false end--if --jump & fall if isonground() then player.vv=0 if btn(⬆️) then sfx(1) player.vv=v0 walking=false end else player.vv+=gravity end dy=player.vv if dy>0 then dy=ceil(dy) for i=1,dy do local new_x,new_y,_,actual_dy=trymove(player.x,player.y,0,1) player.y=new_y if actual_dy==0 then player.vv=0 break end --if end --for elseif dy<0 then dy=flr(dy) for i=1,-dy do local new_x,new_y,_,actual_dy=trymove(player.x,player.y,0,-1) player.y=new_y if actual_dy==0 then player.vv=0 end --if end --for end --image state if isonground()==false then walking=false jumping=true else jumping=false end --eat coins eatcoin(player.x+3,player.y+4) end function drawplayer() if walking==true then player.timer+=1 if player.timer%6==0 then if player.image==3 then player.image=19 else player.image=3 end end elseif jumping==true then player.image=35 else player.image=3 end spr(player.image,player.x,player.y,1,1,player.dir) end -->8 function issolid(x,y) local tile=mget(flr(x/8),flr(y/8)) local f=fget(tile) if f==1 then return true else return false end--if end function trymove(x,y,dx,dy) local new_x=x+dx local new_y=y+dy local collided_x=false local collided_y=false if dx>0 then --right for i=0,player.h-1 do if issolid(new_x+player.w-1,new_y+i) then collided_x=true break end --if end --for end --if if dx<0 then --left for i=0,player.h-1 do if issolid(new_x,new_y+i) then collided_x=true break end --if end --for end --if if dy>0 then --down for i=0,player.w-1 do if issolid(new_x+i,new_y+player.h-1) then collided_y=true break end --if end --for end --if if dy<0 then --up for i=0,player.w-1 do if issolid(new_x+i,new_y) then collided_y=true break end --if end --for end --if if new_y<0 then dy=0 collided_y=true end if collided_x==true then dx=0 end if collided_y==true then dy=0 end return x+dx,y+dy,dx,dy end function isonground() for i=0,player.w-1 do if issolid(player.x+i,player.y+player.h) then return true end --if end --for return false end -->8 function initcoins() score=0 coins={} for x=0,mymap.w do for y=0,mymap.h do local tile=mget(x,y) if tile==4 then add(coins,{ x=x*8, y=y*8, w=6, collected=false, timer=0 }) mset(x,y,2) end--if end end end function eatcoin() for c in all(coins) do if c.collected==false and isoverlap(c.x,c.y,c.w)==true then c.collected=true sfx(0) score+=1 c.timer=3 end--if end--for end function isoverlap(x0,y0,w0) local x=player.x local y=player.y if x+player.wx0+w0+(8-w0)/2 or y+player.hy0+w0+(8-w0)/2 then return false else return true end end function drawcoins() for c in all(coins) do if c.collected==false then spr(5,c.x,c.y) elseif c.timer>0 then spr(21,player.x+8,player.y) spr(21,player.x-8,player.y,1,1,1) c.timer-=1 end--if end print("score:"..score,player.x-5,1,4) end __gfx__ 0000000033b3b3b377777777002eeee0777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000003b333b33777777c722222eee779a9a77009a9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000 0070070033333333777777770557975079a9a9a709a9a9a000000000000000000000000000000000000000000000000000000000000000000000000000000000 00077000444444447c7777775591919579aaaa9709aaaa9000000000000000000000000000000000000000000000000000000000000000000000000000000000 0007700045444544777777770599899079aaa9a709aaa9a000000000000000000000000000000000000000000000000000000000000000000000000000000000 00700700444544447777777700e2e2e0799aaa97099aaa9000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000004444445477777c770e02220e779999770099990000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000454444447777777700020200777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000004454444477777777002eeee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000054444454777777c722222eee000000000009a00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000444544447777777705579750000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000444444447c77777755919195000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000045444544b77777b7059989900000000000990a0000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000444544447b777b7700e2e2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000444444547b77b777000e22e0000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000004544444477b7b77700022000000000000009a00000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000002eeee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000022222eee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000005519150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000055979795000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000e99899e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000e2e2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000022200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __gff__ 0001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 0202020202020202020204020202020202020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020202020202020202020202020202020202020202020204020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020402020202020202020202020202020202020402021202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020202020202010101020202020202020202020202010101020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020202120402020202020202020402020212020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020201010102020202020202020202020101010202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020202020202021202020202020201011104020202020202020202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0212120202020202010101020212020111111102020202020202121202020202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010101010101111111010101011111111101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 000300001a0101d0201f0302004023050260402b03030020360103800037000360003400034000370003600036000340003400033000320003200022000220002200000000000000000000000000000000000000 000100000f0601106011070110701107013070140701506016060190001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00010000210401b000130001300000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000