Create falldown.p8
This commit is contained in:
parent
6fecbe123c
commit
fe77464db7
|
@ -0,0 +1,219 @@
|
|||
--fall down
|
||||
--by michael clemens
|
||||
--clone of the atari version from aaron curtis
|
||||
|
||||
--game
|
||||
--x,y,spritefront,spritel,spriter,
|
||||
--spritestate,playernumber,color,opp
|
||||
passby=false
|
||||
candie=false
|
||||
blue={28,-20,4,2,3,"f",0,9,2,0}
|
||||
red={100,-20,7,5,6,"f",1,10,1,0}
|
||||
players={blue,red}
|
||||
timecode=0
|
||||
lines={
|
||||
--y,color,elements
|
||||
{-100,11,{11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}},
|
||||
{-100,11,{11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}},
|
||||
{-100,11,{11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}},
|
||||
{-100,11,{11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}}
|
||||
}
|
||||
linecount=0
|
||||
|
||||
function ispingap(playery)
|
||||
pisingap=false
|
||||
for l=1,4 do
|
||||
-- if player is inbetween a line
|
||||
if (playery > lines[l][1]-3 and playery < lines[l][1]+3) then
|
||||
pisingap=true
|
||||
end
|
||||
end
|
||||
return pisingap
|
||||
end
|
||||
|
||||
--todo: define range instead of point
|
||||
function playersonsamelevel()
|
||||
result=false
|
||||
if (red[2]-4 < blue[2])
|
||||
and blue[2] < red[2]+4 then
|
||||
result=true
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function moveplayer(p)
|
||||
opponent=players[p[9]]
|
||||
--left
|
||||
if btn (0,p[7]) then
|
||||
--check if player is in between a line
|
||||
if (ispingap(p[2])==false) then
|
||||
--if ((opponent[1]+7 < p[1]+2)
|
||||
if (p[1]!=opponent[1]+4
|
||||
or not playersonsamelevel())
|
||||
or passby then
|
||||
p[1]-=2
|
||||
end
|
||||
end
|
||||
if (p[1]<-8) then
|
||||
p[1]=128
|
||||
end
|
||||
p[6]="l"
|
||||
--right
|
||||
elseif btn(1,p[7]) then
|
||||
--check if player is in between a line
|
||||
if (ispingap(p[2])==false) then
|
||||
--if ((opponent[1]+2 > p[1]+6)
|
||||
if (p[1]!=opponent[1]-4
|
||||
or not playersonsamelevel())
|
||||
or passby then
|
||||
p[1]+=2
|
||||
end
|
||||
end
|
||||
if (p[1]>128) then
|
||||
p[1]=-4
|
||||
end
|
||||
p[6]="r"
|
||||
else
|
||||
p[6]="f"
|
||||
end
|
||||
end
|
||||
|
||||
--lets fall down the player
|
||||
function falldown(player)
|
||||
drop=true
|
||||
--check all 4 lines
|
||||
for l=1,4 do
|
||||
-- if player stands on a line
|
||||
if (player[2]+6==lines[l][1]) then
|
||||
-- and there is no gap: dont drop
|
||||
-- get one or both tile numbers under players feet
|
||||
pposl=flr(player[1]/8)+1
|
||||
pposr=flr((player[1]+8)/8)+1
|
||||
if (lines[l][3][pposl]!=12
|
||||
or lines[l][3][pposr]!=12) then
|
||||
drop=false
|
||||
end
|
||||
end
|
||||
--increment player score and change line color
|
||||
if (player[2]==lines[l][1] and lines[l][2]==11) then
|
||||
for y=1,16 do
|
||||
if lines[l][3][y]==11 then
|
||||
lines[l][3][y]=player[8]
|
||||
end
|
||||
end
|
||||
player[10]+=1
|
||||
end
|
||||
end
|
||||
--let player fall or not
|
||||
if (drop==true)
|
||||
and player[2]<120 then
|
||||
player[2]+=1
|
||||
else
|
||||
player[2]-=1
|
||||
end
|
||||
--end
|
||||
end
|
||||
|
||||
--draws 4 visible lines
|
||||
function drawline()
|
||||
--let lines appear on bottom of screen
|
||||
|
||||
for i=40,160,40 do
|
||||
if (linecount==i) then
|
||||
resetline(lines[linecount/40])
|
||||
end
|
||||
end
|
||||
if (linecount==160) then
|
||||
linecount=0
|
||||
end
|
||||
--draw the lines
|
||||
for l=1,4 do
|
||||
for i=1,16 do
|
||||
spr(lines[l][3][i],(i-1)*8,lines[l][1])
|
||||
end
|
||||
lines[l][1]-=1
|
||||
end
|
||||
linecount+=1
|
||||
end
|
||||
|
||||
--begins a line on white on bottom of page
|
||||
function resetline(l)
|
||||
c=11
|
||||
l[3]={c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c}
|
||||
l[1]=128
|
||||
gaps={flr(rnd(16)),flr(rnd(16)),flr(rnd(16))}
|
||||
for x=1,flr(rnd(2)+2) do
|
||||
l[3][gaps[x]]=12
|
||||
l[3][gaps[x]+1]=12
|
||||
end
|
||||
end
|
||||
|
||||
function drawdots()
|
||||
--todo
|
||||
end
|
||||
|
||||
function drawheader()
|
||||
rectfill(0,0,128,15,0)
|
||||
if blue[10]!=-1 then
|
||||
print(blue[10],7,5,12)
|
||||
else
|
||||
print("dead",7,5,12)
|
||||
end
|
||||
if red[10]!=-1 then
|
||||
print(red[10],112,5,8)
|
||||
else
|
||||
print("dead",112,5,8)
|
||||
end
|
||||
end
|
||||
|
||||
function drawplayers()
|
||||
for p in all(players) do
|
||||
if p[10]!=-1 then
|
||||
if (p[6]=="r") then
|
||||
spr(p[5],p[1],p[2])
|
||||
elseif (p[6]=="l") then
|
||||
spr(p[4],p[1],p[2])
|
||||
else
|
||||
spr(p[3],p[1],p[2])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function checkdeath(p)
|
||||
--for p in all(players) do
|
||||
if p[2]<0 and candie then
|
||||
p[10]=-1
|
||||
elseif p[2]>0 and not candie then
|
||||
candie=true
|
||||
end
|
||||
--end
|
||||
end
|
||||
|
||||
function drawtitlescreen()
|
||||
--todo
|
||||
end
|
||||
|
||||
function _update()
|
||||
for p in all(players) do
|
||||
if p[10]!=-1 then
|
||||
moveplayer(p)
|
||||
falldown(p)
|
||||
checkdeath(p)
|
||||
timecode+=1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function _draw()
|
||||
-- clear the screen
|
||||
rectfill(0,0, 128,128, 1)
|
||||
|
||||
drawline()
|
||||
drawdots()
|
||||
drawplayers()
|
||||
drawheader()
|
||||
--drawtitlescreen()
|
||||
--print (flr(blue[1]/8),50,50,6)
|
||||
end
|
Loading…
Reference in New Issue