added flags for test mode, teamwork mode and infinite levels to EM engine
[rocksndiamonds.git] / src / game_em / convert.c
index 9ebf6f4c825afcc395df46714d44120b9d5e084b..e5bc5c6832cf21e08a90622422587a57bf48bc26 100644 (file)
@@ -213,12 +213,14 @@ static const short map[CAVE_TILE_MAX] =
 
 int map_em_element_C_to_X(int element_em_cave)
 {
-  if (element_em_cave >= 0 && element_em_cave < CAVE_TILE_MAX)
-    return map[element_em_cave];
+  if (element_em_cave < 0 || element_em_cave >= CAVE_TILE_MAX)
+  {
+    Error(ERR_WARN, "invalid EM cave element %d", element_em_cave);
 
-  Error(ERR_WARN, "invalid EM cave element %d", element_em_cave);
+    return Xblank;
+  }
 
-  return Xblank;
+  return map[element_em_cave];
 }
 
 int map_em_element_X_to_C(int element_em_game)
@@ -240,19 +242,19 @@ int map_em_element_X_to_C(int element_em_game)
     map_reverse_initialized = TRUE;
   }
 
-  if (element_em_game >= 0 && element_em_game < GAME_TILE_MAX)
+  if (element_em_game < 0 || element_em_game >= GAME_TILE_MAX)
   {
-    int element_em_cave = map_reverse[element_em_game];
-
-    if (element_em_cave == Cblank && element_em_game != Xblank)
-      Error(ERR_WARN, "unknown EM game element %d", element_em_game);
+    Error(ERR_WARN, "invalid EM game element %d", element_em_game);
 
-    return element_em_cave;
+    return Cblank;
   }
 
-  Error(ERR_WARN, "invalid EM game element %d", element_em_game);
+  int element_em_cave = map_reverse[element_em_game];
 
-  return Cblank;
+  if (element_em_cave == Cblank && element_em_game != Xblank)
+    Error(ERR_WARN, "unknown EM game element %d", element_em_game);
+
+  return element_em_cave;
 }
 
 void prepare_em_level(void)
@@ -273,18 +275,21 @@ void prepare_em_level(void)
   lev.right = lev.left + lev.width;
   lev.bottom = lev.top + lev.height;
 
-  /* add linked cave buffer columns for wrap-around movement */
-  for (x = 0; x < lev.left; x++)
+  if (cav.infinite)
   {
-    lev.cavecol[x] = lev.cavecol[lev.width + x];
-    lev.nextcol[x] = lev.nextcol[lev.width + x];
-    lev.drawcol[x] = lev.drawcol[lev.width + x];
-    lev.boomcol[x] = lev.boomcol[lev.width + x];
-
-    lev.cavecol[lev.right + x] = lev.cavecol[lev.left + x];
-    lev.nextcol[lev.right + x] = lev.nextcol[lev.left + x];
-    lev.drawcol[lev.right + x] = lev.drawcol[lev.left + x];
-    lev.boomcol[lev.right + x] = lev.boomcol[lev.left + x];
+    /* add linked cave buffer columns for wrap-around movement */
+    for (x = 0; x < lev.left; x++)
+    {
+      lev.cavecol[x] = lev.cavecol[lev.width + x];
+      lev.nextcol[x] = lev.nextcol[lev.width + x];
+      lev.drawcol[x] = lev.drawcol[lev.width + x];
+      lev.boomcol[x] = lev.boomcol[lev.width + x];
+
+      lev.cavecol[lev.right + x] = lev.cavecol[lev.left + x];
+      lev.nextcol[lev.right + x] = lev.nextcol[lev.left + x];
+      lev.drawcol[lev.right + x] = lev.drawcol[lev.left + x];
+      lev.boomcol[lev.right + x] = lev.boomcol[lev.left + x];
+    }
   }
 
   for (x = 0; x < lev.width; x++)
@@ -299,6 +304,14 @@ void prepare_em_level(void)
   lev.gems_needed = cav.gems_needed;
   lev.score = 0;
 
+  lev.testmode = cav.testmode;
+
+  if (lev.testmode)
+  {
+    lev.time = 0;
+    lev.gems_needed = 0;
+  }
+
   lev.eater_score      = cav.eater_score;
   lev.alien_score      = cav.alien_score;
   lev.bug_score                = cav.bug_score;