+ Print("Tape %03d: (no tape found)\n", level_nr);
+
+ continue;
+ }
+
+ 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])
+ {
+ Print("Tape %03d %s[%02d:%02d]: (%s %d.%d.%d.%d) - skipped.\n",
+ level_nr, tape_patch_info,
+ tape.length_seconds / 60, tape.length_seconds % 60,
+ "not suitable for version",
+ (tape.engine_version / 1000000) % 100,
+ (tape.engine_version / 10000 ) % 100,
+ (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
+ patch_nr++;
+ }
+ else
+ {
+ // continue with next tape
+ patch_nr = 0;
+ }
+
+ continue;
+ }
+
+ 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];
+ }
+ }
+
+ num_tapes++;
+
+ if (global.autoplay_mode == AUTOPLAY_MODE_UPLOAD)
+ {
+ boolean use_temporary_tape_file = FALSE;
+
+ Print("Tape %03d:\n", level_nr);
+
+ AutoPlayTapes_SetScoreEntry(0, 0);
+
+ if (autoplay.tape_filename == NULL)
+ {
+ autoplay.tape_filename = (options.mytapes ? getTapeFilename(level_nr) :
+ getDefaultSolutionTapeFilename(level_nr));
+
+ if (!fileExists(autoplay.tape_filename))
+ {
+ // non-standard or incorrect solution tape -- save to temporary file
+ autoplay.tape_filename = getTemporaryTapeFilename();
+
+ SaveTapeToFilename(autoplay.tape_filename);
+
+ use_temporary_tape_file = TRUE;
+ }
+ }
+
+ SaveServerScoreFromFile(level_nr, TRUE, autoplay.tape_filename);
+
+ boolean success = AutoPlayTapes_WaitForUpload();
+
+ if (use_temporary_tape_file)
+ unlink(autoplay.tape_filename);
+
+ // required for uploading multiple tapes
+ autoplay.tape_filename = NULL;
+
+ if (!success)
+ {
+ num_tapes = -num_tapes;
+
+ break;
+ }