rnd-20020403-1-src
[rocksndiamonds.git] / src / files.c
index 1bcbec75a4341748095f29dd9cba338414c88868..2a72397139931fb4d9c735428353d0925c65e1cb 100644 (file)
@@ -798,6 +798,8 @@ static int LoadTape_BODY(FILE *file, int chunk_size, struct TapeInfo *tape)
     }
     else if (tape->file_version < FILE_VERSION_2_0)
     {
+      /* convert pre-2.0 tapes to new tape format */
+
       if (tape->pos[i].delay > 1)
       {
        /* action part */
@@ -1168,17 +1170,25 @@ void SaveScore(int level_nr)
 #define SETUP_TOKEN_SOUND_LOOPS                2
 #define SETUP_TOKEN_SOUND_MUSIC                3
 #define SETUP_TOKEN_SOUND_SIMPLE       4
-#define SETUP_TOKEN_SCROLL_DELAY       5
-#define SETUP_TOKEN_SOFT_SCROLLING     6
-#define SETUP_TOKEN_FADING             7
-#define SETUP_TOKEN_AUTORECORD         8
-#define SETUP_TOKEN_QUICK_DOORS                9
-#define SETUP_TOKEN_TEAM_MODE          10
-#define SETUP_TOKEN_HANDICAP           11
-#define SETUP_TOKEN_TIME_LIMIT         12
-#define SETUP_TOKEN_FULLSCREEN         13
-
-#define NUM_GLOBAL_SETUP_TOKENS                14
+#define SETUP_TOKEN_TOONS              5
+#define SETUP_TOKEN_SCROLL_DELAY       6
+#define SETUP_TOKEN_SOFT_SCROLLING     7
+#define SETUP_TOKEN_FADING             8
+#define SETUP_TOKEN_AUTORECORD         9
+#define SETUP_TOKEN_QUICK_DOORS                10
+#define SETUP_TOKEN_TEAM_MODE          11
+#define SETUP_TOKEN_HANDICAP           12
+#define SETUP_TOKEN_TIME_LIMIT         13
+#define SETUP_TOKEN_FULLSCREEN         14
+#define SETUP_TOKEN_ASK_ON_ESCAPE      15
+
+#define NUM_GLOBAL_SETUP_TOKENS                16
+
+/* shortcut setup */
+#define SETUP_TOKEN_SAVE_GAME          0
+#define SETUP_TOKEN_LOAD_GAME          1
+
+#define NUM_SHORTCUT_SETUP_TOKENS      2
 
 /* player setup */
 #define SETUP_TOKEN_USE_JOYSTICK       0
@@ -1201,25 +1211,35 @@ void SaveScore(int level_nr)
 #define NUM_PLAYER_SETUP_TOKENS                16
 
 static struct SetupInfo si;
+static struct SetupShortcutInfo ssi;
 static struct SetupInputInfo sii;
 
 static struct TokenInfo global_setup_tokens[] =
 {
   /* global setup */
-  { TYPE_STRING,  &si.player_name,     "player_name"                   },
-  { TYPE_SWITCH,  &si.sound,           "sound"                         },
-  { TYPE_SWITCH,  &si.sound_loops,     "repeating_sound_loops"         },
-  { TYPE_SWITCH,  &si.sound_music,     "background_music"              },
-  { TYPE_SWITCH,  &si.sound_simple,    "simple_sound_effects"          },
-  { TYPE_SWITCH,  &si.scroll_delay,    "scroll_delay"                  },
-  { TYPE_SWITCH,  &si.soft_scrolling,  "soft_scrolling"                },
-  { TYPE_SWITCH,  &si.fading,          "screen_fading"                 },
-  { TYPE_SWITCH,  &si.autorecord,      "automatic_tape_recording"      },
-  { TYPE_SWITCH,  &si.quick_doors,     "quick_doors"                   },
-  { TYPE_SWITCH,  &si.team_mode,       "team_mode"                     },
-  { TYPE_SWITCH,  &si.handicap,                "handicap"                      },
-  { TYPE_SWITCH,  &si.time_limit,      "time_limit"                    },
-  { TYPE_SWITCH,  &si.fullscreen,      "fullscreen"                    }
+  { TYPE_STRING, &si.player_name,      "player_name"                   },
+  { TYPE_SWITCH, &si.sound,            "sound"                         },
+  { TYPE_SWITCH, &si.sound_loops,      "repeating_sound_loops"         },
+  { TYPE_SWITCH, &si.sound_music,      "background_music"              },
+  { TYPE_SWITCH, &si.sound_simple,     "simple_sound_effects"          },
+  { TYPE_SWITCH, &si.toons,            "toons"                         },
+  { TYPE_SWITCH, &si.scroll_delay,     "scroll_delay"                  },
+  { TYPE_SWITCH, &si.soft_scrolling,   "soft_scrolling"                },
+  { TYPE_SWITCH, &si.fading,           "screen_fading"                 },
+  { TYPE_SWITCH, &si.autorecord,       "automatic_tape_recording"      },
+  { TYPE_SWITCH, &si.quick_doors,      "quick_doors"                   },
+  { TYPE_SWITCH, &si.team_mode,                "team_mode"                     },
+  { TYPE_SWITCH, &si.handicap,         "handicap"                      },
+  { TYPE_SWITCH, &si.time_limit,       "time_limit"                    },
+  { TYPE_SWITCH, &si.ask_on_escape,    "ask_on_escape"                 },
+  { TYPE_SWITCH, &si.fullscreen,       "fullscreen"                    }
+};
+
+static struct TokenInfo shortcut_setup_tokens[] =
+{
+  /* shortcut setup */
+  { TYPE_KEY_X11, &ssi.save_game,              "shortcut.save_game"    },
+  { TYPE_KEY_X11, &ssi.load_game,              "shortcut.load_game"    }
 };
 
 static struct TokenInfo player_setup_tokens[] =
@@ -1235,12 +1255,12 @@ static struct TokenInfo player_setup_tokens[] =
   { TYPE_INTEGER, &sii.joy.ylower,     ".joy.ylower"                   },
   { TYPE_INTEGER, &sii.joy.snap,       ".joy.snap_field"               },
   { TYPE_INTEGER, &sii.joy.bomb,       ".joy.place_bomb"               },
-  { TYPE_KEY,     &sii.key.left,       ".key.move_left"                },
-  { TYPE_KEY,     &sii.key.right,      ".key.move_right"               },
-  { TYPE_KEY,     &sii.key.up,         ".key.move_up"                  },
-  { TYPE_KEY,     &sii.key.down,       ".key.move_down"                },
-  { TYPE_KEY,     &sii.key.snap,       ".key.snap_field"               },
-  { TYPE_KEY,     &sii.key.bomb,       ".key.place_bomb"               }
+  { TYPE_KEY_X11, &sii.key.left,       ".key.move_left"                },
+  { TYPE_KEY_X11, &sii.key.right,      ".key.move_right"               },
+  { TYPE_KEY_X11, &sii.key.up,         ".key.move_up"                  },
+  { TYPE_KEY_X11, &sii.key.down,       ".key.move_down"                },
+  { TYPE_KEY_X11, &sii.key.snap,       ".key.snap_field"               },
+  { TYPE_KEY_X11, &sii.key.bomb,       ".key.place_bomb"               }
 };
 
 static void setSetupInfoToDefaults(struct SetupInfo *si)
@@ -1265,6 +1285,10 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->handicap = TRUE;
   si->time_limit = TRUE;
   si->fullscreen = FALSE;
+  si->ask_on_escape = TRUE;
+
+  si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;
+  si->shortcut.load_game = DEFAULT_KEY_LOAD_GAME;
 
   for (i=0; i<MAX_PLAYERS; i++)
   {
@@ -1294,14 +1318,21 @@ static void decodeSetupFileList(struct SetupFileList *setup_file_list)
   if (!setup_file_list)
     return;
 
-  /* handle global setup values */
+  /* global setup */
   si = setup;
   for (i=0; i<NUM_GLOBAL_SETUP_TOKENS; i++)
     setSetupInfo(global_setup_tokens, i,
                 getTokenValue(setup_file_list, global_setup_tokens[i].text));
   setup = si;
 
-  /* handle player specific setup values */
+  /* shortcut setup */
+  ssi = setup.shortcut;
+  for (i=0; i<NUM_SHORTCUT_SETUP_TOKENS; i++)
+    setSetupInfo(shortcut_setup_tokens, i,
+                getTokenValue(setup_file_list,shortcut_setup_tokens[i].text));
+  setup.shortcut = ssi;
+
+  /* player setup */
   for (pnr=0; pnr<MAX_PLAYERS; pnr++)
   {
     char prefix[30];
@@ -1374,7 +1405,7 @@ void SaveSetup()
                                               getCookie("SETUP")));
   fprintf(file, "\n");
 
-  /* handle global setup values */
+  /* global setup */
   si = setup;
   for (i=0; i<NUM_GLOBAL_SETUP_TOKENS; i++)
   {
@@ -1385,7 +1416,13 @@ void SaveSetup()
       fprintf(file, "\n");
   }
 
-  /* handle player specific setup values */
+  /* shortcut setup */
+  ssi = setup.shortcut;
+  fprintf(file, "\n");
+  for (i=0; i<NUM_SHORTCUT_SETUP_TOKENS; i++)
+    fprintf(file, "%s\n", getSetupLine(shortcut_setup_tokens, "", i));
+
+  /* player setup */
   for (pnr=0; pnr<MAX_PLAYERS; pnr++)
   {
     char prefix[30];