rnd-20030610-1-src
[rocksndiamonds.git] / src / files.c
index fadd0b6de8614682dfc32a69124cccaab36c2080..d66112040791ea95b29cef519ade8584865c1aad 100644 (file)
@@ -84,11 +84,11 @@ static void setLevelInfoToDefaults()
   for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
     level.score[i] = 10;
 
-  level.num_yam_contents = STD_ELEMENT_CONTENTS;
+  level.num_yamyam_contents = STD_ELEMENT_CONTENTS;
   for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
     for(x=0; x<3; x++)
       for(y=0; y<3; y++)
-       level.yam_content[i][x][y] =
+       level.yamyam_content[i][x][y] =
          (i < STD_ELEMENT_CONTENTS ? EL_ROCK : EL_EMPTY);
 
   Feld[0][0] = Ur[0][0] = EL_PLAYER_1;
@@ -99,11 +99,20 @@ static void setLevelInfoToDefaults()
   {
     int element = EL_CUSTOM_START + i;
 
-    level.custom_element[i].change.events = CE_BITMASK_DEFAULT;
-    level.custom_element[i].change.gfx_element = element;
-    level.custom_element[i].change.successor = EL_EMPTY_SPACE;
-    level.custom_element[i].change.delay_fixed = 0;
-    level.custom_element[i].change.delay_random = 0;
+    element_info[element].use_gfx_element = FALSE;
+    element_info[element].gfx_element = EL_EMPTY_SPACE;
+    element_info[element].move_pattern = MV_ALL_DIRECTIONS;
+    element_info[element].move_direction_initial = MV_NO_MOVING;
+    element_info[element].move_stepsize = TILEX / 8;
+
+    for(x=0; x<3; x++)
+      for(y=0; y<3; y++)
+       element_info[element].content[x][y] = EL_EMPTY_SPACE;
+
+    element_info[element].change.events = CE_BITMASK_DEFAULT;
+    element_info[element].change.delay_fixed = 0;
+    element_info[element].change.delay_random = 0;
+    element_info[element].change.successor = EL_EMPTY_SPACE;
 
     /* start with no properties at all */
     for (j=0; j < NUM_EP_BITFIELDS; j++)
@@ -188,11 +197,11 @@ static int LoadLevel_HEAD(FILE *file, int chunk_size, struct LevelInfo *level)
   for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
     level->score[i] = fgetc(file);
 
-  level->num_yam_contents = STD_ELEMENT_CONTENTS;
+  level->num_yamyam_contents = STD_ELEMENT_CONTENTS;
   for(i=0; i<STD_ELEMENT_CONTENTS; i++)
     for(y=0; y<3; y++)
       for(x=0; x<3; x++)
-       level->yam_content[i][x][y] = checkLevelElement(fgetc(file));
+       level->yamyam_content[i][x][y] = checkLevelElement(fgetc(file));
 
   level->amoeba_speed          = fgetc(file);
   level->time_magic_wall       = fgetc(file);
@@ -268,19 +277,19 @@ static int LoadLevel_CONT(FILE *file, int chunk_size, struct LevelInfo *level)
   }
 
   fgetc(file);
-  level->num_yam_contents = fgetc(file);
+  level->num_yamyam_contents = fgetc(file);
   fgetc(file);
   fgetc(file);
 
   /* correct invalid number of content fields -- should never happen */
-  if (level->num_yam_contents < 1 ||
-      level->num_yam_contents > MAX_ELEMENT_CONTENTS)
-    level->num_yam_contents = STD_ELEMENT_CONTENTS;
+  if (level->num_yamyam_contents < 1 ||
+      level->num_yamyam_contents > MAX_ELEMENT_CONTENTS)
+    level->num_yamyam_contents = STD_ELEMENT_CONTENTS;
 
   for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
     for(y=0; y<3; y++)
       for(x=0; x<3; x++)
-       level->yam_content[i][x][y] =
+       level->yamyam_content[i][x][y] =
          checkLevelElement(level->encoding_16bit_field ?
                            getFile16BitBE(file) : fgetc(file));
   return chunk_size;
@@ -310,12 +319,12 @@ static int LoadLevel_CNT2(FILE *file, int chunk_size, struct LevelInfo *level)
 
   if (element == EL_YAMYAM)
   {
-    level->num_yam_contents = num_contents;
+    level->num_yamyam_contents = num_contents;
 
     for(i=0; i<num_contents; i++)
       for(y=0; y<3; y++)
        for(x=0; x<3; x++)
-         level->yam_content[i][x][y] = content_array[i][x][y];
+         level->yamyam_content[i][x][y] = content_array[i][x][y];
   }
   else if (element == EL_BD_AMOEBA)
   {
@@ -371,10 +380,9 @@ static int LoadLevel_CUS2(FILE *file, int chunk_size, struct LevelInfo *level)
   {
     int element = getFile16BitBE(file);
     int custom_element_successor = getFile16BitBE(file);
-    int i = element - EL_CUSTOM_START;
 
     if (IS_CUSTOM_ELEMENT(element))
-      level->custom_element[i].change.successor = custom_element_successor;
+      element_info[element].change.successor = custom_element_successor;
     else
       Error(ERR_WARN, "invalid custom element number %d", element);
   }
@@ -620,7 +628,7 @@ static void SaveLevel_HEAD(FILE *file, struct LevelInfo *level)
     for(y=0; y<3; y++)
       for(x=0; x<3; x++)
        fputc((level->encoding_16bit_yamyam ? EL_EMPTY :
-              level->yam_content[i][x][y]),
+              level->yamyam_content[i][x][y]),
              file);
   fputc(level->amoeba_speed, file);
   fputc(level->time_magic_wall, file);
@@ -661,7 +669,7 @@ static void SaveLevel_CONT(FILE *file, struct LevelInfo *level)
   int i, x, y;
 
   fputc(EL_YAMYAM, file);
-  fputc(level->num_yam_contents, file);
+  fputc(level->num_yamyam_contents, file);
   fputc(0, file);
   fputc(0, file);
 
@@ -669,9 +677,9 @@ static void SaveLevel_CONT(FILE *file, struct LevelInfo *level)
     for(y=0; y<3; y++)
       for(x=0; x<3; x++)
        if (level->encoding_16bit_field)
-         putFile16BitBE(file, level->yam_content[i][x][y]);
+         putFile16BitBE(file, level->yamyam_content[i][x][y]);
        else
-         fputc(level->yam_content[i][x][y], file);
+         fputc(level->yamyam_content[i][x][y], file);
 }
 #endif
 
@@ -683,14 +691,14 @@ static void SaveLevel_CNT2(FILE *file, struct LevelInfo *level, int element)
 
   if (element == EL_YAMYAM)
   {
-    num_contents = level->num_yam_contents;
+    num_contents = level->num_yamyam_contents;
     content_xsize = 3;
     content_ysize = 3;
 
     for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
       for(y=0; y<3; y++)
        for(x=0; x<3; x++)
-         content_array[i][x][y] = level->yam_content[i][x][y];
+         content_array[i][x][y] = level->yamyam_content[i][x][y];
   }
   else if (element == EL_BD_AMOEBA)
   {
@@ -764,12 +772,12 @@ static void SaveLevel_CUS2(FILE *file, struct LevelInfo *level,
   {
     int element = EL_CUSTOM_START + i;
 
-    if (level->custom_element[i].change.successor != EL_EMPTY_SPACE)
+    if (element_info[element].change.successor != EL_EMPTY_SPACE)
     {
       if (check < num_changed_custom_elements)
       {
        putFile16BitBE(file, element);
-       putFile16BitBE(file, level->custom_element[i].change.successor);
+       putFile16BitBE(file, element_info[element].change.successor);
       }
 
       check++;
@@ -807,10 +815,10 @@ void SaveLevel(int level_nr)
 
   /* check yamyam content for 16-bit elements */
   level.encoding_16bit_yamyam = FALSE;
-  for(i=0; i<level.num_yam_contents; i++)
+  for(i=0; i<level.num_yamyam_contents; i++)
     for(y=0; y<3; y++)
       for(x=0; x<3; x++)
-       if (level.yam_content[i][x][y] > 255)
+       if (level.yamyam_content[i][x][y] > 255)
          level.encoding_16bit_yamyam = TRUE;
 
   /* check amoeba content for 16-bit elements */
@@ -829,7 +837,7 @@ void SaveLevel(int level_nr)
 
   /* check for non-standard custom elements and calculate "CUS2" chunk size */
   for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
-    if (level.custom_element[i].change.successor != EL_EMPTY_SPACE)
+    if (element_info[EL_CUSTOM_START + i].change.successor != EL_EMPTY_SPACE)
       num_changed_custom_elements2++;
 
   putFileChunkBE(file, "RND1", CHUNK_SIZE_UNDEFINED);
@@ -848,7 +856,7 @@ void SaveLevel(int level_nr)
   SaveLevel_BODY(file, &level);
 
   if (level.encoding_16bit_yamyam ||
-      level.num_yam_contents != STD_ELEMENT_CONTENTS)
+      level.num_yamyam_contents != STD_ELEMENT_CONTENTS)
   {
     putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE);
     SaveLevel_CNT2(file, &level, EL_YAMYAM);
@@ -880,7 +888,7 @@ void SaveLevel(int level_nr)
 void DumpLevel(struct LevelInfo *level)
 {
   printf_line("-", 79);
-  printf("Level xxx (file version %06d, game version %06d)\n",
+  printf("Level xxx (file version %08d, game version %08d)\n",
         level->file_version, level->game_version);
   printf_line("-", 79);
 
@@ -1337,7 +1345,7 @@ void DumpTape(struct TapeInfo *tape)
   }
 
   printf_line("-", 79);
-  printf("Tape of Level %03d (file version %06d, game version %06d)\n",
+  printf("Tape of Level %03d (file version %08d, game version %08d)\n",
         tape->level_nr, tape->file_version, tape->game_version);
   printf("Level series identifier: '%s'\n", tape->level_identifier);
   printf_line("-", 79);