    rem Light Functionality
    sync on

    rem Call subroutines
    gosub _createscene
    gosub _usingvectors
    gosub _lightshow
    gosub _deletescene

    rem End of program
    end

    _createscene:

    rem Create Scene
    load image "ground.jpg",1
    make matrix 1,1000,1000,100,100
    prepare matrix texture 1,1,1,1
    position matrix 1,-500,0,-500
    position camera 0,100,0

    rem Set Ambient light
    set ambient light 20
    color ambient light rgb(64,64,128)

    rem Set Default Light As Sun
    set directional light 0,0,-1,0
    color light 0,192,192,192

    rem Create Moving Light
    LightNumber=1 : z#=500
    make light LightNumber
    set point light LightNumber,0,100,0
    color light LightNumber,512,512,256
    set light range LightNumber,200

    rem Create Lighthouse light
    make light 2
    set spot light 2,45,90
    color light 2,512,100,100
    position light 2,0,50,400

    rem Follow Light
    make light 3
    set spot light 3,15,30
    color light 3,-512,-512,0

    rem Set up Fog
    fog on
    fog distance 500
    fog color rgb(255,128,64)
    set normalization off
    color backdrop rgb(255,128,64)

    rem Setup camera
    rotate camera 20,0,0

    return

    _deletescene:

    if light exist(1)=1 then delete light 1
    if light exist(2)=1 then delete light 2
    if light exist(3)=1 then delete light 3
    set normalization on
    fog off

    return

    _usingvectors:

    VectorNumber=1 : LightNumber=2
    result==make vector3(VectorNumber)
    set vector3 VectorNumber, 0, 50, 200
    position light LightNumber, VectorNumber
    set vector3 VectorNumber, 0, 45, 0
    rotate light LightNumber, VectorNumber
    set vector3 to light position VectorNumber, LightNumber
    set vector3 to light rotation VectorNumber, LightNumber
    a#=y vector3(VectorNumber)
    result=delete vector3(VectorNumber)

    return

    _lightshow:

    while inkey$()<>"x"

    set cursor 0,0 : print "LIGHT COMMANDS (X to Exit)"
    print "USE ARROW KEYS TO MOVE LIGHT"
    print "A+Z TO SWITCH SUN OFF/ON"
    print
    print "LIGHT DATA"
    print
    if rnd(5)=1 then LightNumber=rnd(3)
    print "number:";LightNumber
    print "exist:";light exist(LightNumber)
    print "type:";light type(LightNumber)
    print "range:";light range(LightNumber)
    print "visible:";light visible(LightNumber)
    print "position x:";light position x(LightNumber)
    print "position y:";light position y(LightNumber)
    print "position z:";light position z(LightNumber)
    print "direction x:";light direction x(LightNumber)
    print "direction y:";light direction y(LightNumber)
    print "direction z:";light direction z(LightNumber)

    rem Mouselook Camera
    mx=mousemovex() : my=mousemovey()
    rotate camera camera angle x()+my,camera angle y()+mx,0

    rem Control Sun
    if inkey$()="a" then hide light 0
    if inkey$()="z" then show light 0

    rem Control Moving Light
    if leftkey()=1 then x#=x#-10
    if rightkey()=1 then x#=x#+10
    if upkey()=1 then z#=z#+10
    if downkey()=1 then z#=z#-10

    LightNumber=1 : ObjectNumber=1
    set light to object orientation LightNumber,ObjectNumber
    set light to object position LightNumber,ObjectNumber
    position light 1,x#,100,z#

    rem Control Lighthouse light
    a#=a#+1 : if a#>359 then a#=a#-360
    rotate light 2,0,a#,0

    rem Control Beam Of Light
    position light 3,x#,150,z#
    point light 3,0,0,0

    rem Update screen
    sync

    endwhile

    return