rnd-20051215-1-src
[rocksndiamonds.git] / src / game_em / convert.c
index dc5d78c6926caf01bd93469fa1221b7a42ceda8b..e82a3547a84637417d1b45f5fb58d83c2131f522 100644 (file)
@@ -134,8 +134,12 @@ int cleanup_em_level(unsigned char *src, int length)
     for (i = 2112; i < 2148; i++)
       src[i] = src[i - 64];
   }
+#if 0
+  else if (length >= 2106)     /* !!! TEST ONLY: SHOW BROKEN LEVELS !!! */
+#else
   else if (length >= 2106 &&
           src[1983] == 116)
+#endif
   {
     /* ---------- this cave has V4 file format ---------- */
     file_version = FILE_VERSION_EM_V4;
@@ -165,10 +169,35 @@ int cleanup_em_level(unsigned char *src, int length)
     for (i = 2112; i < 2148; i++)
       src[i] = src[i - 64];
   }
+#if 1
+  else if (length >= 2106 &&
+          src[0] == 245 &&
+          src[1983] == 27)
+  {
+    unsigned char j = 94;
+
+    /* ---------- this cave has V3 file format ---------- */
+    file_version = FILE_VERSION_EM_V3;
+
+    for (i = 0; i < 2106; i++)
+      src[i] = (src[i] ^ (j += 7)) - 0x11;
+    src[1] = 131;
+    for (i = 0; i < 2048; i++)
+      src[i] = remap_v4[src[i]];
+    for (i = 2048; i < 2084; i++)
+      src[i] = remap_v4eater[src[i] >= 28 ? 0 : src[i]];
+    for (i = 2112; i < 2148; i++)
+      src[i] = src[i - 64];
+  }
+#endif
   else
   {
     /* ---------- this cave has unknown file format ---------- */
 
+#if 1
+    printf("::: %d, %d\n", src[0], src[1983]);
+#endif
+
     return 0;
   }
 
@@ -353,7 +382,8 @@ int cleanup_em_level(unsigned char *src, int length)
   length = 2172;
 
 #if 1
-  printf("::: EM level file version: %d\n", file_version);
+  if (options.debug)
+    printf("::: EM level file version: %d\n", file_version);
 #endif
 
   return file_version;
@@ -872,7 +902,11 @@ void prepare_em_level(void)
     for (x = 0; x < WIDTH; x++)
       Draw[y][x] = Cave[y][x];
 
+#if 1
+  lev.time_initial = lev.time_seconds;
+#else
   lev.time_initial = (lev.time_seconds * 50 + 7) / 8;
+#endif
   lev.time = lev.time_initial;
 
   lev.required = lev.required_initial;
@@ -903,6 +937,8 @@ void prepare_em_level(void)
 
   lev.home = lev.home_initial;
 
+  lev.killed_out_of_time = FALSE;
+
   ply1.num = 0;
   ply1.alive = ply1.alive_initial;
   ply1.dynamite = 0;
@@ -911,7 +947,7 @@ void prepare_em_level(void)
   ply1.anim = 0;
   ply1.oldx = ply1.x = ply1.x_initial;
   ply1.oldy = ply1.y = ply1.y_initial;
-  ply1.last_move_dir = MV_NO_MOVING;
+  ply1.last_move_dir = MV_NONE;
   ply1.joy_n = ply1.joy_e = ply1.joy_s = ply1.joy_w = 0;
   ply1.joy_snap = ply1.joy_drop = 0;
   ply1.joy_stick = ply1.joy_spin = 0;
@@ -924,7 +960,7 @@ void prepare_em_level(void)
   ply2.anim = 0;
   ply2.oldx = ply2.x = ply2.x_initial;
   ply2.oldy = ply2.y = ply2.y_initial;
-  ply2.last_move_dir = MV_NO_MOVING;
+  ply2.last_move_dir = MV_NONE;
   ply2.joy_n = ply2.joy_e = ply2.joy_s = ply2.joy_w = 0;
   ply2.joy_snap = ply1.joy_drop = 0;
   ply2.joy_stick = ply2.joy_spin = 0;