X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=43c97f5ce7d2938175ddf1aad4e858e1e8f75762;hb=91afd13180ad610e2a6cbef32b85677cf8148864;hp=8ca52a0335e4e172751344f4cf655346c72a4533;hpb=30d133ac6c0358f7c895df1af02ff4cca730707f;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 8ca52a03..43c97f5c 100644 --- a/src/tape.c +++ b/src/tape.c @@ -168,7 +168,7 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) { int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2; - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, cx + VIDEO_REC_LABEL_XPOS, cy + VIDEO_REC_LABEL_YPOS, VIDEO_PBEND_LABEL_XSIZE, @@ -189,7 +189,7 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) cx = DOOR_GFX_PAGEX3; /* i gerade => STATE_OFF / PRESS_ON */ if (video_pos[pos][part_label][0] && value != VIDEO_DISPLAY_SYMBOL_ONLY) - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, cx + video_pos[pos][part_label][xpos], cy + video_pos[pos][part_label][ypos], video_pos[pos][part_label][xsize], @@ -197,7 +197,7 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) VX + video_pos[pos][part_label][xpos], VY + video_pos[pos][part_label][ypos]); if (video_pos[pos][part_symbol][0] && value != VIDEO_DISPLAY_LABEL_ONLY) - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, cx + video_pos[pos][part_symbol][xpos], cy + video_pos[pos][part_symbol][ypos], video_pos[pos][part_symbol][xsize], @@ -211,7 +211,7 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) { int cx = DOOR_GFX_PAGEX4, cy = DOOR_GFX_PAGEY2; - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, cx + VIDEO_PLAY_SYMBOL_XPOS, cy + VIDEO_PLAY_SYMBOL_YPOS, VIDEO_PLAY_SYMBOL_XSIZE - 2, @@ -224,7 +224,7 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) { int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1; - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, cx + VIDEO_PBEND_LABEL_XPOS, cy + VIDEO_PBEND_LABEL_YPOS, VIDEO_PBEND_LABEL_XSIZE, @@ -239,12 +239,12 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) int monat = (value/100) % 100; int jahr = (value/10000); - DrawText(VX+VIDEO_DATE_XPOS,VY+VIDEO_DATE_YPOS, - int2str(tag,2),FS_SMALL,FC_SPECIAL1); - DrawText(VX+VIDEO_DATE_XPOS+27,VY+VIDEO_DATE_YPOS, - monatsname[monat],FS_SMALL,FC_SPECIAL1); - DrawText(VX+VIDEO_DATE_XPOS+64,VY+VIDEO_DATE_YPOS, - int2str(jahr,2),FS_SMALL,FC_SPECIAL1); + DrawText(VX + VIDEO_DATE_XPOS, VY + VIDEO_DATE_YPOS, + int2str(tag, 2), FONT_TAPE_RECORDER); + DrawText(VX + VIDEO_DATE_XPOS + 27, VY + VIDEO_DATE_YPOS, + monatsname[monat], FONT_TAPE_RECORDER); + DrawText(VX + VIDEO_DATE_XPOS + 64, VY + VIDEO_DATE_YPOS, + int2str(jahr, 2), FONT_TAPE_RECORDER); } if (state & VIDEO_STATE_TIME_ON) @@ -252,10 +252,10 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) int min = value / 60; int sec = value % 60; - DrawText(VX+VIDEO_TIME_XPOS,VY+VIDEO_TIME_YPOS, - int2str(min,2),FS_SMALL,FC_SPECIAL1); - DrawText(VX+VIDEO_TIME_XPOS+27,VY+VIDEO_TIME_YPOS, - int2str(sec,2),FS_SMALL,FC_SPECIAL1); + DrawText(VX + VIDEO_TIME_XPOS, VY + VIDEO_TIME_YPOS, + int2str(min, 2), FONT_TAPE_RECORDER); + DrawText(VX + VIDEO_TIME_XPOS + 27, VY + VIDEO_TIME_YPOS, + int2str(sec, 2), FONT_TAPE_RECORDER); } if (state & VIDEO_STATE_DATE) @@ -268,10 +268,10 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) void DrawCompleteVideoDisplay() { - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, DOOR_GFX_PAGEX3, DOOR_GFX_PAGEY2, gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); - BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto, + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, DOOR_GFX_PAGEX4 + VIDEO_CONTROL_XPOS, DOOR_GFX_PAGEY2 + VIDEO_CONTROL_YPOS, VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE, @@ -302,6 +302,9 @@ void TapeErase() tape.length = 0; tape.counter = 0; + if (leveldir_current) + setString(&tape.level_identifier, leveldir_current->identifier); + tape.level_nr = level_nr; tape.pos[tape.counter].delay = 0; tape.changed = TRUE; @@ -326,7 +329,7 @@ static void TapeRewind() tape.playing = FALSE; tape.fast_forward = FALSE; tape.index_search = FALSE; - tape.auto_play = (options.autoplay_leveldir != NULL); + tape.auto_play = (global.autoplay_leveldir != NULL); tape.auto_play_level_solved = FALSE; tape.quick_resume = FALSE; tape.single_step = FALSE; @@ -614,7 +617,7 @@ static void TapeStartIndexSearch() { tape.pausing = FALSE; - SetDrawDeactivationMask(REDRAW_FIELD | REDRAW_DOOR_1); + SetDrawDeactivationMask(REDRAW_FIELD); audio.sound_deactivated = TRUE; } } @@ -682,31 +685,63 @@ void TapeQuickLoad() * tape autoplay functions * ------------------------------------------------------------------------- */ +#define MAX_NUM_AUTOPLAY_LEVELS 1000 + void AutoPlayTape() { static LevelDirTree *autoplay_leveldir = NULL; static boolean autoplay_initialized = FALSE; static int autoplay_level_nr = -1; + static int num_levels_played = 0; + static int num_levels_solved = 0; + static boolean levels_failed[MAX_NUM_AUTOPLAY_LEVELS]; + int i; if (autoplay_initialized) { /* just finished auto-playing tape */ printf("%s.\n", tape.auto_play_level_solved ? "solved" : "NOT SOLVED"); + + num_levels_played++; + if (tape.auto_play_level_solved) + num_levels_solved++; + else if (level_nr >= 0 && level_nr < MAX_NUM_AUTOPLAY_LEVELS) + levels_failed[level_nr] = TRUE; } else { + DrawCompleteVideoDisplay(); + audio.sound_enabled = FALSE; + autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first, - options.autoplay_leveldir); + global.autoplay_leveldir); if (autoplay_leveldir == NULL) Error(ERR_EXIT, "no such level identifier: '%s'", - options.autoplay_leveldir); + 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("Playing tapes of level series '%s'.\n", options.autoplay_leveldir); + 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"); + + for (i=0; i= autoplay_leveldir->last_level) - CloseAllAndExit(0); + TapeStartGamePlaying(); + TapeStartIndexSearch(); - printf("playing tape ... "); + return; + } - TapeStartGamePlaying(); - TapeStartIndexSearch(); + printf("\n"); + printf_line("=", 79); + printf("Number of levels played: %d\n", num_levels_played); + printf("Number of levels solved: %d (%d%%)\n", num_levels_solved, + (num_levels_played ? num_levels_solved * 100 / num_levels_played :0)); + printf_line("-", 79); + printf("Summary (for automatic parsing by scripts):\n"); + printf("LEVELDIR '%s', SOLVED %d/%d (%d%%)", + autoplay_leveldir->identifier, num_levels_solved, num_levels_played, + (num_levels_played ? num_levels_solved * 100 / num_levels_played :0)); + if (num_levels_played != num_levels_solved) + { + printf(", FAILED:"); + for (i=0; i