--- 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