fixed mapping level file game elements between RND and MM formats (again)
[rocksndiamonds.git] / src / tools.c
index fcc82f30f17919c995a146f877de3287c0607863..165120c050021a75ef5cc199d4118cbc396a762b 100644 (file)
@@ -7230,12 +7230,56 @@ int map_action_SP_to_RND(int action_sp)
 
 int map_element_RND_to_MM(int element_rnd)
 {
-  return (element_rnd > 1000 ? element_rnd - 1000 : 0);
+  return (element_rnd >= EL_MM_START_1 &&
+         element_rnd <= EL_MM_END_1 ?
+         EL_MM_START_1_NATIVE + element_rnd - EL_MM_START_1 :
+
+         element_rnd >= EL_MM_START_2 &&
+         element_rnd <= EL_MM_END_2 ?
+         EL_MM_START_2_NATIVE + element_rnd - EL_MM_START_2 :
+
+         element_rnd >= EL_CHAR_START &&
+         element_rnd <= EL_CHAR_END ?
+         EL_MM_CHAR_START_NATIVE + element_rnd - EL_CHAR_START :
+
+         element_rnd >= EL_MM_RUNTIME_START &&
+         element_rnd <= EL_MM_RUNTIME_END ?
+         EL_MM_RUNTIME_START_NATIVE + element_rnd - EL_MM_RUNTIME_START :
+
+         element_rnd >= EL_MM_DUMMY_START &&
+         element_rnd <= EL_MM_DUMMY_END ?
+         EL_MM_DUMMY_START_NATIVE + element_rnd - EL_MM_DUMMY_START :
+
+         EL_MM_EMPTY_NATIVE);
 }
 
 int map_element_MM_to_RND(int element_mm)
 {
-  return 1000 + element_mm;
+  return (element_mm == EL_MM_EMPTY_NATIVE ||
+         element_mm == EL_DF_EMPTY_NATIVE ?
+         EL_EMPTY :
+
+         element_mm >= EL_MM_START_1_NATIVE &&
+         element_mm <= EL_MM_END_1_NATIVE ?
+         EL_MM_START_1 + element_mm - EL_MM_START_1_NATIVE :
+
+         element_mm >= EL_MM_START_2_NATIVE &&
+         element_mm <= EL_MM_END_2_NATIVE ?
+         EL_MM_START_2 + element_mm - EL_MM_START_2_NATIVE :
+
+         element_mm >= EL_MM_CHAR_START_NATIVE &&
+         element_mm <= EL_MM_CHAR_END_NATIVE ?
+         EL_CHAR_START + element_mm - EL_MM_CHAR_START_NATIVE :
+
+         element_mm >= EL_MM_RUNTIME_START_NATIVE &&
+         element_mm <= EL_MM_RUNTIME_END_NATIVE ?
+         EL_MM_RUNTIME_START + element_mm - EL_MM_RUNTIME_START_NATIVE :
+
+         element_mm >= EL_MM_DUMMY_START_NATIVE &&
+         element_mm <= EL_MM_DUMMY_END_NATIVE ?
+         EL_MM_DUMMY_START + element_mm - EL_MM_DUMMY_START_NATIVE :
+
+         EL_EMPTY);
 }
 
 int get_next_element(int element)
@@ -7258,6 +7302,11 @@ int get_next_element(int element)
   }
 }
 
+int el2img_mm(int element_mm)
+{
+  return el2img(map_element_MM_to_RND(element_mm));
+}
+
 int el_act_dir2img(int element, int action, int direction)
 {
   element = GFX_ELEMENT(element);