Added quick load ability for savestates

This commit is contained in:
zico 2013-12-10 18:13:32 +01:00
parent 5a36ffdb17
commit e195290fe4
7 changed files with 24 additions and 19 deletions

View file

@ -40,7 +40,7 @@ extern int state_save_old_game(int slotnum, const char * sg_name, player_rw * sg
#ifdef __cplusplus #ifdef __cplusplus
int state_save_all(int secret_save, const char *filename_override, int blind_save); int state_save_all(int secret_save, const char *filename_override, int blind_save);
int state_restore_all(int in_game, int secret_restore, const char *filename_override); int state_restore_all(int in_game, int secret_restore, const char *filename_override, int blind_save);
extern unsigned state_game_id; extern unsigned state_game_id;
extern int state_quick_item; extern int state_quick_item;
@ -49,7 +49,7 @@ int state_save_all_sub(const char *filename, const char *desc);
int state_restore_all_sub(const char *filename, int secret_restore); int state_restore_all_sub(const char *filename, int secret_restore);
int state_get_save_file(char *fname, char * dsc, int blind_save); int state_get_save_file(char *fname, char * dsc, int blind_save);
int state_get_restore_file(char *fname); int state_get_restore_file(char *fname, int blind_save);
int state_get_game_id(const char *filename); int state_get_game_id(const char *filename);
#if defined(DXX_BUILD_DESCENT_I) #if defined(DXX_BUILD_DESCENT_I)
static inline void set_pos_from_return_segment(void) static inline void set_pos_from_return_segment(void)

View file

@ -813,10 +813,10 @@ void show_help()
nm_set_item_text(& m[nitems++], TXT_HELP_F2); nm_set_item_text(& m[nitems++], TXT_HELP_F2);
#if !(defined(__APPLE__) || defined(macintosh)) #if !(defined(__APPLE__) || defined(macintosh))
nm_set_item_text(& m[nitems++], "Alt-F2/F3\t SAVE/LOAD GAME"); nm_set_item_text(& m[nitems++], "Alt-F2/F3\t SAVE/LOAD GAME");
nm_set_item_text(& m[nitems++], "Alt-F1\t Fast Save"); nm_set_item_text(& m[nitems++], "Alt-Shift-F2/F3\t Fast Save");
#else #else
nm_set_item_text(& m[nitems++], "Alt-F2/F3 (\x85-SHIFT-s/\x85-o)\t SAVE/LOAD GAME"); nm_set_item_text(& m[nitems++], "Alt-F2/F3 (\x85-SHIFT-s/o)\t SAVE/LOAD GAME");
nm_set_item_text(& m[nitems++], "Alt-F1 (\x85-s)\t Fast Save"); nm_set_item_text(& m[nitems++], "Alt-Shift-F2/F3 (\x85-s/o)\t Quick Save/Load");
#endif #endif
nm_set_item_text(& m[nitems++], "F3\t SWITCH COCKPIT MODES"); nm_set_item_text(& m[nitems++], "F3\t SWITCH COCKPIT MODES");
#if defined(DXX_BUILD_DESCENT_II) #if defined(DXX_BUILD_DESCENT_II)

View file

@ -860,15 +860,20 @@ static int HandleSystemKey(int key)
break; break;
KEY_MAC(case KEY_COMMAND+KEY_S:) KEY_MAC(case KEY_COMMAND+KEY_S:)
case KEY_ALTED+KEY_F1: case KEY_ALTED+KEY_SHIFTED+KEY_F2:
if (!Player_is_dead) if (!Player_is_dead)
state_save_all(0, NULL, 1); state_save_all(0, NULL, 1);
break; break;
KEY_MAC(case KEY_COMMAND+KEY_O:) KEY_MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_O:)
KEY_MAC(case KEY_COMMAND+KEY_ALTED+KEY_3:) KEY_MAC(case KEY_COMMAND+KEY_ALTED+KEY_3:)
case KEY_ALTED+KEY_F3: case KEY_ALTED+KEY_F3:
if (!((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP))) if (!((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP)))
state_restore_all(1, 0, NULL); state_restore_all(1, 0, NULL, 0);
break;
KEY_MAC(case KEY_COMMAND+KEY_O:)
case KEY_ALTED+KEY_SHIFTED+KEY_F3:
if (!((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP)))
state_restore_all(1, 0, NULL, 1);
break; break;
#if defined(DXX_BUILD_DESCENT_II) #if defined(DXX_BUILD_DESCENT_II)

View file

@ -1054,7 +1054,7 @@ static void StartNewLevelSecret(int level_num, int page_in_textures)
pw_save = Primary_weapon; pw_save = Primary_weapon;
sw_save = Secondary_weapon; sw_save = Secondary_weapon;
state_restore_all(1, 1, SECRETC_FILENAME); state_restore_all(1, 1, SECRETC_FILENAME, 0);
Primary_weapon = pw_save; Primary_weapon = pw_save;
Secondary_weapon = sw_save; Secondary_weapon = sw_save;
reset_special_effects(); reset_special_effects();
@ -1101,7 +1101,7 @@ void ExitSecretLevel(void)
do_screen_message(TXT_SECRET_RETURN); do_screen_message(TXT_SECRET_RETURN);
pw_save = Primary_weapon; pw_save = Primary_weapon;
sw_save = Secondary_weapon; sw_save = Secondary_weapon;
state_restore_all(1, 1, SECRETB_FILENAME); state_restore_all(1, 1, SECRETB_FILENAME, 0);
Primary_weapon = pw_save; Primary_weapon = pw_save;
Secondary_weapon = sw_save; Secondary_weapon = sw_save;
} else { } else {
@ -1593,7 +1593,7 @@ void DoPlayerDead()
if (PHYSFSX_exists(SECRETB_FILENAME,0)) if (PHYSFSX_exists(SECRETB_FILENAME,0))
{ {
do_screen_message(TXT_SECRET_RETURN); do_screen_message(TXT_SECRET_RETURN);
state_restore_all(1, 2, SECRETB_FILENAME); // 2 means you died state_restore_all(1, 2, SECRETB_FILENAME, 0); // 2 means you died
set_pos_from_return_segment(); set_pos_from_return_segment();
Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore. Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore.
} else { } else {
@ -1619,7 +1619,7 @@ void DoPlayerDead()
do_screen_message(TXT_SECRET_RETURN); do_screen_message(TXT_SECRET_RETURN);
if (!Control_center_destroyed) if (!Control_center_destroyed)
state_save_all(2, SECRETC_FILENAME, 0); state_save_all(2, SECRETC_FILENAME, 0);
state_restore_all(1, 2, SECRETB_FILENAME); state_restore_all(1, 2, SECRETB_FILENAME, 0);
set_pos_from_return_segment(); set_pos_from_return_segment();
Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore. Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore.
} else { } else {

View file

@ -564,7 +564,7 @@ int do_option ( int select)
select_demo(); select_demo();
break; break;
case MENU_LOAD_GAME: case MENU_LOAD_GAME:
state_restore_all(0, 0, NULL); state_restore_all(0, 0, NULL, 0);
break; break;
#ifdef EDITOR #ifdef EDITOR
case MENU_EDITOR: case MENU_EDITOR:

View file

@ -4911,7 +4911,7 @@ void multi_initiate_restore_game()
} }
} }
} }
slot = state_get_restore_file(filename); slot = state_get_restore_file(filename, 0);
if (!slot) if (!slot)
return; return;
state_game_id = state_get_game_id(filename); state_game_id = state_get_game_id(filename);

View file

@ -720,9 +720,9 @@ int state_get_save_file(char * fname, char * dsc, int blind_save)
return state_get_savegame_filename(fname, dsc, "Save Game", blind_save); return state_get_savegame_filename(fname, dsc, "Save Game", blind_save);
} }
int state_get_restore_file(char * fname) int state_get_restore_file(char * fname, int blind_save)
{ {
return state_get_savegame_filename(fname, NULL, "Select Game to Restore", 0); return state_get_savegame_filename(fname, NULL, "Select Game to Restore", blind_save);
} }
#if defined(DXX_BUILD_DESCENT_I) #if defined(DXX_BUILD_DESCENT_I)
@ -1315,7 +1315,7 @@ void set_pos_from_return_segment(void)
#endif #endif
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
int state_restore_all(int in_game, int secret_restore, const char *filename_override) int state_restore_all(int in_game, int secret_restore, const char *filename_override, int blind_save)
{ {
char filename[PATH_MAX]; char filename[PATH_MAX];
int filenum = -1; int filenum = -1;
@ -1350,7 +1350,7 @@ int state_restore_all(int in_game, int secret_restore, const char *filename_over
filenum = NUM_SAVES+1; // place outside of save slots filenum = NUM_SAVES+1; // place outside of save slots
} else } else
#endif #endif
if (!(filenum = state_get_restore_file(filename))) { if (!(filenum = state_get_restore_file(filename, blind_save))) {
start_time(); start_time();
return 0; return 0;
} }
@ -1381,7 +1381,7 @@ int state_restore_all(int in_game, int secret_restore, const char *filename_over
} }
} }
#endif #endif
if ( !secret_restore && in_game ) { if ( !secret_restore && in_game && !blind_save ) {
int choice; int choice;
choice = nm_messagebox( NULL, 2, "Yes", "No", "Restore Game?" ); choice = nm_messagebox( NULL, 2, "Yes", "No", "Restore Game?" );
if ( choice != 0 ) { if ( choice != 0 ) {