Challenge: 
Winner?: 
No
Code Snippet: 
rem prepare environment

sync on : sync rate 0 : color backdrop 0
randomize timer() : draw to front : fog on
fog distance 140 : fog color rgb(0, 0, 0)

rem variables

camera_angle_x# = 25
camera_angle_y# = 135
camera_height# = 25
camera_mode = 0
camera_zoom# = -40
cam_x# = 0 : cam_z# = 0 : cam_y# = 25
wave# = 0 : time# = 0
sun_dist = 130 : day = 0
clouds = 14 : first_cloud = 0

rem make sun/moon

make object sphere 1, 10
color object 1, rgb(255, 255, 0)
set object light 1, 0
set spot light 0, 10, 300
color light 0, rgb(255, 255, 0)

rem make island

make matrix 1, 100, 100, 18, 18
texture_matrix(1, 128, 64, 64)
position matrix 1, -50, 4, -50
rand_island()
add_bushes(3, 15)
add_trees(5)

rem setup water

make matrix 2, 240, 240, 100, 100
texture_matrix(2, 0, 128, 255)
position matrix 2, -120, 4.5, -120

rem other effects

first_cloud = free_number()
add_clouds(4, clouds)

rem setup camera

position camera 0, camera_height#, 0

do

 if camera_mode = 0 then text 10, 10, "Middle Camera"
 if camera_mode = 1 then text 10, 10, "Surround Camera"

 rem handle controls

 if upkey() = 1 then camera_angle_x# = wrapvalue(camera_angle_x# + 0.6)
 if downkey() = 1 then camera_angle_x# = wrapvalue(camera_angle_x# - 0.6)
 if leftkey() = 1 then camera_angle_y# = wrapvalue(camera_angle_y# + 0.6)
 if rightkey() = 1 then camera_angle_y# = wrapvalue(camera_angle_y# - 0.6)
 if camera_mode = 0
  if keystate(78) = 1 then camera_height# = camera_height# + 0.2
  if keystate(74) = 1 then camera_height# = camera_height# - 0.2
 endif

 if camera_mode = 1
  if keystate(78) = 1 then camera_zoom# = camera_zoom# + 0.5
  if keystate(74) = 1 then camera_zoom# = camera_zoom# - 0.5
 endif

 if keystate(50) = 1 then camera_mode = 0
 if keystate(31) = 1 then camera_mode = 1

 rem update time (sun/moon)

 if time# < 48 then time# = time# + 0.02
 if time# >= 48
  time# = 0
  day = wrapvalue(day + 10)
 endif

 if time# < 25
  color object 1, rgb(255, 255, 0)
  color light 0, rgb(180, 180, 180)
  red = 255 : green = 255 : blue = 255
  if time# < 13
   r# = time# * (red/12)
   g# = time# * (red/12)
   b# = time# * (red/12)
   fog color rgb(r#, g#, b#)
   color backdrop rgb(r#, g#, b#)
  endif

  if time# >= 12
   r# = 255 - ((time# - 12) * (red/12))
   g# = 255 - ((time# - 12) * (green/12))
   b# = 255 - ((time# - 12) * (blue/12))
   fog color rgb(r#, g#, b#)
   color backdrop rgb(r#, g#, b#)
  endif

  position object 1, 0, 2, 0
  rotate object 1, (8.5 * time#) + 160, day, 0
  move object 1, sun_dist

  position light 0, object position x(1), object position y(1), object position z(1)
  point light 0, 0, 0, 0

 endif

 if time# >= 24
  color object 1, rgb(100, 100, 250)
  color light 0, rgb(100, 100, 250)
  fog color rgb(0, 0, 0)
  color backdrop rgb(0, 0, 0)
  position object 1, 0, 2, 0
  rotate object 1, (8.5 * (time# - 24)) + 160, day, 0
  move object 1, sun_dist
  position light 0, object position x(1), object position y(1), object position z(1)
  point light 0, 0, 0, 0
 endif

 rem move clouds

 for cloud = 1 to clouds
  obj = ((cloud - 1) + first_cloud)
  z# = object position z(obj)
  x# = object position x(obj)
  y# = object position y(obj)
  if x# < -140 then x# = 140
  x# = x# - 0.1
  position object obj, x#, y#, z#
 next cloud

 rem move water

 wave# = wrapvalue(wave# + 1)
 for x = 0 to 100
  for z = 0 to 100
   f = 1.8 : fvx = 20 : fvz = 20
   h# = f * (cos((fvx * x) + wave#) + cos((fvz * z) + wave#))
   set matrix height 2, x, z, h#
  next y
 next x

 update matrix 2



 rem move camera

 if camera_mode = 0
  if camera_height# < 12 then camera_height# = 12
  if camera_height# > 42 then camera_height# = 42
  position camera cam_x#, camera_height#, cam_z#
  rotate camera camera_angle_x#, camera_angle_y#, 0
 endif

 if camera_mode = 1
  if camera_zoom# > 0 then camera_zoom# = 0
  if camera_zoom# < -120 then camera_zoom# = -120
  if camera_angle_x# < 1 then camera_angle_x# = 1
  if camera_angle_x# > 90 then camera_angle_x# = 90
  position camera cam_x#, cam_y#, cam_z#
  rotate camera camera_angle_x#, camera_angle_y#, 0
  move camera camera_zoom#
 endif

 rem refresh screen

 sync

loop


`////////////////////first level functions//////////////////////////


function rand_island()
 for x = 0 to 18
  for z = 0 to 18
   value = 4 + rnd(2)
   if x = 0 or x = 18 or z = 0 or z = 18 then value = 0
   set matrix height 1, x, z, value
  next z
 next x
 update matrix 1
endfunction

function add_bushes(number, n_bushes)
 randomize timer()
 for bush = 1 to n_bushes
  a = free_number() : b = free_number() + 1
  c = free_number() + 2 : d = free_number() + 3
  make object plain a, 2, 6
  make object plain b, 2, 6
  make object plain c, 2, 6
  make object plain d, 2, 4
  r = 100 : g = 255 : bl = 100
  color object a, rgb(r, g, bl)
  color object b, rgb(r, g, bl)
  color object c, rgb(r, g, bl)
  color object d, rgb(r, g, bl)
  x = (5 + rnd(90)) - 50 : z = (5 + rnd(90)) - 50
  xa# = 30 : dist# = 1.5 : h = 11
  position object a, x, h, z
  xrotate object a, xa#
  yrotate object a, 120
  move object a, dist#
  position object b, x, h, z
  xrotate object b, xa#
  yrotate object b, 240
  move object b, dist#
  position object c, x, h, z
  xrotate object c, xa#
  move object c, dist#
  position object d, x, h, z
  yrotate object d, rnd(360)
  xrotate object d, rnd(8)
  move object d, -0.2
 next bush

endfunction

function add_trees(n_trees)
 randomize timer()
 for tree = 1 to n_trees
  a = free_number() : b = free_number() + 1
  c = free_number() + 2 : d = free_number() + 3
  e = free_number() + 4 : f = free_number() + 5
  make object box a, 3, 8, 3
  make object plain b, 9, 2
  make object plain c, 9, 2
  make object plain d, 9, 2
  make object plain e, 7, 2
  make object plain f, 7, 2
  r = 100 : g = 255 : bl = 100
  color object a, rgb(128, 64, 64)
  color object b, rgb(r, g, bl)
  color object c, rgb(r, g, bl)
  color object d, rgb(r, g, bl)
  color object e, rgb(r, g, bl)
  color object f, rgb(r, g, bl)
  x = (5 + rnd(90)) - 50 : z = (5 + rnd(90)) - 50
  position object a, x, 12, z
  position object b, x, 16.1, z
  rotate object b, 90, 120, 0
  position object c, x, 16.1, z
  rotate object c, 90, 240, 0
  position object d, x, 16.1, z
  xrotate object d, 90
  position object e, x, 15, z
  rotate object e, 90, rnd(180), 0
  position object f, x, 15, z
  rotate object f, 90, 180 + rnd(180), 0
 next tree
endfunction

function add_clouds(number, n_clouds)
 create bitmap 1, 20, 20
 cls rgb(0, 0, 0)
 for d = 1 to 50
  v = rnd(15)
  dot rnd(20), rnd(20), rgb(240 + v, 240 + v, 240 + v)
 next d
 get image number, 0, 0, 20, 20
 delete bitmap 1
 set current bitmap 0
 for cloud = 1 to n_clouds
  a = free_number()
  make object plain a, 16, 16
  texture object a, number
  ghost object on a, 0
  x = rnd(240) - 120 : z = rnd(240) - 120
  position object a, x, 32 + (rnd(8) - 4), z
  xrotate object a, 90
 next cloud
endfunction

function free_number()
 retval = 1
 while object exist(retval) = 1
  retval = retval + 1
 endwhile
endfunction retval

function texture_matrix(number, r, g, b)
 if r = 255 then r = r - 4
 if g = 255 then g = g - 4
 if b = 255 then b = b - 4
 create bitmap 1, 60, 60
 for x = 0 to 60
  for y = 0 to 60
   v = rnd(8)
   dot x, y, rgb((r - 4) + v, (g - 4) + v, (b - 4) + v)
  next y
 next x
 get image number, 1, 1, 20, 20
 prepare matrix texture number, number, 3, 3
 fill matrix number, 0, 5
 delete bitmap 1
 set current bitmap 0
endfunction