? "===========================================================\n",
  " Yet another flying title sequence...\n",
  " This one starts with a spining logo, after two revolutions\n",
  " a squadron of space craft fly out of it and zip past the\n",
  " camera at high speed on their way to an asteroids.\n",
  "===========================================================\n";

WHITE   : COLOR( RGB, [1.0, 1.0, 1.0] );
DKGRAY  : COLOR( RGB, [0.5, 0.5, 0.5] );
BLUE    : COLOR( RGB, [0.1, 0.0, 0.3] );
GREEN   : COLOR( RGB, [0.0, 0.2, 0.1] );
GOLD    : COLOR( RGB, [1.0, 0.8, 0.1] );

DULL    : SURFACE( SIMPLE, 1.0, 0.0, 0.0, 0 );

!                           ka   kd   ks    n    km   kr   ri   kb
SHINY    : surface( PHONG, 0.7, 0.8, 0.8, 20.0, 0.0, 0.0, 0.0, 0.0, 0 );
ROCK     : surface( PHONG, 0.3, 1.0, 0.2,  8.0, 0.0, 0.0, 0.0, 0.0, 0 );
STARSURF : surface( PHONG, 1.4, 0.0, 0.0,  0.0, 0.0, 0.0, 0.0, 0.0, 0 );


asteroid_tm : texturemap( "asteroid.ilbm" );
stars_tm    : texturemap( "starfield.ilbm" );

frameloop

  clearscene;

  starmap : texture( SPHERE, stars_tm, [0,0,0],
    [0,0,1], [1,0,0], 10,10, smooth3 repeat );
  sphere( [0,0,0], 10000000, starmap, starsurf );

  if (progress > 0.3) {
    pl_obj : object( [-100000,-7000,0], [40,20,PROGRESS*150] )
      planetoid : import( "ast5_b.obj", [0,0,0], [1,1,1],
	    [0,0,0], [7,7,7], 1 );
      ast_tx : texture( sphere, asteroid_tm, [0,0,0],
	       [0,0,1], [1,0,0], 6,3, SMOOTH5 );
      planetoid.color[0] = ast_tx;
    endobject
  }

  if (progress < 0.7) {
    LOGO_ROTS : tween( plane, progress
	$ 0.0, [0.0,0.0,0.0] $
        $ 0.3, [0.0,0.0,720.0] $
        $ 1.0, [0.0,0.0,720.0] $ );

    LOGO_POS : tween( plane, progress
        $ 0.0, [300000,0,80000] $
        $ 0.1, [200000,0,0] $
        $ 0.3, [35000,0,0] $
        $ 1.0, [35000,0,0] $ );

    logo_obj : object( LOGO_POS, LOGO_ROTS )
      logo : import( "RayDance.geo", [-100,100,0], [1,1,1],
	  [0,0,-90], [400,400,400], 0 );
      logo.color[0:15] = GOLD;
      logo.surface[0:7] = SHINY;
    endobject
  }

  FITER_POS : tween( plane, progress
	$ 0.0, [30000,0,0] $
        $ 0.3, [30000,0,0] $
        $ 1.0, [-30000,0,0] $ );

  if (progress >= 0.3) {
    fiters : object( FITER_POS, [0,0,0] )
      fiter1 : import( "fiter2.geo", [ 250,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter1.color[14] = DKGRAY;
      fiter1.color[13] = WHITE;
      fiter2 : import( "fiter2.geo", [ 200,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter2.color[14] = DKGRAY;
      fiter2.color[13] = WHITE; 
      fiter3 : import( "fiter2.geo", [ 150,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter3.color[14] = DKGRAY;
      fiter3.color[13] = WHITE;
      fiter4 : import( "fiter2.geo", [ 100,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter4.color[14] = DKGRAY;
      fiter4.color[13] = WHITE;
      fiter5 : import( "fiter2.geo", [  50,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter5.color[14] = DKGRAY;
      fiter5.color[13] = WHITE;
      fiter6 : import( "fiter2.geo", [   0,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter6.color[14] = DKGRAY;
      fiter6.color[13] = WHITE;
      fiter7 : import( "fiter2.geo", [ -50,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter7.color[14] = DKGRAY;
      fiter7.color[13] = WHITE;
      fiter8 : import( "fiter2.geo", [-100,0,0]*9, [10,10,10], [0,-10,0], [2,2,2], 0 );
      fiter8.color[14] = DKGRAY;
      fiter8.color[13] = WHITE;
    endobject
  }

!-------------------------------------------------------------------
!!
!! Lighting...
!!
!-------------------------------------------------------------------
  star( [20000, 800000, 450000], [1.0, 1.0, 1.0], 100000 );
  ambient( [0,0,10000], [0.6,0.6,0.6], [0,0,1], 0.0, 0.0 );

!-------------------------------------------------------------------
!!
!! Ground and background...
!!
!-------------------------------------------------------------------
  background( PLAIN, [0,0,0] );

!-------------------------------------------------------------------
!!
!! Camera stuff...
!!
!-------------------------------------------------------------------
  CAMERA'POS     = [0,-800,0];
  CAMERA'TARGET  = FITER_POS;

  RENDER;

nextframe

end
