X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftape.c;h=4f1239171c65ed91e7aa58b494bedddd9be5a9a8;hp=bc258b66fae809f9b53889abf9958a0048b38454;hb=abe44529b439ad39b4d8dbf19cbd67c9b9844279;hpb=d1eb03c63b0eaa2fd1bfa97d4b68ef678aa07bd2 diff --git a/src/tape.c b/src/tape.c index bc258b66..4f123917 100644 --- a/src/tape.c +++ b/src/tape.c @@ -1,15 +1,13 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* tape.c * -***********************************************************/ +// ============================================================================ +// Rocks'n'Diamonds - McDuffin Strikes Back! +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// tape.c +// ============================================================================ #include "libgame/libgame.h" @@ -186,7 +184,7 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; /* video display functions */ /* ========================================================================= */ -void DrawVideoDisplay(unsigned long state, unsigned long value) +void DrawVideoDisplay(unsigned int state, unsigned int value) { int i, j, k; static char *monatsname[12] = @@ -409,18 +407,6 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) video_pos[i][j].pos->y < 0) continue; -#if 0 - printf("::: %d: %d, %ld\n", - i, - video_pos[i][j].graphic, - graphic_info[video_pos[i][j].graphic].bitmap); -#endif - -#if 0 - if (i < 9) - continue; -#endif - if (state & (1 << (i * 2 + k))) { struct GraphicInfo *gfx_bg = &graphic_info[IMG_BACKGROUND_TAPE]; @@ -447,20 +433,6 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) gd_y = gfx_bg->src_y + pos->y; } -#if 0 - printf("::: %d (%d): %d, %ld - %d [%d] [%d] [%d]\n", - i, k, - video_pos[i][j].graphic, - graphic_info[video_pos[i][j].graphic].bitmap, - gfx->bitmap, - gd_bitmap, - (gd_bitmap == NULL), - 0); - - if (gd_bitmap == NULL) - printf("::: gfx %d skipped\n", video_pos[i][j].graphic); -#endif - /* some tape graphics may be undefined -- only draw if defined */ if (gd_bitmap != NULL) BlitBitmap(gd_bitmap, drawto, gd_x, gd_y, gfx->width, gfx->height, @@ -570,6 +542,52 @@ void DrawCompleteVideoDisplay() tape.date, tape.length); #endif +#if 1 + + struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE]; + + /* draw tape background */ + BlitBitmap(g_tape->bitmap, drawto, g_tape->src_x, g_tape->src_y, + gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); + + /* draw tape buttons (forced) */ + UnmapTapeButtons(); + MapTapeButtons(); + +#else + +#if 1 + struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE]; + int tape_button_graphics[] = + { + IMG_TAPE_BUTTON_GFX_EJECT, + IMG_TAPE_BUTTON_GFX_STOP, + IMG_TAPE_BUTTON_GFX_PAUSE, + IMG_TAPE_BUTTON_GFX_RECORD, + IMG_TAPE_BUTTON_GFX_PLAY + }; + struct Rect *tape_button_positions[] = + { + &tape.button.eject, + &tape.button.stop, + &tape.button.pause, + &tape.button.record, + &tape.button.play + }; + int i; + + BlitBitmap(g_tape->bitmap, drawto, g_tape->src_x, g_tape->src_y, + gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); + + for (i = 0; i < SIZEOF_ARRAY_INT(tape_button_graphics); i++) + { + struct GraphicInfo *g = &graphic_info[tape_button_graphics[i]]; + struct Rect *pos = tape_button_positions[i]; + + BlitBitmap(g->bitmap, drawto, g->src_x, g->src_y, + g->width, g->height, gfx.vx + pos->x, gfx.vy + pos->y); + } +#else BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, DOOR_GFX_PAGEX3, DOOR_GFX_PAGEY2, gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); @@ -578,6 +596,9 @@ void DrawCompleteVideoDisplay() DOOR_GFX_PAGEY2 + VIDEO_CONTROL_YPOS, VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE, gfx.vx + VIDEO_CONTROL_XPOS, gfx.vy + VIDEO_CONTROL_YPOS); +#endif + +#endif DrawVideoDisplay(VIDEO_ALL_OFF, 0); @@ -613,8 +634,13 @@ void DrawCompleteVideoDisplay() } #endif +#if 1 + BlitBitmap(drawto, bitmap_db_door_2, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize, + 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2); +#endif } void TapeDeactivateDisplayOn() @@ -703,12 +729,12 @@ static void TapeRewind() InitRND(tape.random_seed); } -static void TapeSetRandomSeed(long random_seed) +static void TapeSetRandomSeed(int random_seed) { tape.random_seed = InitRND(random_seed); } -void TapeStartRecording(long random_seed) +void TapeStartRecording(int random_seed) { if (!TAPE_IS_STOPPED(tape)) TapeStop(); @@ -1105,7 +1131,7 @@ void TapeQuickSave() { if (game_status == GAME_MODE_MAIN) { - Request("No game that can be saved !", REQ_CONFIRM); + Request("No game that can be saved!", REQ_CONFIRM); return; } @@ -1118,7 +1144,7 @@ void TapeQuickSave() if (TAPE_IS_EMPTY(tape)) { - Request("No tape that can be saved !", REQ_CONFIRM); + Request("No tape that can be saved!", REQ_CONFIRM); return; } @@ -1133,12 +1159,12 @@ void TapeQuickLoad() if (!fileExists(filename)) { - Request("No tape for this level !", REQ_CONFIRM); + Request("No tape for this level!", REQ_CONFIRM); return; } - if (tape.recording && !Request("Stop recording and load tape ?", + if (tape.recording && !Request("Stop recording and load tape?", REQ_ASK | REQ_STAY_CLOSED)) { OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK); @@ -1151,6 +1177,10 @@ void TapeQuickLoad() if (CheckEngineSnapshot()) { +#if 0 + printf("::: MARK 1\n"); +#endif + TapeStartGamePlaying(); LoadEngineSnapshot(); @@ -1167,6 +1197,10 @@ void TapeQuickLoad() return; } +#if 0 + printf("::: MARK 2\n"); +#endif + TapeStop(); TapeErase(); @@ -1183,7 +1217,7 @@ void TapeQuickLoad() { int reopen_door = (game_status == GAME_MODE_PLAYING ? REQ_REOPEN : 0); - Request("No tape for this level !", REQ_CONFIRM | reopen_door); + Request("No tape for this level!", REQ_CONFIRM | reopen_door); } } @@ -1195,7 +1229,7 @@ void InsertSolutionTape() LoadSolutionTape(level_nr); if (TAPE_IS_EMPTY(tape)) - Request("No solution tape for this level !", REQ_CONFIRM); + Request("No solution tape for this level!", REQ_CONFIRM); DrawCompleteVideoDisplay(); } @@ -1214,7 +1248,9 @@ void AutoPlayTape() static int num_levels_solved = 0; static int num_tape_missing = 0; static boolean level_failed[MAX_TAPES_PER_SET]; +#if 0 static boolean tape_missing[MAX_TAPES_PER_SET]; +#endif int i; if (autoplay_initialized) @@ -1263,7 +1299,9 @@ void AutoPlayTape() for (i = 0; i < MAX_TAPES_PER_SET; i++) { level_failed[i] = FALSE; +#if 0 tape_missing[i] = FALSE; +#endif } autoplay_initialized = TRUE; @@ -1298,8 +1336,10 @@ void AutoPlayTape() if (tape.no_valid_file) { num_tape_missing++; +#if 0 if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET) tape_missing[level_nr] = TRUE; +#endif printf("(no tape)\n"); continue; @@ -1453,6 +1493,9 @@ void MapTapeButtons() if (tape.recording || tape.playing) MapTapeWarpButton(); + + if (tape.show_game_buttons) + MapGameButtons(); } void UnmapTapeButtons() @@ -1478,7 +1521,7 @@ static void HandleTapeButtonsExt(int id) LoadTape(level_nr); if (TAPE_IS_EMPTY(tape)) - Request("No tape for this level !", REQ_CONFIRM); + Request("No tape for this level!", REQ_CONFIRM); } else {