added fast save
authorBradley Bell <btb@icculus.org>
Fri, 17 Dec 2004 13:17:46 +0000 (13:17 +0000)
committerBradley Bell <btb@icculus.org>
Fri, 17 Dec 2004 13:17:46 +0000 (13:17 +0000)
ChangeLog
main/game.c
main/gamecntl.c
main/gameseq.c
main/multi.c
main/state.c
main/state.h

index 4bc7451..d8d5111 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
 
        * main/state.c: open autosave file for writing, not reading
 
+       * main/game.c, main/gamecntl.c, main/gameseq.c, main/multi.c,
+       main/state.c, main/state.h: added fast save
+
 2004-12-07  Chris Taylor  <c.taylor@student.curtin.edu.au>
 
        * 2d/font.c: Initialise the dataptr member correctly.
index 57e4628..c8ba34c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: game.c,v 1.33 2004-11-27 02:05:57 btb Exp $ */
+/* $Id: game.c,v 1.34 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -23,7 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-char game_rcsid[] = "$Id: game.c,v 1.33 2004-11-27 02:05:57 btb Exp $";
+char game_rcsid[] = "$Id: game.c,v 1.34 2004-12-17 13:17:46 btb Exp $";
 #endif
 
 #ifdef WINDOWS
@@ -1953,59 +1953,58 @@ extern int newmenu_dotiny2( char * title, char * subtitle, int nitems, newmenu_i
 
 void show_help()
 {
-       int nitems;
+       int nitems = 0;
        newmenu_item m[25];
        #ifdef MACINTOSH
        char command_help[64], pixel_double_help[64], save_help[64], restore_help[64];
        #endif
 
-       m[ 0].type = NM_TYPE_TEXT; m[ 0].text = TXT_HELP_ESC;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_ESC;
        #ifndef MACINTOSH
-       m[ 1].type = NM_TYPE_TEXT; m[ 1].text = TXT_HELP_ALT_F2;
-       m[ 2].type = NM_TYPE_TEXT; m[ 2].text = TXT_HELP_ALT_F3;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_ALT_F2;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_ALT_F3;
        #else
        sprintf(save_help, "OPT-F2 (%c-s)\t Save Game", 133);
        sprintf(restore_help, "OPT-F3 (%c-o)\t Load Game", 133);
-       m[ 1].type = NM_TYPE_TEXT; m[1].text = save_help;
-       m[ 2].type = NM_TYPE_TEXT; m[2].text = restore_help;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = save_help;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = restore_help;
        #endif
-       m[ 3].type = NM_TYPE_TEXT; m[ 3].text = TXT_HELP_F2;
-       m[ 4].type = NM_TYPE_TEXT; m[ 4].text = TXT_HELP_F3;
-       m[ 5].type = NM_TYPE_TEXT; m[ 5].text = TXT_HELP_F4;
-       m[ 6].type = NM_TYPE_TEXT; m[ 6].text = TXT_HELP_F5;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F2;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F3;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F4;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F5;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "F6\t Fast Save";
        #ifndef MACINTOSH
-       m[ 7].type = NM_TYPE_TEXT; m[ 7].text = TXT_HELP_PAUSE;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_PAUSE;
        #else
-       m[ 7].type = NM_TYPE_TEXT; m[ 7].text = "Pause (F15)\t  Pause";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Pause (F15)\t  Pause";
        #endif
-       m[ 8].type = NM_TYPE_TEXT; m[ 8].text = TXT_HELP_MINUSPLUS;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_MINUSPLUS;
        #ifndef MACINTOSH
-       m[ 9].type = NM_TYPE_TEXT; m[ 9].text = TXT_HELP_PRTSCN;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_PRTSCN;
        #else
-       m[ 9].type = NM_TYPE_TEXT; m[ 9].text = "printscrn (F13)\t  save screen shot";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "printscrn (F13)\t  save screen shot";
        #endif
-       m[10].type = NM_TYPE_TEXT; m[10].text = TXT_HELP_1TO5;
-       m[11].type = NM_TYPE_TEXT; m[11].text = TXT_HELP_6TO10;
-       m[12].type = NM_TYPE_TEXT; m[12].text = "Shift-F1\t  Cycle left window";
-       m[13].type = NM_TYPE_TEXT; m[13].text = "Shift-F2\t  Cycle right window";
-       m[14].type = NM_TYPE_TEXT; m[14].text = "Shift-F4\t  GuideBot menu";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_1TO5;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_6TO10;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F1\t  Cycle left window";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F2\t  Cycle right window";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F4\t  GuideBot menu";
        #ifndef MACINTOSH
-       m[15].type = NM_TYPE_TEXT; m[15].text = "Alt-Shift-F4\t  Rename GuideBot";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Alt-Shift-F4\t  Rename GuideBot";
        #else
-       m[15].type = NM_TYPE_TEXT; m[15].text = "Opt-Shift-F4\t  Rename GuideBot";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Opt-Shift-F4\t  Rename GuideBot";
        #endif
-       m[16].type = NM_TYPE_TEXT; m[16].text = "Shift-F5\t  Drop primary";
-       m[17].type = NM_TYPE_TEXT; m[17].text = "Shift-F6\t  Drop secondary";
-       m[18].type = NM_TYPE_TEXT; m[18].text = "Shift-F7\t  Calibrate joystick";
-       m[19].type = NM_TYPE_TEXT; m[19].text = "Shift-number\t  GuideBot commands";
-       nitems = 20;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F5\t  Drop primary";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F6\t  Drop secondary";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-F7\t  Calibrate joystick";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "Shift-number\t  GuideBot commands";
        #ifdef MACINTOSH
        sprintf(pixel_double_help, "%c-D\t  Toggle Pixel Double Mode", 133);
-       m[20].type = NM_TYPE_TEXT; m[20].text = pixel_double_help;
-       m[21].type = NM_TYPE_TEXT; m[21].text = "";
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = pixel_double_help;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "";
        sprintf(command_help, "(Use %c-# for F#. i.e. %c-1 for F1)", 133, 133);
-       m[22].type = NM_TYPE_TEXT; m[22].text = command_help;
-       nitems = 23;
+       m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = command_help;
        #endif
 
        full_palette_save();
index 749c5e7..cbf50cc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: gamecntl.c,v 1.24 2004-05-21 02:45:34 btb Exp $ */
+/* $Id: gamecntl.c,v 1.25 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -1236,6 +1236,24 @@ int HandleSystemKey(int key)
                        #endif
                        break;
 
+               MAC(case KEY_COMMAND + KEY_6:)
+               case KEY_F6:
+                       if (!Player_is_dead && !(Game_mode & GM_MULTI))
+                       {
+                               int rsave, gsave, bsave;
+                               rsave = PaletteRedAdd;
+                               gsave = PaletteGreenAdd;
+                               bsave = PaletteBlueAdd;
+
+                               full_palette_save();
+                               PaletteRedAdd = rsave;
+                               PaletteGreenAdd = gsave;
+                               PaletteBlueAdd = bsave;
+                               state_save_all(0, 0, NULL, 1); // 0 means not between levels.
+                               palette_restore();
+                       }
+                       break;
+
                MAC(case KEY_COMMAND+KEY_7:)
                case KEY_F7:
                        #ifdef NETWORK
@@ -1324,10 +1342,10 @@ int HandleSystemKey(int key)
                                PaletteRedAdd = rsave;
                                PaletteGreenAdd = gsave;
                                PaletteBlueAdd = bsave;
-                               state_save_all( 0, 0, NULL );
+                               state_save_all(0, 0, NULL, 0); // 0 means not between levels.
                                palette_restore();
                        }
-                       break;  // 0 means not between levels.
+                       break;
 
                MAC(case KEY_COMMAND+KEY_O:)
                MAC(case KEY_COMMAND+KEY_ALTED+KEY_3:)
index 7fcb210..287d03b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: gameseq.c,v 1.41 2004-12-01 12:48:13 btb Exp $ */
+/* $Id: gameseq.c,v 1.42 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -24,7 +24,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-char gameseq_rcsid[] = "$Id: gameseq.c,v 1.41 2004-12-01 12:48:13 btb Exp $";
+char gameseq_rcsid[] = "$Id: gameseq.c,v 1.42 2004-12-17 13:17:46 btb Exp $";
 #endif
 
 #ifdef WINDOWS
@@ -924,10 +924,13 @@ void InitPlayerObject()
 extern void game_disable_cheats();
 extern void turn_cheats_off();
 extern void init_seismic_disturbances(void);
+extern int state_default_item;
 
 //starts a new game on the given level
 void StartNewGame(int start_level)
 {
+       state_default_item = -2;        // for first blind save, pick slot to save in
+
        Game_mode = GM_NORMAL;
        Function_mode = FMODE_GAME;
        
@@ -1309,7 +1312,7 @@ void ExitSecretLevel(void)
                return;
 
        if (!Control_center_destroyed) {
-               state_save_all(0, 2, SECRETC_FILENAME);
+               state_save_all(0, 2, SECRETC_FILENAME, 0);
        }
 
        if (PHYSFS_exists(SECRETB_FILENAME))
@@ -1370,7 +1373,7 @@ void EnterSecretLevel(void)
                DoEndLevelScoreGlitz(0);
 
        if (Newdemo_state != ND_STATE_PLAYBACK)
-               state_save_all(0, 1, NULL);     //      Not between levels (ie, save all), IS a secret level, NO filename override
+               state_save_all(0, 1, NULL, 0);  //      Not between levels (ie, save all), IS a secret level, NO filename override
 
        //      Find secret level number to go to, stuff in Next_level_num.
        for (i=0; i<-Last_secret_level; i++)
@@ -1813,7 +1816,7 @@ void DoPlayerDead()
                {
                        returning_to_level_message();
                        if (!Control_center_destroyed)
-                               state_save_all(0, 2, SECRETC_FILENAME);
+                               state_save_all(0, 2, SECRETC_FILENAME, 0);
                        state_restore_all(1, 2, SECRETB_FILENAME);
                        set_pos_from_return_segment();
                        Players[Player_num].lives--;                                            //      re-lose the life, Players[Player_num].lives got written over in restore.
index 89576c7..a7c68d8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: multi.c,v 1.17 2004-10-23 18:59:02 schaffner Exp $ */
+/* $Id: multi.c,v 1.18 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -3620,7 +3620,7 @@ void multi_initiate_save_game()
 
        //stop_time();
 
-       slot = state_get_save_file(filename, desc, 1 );
+       slot = state_get_save_file(filename, desc, 1, 0);
        if (!slot)      {
                //start_time();
                return;
index 9379192..56a60a7 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: state.c,v 1.18 2004-12-17 09:16:59 btb Exp $ */
+/* $Id: state.c,v 1.19 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -231,7 +231,7 @@ void rpad_string( char * string, int max_chars )
        *string = 0;            // NULL terminate
 }
 
-int state_get_save_file(char * fname, char * dsc, int multi )
+int state_get_save_file(char * fname, char * dsc, int multi, int blind_save)
 {
        PHYSFS_file *fp;
        int i, choice, version;
@@ -284,7 +284,10 @@ int state_get_save_file(char * fname, char * dsc, int multi )
        }
 
        sc_last_item = -1;
-       choice = newmenu_do1( NULL, "Save Game", NUM_SAVES, m, NULL, state_default_item );
+       if (blind_save && state_default_item >= 0)
+               choice = state_default_item;
+       else
+               choice = newmenu_do1(NULL, "Save Game", NUM_SAVES, m, NULL, state_default_item);
 
        for (i=0; i<NUM_SAVES; i++ )    {
                if ( sc_bmp[i] )
@@ -463,7 +466,7 @@ extern int Final_boss_is_dead;
 
 //     -----------------------------------------------------------------------------------
 //     blind_save means don't prompt user for any info.
-int state_save_all(int between_levels, int secret_save, char *filename_override)
+int state_save_all(int between_levels, int secret_save, char *filename_override, int blind_save)
 {
        int     rval, filenum = -1;
 
@@ -508,7 +511,9 @@ int state_save_all(int between_levels, int secret_save, char *filename_override)
                if (filename_override) {
                        strcpy( filename, filename_override);
                        sprintf(desc, "[autosave backup]");
-               } else if (!(filenum = state_get_save_file(filename,desc,0))) {
+               }
+               else if (!(filenum = state_get_save_file(filename, desc, 0, blind_save)))
+               {
                        start_time();
                        return 0;
                }
@@ -577,6 +582,8 @@ int state_save_all(int between_levels, int secret_save, char *filename_override)
        }
        
        rval = state_save_all_sub(filename, desc, between_levels);
+       if (rval && !secret_save)
+               HUD_init_message("Game saved.");
 
        return rval;
 }
@@ -1028,7 +1035,7 @@ int state_restore_all(int in_game, int secret_restore, char *filename_override)
                #else
                sprintf(temp_filename, "Players/%s.sg%x", Players[Player_num].callsign, NUM_SAVES);
                #endif
-               state_save_all(!in_game, secret_restore, temp_filename);
+               state_save_all(!in_game, secret_restore, temp_filename, 0);
        }
 
        if ( !secret_restore && in_game ) {
index e9dbed7..79565fe 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: state.h,v 1.3 2004-08-28 23:17:45 schaffner Exp $ */
+/* $Id: state.h,v 1.4 2004-12-17 13:17:46 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -22,7 +22,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #ifndef _STATE_H
 #define _STATE_H
 
-int state_save_all(int between_levels, int secret_save, char *filename_override);
+int state_save_all(int between_levels, int secret_save, char *filename_override, int blind_save);
 int state_restore_all(int in_game, int secret_restore, char *filename_override);
 
 int state_save_all_sub(char *filename, char *desc, int between_levels);
@@ -30,7 +30,7 @@ int state_restore_all_sub(char *filename, int multi, int secret_restore);
 
 extern uint state_game_id;
 
-int state_get_save_file(char *fname, char * dsc, int multi);
+int state_get_save_file(char *fname, char * dsc, int multi, int blind_save);
 int state_get_restore_file(char *fname, int multi);
 
 #endif /* _STATE_H */