Files
pico8/myfirstgame.p8
2025-07-25 11:46:41 +02:00

311 lines
10 KiB
Lua
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.w<x0+(8-w0)/2 or x>x0+w0+(8-w0)/2 or y+player.h<y0+(8-w0)/2 or y>y0+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