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
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 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_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);
#if defined(DXX_BUILD_DESCENT_I)
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);
#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-F1\t Fast Save");
nm_set_item_text(& m[nitems++], "Alt-Shift-F2/F3\t Fast Save");
#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-F1 (\x85-s)\t Fast Save");
nm_set_item_text(& m[nitems++], "Alt-F2/F3 (\x85-SHIFT-s/o)\t SAVE/LOAD GAME");
nm_set_item_text(& m[nitems++], "Alt-Shift-F2/F3 (\x85-s/o)\t Quick Save/Load");
#endif
nm_set_item_text(& m[nitems++], "F3\t SWITCH COCKPIT MODES");
#if defined(DXX_BUILD_DESCENT_II)

View file

@ -860,15 +860,20 @@ static int HandleSystemKey(int key)
break;
KEY_MAC(case KEY_COMMAND+KEY_S:)
case KEY_ALTED+KEY_F1:
case KEY_ALTED+KEY_SHIFTED+KEY_F2:
if (!Player_is_dead)
state_save_all(0, NULL, 1);
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:)
case KEY_ALTED+KEY_F3:
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;
#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;
sw_save = Secondary_weapon;
state_restore_all(1, 1, SECRETC_FILENAME);
state_restore_all(1, 1, SECRETC_FILENAME, 0);
Primary_weapon = pw_save;
Secondary_weapon = sw_save;
reset_special_effects();
@ -1101,7 +1101,7 @@ void ExitSecretLevel(void)
do_screen_message(TXT_SECRET_RETURN);
pw_save = Primary_weapon;
sw_save = Secondary_weapon;
state_restore_all(1, 1, SECRETB_FILENAME);
state_restore_all(1, 1, SECRETB_FILENAME, 0);
Primary_weapon = pw_save;
Secondary_weapon = sw_save;
} else {
@ -1593,7 +1593,7 @@ void DoPlayerDead()
if (PHYSFSX_exists(SECRETB_FILENAME,0))
{
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();
Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore.
} else {
@ -1619,7 +1619,7 @@ void DoPlayerDead()
do_screen_message(TXT_SECRET_RETURN);
if (!Control_center_destroyed)
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();
Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore.
} else {

View file

@ -564,7 +564,7 @@ int do_option ( int select)
select_demo();
break;
case MENU_LOAD_GAME:
state_restore_all(0, 0, NULL);
state_restore_all(0, 0, NULL, 0);
break;
#ifdef 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)
return;
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);
}
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)
@ -1315,7 +1315,7 @@ void set_pos_from_return_segment(void)
#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];
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
} else
#endif
if (!(filenum = state_get_restore_file(filename))) {
if (!(filenum = state_get_restore_file(filename, blind_save))) {
start_time();
return 0;
}
@ -1381,7 +1381,7 @@ int state_restore_all(int in_game, int secret_restore, const char *filename_over
}
}
#endif
if ( !secret_restore && in_game ) {
if ( !secret_restore && in_game && !blind_save ) {
int choice;
choice = nm_messagebox( NULL, 2, "Yes", "No", "Restore Game?" );
if ( choice != 0 ) {