Well, it's pretty simple. All you have to do is put the DLL in the same folder as the project file. Then include the file 'DBCcollisions.dba' in the top of your project. Then, use the 'setupObjectDBC' command to set collision to that object, in this case, your level. You can also use the 'setupComplexObjectDBC', which runs a bit faster but unnoticeably inaccurate. Use the 'setupComplexObjectDBC' for objects with over 40 polygons. So, it would be like this:
`setup object LEVEL as a complex object, into group 1, with 2 faces per tree node (don't worry about that... just set the last parameter to 2!)
LEVEL = 100
load object "level.x",LEVEL
setupComplexObjectDBC(LEVEL,1,2)
Then, to see what happens if something collides with your level, use the 'intersectObjectDBC' command.
In your case, do this:
oldx#=camera position x()
oldy#=camera position y()
oldz#=camera position z()
Rem Setting it to PLAYERSPEED+2 so that nothing funny happens...
move camera (PLAYERSPEED+2)
x#=camera position x()
y#=camera position y()
z#=camera position z()
move camera 0-(PLAYERSPEED+2)
Remstart
Parameters, respectively:
object number (in this case, your level)
group flag (if your object is in a group, not applicable in this case, so set to 0)
x,y,z's - the command draws a ray from the coordinates (oldx#,oldy#,oldz#) to (x#,y#,z#). If anything touches this ray, then this command returns the object that the ray hit FIRST.
excludeobject (um, just ignore this parameter and set it to 0)
Remend
collide=intersectObjectDBC(LEVELNUMBER,0,oldx#,oldy#,oldz#,x#,y#,z#,0)
if collide <> 0
Rem code for 'don't move camera'
else
Rem code for 'move camera'
endif
P.S. the PLAYERSPEED command is how fast the player is moving
Place the first piece of code before the main loop and the second in the main loop. So the FINAL PIECE OF CODE should look like this:
`setup object LEVEL as a complex object, into group 1, with 2 faces per tree node (don't worry about that... just set the last parameter to 2!)
LEVEL = 100
load object "level.x",LEVEL
setupComplexObjectDBC(LEVEL,1,2)
do
'Code for moving player
oldx#=camera position x()
oldy#=camera position y()
oldz#=camera position z()
Rem Setting it to PLAYERSPEED+2 so that nothing funny happens...
move camera (PLAYERSPEED+2)
x#=camera position x()
y#=camera position y()
z#=camera position z()
move camera 0-(PLAYERSPEED+2)
Remstart
Parameters, respectively:
object number (in this case, your level)
group flag (if your object is in a group, not applicable in this case, so set to 0)
x,y,z's - the command draws a ray from the coordinates (oldx#,oldy#,oldz#) to (x#,y#,z#). If anything touches this ray, then this command returns the object that the ray hit FIRST.
excludeobject (um, just ignore this parameter and set it to 0)
Remend
collide=intersectObjectDBC(LEVELNUMBER,0,oldx#,oldy#,oldz#,x#,y#,z#,0)
if collide <> 0
Rem code for 'don't move camera'
else
Rem code for 'move camera'
endif
loop
Hope I helped

Btw, you can create bullet holes similarly by using the 'getStaticCollisionX','getStaticCollisionY', and 'getStaticCollisionZ' commands. Like this:
Rem Load some bullet hole textuer
load image "BulletHole.bmp",103
bulletHole = 2000
Rem Make bullet hole plains
for x = 2000 to 2000+numOfHolesMax
make object plain x,2,2
texture object x,103
set object x,1,1,0,0
set object texture x,0,1
next x
do
Rem Position bullet holes
collide=intersectObjectDBC(LEVELNUMBER,0,sx#,sy#,sz#,ex#,ey#,ez#,0)
if collide<>0
staticx#=getStaticCollisionX()
staticy#=getStaticCollisionY()
staticz#=getStaticCollisionZ()
normx#=getCollisionNormalX()
normy#=getCollisionNormalY()
normz#=getCollisionNormalZ()
position object bulletHole,staticx#+normx#/10.0,staticy#+normy#/10.0,staticz#+normz#/10.0
point object bulletHole,staticx#+normx#,staticy#+normy#,staticz#+normz#
show object bulletHole
bulletHole = bulletHole + 1
if bulletHole>=2000+numOfHolesMax then bulletHole = 2000
endif
loop
If practice makes perfect and nobody is perfect, then why practice?