The way I do it uses only one camera, but twice the objects in the level, all wireframe, all red and blue. The problem I'm having is that I can't find a way to occlude objects behind
wireframed objects, at the moment you can see the whole level through the walls

. Does anyone have a workaround for this? Hiding whole objects won't work, because you will probably need to have half objects behind walls and stuff, and it just won't work.
I'll post the code anyway, please tell me what you think:
sync on
sync rate 60
hide mouse
autocam off
backdrop on
color backdrop 0
create bitmap 1,1,1
cls rgb(255,0,0)
get image 1,0,0,1,1
delete bitmap 1
cubes=66
particles=90
make object box 201,5,5,20
position object 201,14,-10,20
lock object on 201
make object box 203,5,5,20
position object 203,10,-10,20
lock object on 203
make object box 202,2,2,10
position object 202,14,-10,40
lock object on 202
make object box 204,2,2,10
position object 204,10,-10,40
lock object on 204
set object wireframe 201,1
set object wireframe 203,1
set object light 201,0
set object light 203,0
color object 201,rgb(255,0,0)
color object 203,rgb(0,0,255)
set object wireframe 202,1
set object wireframe 204,1
set object light 202,0
set object light 204,0
color object 202,rgb(255,0,0)
color object 204,rgb(0,0,255)
dim pos(cubes,3)
dim effect#(particles,3)
dim level(132)
data 2,2,4,2,7,2,8,2,2,3,4,3,5,3,4,4,7,4,9,4,2,5,4,5,6,5,7,5,9,5,1,6,2,6,4,7,5,7,7,7,8,7,2,8,3,8,8,8,6,9,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10
for i=0 to 65
read level(i*2)
read level((i*2)+1)
make object box ((i+1)*2),200,200,200
make object box ((i+1)*2)+1,200,200,200
pos(i,0)=(level(i*2)*200)-100
pos(i,1)=100
pos(i,2)=(level((i*2)+1)*200)-100
make static collision box ((level(i*2)*200))-200,0,(level((i*2)+1)*200)-200,(level(i*2)*200),0,(level((i*2)+1)*200)
set object wireframe (i+1)*2,1
set object wireframe ((i+1)*2)+1,1
set object light (i+1)*2,0
set object light ((i+1)*2)+1,0
color object (i+1)*2,rgb(255,0,0)
color object ((i+1)*2)+1,rgb(0,0,255)
next i
`for i=1 to cubes
`make object box i*2,50,50,50
`make object box (i*2)+1,50,50,50
`make object sphere i*2,50,10,10
`make object sphere (i*2)+1,50,10,10
`set object wireframe i*2,1
`set object wireframe (i*2)+1,1
`set object light i*2,0
`set object light (i*2)+1,0
`color object i*2,rgb(255,0,0)
`color object (i*2)+1,rgb(0,0,255)
`next i
`for i=0 to cubes-1
`pos(i,0)=int(rnd(1000))
`pos(i,1)=25
`pos(i,2)=int(rnd(1000))
`next i
for i=1 to particles
make object triangle (i*2)+1000,-1,-1,0,1,-1,0,0,1,0
make object triangle (i*2)+1001,-1,-1,0,1,-1,0,0,1,0
set object wireframe (i*2)+1000,1
set object wireframe (i*2)+1001,1
set object light (i*2)+1000,0
set object light (i*2)+1001,0
color object (i*2)+1000,rgb(255,0,0)
color object (i*2)+1001,rgb(0,0,255)
next i
y#=100
speed#=5
do
a#=wrapvalue(a#+mousemovex())
moving=0
oldx#=x#
oldz#=z#
if upkey()=1
moving=1
x#=x#+(sin(a#)*speed#)
z#=z#+(cos(a#)*speed#)
endif
if downkey()=1
moving=1
x#=x#+(sin(a#+180)*speed#)
z#=z#+(cos(a#+180)*speed#)
endif
if leftkey()=1
moving=1
x#=x#+(sin(a#+270)*speed#)
z#=z#+(cos(a#+270)*speed#)
endif
if rightkey()=1
moving=1
x#=x#+(sin(a#+90)*speed#)
z#=z#+(cos(a#+90)*speed#)
endif
if get static collision hit(oldx#-20,125-200,oldz#-20,oldx#+20,125+200,oldz#+20,x#-20,125-200,z#-20,x#+20,125+200,z#+20)=1
x#=x#-get static collision x()
z#=z#-get static collision z()
endif
if mouseclick()=1 and shot=0
shot=60
gunrecoil#=5
for i=1 to particles
effect#(i-1,0)=x#+(sin(a#+90)*12)
effect#(i-1,1)=z#+(cos(a#+90)*12)
effect#(i-1,2)=a#
show object (i*2)+1000
show object (i*2)+1001
`position object (i*2)+1000,x#+(sin(a#)*(i*20))+(sin(a#+90)*sin(i*16)*20),y#+(cos(i*16)*20),z#+(cos(a#)*(i*20))+(cos(a#+90)*sin(i*16)*20)
`yrotate object (i*2)+1000,a#
next i
endif
if shot>0
shot=shot-1
for i=1 to particles
position object (i*2)+1000,(effect#(i,0)+(sin(effect#(i,2))*(i*20))+(sin(effect#(i,2)+90)*sin(i*16)*(60-shot)))+(sin(a#+90)*5),(y#-10)+(cos(i*16)*(60-shot)),(effect#(i,1)+(cos(effect#(i,2))*(i*20))+(cos(effect#(i,2)+90)*sin(i*16)*(60-shot)))+(cos(a#+90)*5)
position object (i*2)+1001,(effect#(i,0)+(sin(effect#(i,2))*(i*20))+(sin(effect#(i,2)+90)*sin(i*16)*(60-shot)))+(sin(a#+270)*5),(y#-10)+(cos(i*16)*(60-shot)),(effect#(i,1)+(cos(effect#(i,2))*(i*20))+(cos(effect#(i,2)+90)*sin(i*16)*(60-shot)))+(cos(a#+270)*5)
yrotate object (i*2)+1000,a#
yrotate object (i*2)+1001,a#
next i
if shot=0
for i=1 to particles
hide object (i*2)+1000
hide object (i*2)+1001
next i
endif
endif
gunrecoil#=curvevalue(0,gunrecoil#,10)
if moving=1 then gunbob#=wrapvalue(gunbob#+10)
if moving=0 then gunbob#=curveangle(0,gunbob#,10)
position camera x#,y#,z#
yrotate camera a#
position object 201,14,-10+(sin(gunbob#)*2),20-gunrecoil#
position object 202,14,-10+(sin(gunbob#)*2),40-gunrecoil#
position object 203,10,-10+(sin(gunbob#)*2),20-gunrecoil#
position object 204,10,-10+(sin(gunbob#)*2),40-gunrecoil#
`position camera 500+(cos(a#)*700),200,500+(sin(a#)*700)
`point camera 500,0,500
for i=1 to cubes
`position object i*2,pos(i-1,0)+(cos(a#+90)*10),pos(i-1,1),pos(i-1,2)+(sin(a#+90)*10)
`position object (i*2)+1,pos(i-1,0)+(cos(a#+270)*10),pos(i-1,1),pos(i-1,2)+(sin(a#+270)*10)
position object i*2,pos(i-1,0)+(sin(a#+90)*5),pos(i-1,1),pos(i-1,2)+(cos(a#+90)*5)
position object (i*2)+1,pos(i-1,0)+(sin(a#+270)*5),pos(i-1,1),pos(i-1,2)+(cos(a#+270)*5)
next i
sync
loop
Yes, I seem to go slightly blind in the red filter eye... Note for my game the red filter goes over the left eye, and the blue filter over the right eye. Otherwise the 3D effect doesn't work.
I'll take a look at that Heartache game when I get round to downloading it.
Once I was but the learner,
now, I am the Master.