added support for using LLDB instead of GDB when debugging on Mac
[rocksndiamonds.git] / src / tape.c
index 27e1733227f1bdad1ca511cf22eda1c2ec44c751..c1e4bcea9f05cb67f8035a0af5cd0336c014cd6b 100644 (file)
@@ -459,6 +459,8 @@ void TapeDeactivateDisplayOff(boolean redraw_display)
   if (redraw_display)
   {
     RedrawPlayfield();
+
+    UpdateGameDoorValues();
     DrawGameDoorValues();
   }
 }
@@ -539,7 +541,11 @@ void TapeErase(void)
   tape.length_seconds = 0;
 
   if (leveldir_current)
-    setString(&tape.level_identifier, leveldir_current->identifier);
+  {
+    strncpy(tape.level_identifier, leveldir_current->identifier,
+           MAX_FILENAME_LEN);
+    tape.level_identifier[MAX_FILENAME_LEN] = '\0';
+  }
 
   tape.level_nr = level_nr;
   tape.pos[tape.counter].delay = 0;
@@ -1158,12 +1164,7 @@ static boolean checkTapesFromSameLevel(struct TapeInfo *t1, struct TapeInfo *t2)
 
 static void CopyTape(struct TapeInfo *tape_from, struct TapeInfo *tape_to)
 {
-  if (tape_to->level_identifier != NULL)
-    checked_free(tape_to->level_identifier);
-
   *tape_to = *tape_from;
-
-  tape_to->level_identifier = getStringCopy(tape_from->level_identifier);
 }
 
 static void SwapTapes(struct TapeInfo *t1, struct TapeInfo *t2)
@@ -1237,6 +1238,7 @@ void AutoPlayTapes(void)
   {
     "original tape",
     "em_random_bug",
+    "screen_34x34",
 
     NULL
   };
@@ -1244,6 +1246,7 @@ void AutoPlayTapes(void)
   {
     VERSION_IDENT(0,0,0,0),
     VERSION_IDENT(3,3,1,0),
+    VERSION_IDENT(0,0,0,0),
 
     -1
   };
@@ -1251,6 +1254,7 @@ void AutoPlayTapes(void)
   {
     VERSION_IDENT(9,9,9,9),
     VERSION_IDENT(4,0,1,1),
+    VERSION_IDENT(4,2,2,0),
 
     -1
   };
@@ -1258,6 +1262,7 @@ void AutoPlayTapes(void)
   {
     TAPE_PROPERTY_NONE,
     TAPE_PROPERTY_EM_RANDOM_BUG,
+    TAPE_PROPERTY_NONE,
 
     -1
   };
@@ -1408,6 +1413,8 @@ void AutoPlayTapes(void)
 
     if (global.autoplay_mode == AUTOPLAY_MODE_FIX)
     {
+      boolean skip_patch = FALSE;
+
       if (tape.engine_version < patch_version_first[patch_nr] ||
          tape.engine_version > patch_version_last[patch_nr])
       {
@@ -1420,6 +1427,22 @@ void AutoPlayTapes(void)
              (tape.engine_version / 100    ) % 100,
              (tape.engine_version          ) % 100);
 
+       skip_patch = TRUE;
+      }
+
+      if (strEqual(patch_name[patch_nr], "screen_34x34") &&
+         tape.num_participating_players == 1)
+      {
+       Print("Tape %03d %s[%02d:%02d]: (%s) - skipped.\n",
+             level_nr,  tape_patch_info,
+             tape.length_seconds / 60, tape.length_seconds % 60,
+             "not suitable for single player tapes");
+
+       skip_patch = TRUE;
+      }
+
+      if (skip_patch)
+      {
        if (patch_name[patch_nr + 1] != NULL)
        {
          // continue with next patch
@@ -1434,7 +1457,15 @@ void AutoPlayTapes(void)
        continue;
       }
 
-      tape.property_bits |= patch_property_bit[patch_nr];
+      if (strEqual(patch_name[patch_nr], "screen_34x34"))
+      {
+       tape.scr_fieldx = SCR_FIELDX_DEFAULT * 2;
+       tape.scr_fieldy = SCR_FIELDY_DEFAULT * 2;
+      }
+      else
+      {
+       tape.property_bits |= patch_property_bit[patch_nr];
+      }
     }
 
     InitCounter();