int state_restore_all(int in_game) { char filename[128]; if ( Game_mode & GM_MULTI ) { #ifdef MULTI_SAVE if ( FindArg( "-multisave" ) ) multi_initiate_restore_game(); else #endif HUD_init_message( "Can't restore in a multiplayer game!" ); return 0; } if ( Newdemo_state == ND_STATE_RECORDING ) newdemo_stop_recording(); if ( Newdemo_state != ND_STATE_NORMAL ) return 0; stop_time(); if (!state_get_restore_file(filename,0)) { start_time(); return 0; } if ( in_game ) { int choice; choice = nm_messagebox( NULL, 2, "Yes", "No", "Restore Game?" ); if ( choice != 0 ) { start_time(); return 0; } } start_time(); return state_restore_all_sub(filename, 0); }
// ----------------------------------------------------------------------------------- int state_restore_all(int in_game, int secret_restore, char *filename_override) { char filename[128]; int filenum = -1; #ifdef NETWORK if ( Game_mode & GM_MULTI ) { #ifdef MULTI_SAVE multi_initiate_restore_game(); #endif return 0; } #endif if (in_game && (Current_level_num < 0) && (secret_restore == 0)) { HUD_init_message( "Can't restore in secret level!" ); return 0; } if ( Newdemo_state == ND_STATE_RECORDING ) newdemo_stop_recording(); if ( Newdemo_state != ND_STATE_NORMAL ) return 0; stop_time(); if (filename_override) { strcpy(filename, filename_override); filenum = NUM_SAVES+1; // So we don't trigger autosave } else if (!(filenum = state_get_restore_file(filename, 0))) { start_time(); return 0; } // MK, 1/1/96 // If not in multiplayer, do special secret level stuff. // If Nsecret.sgc (where N = filenum) exists, then copy it to secret.sgc. // If it doesn't exist, then delete secret.sgc if (!secret_restore && !(Game_mode & GM_MULTI)) { int rval; char temp_fname[32], fc; if (filenum != -1) { if (filenum >= 10) fc = (filenum-10) + 'a'; else fc = '0' + filenum; sprintf(temp_fname, PLAYER_DIR "%csecret.sgc", fc); mprintf((0, "Trying to copy %s to secret.sgc.\n", temp_fname)); if (PHYSFS_exists(temp_fname)) { mprintf((0, "Copying %s to secret.sgc\n", temp_fname)); rval = copy_file(temp_fname, PLAYER_DIR "secret.sgc"); Assert(rval == 0); // Oops, error copying temp_fname to secret.sgc! } else PHYSFS_delete(PLAYER_DIR "secret.sgc"); } } // Changed, 11/15/95, MK, don't to autosave if restoring from main menu. if ((filenum != (NUM_SAVES+1)) && in_game) { char temp_filename[128]; mprintf((0, "Doing autosave, filenum = %i, != %i!\n", filenum, NUM_SAVES+1)); sprintf( temp_filename, PLAYER_DIR "%s.sg%x", Players[Player_num].callsign, NUM_SAVES ); state_save_all(!in_game, secret_restore, temp_filename, 0); } if ( !secret_restore && in_game ) { int choice; choice = nm_messagebox( NULL, 2, "Yes", "No", "Restore Game?" ); if ( choice != 0 ) { start_time(); return 0; } } start_time(); return state_restore_all_sub(filename, 0, secret_restore); }