    rem Collision Functionality

    sync on : sync rate 60 : hide mouse : color backdrop rgb(100,100,255)
    set text transparent : set text font "Arial" : set text size 20

    rem load sounds
    load sound "impact.wav",1
    for s=2 to 10 : clone sound s,1 : next s

    rem load images
    load image "marble.bmp",1
    load image "moss.bmp",2
    load image "fur.bmp",3

    rem create floor
    make object box 1,400,10,400 : position object 1,0,-5,0
    texture object 1,2 : scale object texture 1,2,2

    rem create walls
    make object box 2,400,100,10 : position object 2,0,50,-200
    make object box 3,400,100,10 : position object 3,0,50, 200
    make object box 4,10,100,400 : position object 4,-200,50,0
    make object box 5,10,100,400 : position object 5, 200,50,0
    for t=2 to 5
     texture object t,2 : scale object texture t,4,1
    next t

    rem Set floor and walls to box collision for rectangle roamer
    make object collision box 1,-200,-5,-200,200,5,200,0
    make object collision box 2,-200,-50,-5,200,50,5,0
    make object collision box 3,-200,-50,-5,200,50,5,0
    make object collision box 4,-5,-50,-200,5,50,200,0
    make object collision box 5,-5,-50,-200,5,50,200,0

    rem create collision platform
    make object box 6,100,12,100
    position object 6,0,5,0
    texture object 6,1

    rem create bouncey ball and set bounce-vars
    make object sphere 11,25
    set object collision to spheres 11
    set object radius 11,15
    texture object 11,1
    y#=75 : iy#=2

    rem rectangle roamer for box collision
    make object box 41,40,20,40 : position object 41,95,31,50
    make object collision box 41,-20,-10,-20,20,10,20,0
    texture object 41,1
    set shadow shading on 41

    rem load a model in center of world
    load object "alien.x",51
    set object collision to polygons 51
    scale object 51,1500,1500,1500
    position object 51,0,40,0
    xrotate object 51,180
    texture object 51,3
    scale object texture 51,5,5
    set object speed 51,100
    loop object 51

    rem create a crate for automatic collision
    make object cube 61,15
    automatic object collision 61,8.0,0
    set object collision to spheres 61
    position object 61,-75,30,75
    texture object 61,1
    set shadow shading on 61

    rem setup camera and lights
    set point light 0,0,0,0
    make light 1 : set point light 1,0,0,0 : color light 1,255,-100,-100
    position camera 0,30,-100

    rem set automatic collision for camera
    automatic camera collision 0,15,0
    set global collision on

    rem loop
    do

    rem delete all collision data
    if spacekey()=1
     gosub _delete_collision
    endif

    rem move crate to test automatic object collision
    yrotate object 61,wrapvalue(object angle y(61)-0.2)
    move object down 61,0.5
    move object 61,0.5

    rem control camera
    control camera using arrowkeys 0,1,2

    rem control bouncey ball
    y#=y#+(iy#/20.0) : iy#=iy#-0.2
    position object 11,object position x(11),y#,object position z(11)
    if object collision(11,0)>0 then iy#=iy#*-1.0 : play sound 1+rnd(9)

    rem display types of collision
    if object in screen(11)=1 then center text object screen x(11),object screen y(11)-25,"Polygon Collision"
    if object in screen(41)=1 then center text object screen x(41),object screen y(41)-25,"Sliding Box Collision"
    if object in screen(61)=1 then center text object screen x(61),object screen y(61)-25,"Automated Collision"

    rem Add gravity to camera to test automatic collision
    position camera camera position x(),camera position y()-1.01,camera position z()

    rem rectangle roamer
    move object 41,0.3
    ballhit=object collision(41,0)
    if ballhit>0
     spin#=rnd(45)
     ax#=object position x(41)-get object collision x()
     ay#=object position y(41)-get object collision y()
     az#=object position z(41)-get object collision z()
     position object 41,ax#,ay#,az#
    endif
    if spin#>0
     spin#=spin#-1.0
     yrotate object 41,wrapvalue(object angle y(41)+1)
    endif

    rem move default light with ball
    position light 0,object position x(11),object position y(11),object position z(11)

    rem move coloured light with roamer
    position light 1,object position x(41),object position y(41)+25,object position z(41)

    rem update screen
    sync

    rem end loop
    loop

    _delete_collision:
     for o=1 to 5
      delete object collision box o
     next o
     set global collision off
    return