Index: myglut-x11.c
===================================================================
--- myglut-x11.c	(revision 269)
+++ myglut-x11.c	(revision 270)
@@ -70,8 +70,9 @@
 typedef struct PixelFormat
 {
   int num_samples ;
-  int bits_per_pixel ; ;
+  int bits_per_pixel ;
   int z_bits ;
+  int stencil_bits ;
 } PixelFormat;
 
 signed char XineramaAndFullscreenFocusHack=0;
@@ -79,12 +80,13 @@
 
 PixelFormat preferred_pixel_formats [] =
 {
-  /* NumSamples, RGB_bits, Z_bits */
+  /* NumSamples, RGB_bits, Z_bits, Stencil */
 
-  {  0, 24, 24 },  /* Progressively nastier image formats */
-  {  0, 16, 24 },
-  {  0, 16, 16 },
-  { -1, -1, -1 }   /* Magic end marker */
+  {  0, 24, 24,  1 },  /* Progressively nastier image formats */
+  {  0, 16, 24,  1 },
+  {  0, 16, 16,  1 },
+  {  0, 16, 16,  0 },
+  { -1, -1, -1, -1 }   /* Magic end marker */
 } ;
 
 void pwInit ( int x, int y, int w, int h, int multisample,
@@ -214,6 +216,12 @@
     case 32 : attribs [n++] = GLX_DEPTH_SIZE ; attribs [n++] = 32 ; break ;
   }
 
+  switch ( pf->stencil_bits )
+  {
+    case  1 : attribs [n++] = GLX_STENCIL_SIZE ; attribs [n++] = 1 ; break ; 
+    case  8 : attribs [n++] = GLX_STENCIL_SIZE ; attribs [n++] = 8 ; break ; 
+  }
+
   if ( pf->num_samples > 0 )
   {
     attribs [n++] = GLX_SAMPLE_BUFFERS_ARB ; attribs [n++] = 1 ;
@@ -342,10 +350,7 @@
   origin [ 1 ] = y ;
   size   [ 0 ] = w ;
   size   [ 1 ] = h ;
-  _glutWindowSize[0]=w;
-  _glutWindowSize[1]=h;
 
-
   for (i = 0 ; preferred_pixel_formats [ i ] . num_samples >= 0 ; i++ )
   {
     pf = preferred_pixel_formats [ i ] ;
@@ -472,8 +477,11 @@
   glClear ( GL_COLOR_BUFFER_BIT ) ;
   glutSwapBuffers();
 
-  raydium_log("Found %ix%i with %i bits color buffer and %i bits zbuffer",sizeHints.width,sizeHints.height,pf.bits_per_pixel,pf.z_bits);
+  raydium_log("Found %ix%i with %i bpp color and %i bits zbuffer (stencil is %i)",sizeHints.width,sizeHints.height,pf.bits_per_pixel,pf.z_bits,pf.stencil_bits);
 
+  _glutWindowSize[0]=sizeHints.width;
+  _glutWindowSize[1]=sizeHints.height;
+
   if(FullscreenFlag)
        XGrabKeyboard(currDisplay,currHandle,False,GrabModeAsync,GrabModeAsync,CurrentTime);
 //     XSetInputFocus(currDisplay,currHandle,RevertToNone,CurrentTime);
ton_create("btnBackToMain",handle,5,5,"<",btnBackToMainMenu);
+
+gui_start();
+}
+
 void btnModeNetTracks(raydium_gui_Object *w)
 {
 raydium_gui_window_delete_name("menu");
@@ -532,7 +587,13 @@
 exit(0);
 }
 
+void btnOptions(raydium_gui_Object *w)
+{
+raydium_gui_window_delete_name("menu");
+build_gui_Options();
+}
 
+
 void build_gui_Main(void)
 {
 int handle;
@@ -543,9 +604,10 @@
 raydium_gui_label_create("lblMode",handle,50,90,"- Select Game Mode - ",0,0,0);
 
 raydium_gui_widget_sizes(25,4,18);
-raydium_gui_button_create("btnModeStory",handle,25,65,"Story",btnModeStory);
-raydium_gui_button_create("btnModeNetTracks",handle,25,45,"Internet Tracks",btnModeNetTracks);
-raydium_gui_button_create("btnModeLAN",handle,25,25,"LAN Multiplayer",btnModeLan);
+raydium_gui_button_create("btnModeStory",handle,25,70,"Story",btnModeStory);
+raydium_gui_button_create("btnModeNetTracks",handle,25,55,"Internet Tracks",btnModeNetTracks);
+raydium_gui_button_create("btnModeLAN",handle,25,40,"LAN Multiplayer",btnModeLan);
+raydium_gui_button_create("btnOptions",handle,25,25,"Options",btnOptions);
 
 raydium_gui_widget_sizes(6,3,14);
 raydium_gui_button_create("btnBackToMain",handle,3,5,"Quit",btnQuit);
@@ -1359,9 +1421,9 @@
 if(raydium_key_last==1008)
     network_ask_restart();
 
-if(raydium_key_last==1097) { movie_spf=0; raydium_ode_time_change(0); }
-if(raydium_key_last==1122) { movie_spf=3; raydium_ode_time_change(10); }
-if(raydium_key_last==1101) { movie_spf=16; raydium_ode_time_change(100); }
+if(raydium_key_last==1097) { raydium_ode_time_change(0); }
+if(raydium_key_last==1122) { raydium_ode_time_change(10); }
+if(raydium_key_last==1101) { raydium_ode_time_change(100); }
 
 if(raydium_key_last==5)
 {
@@ -1383,7 +1445,7 @@
 {
 vue=3;
 raydium_projection_near=0.05 ;
-raydium_projection_fov=60;
+raydium_projection_fov=70;
 raydium_window_view_update();                                                                 
 }
 
@@ -1438,8 +1500,12 @@
     cam[2]=pos[2]+0.4;
     
     // standard smooth lookat camera
-    raydium_camera_smooth(cam[0],cam[1],cam[2],pos[1],-pos[2],pos[0],
-			  70,0,raydium_frame_time*3);
+    if(camera_lag)
+      raydium_camera_smooth(cam[0],cam[1],cam[2],pos[1],-pos[2],pos[0],
+			    70,0,raydium_frame_time*camera_lag_speed);
+    else
+      raydium_camera_look_at(cam[0],cam[1],cam[2],pos[1],-pos[2],pos[0]);
+
     }
 
 if(vue==4) raydium_ode_element_camera_inboard_name("corps",0,0.35,-0.2,2,0,-0.2);
@@ -1525,13 +1591,15 @@
 //char server[RAYDIUM_MAX_NAME_LEN];
 int i;
 FILE *fp;
+char lagActive[RAYDIUM_MAX_NAME_LEN];
+char lagSpeed[RAYDIUM_MAX_NAME_LEN];
 
 raydium_init_args(argc,argv);
 raydium_window_create(640,480,RAYDIUM_RENDERING_WINDOW,version);
 raydium_texture_filter_change(RAYDIUM_TEXTURE_FILTER_TRILINEAR);
 raydium_projection_near=0.01;
 raydium_projection_far=1000;	
-raydium_projection_fov=60;
+raydium_projection_fov=70;
 //raydium_light_disable();
 raydium_fog_disable();
 raydium_light_on(0);
@@ -1581,7 +1649,13 @@
 raydium_register_variable(&ptmp,RAYDIUM_REGISTER_FLOAT,"ptmp");
 raydium_register_variable(&vue,RAYDIUM_REGISTER_INT,"vue");
 
+// read options
+raydium_parser_db_get("ManiaDrive-CameraLagActive",lagActive,"y");
+raydium_parser_db_get("ManiaDrive-CameraSpeed",lagSpeed,"3.0");
+camera_lag=(lagActive[0]=='y'?1:0);
+sscanf(lagSpeed,"%f",&camera_lag_speed);
 
+
 if(raydium_init_cli_option_default("mni",mni_current,""))
     mni_load(mni_current);