rnd-20060430-1-src
[rocksndiamonds.git] / src / files.c
index a99ca6baae9bae3e9a5a8f8fc48ae18d80e2fc79..e6baec2532cc26d4636cb68c21a7e129e3f62798 100644 (file)
@@ -290,6 +290,10 @@ static struct
     EL_PLAYER_4,                       CONF_VALUE_BOOLEAN_4,
     &li.use_explosion_element[3],      FALSE
   },
+  {
+    EL_PLAYER_1,                       CONF_VALUE_BOOLEAN_5,
+    &li.continuous_snapping,           TRUE
+  },
   {
     EL_PLAYER_1,                       CONF_VALUE_INTEGER_1,
     &li.initial_player_stepsize,       STEPSIZE_NORMAL
@@ -572,7 +576,9 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
   level->can_pass_to_walkable = FALSE;
   level->grow_into_diggable = TRUE;
 
+#if 0
   level->block_snap_field = TRUE;
+#endif
 
   level->block_last_field = FALSE;     /* EM does not block by default */
   level->sp_block_last_field = TRUE;   /* SP blocks the last field */
@@ -768,7 +774,7 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
     return;
 
   /* try to determine better author name than 'anonymous' */
-  if (strcmp(leveldir_current->author, ANONYMOUS_NAME) != 0)
+  if (!strEqual(leveldir_current->author, ANONYMOUS_NAME))
   {
     strncpy(level->author, leveldir_current->author, MAX_LEVEL_AUTHOR_LEN);
     level->author[MAX_LEVEL_AUTHOR_LEN] = '\0';
@@ -976,7 +982,7 @@ static int getFiletypeFromID(char *filetype_id)
   {
     char *id_lower = getStringToLower(filetype_id_list[i].id);
     
-    if (strcmp(filetype_id_lower, id_lower) == 0)
+    if (strEqual(filetype_id_lower, id_lower))
       filetype = filetype_id_list[i].filetype;
 
     free(id_lower);
@@ -1860,12 +1866,12 @@ static void LoadLevelFromFileInfo_RND(struct LevelInfo *level,
   }
 
   getFileChunkBE(file, chunk_name, NULL);
-  if (strcmp(chunk_name, "RND1") == 0)
+  if (strEqual(chunk_name, "RND1"))
   {
     getFile32BitBE(file);              /* not used */
 
     getFileChunkBE(file, chunk_name, NULL);
-    if (strcmp(chunk_name, "CAVE") != 0)
+    if (!strEqual(chunk_name, "CAVE"))
     {
       level->no_valid_file = TRUE;
 
@@ -1941,7 +1947,7 @@ static void LoadLevelFromFileInfo_RND(struct LevelInfo *level,
       int i = 0;
 
       while (chunk_info[i].name != NULL &&
-            strcmp(chunk_name, chunk_info[i].name) != 0)
+            !strEqual(chunk_name, chunk_info[i].name))
        i++;
 
       if (chunk_info[i].name == NULL)
@@ -2974,8 +2980,12 @@ static void LoadLevelFromFileStream_SP(FILE *file, struct LevelInfo *level,
   level->time_wheel = 0;
   level->amoeba_content = EL_EMPTY;
 
+#if 1
+  /* original Supaplex does not use score values -- use default values */
+#else
   for (i = 0; i < LEVEL_SCORE_ELEMENTS; i++)
     level->score[i] = 0;               /* !!! CORRECT THIS !!! */
+#endif
 
   /* there are no yamyams in supaplex levels */
   for (i = 0; i < level->num_yamyam_contents; i++)
@@ -3078,7 +3088,7 @@ static void LoadLevelFromFileInfo_SP(struct LevelInfo *level,
 
     if (reading_multipart_level &&
        (!is_multipart_level ||
-        strcmp(level->name, multipart_level.name) != 0))
+        !strEqual(level->name, multipart_level.name)))
     {
       /* we are already reading parts of a multi-part level, but this level is
         either not a multi-part level, or a part of a different multi-part
@@ -3239,6 +3249,10 @@ static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename)
   }
 #endif
 
+#if 0
+  leveldir_current->latest_engine = TRUE;      /* !!! TEST ONLY !!! */
+#endif
+
   if (leveldir_current->latest_engine)
   {
     /* ---------- use latest game engine ----------------------------------- */
@@ -3307,6 +3321,12 @@ static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename)
 #endif
   }
 
+  if (level->game_version < VERSION_IDENT(3,2,0,7))
+  {
+    /* default behaviour for snapping was "not continuous" before 3.2.0-7 */
+    level->continuous_snapping = FALSE;
+  }
+
   /* only few elements were able to actively move into acid before 3.1.0 */
   /* trigger settings did not exist before 3.1.0; set to default "any" */
   if (level->game_version < VERSION_IDENT(3,1,0,0))
@@ -3358,6 +3378,7 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
       int element = EL_CUSTOM_START + i;
 
       /* order of checking and copying events to be mapped is important */
+      /* (do not change the start and end value -- they are constant) */
       for (j = CE_BY_OTHER_ACTION; j >= CE_VALUE_GETS_ZERO; j--)
       {
        if (HAS_CHANGE_EVENT(element, j - 2))
@@ -3368,6 +3389,7 @@ static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
       }
 
       /* order of checking and copying events to be mapped is important */
+      /* (do not change the start and end value -- they are constant) */
       for (j = CE_PLAYER_COLLECTS_X; j >= CE_HITTING_SOMETHING; j--)
       {
        if (HAS_CHANGE_EVENT(element, j - 1))
@@ -4521,12 +4543,12 @@ void LoadTapeFromFilename(char *filename)
   }
 
   getFileChunkBE(file, chunk_name, NULL);
-  if (strcmp(chunk_name, "RND1") == 0)
+  if (strEqual(chunk_name, "RND1"))
   {
     getFile32BitBE(file);              /* not used */
 
     getFileChunkBE(file, chunk_name, NULL);
-    if (strcmp(chunk_name, "TAPE") != 0)
+    if (!strEqual(chunk_name, "TAPE"))
     {
       tape.no_valid_file = TRUE;
 
@@ -4592,7 +4614,7 @@ void LoadTapeFromFilename(char *filename)
       int i = 0;
 
       while (chunk_info[i].name != NULL &&
-            strcmp(chunk_name, chunk_info[i].name) != 0)
+            !strEqual(chunk_name, chunk_info[i].name))
        i++;
 
       if (chunk_info[i].name == NULL)
@@ -4931,14 +4953,16 @@ void SaveScore(int nr)
 #define SETUP_TOKEN_ASK_ON_ESCAPE              16
 #define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR       17
 #define SETUP_TOKEN_QUICK_SWITCH               18
-#define SETUP_TOKEN_GRAPHICS_SET               19
-#define SETUP_TOKEN_SOUNDS_SET                 20
-#define SETUP_TOKEN_MUSIC_SET                  21
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    22
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      23
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       24
+#define SETUP_TOKEN_INPUT_ON_FOCUS             19
+#define SETUP_TOKEN_PREFER_AGA_GRAPHICS                20
+#define SETUP_TOKEN_GRAPHICS_SET               21
+#define SETUP_TOKEN_SOUNDS_SET                 22
+#define SETUP_TOKEN_MUSIC_SET                  23
+#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    24
+#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      25
+#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       26
 
-#define NUM_GLOBAL_SETUP_TOKENS                        25
+#define NUM_GLOBAL_SETUP_TOKENS                        27
 
 /* editor setup */
 #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH      0
@@ -4954,8 +4978,9 @@ void SaveScore(int nr)
 #define SETUP_TOKEN_EDITOR_EL_HEADLINES                10
 #define SETUP_TOKEN_EDITOR_EL_USER_DEFINED     11
 #define SETUP_TOKEN_EDITOR_EL_DYNAMIC          12
+#define SETUP_TOKEN_EDITOR_SHOW_ELEMENT_TOKEN  13
 
-#define NUM_EDITOR_SETUP_TOKENS                        13
+#define NUM_EDITOR_SETUP_TOKENS                        14
 
 /* editor cascade setup */
 #define SETUP_TOKEN_EDITOR_CASCADE_BD          0
@@ -5048,6 +5073,8 @@ static struct TokenInfo global_setup_tokens[] =
   { TYPE_SWITCH, &si.ask_on_escape,    "ask_on_escape"                 },
   { TYPE_SWITCH, &si.ask_on_escape_editor, "ask_on_escape_editor"      },
   { TYPE_SWITCH, &si.quick_switch,     "quick_player_switch"           },
+  { TYPE_SWITCH, &si.input_on_focus,   "input_on_focus"                },
+  { TYPE_SWITCH, &si.prefer_aga_graphics, "prefer_aga_graphics"                },
   { TYPE_STRING, &si.graphics_set,     "graphics_set"                  },
   { TYPE_STRING, &si.sounds_set,       "sounds_set"                    },
   { TYPE_STRING, &si.music_set,                "music_set"                     },
@@ -5071,6 +5098,7 @@ static struct TokenInfo editor_setup_tokens[] =
   { TYPE_SWITCH, &sei.el_headlines,    "editor.el_headlines"           },
   { TYPE_SWITCH, &sei.el_user_defined, "editor.el_user_defined"        },
   { TYPE_SWITCH, &sei.el_dynamic,      "editor.el_dynamic"             },
+  { TYPE_SWITCH, &sei.show_element_token,"editor.show_element_token"   },
 };
 
 static struct TokenInfo editor_cascade_setup_tokens[] =
@@ -5174,6 +5202,8 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->ask_on_escape = TRUE;
   si->ask_on_escape_editor = TRUE;
   si->quick_switch = FALSE;
+  si->input_on_focus = FALSE;
+  si->prefer_aga_graphics = TRUE;
 
   si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR);
   si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR);
@@ -5197,6 +5227,8 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->editor.el_user_defined = FALSE;
   si->editor.el_dynamic = TRUE;
 
+  si->editor.show_element_token = FALSE;
+
   si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;
   si->shortcut.load_game = DEFAULT_KEY_LOAD_GAME;
   si->shortcut.toggle_pause = DEFAULT_KEY_TOGGLE_PAUSE;
@@ -5524,7 +5556,7 @@ void LoadSpecialMenuDesignSettings()
   /* always start with reliable default values from default config */
   for (i = 0; image_config_vars[i].token != NULL; i++)
     for (j = 0; image_config[j].token != NULL; j++)
-      if (strcmp(image_config_vars[i].token, image_config[j].token) == 0)
+      if (strEqual(image_config_vars[i].token, image_config[j].token))
        *image_config_vars[i].value =
          get_auto_parameter_value(image_config_vars[i].token,
                                   image_config[j].value);
@@ -5749,7 +5781,7 @@ static boolean music_info_listed_ext(struct MusicFileInfo *list,
                                     char *basename, boolean is_sound)
 {
   for (; list != NULL; list = list->next)
-    if (list->is_sound == is_sound && strcmp(list->basename, basename) == 0)
+    if (list->is_sound == is_sound && strEqual(list->basename, basename))
       return TRUE;
 
   return FALSE;
@@ -5807,7 +5839,7 @@ void LoadMusicInfo()
     if (music->filename == NULL)
       continue;
 
-    if (strcmp(music->filename, UNDEFINED_FILENAME) == 0)
+    if (strEqual(music->filename, UNDEFINED_FILENAME))
       continue;
 
     /* a configured file may be not recognized as music */
@@ -5846,7 +5878,7 @@ void LoadMusicInfo()
       if (music->filename == NULL)
        continue;
 
-      if (strcmp(basename, music->filename) == 0)
+      if (strEqual(basename, music->filename))
       {
        music_already_used = TRUE;
        break;
@@ -5882,7 +5914,7 @@ void LoadMusicInfo()
     if (sound->filename == NULL)
       continue;
 
-    if (strcmp(sound->filename, UNDEFINED_FILENAME) == 0)
+    if (strEqual(sound->filename, UNDEFINED_FILENAME))
       continue;
 
     /* a configured file may be not recognized as sound */
@@ -5991,7 +6023,7 @@ void LoadHelpAnimInfo()
     char *element_value, *action_value, *direction_value;
     int delay = atoi(list->value);
 
-    if (strcmp(list->token, "end") == 0)
+    if (strEqual(list->token, "end"))
     {
       add_helpanim_entry(HELPANIM_LIST_NEXT, -1, -1, -1, &num_list_entries);