changed some initial cave elements for EM engine
[rocksndiamonds.git] / src / game_em / reademc.c
index 0ee0e17b0dfdd26bcf722233195df85877e87be0..f93e495b276d411bea86e66f7fcf5963d36d1494 100644 (file)
@@ -41,7 +41,6 @@
  */
 
 #define GET_BE16(x)            ((&x)[0] << 8 | (&x)[1])
-#define PUT_BE16(x, y)         {(&x)[0] = (y) >> 8; (&x)[1] = (y) & 0xff;}
 
 static const short map_emc[256] =
 {
@@ -66,8 +65,8 @@ static const short map_emc[256] =
   Xdynamite_2,         Xdynamite_3,    Xdynamite_4,    Xacid_s,
 
   Xexit_1,             Xexit_2,        Xexit_3,        Xballoon,
-  Xplant,              Xspring,        Xspring_fall,   Xspring_w,
-  Xspring_e,           Xball_1,        Xball_2,        Xandroid,
+  Xplant,              Xspring,        Xspring,        Xpush_spring_w,
+  Xpush_spring_e,      Xball_1,        Xball_2,        Xandroid,
   Xblank,              Xandroid,       Xandroid,       Xandroid,
 
   Xandroid,            Xandroid,       Xandroid,       Xandroid,
@@ -98,7 +97,7 @@ static const short map_emc[256] =
   Xfake_grass,         Xlenses,        Xmagnify,       Xfake_blank,
   Xfake_grass,         Xswitch,        Xswitch,        Xblank,
   Xdecor_8,            Xdecor_9,       Xdecor_10,      Xdecor_5,
-  Xalpha_comma,                Xalpha_quote,   Xalpha_minus,   Xdynamite,
+  Xalpha_comma,                Xalpha_apost,   Xalpha_minus,   Xdynamite,
 
   Xsteel_3,            Xdecor_6,       Xdecor_7,       Xsteel_2,
   Xroundwall_2,                Xdecor_2,       Xdecor_4,       Xdecor_3,
@@ -329,11 +328,8 @@ void convert_em_level(unsigned char *src, int file_version)
 
   /* common to all emc caves */
 
-  cav.time_seconds = GET_BE16(src[2110]);
-  if (cav.time_seconds > 9999)
-    cav.time_seconds = 9999;
-
-  cav.required_initial = src[2095];
+  cav.time_seconds = MIN(GET_BE16(src[2110]), 9999);
+  cav.gems_needed = src[2095];
 
   /* scores */
 
@@ -354,62 +350,57 @@ void convert_em_level(unsigned char *src, int file_version)
 
   /* times */
 
-  cav.android_move_time  = GET_BE16(src[2164]);
-  cav.android_clone_time = GET_BE16(src[2166]);
-  cav.ball_time                 = GET_BE16(src[2160]);
-
-  cav.lenses_time      = GET_BE16(src[2154]);
-  cav.magnify_time     = GET_BE16(src[2156]);
-  cav.wheel_time       = GET_BE16(src[2104]);
+  cav.android_move_time  = MIN(GET_BE16(src[2164]), 9999);
+  cav.android_clone_time = MIN(GET_BE16(src[2166]), 9999);
+  cav.ball_time                 = MIN(GET_BE16(src[2160]), 9999);
 
-  temp = GET_BE16(src[2100]) * 28;
-  if (temp > 9999)
-    temp = 9999;
-  cav.amoeba_time = temp;
+  cav.lenses_time      = MIN(GET_BE16(src[2154]), 9999);
+  cav.magnify_time     = MIN(GET_BE16(src[2156]), 9999);
+  cav.wheel_time       = MIN(GET_BE16(src[2104]), 9999);
 
-  cav.wonderwall_time_initial = GET_BE16(src[2102]);
+  cav.amoeba_time      = MIN(GET_BE16(src[2100]) * 28, 9999);
+  cav.wonderwall_time  = MIN(GET_BE16(src[2102]), 9999);
 
-  cav.wind_cnt_initial = src[2149] & 15 ? cav.wind_time : 0;
+  cav.wind_cnt = src[2149] & 15 ? cav.wind_time : 0;
   temp = src[2149];
-  cav.wind_direction_initial = (temp & 8 ? 0 :
-                               temp & 1 ? 1 :
-                               temp & 2 ? 2 :
-                               temp & 4 ? 3 : 0);
+  cav.wind_direction = (temp & 8 ? 0 :
+                       temp & 1 ? 1 :
+                       temp & 2 ? 2 :
+                       temp & 4 ? 3 : 0);
+
   /* global flags */
 
-  cav.ball_random       = src[2162] & 1   ? 1 : 0;
-  cav.ball_state_initial = src[2162] & 128 ? 1 : 0;
+  cav.ball_random = src[2162] & 1   ? 1 : 0;
+  cav.ball_state  = src[2162] & 128 ? 1 : 0;
 
   for (temp = 1; temp < 2047; temp++)
   {
     switch (src[temp])
     {
       case 36:                                 /* wonderwall */
-       cav.wonderwall_state_initial = 1;
-       cav.wonderwall_time_initial = 9999;
+       cav.wonderwall_state = 1;
+       cav.wonderwall_time = 9999;
        break;
 
       case 40:                                 /* wheel */
-       cav.wheel_x_initial = temp & 63;
-       cav.wheel_y_initial = temp >> 6;
-       cav.wheel_cnt_initial = cav.wheel_time;
+       cav.wheel_x = temp & 63;
+       cav.wheel_y = temp >> 6;
+       cav.wheel_cnt = cav.wheel_time;
        break;
 
       case 163:                                        /* fake blank */
-       cav.lenses_cnt_initial = 9999;
+       cav.lenses_cnt = 9999;
        break;
 
       case 164:                                        /* fake grass */
-       cav.magnify_cnt_initial = 9999;
+       cav.magnify_cnt = 9999;
        break;
     }
   }
 
   /* android */
 
-  temp = GET_BE16(src[2168]);
-
-  init_android_clone_table(temp);
+  init_android_clone_table(GET_BE16(src[2168]));
 
   /* eaters */
 
@@ -456,18 +447,18 @@ void convert_em_level(unsigned char *src, int file_version)
   /* first fill the complete playfield with the default border element */
   for (y = 0; y < CAVE_HEIGHT; y++)
     for (x = 0; x < CAVE_WIDTH; x++)
-      cav.cave_raw[x][y] = Zborder;
+      cav.cave[x][y] = Zborder;
 
   /* then copy the real level contents from level file into the playfield */
   temp = 0;
   for (y = 0; y < cav.height; y++)
     for (x = 0; x < cav.width; x++)
-      cav.cave_raw[x][y] = map_emc[src[temp++]];
+      cav.cave[x][y] = map_emc[src[temp++]];
 
   /* at last, set the two players at their positions in the playfield */
   /* (native EM[C] levels always have exactly two players in a level) */
   for (i = 0; i < 2; i++)
-    cav.cave_raw[cav.player_x[i]][cav.player_y[i]] = Zplayer;
+    cav.cave[cav.player_x[i]][cav.player_y[i]] = Zplayer;
 
   native_em_level.file_version = file_version;
 }
@@ -824,53 +815,21 @@ int cleanup_em_level(unsigned char *src, int length, char *filename)
   src[2098] &= 7;
   src[GET_BE16(src[2098])] = 128;
 
-  /* amoeba speed */
-  if (GET_BE16(src[2100]) > 9999)
-    PUT_BE16(src[2100], 9999);
-
-  /* time wonderwall */
-  if (GET_BE16(src[2102]) > 9999)
-    PUT_BE16(src[2102], 9999);
-
-  /* time */
-  if (GET_BE16(src[2110]) > 9999)
-    PUT_BE16(src[2110], 9999);
-
   /* wind direction */
   i = src[2149];
   i &= 15;
   i &= -i;
   src[2149] = i;
 
-  /* time lenses */
-  if (GET_BE16(src[2154]) > 9999)
-    PUT_BE16(src[2154], 9999);
-
-  /* time magnify */
-  if (GET_BE16(src[2156]) > 9999)
-    PUT_BE16(src[2156], 9999);
-
   /* ball object */
   src[2158] = 0;
   src[2159] = map_v6[src[2159]];
 
-  /* ball pause */
-  if (GET_BE16(src[2160]) > 9999)
-    PUT_BE16(src[2160], 9999);
-
   /* ball data */
   src[2162] &= 129;
   if (src[2162] & 1)
     src[2163] = 0;
 
-  /* android move pause */
-  if (GET_BE16(src[2164]) > 9999)
-    PUT_BE16(src[2164], 9999);
-
-  /* android clone pause */
-  if (GET_BE16(src[2166]) > 9999)
-    PUT_BE16(src[2166], 9999);
-
   /* android data */
   src[2168] &= 31;