Try this small sample to understand how SET SHADOW POSITION work.
I only found -1 to work for MODE...
` SET SHADOW LIGHT Light Number, X, Y, Z, Range
` SET GLOBAL SHADOWS OFF
` SET GLOBAL SHADOWS ON
` SET GLOBAL SHADOW SHADES Number Of Shades
` SET GLOBAL SHADOW COLOR Red, Green, Blue, Alpha
` SET SHADOW POSITION Mode, X, Y, Z
`
Sync On : sync Rate 60
` Create the ground.
Make Object Plain 1, 1024, 1024
Rotate Object 1, 270, 0, 0
Color Object 1, Rgb( 128, 128, 128 )
` Create the sphere to simulate the sun position view.
Make Object Sphere 2,32
` Create all objects that will have shadows.
For XLoop = 3 to 128
If XLoop = 3 Or XLoop = 4
Make Object Cube XLoop, Rnd( 16 ) + 8
Set Shadow Shading On XLoop, -1, 128, 1
If XLoop = 4
` Set Alpha Mapping On XLoop, 50
Ghost Object On XLoop
` Disable Object ZWrite XLoop
Set Object Transparency XLoop, 1
Endif
Else
A = RND( 1 ) + 1
Instance Object XLoop, 2 + A ` Instance objects 3 or 4
Endif
Position Object XLoop, Rnd( 1024 ) - 512, Object size Y( XLoop ) / 2.0, Rnd( 1024 ) - 512
Next XLoop
Repeat
` Calculate the position of the sun and of the shadow
XPos# = Cos( XAngle# ) * 800 : YPos# = Sin( XAngle# ) * 800
Percent# = ( 80 - ( 800 - YPos# ) / 10.0 ) / 0.8
If Percent# < 0.0 : Percent# = 0.0 : Endif
XAngle# = WrapValue( XAngle# + 0.1 )
` Set Shadow Light 1, XPos#, YPos#, 0, 4096
Set Shadow Position -1, XPos#, YPos#, 0.0
Set Global Shadow Color 16, 16, 32, Percent#
Set Cursor 0, 0 : Print Percent#
Position Object 2, Xpos#, YPos#, 100.0
rem Camera control here.
ax#=wrapvalue(ax#+mousemovey()*0.2)
ay#=wrapvalue(ay#+mousemovex()*0.2)
rotate camera ax#,ay#,0
move camera (upkey()-downkey())*5
Sync
Until EscapeKey() = 1
You can then understand that Shadow position will define the position of the shadow caster around the objects...