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