rnd-20040129-1-src
[rocksndiamonds.git] / src / files.c
index 61deafb48c552e6145f074f944a55f2b0581e613..40cdbcf4274549672be9cc57f8571f607028df82 100644 (file)
@@ -258,6 +258,8 @@ static void setLevelInfoToDefaults(struct LevelInfo *level)
 
       /* default: only one element in group */
       element_info[element].group->num_elements = 1;
+
+      element_info[element].group->choice_mode = ANIM_RANDOM;
     }
   }
 
@@ -328,7 +330,7 @@ static char *getLevelFilenameFromBasename(char *basename)
 
 static int getFileTypeFromBasename(char *basename)
 {
-  char *filename = getLevelFilenameFromBasename(basename);
+  static char *filename = NULL;
   struct stat file_status;
 
   /* ---------- try to determine file type from filename ---------- */
@@ -340,6 +342,9 @@ static int getFileTypeFromBasename(char *basename)
 
   /* ---------- try to determine file type from filesize ---------- */
 
+  checked_free(filename);
+  filename = getPath2(getCurrentLevelDir(), basename);
+
   if (stat(filename, &file_status) == 0)
   {
     /* check for typical filesize of a Supaplex level package file */
@@ -353,10 +358,10 @@ static int getFileTypeFromBasename(char *basename)
 static char *getSingleLevelBasename(int nr, int type)
 {
   static char basename[MAX_FILENAME_LEN];
+  char *level_filename = getStringCopy(leveldir_current->level_filename);
 
-  if (leveldir_current->level_filename == NULL)
-    leveldir_current->level_filename =
-      getStringCat2("%03d.", LEVELFILE_EXTENSION);
+  if (level_filename == NULL)
+    level_filename = getStringCat2("%03d.", LEVELFILE_EXTENSION);
 
   switch (type)
   {
@@ -373,10 +378,12 @@ static char *getSingleLevelBasename(int nr, int type)
 
     case LEVEL_FILE_TYPE_UNKNOWN:
     default:
-      sprintf(basename, leveldir_current->level_filename, nr);
+      sprintf(basename, level_filename, nr);
       break;
   }
 
+  free(level_filename);
+
   return basename;
 }
 
@@ -1072,8 +1079,10 @@ static int LoadLevel_GRP1(FILE *file, int chunk_size, struct LevelInfo *level)
   ei->use_gfx_element = getFile8Bit(file);
   ei->gfx_element = getMappedElement(getFile16BitBE(file));
 
+  group->choice_mode = getFile8Bit(file);
+
   /* some free bytes for future values and padding */
-  ReadUnusedBytesFromFile(file, 4);
+  ReadUnusedBytesFromFile(file, 3);
 
   for (i = 0; i < MAX_ELEMENTS_IN_GROUP; i++)
     group->element[i] = getMappedElement(getFile16BitBE(file));
@@ -2483,8 +2492,10 @@ static void SaveLevel_GRP1(FILE *file, struct LevelInfo *level, int element)
   putFile8Bit(file, ei->use_gfx_element);
   putFile16BitBE(file, ei->gfx_element);
 
+  putFile8Bit(file, group->choice_mode);
+
   /* some free bytes for future values and padding */
-  WriteUnusedBytesToFile(file, 4);
+  WriteUnusedBytesToFile(file, 3);
 
   for (i = 0; i < MAX_ELEMENTS_IN_GROUP; i++)
     putFile16BitBE(file, group->element[i]);