rnd-20030620-1-src
[rocksndiamonds.git] / src / files.c
index 6a9cb746b8b30e05de07b06957190e84f65f1b5a..19f536d9f2498e18bdbe9ca11b36211757fb37ba 100644 (file)
@@ -99,18 +99,26 @@ static void setLevelInfoToDefaults()
   {
     int element = EL_CUSTOM_START + i;
 
-    level.custom_element[i].use_gfx_element = FALSE;
-    level.custom_element[i].gfx_element = EL_EMPTY_SPACE;
-    level.custom_element[i].move_direction = 0;
+    element_info[element].use_gfx_element = FALSE;
+    element_info[element].gfx_element = EL_EMPTY_SPACE;
+
+    element_info[element].push_delay_fixed = 2;                /* special default */
+    element_info[element].push_delay_random = 8;       /* special default */
+    element_info[element].move_delay_fixed = 0;
+    element_info[element].move_delay_random = 0;
+
+    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++)
-       level.custom_element[i].content[x][y] = EL_EMPTY_SPACE;
+       element_info[element].content[x][y] = EL_EMPTY_SPACE;
 
-    level.custom_element[i].change.events = CE_BITMASK_DEFAULT;
-    level.custom_element[i].change.delay_fixed = 0;
-    level.custom_element[i].change.delay_random = 0;
-    level.custom_element[i].change.successor = 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++)
@@ -378,10 +386,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);
   }
@@ -771,12 +778,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++;
@@ -836,7 +843,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);
@@ -887,7 +894,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);
 
@@ -1207,6 +1214,10 @@ void LoadTapeFromFilename(char *filename)
   fclose(file);
 
   tape.length_seconds = GetTapeLength();
+
+#if 0
+  printf("tape version: %d\n", tape.game_version);
+#endif
 }
 
 void LoadTape(int level_nr)
@@ -1344,7 +1355,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);
@@ -1928,16 +1939,19 @@ void LoadSpecialMenuDesignSettings()
   if ((setup_file_hash = loadSetupFileHash(filename)) == NULL)
     return;
 
-  /* special case: initialize with default values that may be overwrittem */
+  /* special case: initialize with default values that may be overwritten */
   for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++)
   {
     char *value_x = getHashEntry(setup_file_hash, "menu.draw_xoffset");
     char *value_y = getHashEntry(setup_file_hash, "menu.draw_yoffset");
+    char *list_size = getHashEntry(setup_file_hash, "menu.list_size");
 
     if (value_x != NULL)
       menu.draw_xoffset[i] = get_integer_from_string(value_x);
     if (value_y != NULL)
       menu.draw_yoffset[i] = get_integer_from_string(value_y);
+    if (list_size != NULL)
+      menu.list_size[i] = get_integer_from_string(list_size);
   }
 
   /* read (and overwrite with) values that may be specified in config file */