fixed extremely nasty bug when using level template in level editor
[rocksndiamonds.git] / src / game_mm / mm_files.c
index 0b88735ec920e8bcac421222359fdc7bf4882ec6..fa47d1f4da7656997ab583ded1f973585abf1ded 100644 (file)
@@ -97,18 +97,21 @@ void setLevelInfoToDefaults_MM()
 
   native_mm_level.encoding_16bit_field = FALSE;        /* default: only 8-bit elements */
 
-  lev_fieldx = native_mm_level.fieldx = STD_LEV_FIELDX;
-  lev_fieldy = native_mm_level.fieldy = STD_LEV_FIELDY;
+  native_mm_level.fieldx = STD_LEV_FIELDX;
+  native_mm_level.fieldy = STD_LEV_FIELDY;
 
   for (x = 0; x < MAX_LEV_FIELDX; x++)
     for (y = 0; y < MAX_LEV_FIELDY; y++)
-      native_mm_level.field[x][y] = Feld[x][y] = Ur[x][y] = EL_EMPTY;
+      native_mm_level.field[x][y] = Ur[x][y] = EL_EMPTY;
 
   native_mm_level.time = 100;
   native_mm_level.kettles_needed = 0;
   native_mm_level.auto_count_kettles = TRUE;
   native_mm_level.amoeba_speed = 0;
-  native_mm_level.time_fuse = 0;
+  native_mm_level.time_fuse = 25;
+  native_mm_level.time_bomb = 75;
+  native_mm_level.time_ball = 75;
+  native_mm_level.time_block = 75;
   native_mm_level.laser_red = FALSE;
   native_mm_level.laser_green = FALSE;
   native_mm_level.laser_blue = TRUE;
@@ -124,9 +127,8 @@ void setLevelInfoToDefaults_MM()
   for (i = 0; i < LEVEL_SCORE_ELEMENTS; i++)
     native_mm_level.score[i] = 10;
 
-  native_mm_level.field[0][0] = Feld[0][0] = Ur[0][0] = EL_MCDUFFIN_RIGHT;
+  native_mm_level.field[0][0] = Ur[0][0] = EL_MCDUFFIN_RIGHT;
   native_mm_level.field[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] =
-    Feld[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] =
     Ur[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] = EL_EXIT_CLOSED;
 }
 
@@ -155,8 +157,8 @@ static int LoadLevel_MM_HEAD(File *file, int chunk_size,
   int i;
   int laser_color;
 
-  lev_fieldx = level->fieldx = getFile8Bit(file);
-  lev_fieldy = level->fieldy = getFile8Bit(file);
+  level->fieldx = getFile8Bit(file);
+  level->fieldy = getFile8Bit(file);
 
   level->time           = getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
   level->kettles_needed = getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
@@ -182,6 +184,10 @@ static int LoadLevel_MM_HEAD(File *file, int chunk_size,
   level->amoeba_speed          = getFile8Bit(file);
   level->time_fuse             = getFile8Bit(file);
 
+  // fuse time was 0 and hardcoded in game engine in level files up to 2.0.x
+  if (level->file_version <= MM_FILE_VERSION_2_0)
+    level->time_fuse = 25;
+
   laser_color                  = getFile8Bit(file);
   level->laser_red             = (laser_color >> 2) & 0x01;
   level->laser_green           = (laser_color >> 1) & 0x01;
@@ -229,7 +235,7 @@ static int LoadLevel_MM_BODY(File *file, int chunk_size,
 
   for (y = 0; y < level->fieldy; y++)
     for (x = 0; x < level->fieldx; x++)
-      native_mm_level.field[x][y] = Feld[x][y] = Ur[x][y] =
+      native_mm_level.field[x][y] = Ur[x][y] =
        checkLevelElement(level->encoding_16bit_field ?
                          getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN) :
                          getFile8Bit(file));