Oh, what the hell... here's my code snippet.
xmid=int(x#/20+5.5)
xleft=int(x#/20+5.2)
xright=int(x#/20+5.8)
ymid=int(y#/10+.2)
ydown=int(y#/10)
yup=int(y#/10+.4)
zmid=int(z#/40+1.55)
zback=int(z#/40+.3)
zfront=int(z#/40+.6)
tx#=x#
ty#=y#
tz#=z#
`ontop
if ColRange(ydown, "y", depth)=1 and ColRange(xmid, "x", depth)=1
if Colrange(zfront, "z", depth)=1
if board(zfront, xmid, ydown )>=1 and board(zfront, xmid, ydown)<=65
ty#=(ydown)*10+10
yvel#=0
jumping=0
else
jumping=1
endif
endif
`if ColRange(zback, "z", depth)=1 and ycol=0
if ColRange(zback, "z", depth)=1
if board(zback, xmid, ydown )>=1 and board(zback, xmid, ydown)<=65
ty#=(ydown)*10+10
yvel#=0
jumping=0
else
jumping=1
endif
endif
endif
`under
if yvel#<0
if ColRange(yup, "y", depth)=1 and ColRange(xmid, "x", depth)=1
if ColRange(zfront, "z", depth)=1
if board(zfront, xmid, yup)>=1 and board(zfront, xmid, yup)<=65
ty#=(yup)*10-6
yvel#=0
endif
endif
if ColRange(zback, "z", depth)=1
if board(zback, xmid, yup)>=1 and board(zback, xmid, yup)<=65
ty#=(yup)*10-6
yvel#=0
endif
endif
endif
endif
`front
if ColRange(zfront, "z", depth)=1 and ColRange(xmid, "x", depth)=1
if ColRange(ydown, "y", depth)=1
if board(zfront, xmid, ydown)>=1 and board(zfront, xmid, ydown)<=65
tz#=(zfront-.6)*40
endif
endif
if ColRange(ydown, "y", depth)=1
if board(zfront, xmid, yup)>=1 and board(zfront, xmid, yup)<=65
tz#=(zfront-.6)*40
endif
endif
endif
`endif
`left
if ColRange(xleft, "x", depth)=1
if ColRange(zfront, "z", depth)=1
if ColRange(ydown, "y", depth)=1
if board(zfront, xleft, ydown)>=1 and board(zfront, xleft, ydown)<=65
tx#=(xleft-4.2)*20
endif
endif
if ColRange(yup, "y", depth)=1
if board(zfront, xleft, yup)>=1 and board(zfront, xleft, yup)<=65
tx#=(xleft-4.2)*20
endif
endif
endif
if ColRange(zback, "z", depth)=1
if ColRange(ydown, "y", depth)=1
if board(zback, xleft, ydown)>=1 and board(zback, xleft, ydown)<=65
tx#=(xleft-4.2)*20
endif
endif
if ColRange(yup, "y", depth)=1
if board(zback, xleft, yup)>=1 and board(zback, xleft, yup)<=65
tx#=(xleft-4.2)*20
endif
endif
endif
endif
`right
if ColRange(xright, "x", depth)=1
if ColRange(zfront, "z", depth)=1
if ColRange(ydown, "y", depth)=1
if board(zfront, xright, ydown)>=1 and board(zfront, xright, ydown)<=65
tx#=(xright-5.8)*20
endif
endif
if ColRange(yup, "y", depth)=1
if board(zfront, xright, yup)>=1 and board(zfront, xright, yup)<=65
tx#=(xright-5.8)*20
endif
endif
endif
if ColRange(zback, "z", depth)=1
if ColRange(ydown, "y", depth)=1
if board(zback, xright, ydown)>=1 and board(zback, xright, ydown)<=65
tx#=(xright-5.8)*20
endif
endif
if ColRange(yup, "y", depth)=1
if board(zback, xright, yup)>=1 and board(zback, xright, yup)<=65
tx#=(xright-5.8)*20
endif
endif
endif
endif
x#=tx#
y#=ty#
z#=tz#
I know it's a lot of code and a lot of repetition. Two reasons: line length limit, no short circuit evaluation in DB (like in C/C++) ...(or is there? I can't get it to work).
Also, the line:
if board(zfront, xmid, ydown )>=1 and board(zfront, xmid, ydown)<=65
A value between 1 and 65 in the board() matrix is a solid cube.
The function I called is here. It basically returns a 1 if the requested variable is a valid entry in the game array.
function ColRange(value, type$, depth)
temp=0
if type$="x" and value>=0 and value<=11 then temp=1
if type$="y" and value>=0 and value<=3 then temp=1
if type$="z" and value>=0 and value<=depth then temp=1
endfunction temp