improved error handling code when mapping EM engine cave/game elements
authorHolger Schemel <info@artsoft.org>
Wed, 19 Feb 2020 15:20:36 +0000 (16:20 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 19 May 2020 16:19:59 +0000 (18:19 +0200)
src/game_em/convert.c
src/tools.c

index 9ebf6f4c825afcc395df46714d44120b9d5e084b..4a4b9cf444234d8192f10d35ea7910c6be75ba85 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];
+    Error(ERR_WARN, "invalid EM game element %d", element_em_game);
 
-    if (element_em_cave == Cblank && element_em_game != Xblank)
-      Error(ERR_WARN, "unknown 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];
+
+  if (element_em_cave == Cblank && element_em_game != Xblank)
+    Error(ERR_WARN, "unknown EM game element %d", element_em_game);
 
-  return Cblank;
+  return element_em_cave;
 }
 
 void prepare_em_level(void)
index d7298fc11971b0c6d43d5c909b99f0531269de25..d05d636588618f25027e5db12b70e69b914c780b 100644 (file)
@@ -7730,12 +7730,14 @@ int map_element_RND_to_EM_cave(int element_rnd)
     mapping_initialized = TRUE;
   }
 
-  if (element_rnd >= 0 && element_rnd < NUM_FILE_ELEMENTS)
-    return map_em_element_X_to_C(mapping_RND_to_EM[element_rnd]);
+  if (element_rnd < 0 || element_rnd >= NUM_FILE_ELEMENTS)
+  {
+    Error(ERR_WARN, "invalid RND level element %d", element_rnd);
 
-  Error(ERR_WARN, "invalid RND level element %d", element_rnd);
+    return EL_UNKNOWN;
+  }
 
-  return EL_UNKNOWN;
+  return map_em_element_X_to_C(mapping_RND_to_EM[element_rnd]);
 }
 
 int map_element_EM_to_RND_cave(int element_em_cave)
@@ -7758,12 +7760,14 @@ int map_element_EM_to_RND_cave(int element_em_cave)
     mapping_initialized = TRUE;
   }
 
-  if (element_em_cave >= 0 && element_em_cave < CAVE_TILE_MAX)
-    return mapping_EM_to_RND[map_em_element_C_to_X(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 EL_UNKNOWN;
+  }
 
-  return EL_UNKNOWN;
+  return mapping_EM_to_RND[map_em_element_C_to_X(element_em_cave)];
 }
 
 int map_element_EM_to_RND_game(int element_em_game)
@@ -7786,12 +7790,14 @@ int map_element_EM_to_RND_game(int element_em_game)
     mapping_initialized = TRUE;
   }
 
-  if (element_em_game >= 0 && element_em_game < GAME_TILE_MAX)
-    return mapping_EM_to_RND[element_em_game];
+  if (element_em_game < 0 || element_em_game >= GAME_TILE_MAX)
+  {
+    Error(ERR_WARN, "invalid EM game element %d", element_em_game);
 
-  Error(ERR_WARN, "invalid EM game element %d", element_em_game);
+    return EL_UNKNOWN;
+  }
 
-  return EL_UNKNOWN;
+  return mapping_EM_to_RND[element_em_game];
 }
 
 void map_android_clone_elements_RND_to_EM(struct LevelInfo *level)