X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=963426033e02a9bb58a0013533e58364ff239137;hb=8c6f354ceb0f49857489ef2df0303e155e7f6846;hp=7add692b51d605ad0bd07b50b8a276f09e89e6a4;hpb=49221e59bff18cdfbef8c877b588280266ae5037;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 7add692b..96342603 100644 --- a/src/tape.c +++ b/src/tape.c @@ -1,14 +1,14 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2001 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* tape.c * +* tape.c * ***********************************************************/ #include "libgame/libgame.h" @@ -18,15 +18,20 @@ #include "tools.h" #include "files.h" #include "network.h" +#include "cartoons.h" /* tape button identifiers */ #define TAPE_CTRL_ID_EJECT 0 -#define TAPE_CTRL_ID_STOP 1 -#define TAPE_CTRL_ID_PAUSE 2 -#define TAPE_CTRL_ID_RECORD 3 -#define TAPE_CTRL_ID_PLAY 4 +#define TAPE_CTRL_ID_INDEX 1 +#define TAPE_CTRL_ID_STOP 2 +#define TAPE_CTRL_ID_PAUSE 3 +#define TAPE_CTRL_ID_RECORD 4 +#define TAPE_CTRL_ID_PLAY 5 -#define NUM_TAPE_BUTTONS 5 +#define NUM_TAPE_BUTTONS 6 + +/* values for tape handling */ +#define TAPE_PAUSE_SECONDS_BEFORE_DEATH 5 /* forward declaration for internal use */ static void HandleTapeButtons(struct GadgetInfo *); @@ -77,7 +82,7 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; #define VIDEO_TIME_YSIZE 16 /* special */ -#define VIDEO_PBEND_LABEL_XPOS 6 +#define VIDEO_PBEND_LABEL_XPOS 5 #define VIDEO_PBEND_LABEL_YPOS 220 #define VIDEO_PBEND_LABEL_XSIZE 35 #define VIDEO_PBEND_LABEL_YSIZE 30 @@ -304,6 +309,7 @@ void TapeStartRecording() tape.changed = TRUE; tape.date = 10000*(zeit2->tm_year%100) + 100*zeit2->tm_mon + zeit2->tm_mday; tape.random_seed = InitRND(NEW_RANDOMIZE); + tape.game_version = GAME_VERSION_ACTUAL; for(i=0; i 0) /* already stored action */ + { + boolean changed_events = FALSE; - if (!tape.recording || tape.pausing) - return; + for(i=0; i= MAX_TAPELEN) - { - TapeStopRecording(); - return; + if (changed_events || tape.pos[tape.counter].delay >= 255) + { + tape.counter++; + tape.pos[tape.counter].delay = 0; + } + else + tape.pos[tape.counter].delay++; } - tape.pos[tape.counter].delay++; - - if (tape.pos[tape.counter].delay >= 255) + if (tape.pos[tape.counter].delay == 0) /* store new action */ { for(i=0; i= tape.length) - { - TapeStop(); - return(NULL); - } - - if (tape.delay_played == tape.pos[tape.counter].delay) - { - tape.delay_played = 0; - tape.counter++; - - for(i=0; i tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) { TapeTogglePause(); - return(FALSE); + return NULL; } } - if (tape.counter >= tape.length) + if (tape.counter >= tape.length) /* end of tape reached */ { - TapeStop(); - return(TRUE); + if (tape.index_search) + TapeTogglePause(); + else + TapeStop(); + + return NULL; } - if (tape.delay_played < tape.pos[tape.counter].delay) + for(i=0; i= tape.pos[tape.counter].delay) { - tape.delay_played++; - return(TRUE); + tape.counter++; + tape.delay_played = 0; } - else - return(FALSE); + + return action; } void TapeStop() @@ -535,6 +536,7 @@ unsigned int GetTapeLength() #define TAPE_BUTTON_YPOS 77 #define TAPE_BUTTON_EJECT_XPOS (TAPE_BUTTON_XPOS + 0 * TAPE_BUTTON_XSIZE) +#define TAPE_BUTTON_INDEX_XPOS (TAPE_BUTTON_XPOS + 0 * TAPE_BUTTON_XSIZE) #define TAPE_BUTTON_STOP_XPOS (TAPE_BUTTON_XPOS + 1 * TAPE_BUTTON_XSIZE) #define TAPE_BUTTON_PAUSE_XPOS (TAPE_BUTTON_XPOS + 2 * TAPE_BUTTON_XSIZE) #define TAPE_BUTTON_RECORD_XPOS (TAPE_BUTTON_XPOS + 3 * TAPE_BUTTON_XSIZE) @@ -552,6 +554,11 @@ static struct TAPE_CTRL_ID_EJECT, "eject tape" }, + { + TAPE_BUTTON_INDEX_XPOS, TAPE_BUTTON_YPOS, + TAPE_CTRL_ID_INDEX, + "index mark" + }, { TAPE_BUTTON_STOP_XPOS, TAPE_BUTTON_YPOS, TAPE_CTRL_ID_STOP, @@ -580,7 +587,7 @@ void CreateTapeButtons() for (i=0; i PAUSING -> RECORDING */ { + if (tape.game_version != GAME_VERSION_ACTUAL && + !Request("This may break old version tape ! Append anyway ?", + REQ_ASK)) + break; + tape.pos[tape.counter].delay = tape.delay_played; tape.playing = FALSE; tape.recording = TRUE; tape.changed = TRUE; + tape.game_version = GAME_VERSION_ACTUAL; DrawVideoDisplay(VIDEO_STATE_PLAY_OFF | VIDEO_STATE_REC_ON,0); } @@ -703,6 +753,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi) TapeStartPlaying(); game_status = PLAYING; + StopAnimation(); InitGame(); } else if (tape.playing)