e43892a
--- lacewing-1.10/main.c.fullscreen	2006-02-28 23:01:57.000000000 +0100
e43892a
+++ lacewing-1.10/main.c	2006-02-28 23:03:21.000000000 +0100
ba40aaf
@@ -245,7 +245,7 @@
ba40aaf
 
ba40aaf
    set_color_depth(8);
ba40aaf
 
ba40aaf
-   if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0)
ba40aaf
+   if (set_gfx_mode(options.windowed, 640, 480, 0, 0) != 0)
ba40aaf
    {
ba40aaf
       set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
ba40aaf
       allegro_message("Unable to set 640x480 mode\n%s\n", allegro_error);
e43892a
--- lacewing-1.10/menu.c.fullscreen	2006-02-28 23:01:57.000000000 +0100
e43892a
+++ lacewing-1.10/menu.c	2006-02-28 23:05:23.000000000 +0100
ba40aaf
@@ -61,6 +61,7 @@
ba40aaf
 #define KP_WAIT_SHORT 5
ba40aaf
 
ba40aaf
 extern struct optionstruct options;
ba40aaf
+extern RGB palet [256];
ba40aaf
 
ba40aaf
 enum
ba40aaf
 {
e43892a
@@ -124,6 +125,7 @@
e43892a
 int menu_index;
e43892a
 int menu_index_max;
e43892a
 int menu_index_min;
e43892a
+int last_main_menu_index;
e43892a
 int keypress_wait;
e43892a
 int last_key;
e43892a
 int check_key(int scode);
e43892a
@@ -327,6 +329,7 @@
e43892a
  which_menu = MENU_MAIN;
e43892a
  menu_index_max = 4;
e43892a
  menu_index_min = 0;
e43892a
+ last_main_menu_index = menu_index = 0;
e43892a
  keypress_wait = KP_WAIT_LONG;
e43892a
 
e43892a
  do
e43892a
@@ -604,7 +610,7 @@
ba40aaf
   char ostr [50];
ba40aaf
   char istr [10];
ba40aaf
 
ba40aaf
-  for (i = 0; i < 32; i ++)
ba40aaf
+  for (i = 0; i < 33; i ++)
ba40aaf
   {
ba40aaf
 
ba40aaf
    col = COLOUR_GREEN6;
e43892a
@@ -663,114 +669,121 @@
ba40aaf
        strcat(ostr, itoa(options.ambience_volume, istr, 10));
ba40aaf
      break;
ba40aaf
     case 4:
ba40aaf
+     strcpy(ostr, "Full Screen - ");
ba40aaf
+     if (options.windowed == GFX_AUTODETECT_WINDOWED)
ba40aaf
+      strcat(ostr, "Off");
ba40aaf
+       else
ba40aaf
+        strcat(ostr, "On");
ba40aaf
+     break;
ba40aaf
+    case 5:
ba40aaf
      strcpy(ostr, "Video Sync - ");
ba40aaf
      if (options.run_vsync == 0)
ba40aaf
       strcat(ostr, "Off");
ba40aaf
        else
ba40aaf
         strcat(ostr, "On");
ba40aaf
      break;
ba40aaf
-    case 5:
ba40aaf
+    case 6:
ba40aaf
      strcpy(ostr, "Test Speakers");
ba40aaf
      break;
ba40aaf
-    case 6:
ba40aaf
+    case 7:
ba40aaf
      strcpy(ostr, "Test Keys");
ba40aaf
      break;
ba40aaf
-    case 7:
ba40aaf
+    case 8:
ba40aaf
      strcpy(ostr, "");
ba40aaf
      break;
ba40aaf
-    case 8:
ba40aaf
+    case 9:
ba40aaf
      col = COLOUR_GREY6;
ba40aaf
      strcpy(ostr, "Player 1 Keys");
ba40aaf
      break;
ba40aaf
-    case 9:
ba40aaf
+    case 10:
ba40aaf
      strcpy(ostr, "Forwards - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_THRUST]));
ba40aaf
      break;
ba40aaf
-    case 10:
ba40aaf
+    case 11:
ba40aaf
      strcpy(ostr, "Left - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_LEFT]));
ba40aaf
      break;
ba40aaf
-    case 11:
ba40aaf
+    case 12:
ba40aaf
      strcpy(ostr, "Right - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_RIGHT]));
ba40aaf
      break;
ba40aaf
-    case 12:
ba40aaf
+    case 13:
ba40aaf
      strcpy(ostr, "Brake - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_BRAKE]));
ba40aaf
      break;
ba40aaf
-    case 13:
ba40aaf
+    case 14:
ba40aaf
      strcpy(ostr, "Fire Cannon - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_FIRE1]));
ba40aaf
      break;
ba40aaf
-    case 14:
ba40aaf
+    case 15:
ba40aaf
      strcpy(ostr, "Fire Secondary - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_FIRE2]));
ba40aaf
      break;
ba40aaf
-    case 15:
ba40aaf
+    case 16:
ba40aaf
      strcpy(ostr, "Upgrade - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_UPGRADE]));
ba40aaf
      break;
ba40aaf
-    case 16:
ba40aaf
+    case 17:
ba40aaf
      strcpy(ostr, "Slide Left - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_LEFT1]));
ba40aaf
      break;
ba40aaf
-    case 17:
ba40aaf
+    case 18:
ba40aaf
      strcpy(ostr, "Slide Right - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_RIGHT1]));
ba40aaf
      break;
ba40aaf
-    case 18:
ba40aaf
+    case 19:
ba40aaf
      strcpy(ostr, "Toggle Linked Fire - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[0].keys [CMD_LINK]));
ba40aaf
      break;
ba40aaf
-    case 19:
ba40aaf
+    case 20:
ba40aaf
      col = COLOUR_GREY6;
ba40aaf
      strcpy(ostr, "Player 2 Keys");
ba40aaf
      break;
ba40aaf
-    case 20:
ba40aaf
+    case 21:
ba40aaf
      strcpy(ostr, "Forwards - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_THRUST]));
ba40aaf
      break;
ba40aaf
-    case 21:
ba40aaf
+    case 22:
ba40aaf
      strcpy(ostr, "Left - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LEFT]));
ba40aaf
      break;
ba40aaf
-    case 22:
ba40aaf
+    case 23:
ba40aaf
      strcpy(ostr, "Right - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_RIGHT]));
ba40aaf
      break;
ba40aaf
-    case 23:
ba40aaf
+    case 24:
ba40aaf
      strcpy(ostr, "Brake - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_BRAKE]));
ba40aaf
      break;
ba40aaf
-    case 24:
ba40aaf
+    case 25:
ba40aaf
      strcpy(ostr, "Fire Cannon - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_FIRE1]));
ba40aaf
      break;
ba40aaf
-    case 25:
ba40aaf
+    case 26:
ba40aaf
      strcpy(ostr, "Fire Secondary - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_FIRE2]));
ba40aaf
      break;
ba40aaf
-    case 26:
ba40aaf
+    case 27:
ba40aaf
      strcpy(ostr, "Upgrade - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_UPGRADE]));
ba40aaf
      break;
ba40aaf
-    case 27:
ba40aaf
+    case 28:
ba40aaf
      strcpy(ostr, "Slide Left - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LEFT1]));
ba40aaf
      break;
ba40aaf
-    case 28:
ba40aaf
+    case 29:
ba40aaf
      strcpy(ostr, "Slide Right - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_RIGHT1]));
ba40aaf
      break;
ba40aaf
-    case 29:
ba40aaf
+    case 30:
ba40aaf
      strcpy(ostr, "Toggle Linked Fire - ");
ba40aaf
      strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LINK]));
ba40aaf
      break;
ba40aaf
-    case 30:
ba40aaf
+    case 31:
ba40aaf
      strcpy(ostr, "");
ba40aaf
 //     strcat(ostr, scancode_to_keyname(player[1].keys [CMD_LINK])
ba40aaf
      break;
ba40aaf
-    case 31:
ba40aaf
+    case 32:
ba40aaf
      strcpy(ostr, "Exit");
ba40aaf
      break;
ba40aaf
 
e43892a
@@ -798,10 +811,10 @@
ba40aaf
  {
ba40aaf
 //  case 5:
ba40aaf
 //  case 6:
ba40aaf
-  case 7:
ba40aaf
   case 8:
ba40aaf
-  case 19:
ba40aaf
-  case 30:
ba40aaf
+  case 9:
ba40aaf
+  case 20:
ba40aaf
+  case 31:
ba40aaf
    return 1;
ba40aaf
  }
ba40aaf
 
e43892a
@@ -1076,6 +1089,7 @@
e43892a
 
e43892a
 void menu_trigger(void)
e43892a
 {
e43892a
+ static char must_change_video_mode = FALSE;
e43892a
 
e43892a
  keypress_wait = KP_WAIT_LONG;
e43892a
 
e43892a
@@ -1116,13 +1130,25 @@
ba40aaf
    }
ba40aaf
    break;
ba40aaf
   case MENU_OPTIONS:
ba40aaf
-   if (menu_index == 31)
ba40aaf
+   if (menu_index == 32)
ba40aaf
    {
ba40aaf
     play_sound(WAV_MENU2);
e43892a
+    if (must_change_video_mode)
e43892a
+    {
e43892a
+     if (set_gfx_mode(options.windowed, 640, 480, 0, 0) != 0)
e43892a
+     {
e43892a
+      set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
e43892a
+      allegro_message("Error switching fullscreen / windowed mode\n%s\n",
e43892a
+       allegro_error);
e43892a
+      exit(1);
e43892a
+     }
e43892a
+     set_palette(palet);
e43892a
+     must_change_video_mode = FALSE;
e43892a
+    }
ba40aaf
     change_menu(MENU_MAIN);
ba40aaf
     break;
ba40aaf
    }
ba40aaf
-   if (menu_index < 9)
ba40aaf
+   if (menu_index < 10)
ba40aaf
    {
ba40aaf
     switch(menu_index)
ba40aaf
     {
e43892a
@@ -1148,18 +1174,26 @@
ba40aaf
       play_sound(WAV_MENU1);
ba40aaf
       return;
ba40aaf
      case 4:
ba40aaf
+      if (options.windowed == GFX_AUTODETECT_WINDOWED)
ba40aaf
+       options.windowed = GFX_AUTODETECT_FULLSCREEN;
ba40aaf
+        else
ba40aaf
+         options.windowed = GFX_AUTODETECT_WINDOWED;
ba40aaf
+      play_sound(WAV_MENU1);
e43892a
+      must_change_video_mode = TRUE;
ba40aaf
+      return;
ba40aaf
+     case 5:
ba40aaf
       if (options.run_vsync == 1)
ba40aaf
        options.run_vsync = 0;
ba40aaf
         else
ba40aaf
          options.run_vsync = 1;
ba40aaf
       play_sound(WAV_MENU1);
ba40aaf
       return;
ba40aaf
-     case 5:
ba40aaf
+     case 6:
ba40aaf
       test_speakers();
ba40aaf
       ticked = 0;
ba40aaf
 // test speakers
ba40aaf
       return;
ba40aaf
-     case 6:
ba40aaf
+     case 7:
ba40aaf
       play_sound(WAV_MENU2);
ba40aaf
       jam_keys();
ba40aaf
       return;
e43892a
@@ -1268,7 +1302,7 @@
ba40aaf
   if (option_index() == -1)
ba40aaf
    return;
ba40aaf
 
ba40aaf
-  if (menu_index < 20)
ba40aaf
+  if (menu_index < 21)
ba40aaf
    player[0].keys [option_index()] = inputted;
ba40aaf
     else
ba40aaf
      player[1].keys [option_index()] = inputted;
e43892a
@@ -1282,35 +1316,35 @@
ba40aaf
 {
ba40aaf
   switch(menu_index)
ba40aaf
   {
ba40aaf
-   case 9:
ba40aaf
-   case 20:
ba40aaf
-    return CMD_THRUST;
ba40aaf
    case 10:
ba40aaf
    case 21:
ba40aaf
-    return CMD_LEFT;
ba40aaf
+    return CMD_THRUST;
ba40aaf
    case 11:
ba40aaf
    case 22:
ba40aaf
-    return CMD_RIGHT;
ba40aaf
+    return CMD_LEFT;
ba40aaf
    case 12:
ba40aaf
    case 23:
ba40aaf
-    return CMD_BRAKE;
ba40aaf
+    return CMD_RIGHT;
ba40aaf
    case 13:
ba40aaf
    case 24:
ba40aaf
-    return CMD_FIRE1;
ba40aaf
+    return CMD_BRAKE;
ba40aaf
    case 14:
ba40aaf
    case 25:
ba40aaf
-    return CMD_FIRE2;
ba40aaf
+    return CMD_FIRE1;
ba40aaf
    case 15:
ba40aaf
    case 26:
ba40aaf
-    return CMD_UPGRADE;
ba40aaf
+    return CMD_FIRE2;
ba40aaf
    case 16:
ba40aaf
    case 27:
ba40aaf
-    return CMD_LEFT1;
ba40aaf
+    return CMD_UPGRADE;
ba40aaf
    case 17:
ba40aaf
    case 28:
ba40aaf
-    return CMD_RIGHT1;
ba40aaf
+    return CMD_LEFT1;
ba40aaf
    case 18:
ba40aaf
    case 29:
ba40aaf
+    return CMD_RIGHT1;
ba40aaf
+   case 19:
ba40aaf
+   case 30:
ba40aaf
     return CMD_LINK;
ba40aaf
   }
ba40aaf
 
e43892a
@@ -1373,6 +1409,8 @@
e43892a
 
e43892a
 void change_menu(int to_which)
e43892a
 {
e43892a
+ if (which_menu == MENU_MAIN)
e43892a
+  last_main_menu_index = menu_index;
e43892a
 
e43892a
  which_menu = to_which;
e43892a
  keypress_wait = KP_WAIT_LONG;
e43892a
@@ -1383,7 +1421,7 @@
e43892a
   case MENU_MAIN:
e43892a
     game.type = GAME_SINGLE;
e43892a
     which_menu = MENU_MAIN;
e43892a
-    menu_index = 0;
e43892a
+    menu_index = last_main_menu_index;
e43892a
     menu_index_max = 4;
e43892a
     menu_index_min = 0;
e43892a
     save_config();
e43892a
@@ -1391,7 +1429,7 @@
ba40aaf
   case MENU_OPTIONS:
ba40aaf
     which_menu = MENU_OPTIONS;
ba40aaf
     menu_index = 1;
ba40aaf
-    menu_index_max = 31;
ba40aaf
+    menu_index_max = 32;
ba40aaf
     menu_index_min = 1;
ba40aaf
     break;
ba40aaf
   case MENU_DUEL:
e43892a
@@ -2827,6 +2865,7 @@
ba40aaf
  options.run_vsync = get_config_int("Options", "Run_vsync", 0);
ba40aaf
  options.sound_volume = get_config_int("Options", "Sound_volume", 100);
ba40aaf
  options.ambience_volume = get_config_int("Options", "Ambience_volume", 100);
ba40aaf
+ options.windowed = get_config_int("Options", "Windowed", GFX_AUTODETECT_FULLSCREEN);
ba40aaf
 
ba40aaf
  for (i = 0; i < NO_CMDS; i ++)
ba40aaf
  {
e43892a
@@ -2905,6 +2944,7 @@
ba40aaf
  set_config_int("Options", "Run_vsync", options.run_vsync);
ba40aaf
  set_config_int("Options", "Sound_volume", options.sound_volume);
ba40aaf
  set_config_int("Options", "Ambience_volume", options.ambience_volume);
ba40aaf
+ set_config_int("Options", "Windowed", options.windowed);
ba40aaf
 
ba40aaf
  for (i = 0; i < NO_CMDS; i ++)
ba40aaf
  {
e43892a
--- lacewing-1.10/config.h.fullscreen	2006-02-28 23:01:57.000000000 +0100
e43892a
+++ lacewing-1.10/config.h	2006-02-28 23:01:57.000000000 +0100
e43892a
@@ -792,6 +792,7 @@
e43892a
  int run_vsync; // on or off
e43892a
  int sound_volume; // sound fx volume; if 0 sound effects not played
e43892a
  int ambience_volume; // if 0 ambience not played
e43892a
+ int windowed; // GFX_AUTODETECT_FULLSCREEN or GFX_AUTODETECT_WINDOWED
e43892a
 };
e43892a
 
e43892a
 struct starstruct