#include "libgame/libgame.h"
#include "tape.h"
+#include "init.h"
#include "game.h"
#include "tools.h"
#include "files.h"
tape.playing = FALSE;
tape.fast_forward = FALSE;
tape.index_search = FALSE;
+ tape.auto_play = (global.autoplay_leveldir != NULL);
+ tape.auto_play_level_solved = FALSE;
tape.quick_resume = FALSE;
tape.single_step = FALSE;
if (tape.counter >= tape.length) /* end of tape reached */
{
- if (tape.index_search)
+ if (tape.index_search && !tape.auto_play)
TapeTogglePause(TAPE_TOGGLE_MANUAL);
else
TapeStop();
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
}
+
+ if (tape.auto_play)
+ AutoPlayTape(); /* continue automatically playing next tape */
}
unsigned int GetTapeLength()
{
tape.pausing = FALSE;
- SetDrawDeactivationMask(REDRAW_FIELD | REDRAW_DOOR_1);
+ SetDrawDeactivationMask(REDRAW_FIELD);
audio.sound_deactivated = TRUE;
}
}
}
+/* ------------------------------------------------------------------------- *
+ * tape autoplay functions
+ * ------------------------------------------------------------------------- */
+
+void AutoPlayTape()
+{
+ static LevelDirTree *autoplay_leveldir = NULL;
+ static boolean autoplay_initialized = FALSE;
+ static int autoplay_level_nr = -1;
+ static int levels_played = 0;
+ static int levels_solved = 0;
+
+ if (autoplay_initialized)
+ {
+ /* just finished auto-playing tape */
+ printf("%s.\n", tape.auto_play_level_solved ? "solved" : "NOT SOLVED");
+
+ levels_played++;
+ if (tape.auto_play_level_solved)
+ levels_solved++;
+ }
+ else
+ {
+ DrawCompleteVideoDisplay();
+ audio.sound_enabled = FALSE;
+
+ autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first,
+ global.autoplay_leveldir);
+
+ if (autoplay_leveldir == NULL)
+ Error(ERR_EXIT, "no such level identifier: '%s'",
+ global.autoplay_leveldir);
+
+ leveldir_current = autoplay_leveldir;
+
+ if (global.autoplay_level_nr != -1)
+ {
+ autoplay_leveldir->first_level = global.autoplay_level_nr;
+ autoplay_leveldir->last_level = global.autoplay_level_nr;
+ }
+
+ autoplay_level_nr = autoplay_leveldir->first_level;
+
+ printf_line('=', 79);
+ printf("Automatically playing level tapes\n");
+ printf_line('-', 79);
+ printf("Level series identifier: '%s'\n", autoplay_leveldir->identifier);
+ printf("Level series name: '%s'\n", autoplay_leveldir->name);
+ printf("Level series author: '%s'\n", autoplay_leveldir->author);
+ printf("Number of levels: %d\n", autoplay_leveldir->levels);
+ printf_line('=', 79);
+ printf("\n");
+
+ autoplay_initialized = TRUE;
+ }
+
+ while (autoplay_level_nr <= autoplay_leveldir->last_level)
+ {
+ level_nr = autoplay_level_nr++;
+
+ TapeErase();
+
+ printf("Level %03d: ", level_nr);
+
+ LoadLevel(level_nr);
+ if (level.no_level_file)
+ {
+ printf("(no level)\n");
+ continue;
+ }
+
+ LoadTape(level_nr);
+ if (TAPE_IS_EMPTY(tape))
+ {
+ printf("(no tape)\n");
+ continue;
+ }
+
+ printf("playing tape ... ");
+
+ TapeStartGamePlaying();
+ TapeStartIndexSearch();
+
+ return;
+ }
+
+ printf("\n");
+ printf_line('=', 79);
+ printf("Number of levels played: %d\n", levels_played);
+ printf("Number of levels solved: %d (%d%%)\n", levels_solved,
+ levels_solved * 100 / levels_played);
+ printf_line('-', 79);
+ printf("Summary (for automatic parsing by scripts):\n");
+ printf("LEVELDIR '%s', SOLVED %d/%d (%d%%)\n",
+ autoplay_leveldir->identifier, levels_solved, levels_played,
+ levels_solved * 100 / levels_played);
+ printf_line('=', 79);
+
+ CloseAllAndExit(0);
+}
+
+
/* ---------- new tape button stuff ---------------------------------------- */
/* graphic position values for tape buttons */
}
}
+void FreeTapeButtons()
+{
+ int i;
+
+ for (i=0; i<NUM_TAPE_BUTTONS; i++)
+ FreeGadget(tape_gadget[i]);
+}
+
void MapTapeEjectButton()
{
UnmapGadget(tape_gadget[TAPE_CTRL_ID_INDEX]);