improved handling of opening gray ball when turning laser away
[rocksndiamonds.git] / src / game_mm / mm_files.c
index caa92e02fb42521b5287975e793b394fbb368c02..d334b8a0b3fb8932bb289172f9012c55c76be3b4 100644 (file)
@@ -127,6 +127,25 @@ void setLevelInfoToDefaults_MM(void)
   for (i = 0; i < LEVEL_SCORE_ELEMENTS; i++)
     native_mm_level.score[i] = 10;
 
+  int ball_content[] =
+  {
+    EL_MIRROR_START,
+    EL_MIRROR_FIXED_START,
+    EL_POLAR_START,
+    EL_POLAR_CROSS_START,
+    EL_PACMAN_START,
+    EL_KETTLE,
+    EL_BOMB,
+    EL_PRISM
+  };
+  int num_ball_contents = sizeof(ball_content) / sizeof(int);
+
+  native_mm_level.num_ball_contents = num_ball_contents;
+  native_mm_level.ball_choice_mode = ANIM_RANDOM;
+
+  for (i = 0; i < num_ball_contents; i++)
+    native_mm_level.ball_content[i] = ball_content[i];
+
   native_mm_level.field[0][0] = Ur[0][0] = EL_MCDUFFIN_RIGHT;
   native_mm_level.field[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] =
     Ur[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] = EL_EXIT_CLOSED;
@@ -136,7 +155,8 @@ static int checkLevelElement(int element)
 {
   if (element >= EL_FIRST_RUNTIME_EL)
   {
-    Error(ERR_WARN, "invalid level element %d", element);
+    Warn("invalid level element %d", element);
+
     element = EL_CHAR_FRAGE;
   }
 
@@ -270,7 +290,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
   if (!(file = openFile(filename, MODE_READ)))
   {
     if (!level_info_only)
-      Error(ERR_WARN, "cannot read level '%s' - creating new level", filename);
+      Warn("cannot read level '%s' - creating new level", filename);
 
     return FALSE;
   }
@@ -283,7 +303,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
     getFileChunk(file, chunk_name, NULL, BYTE_ORDER_BIG_ENDIAN);
     if (strcmp(chunk_name, "CAVE") != 0)
     {
-      Error(ERR_WARN, "unknown format of level file '%s'", filename);
+      Warn("unknown format of level file '%s'", filename);
 
       closeFile(file);
 
@@ -299,7 +319,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
 
     if (!checkCookieString(cookie, LEVEL_COOKIE_TMPL))
     {
-      Error(ERR_WARN, "unknown format of level file '%s'", filename);
+      Warn("unknown format of level file '%s'", filename);
 
       closeFile(file);
 
@@ -309,7 +329,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
     if ((native_mm_level.file_version = getFileVersionFromCookieString(cookie))
        == -1)
     {
-      Error(ERR_WARN, "unsupported version of level file '%s'", filename);
+      Warn("unsupported version of level file '%s'", filename);
 
       closeFile(file);
 
@@ -327,7 +347,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
 
     if (chunk_info[i].name == NULL)
     {
-      Error(ERR_WARN, "unknown chunk '%s' in level file '%s'",
+      Warn("unknown chunk '%s' in level file '%s'",
            chunk_name, filename);
 
       ReadUnusedBytesFromFile(file, chunk_size);
@@ -335,7 +355,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
     else if (chunk_info[i].size != -1 &&
             chunk_info[i].size != chunk_size)
     {
-      Error(ERR_WARN, "wrong size (%d) of chunk '%s' in level file '%s'",
+      Warn("wrong size (%d) of chunk '%s' in level file '%s'",
            chunk_size, chunk_name, filename);
 
       ReadUnusedBytesFromFile(file, chunk_size);
@@ -350,7 +370,7 @@ boolean LoadNativeLevel_MM(char *filename, boolean level_info_only)
       // chunks first (like "HEAD" and "BODY") that contain some header
       // information, so check them here
       if (chunk_size_expected != chunk_size)
-       Error(ERR_WARN, "wrong size (%d) of chunk '%s' in level file '%s'",
+       Warn("wrong size (%d) of chunk '%s' in level file '%s'",
              chunk_size, chunk_name, filename);
     }
   }
@@ -419,7 +439,7 @@ void SaveNativeLevel_MM(char *filename)
 
   if (!(file = fopen(filename, MODE_WRITE)))
   {
-    Error(ERR_WARN, "cannot save level file '%s'", filename);
+    Warn("cannot save level file '%s'", filename);
 
     return;
   }