1 /*********************************************************** 2 * Rocks'n'Diamonds -- McDuffin Strikes Back! * 3 *----------------------------------------------------------* 4 * (c) 1995-2006 Artsoft Entertainment * 5 * Holger Schemel * 6 * Detmolder Strasse 189 * 7 * 33604 Bielefeld * 8 * Germany * 9 * e-mail: info@artsoft.org * 10 *----------------------------------------------------------* 11 * tape.h * 12 ***********************************************************/ 13 14 #ifndef TAPE_H 15 #define TAPE_H 16 17 18 /* values for TapeTogglePause() */ 19 #define TAPE_TOGGLE_MANUAL TRUE 20 #define TAPE_TOGGLE_AUTOMATIC FALSE 21 22 /* values for tape properties */ 23 #define MAX_TAPE_LEN (1000 * FRAMES_PER_SECOND) /* max.time x fps */ 24 25 /* some positions in the video tape control window */ 26 #define VIDEO_DISPLAY1_XPOS 5 27 #define VIDEO_DISPLAY1_YPOS 5 28 #define VIDEO_DISPLAY2_XPOS 5 29 #define VIDEO_DISPLAY2_YPOS 41 30 #define VIDEO_DISPLAY_XSIZE 90 31 #define VIDEO_DISPLAY_YSIZE 31 32 #define VIDEO_BUTTON_XSIZE 18 33 #define VIDEO_BUTTON_YSIZE 18 34 #define VIDEO_CONTROL_XPOS 5 35 #define VIDEO_CONTROL_YPOS 77 36 #define VIDEO_CONTROL_XSIZE VIDEO_DISPLAY_XSIZE 37 #define VIDEO_CONTROL_YSIZE VIDEO_BUTTON_YSIZE 38 39 /* values for video tape control */ 40 #define VIDEO_STATE_PLAY_OFF (1 << 0) 41 #define VIDEO_STATE_PLAY_ON (1 << 1) 42 #define VIDEO_STATE_PLAY (VIDEO_STATE_PLAY_OFF | VIDEO_STATE_PLAY_ON) 43 #define VIDEO_STATE_REC_OFF (1 << 2) 44 #define VIDEO_STATE_REC_ON (1 << 3) 45 #define VIDEO_STATE_REC (VIDEO_STATE_REC_OFF | VIDEO_STATE_REC_ON) 46 #define VIDEO_STATE_PAUSE_OFF (1 << 4) 47 #define VIDEO_STATE_PAUSE_ON (1 << 5) 48 #define VIDEO_STATE_PAUSE (VIDEO_STATE_PAUSE_OFF | VIDEO_STATE_PAUSE_ON) 49 #define VIDEO_STATE_DATE_OFF (1 << 6) 50 #define VIDEO_STATE_DATE_ON (1 << 7) 51 #define VIDEO_STATE_DATE (VIDEO_STATE_DATE_OFF | VIDEO_STATE_DATE_ON) 52 #define VIDEO_STATE_TIME_OFF (1 << 8) 53 #define VIDEO_STATE_TIME_ON (1 << 9) 54 #define VIDEO_STATE_TIME (VIDEO_STATE_TIME_OFF | VIDEO_STATE_TIME_ON) 55 56 #define VIDEO_STATE_FFWD_OFF (1 << 10) 57 #define VIDEO_STATE_FFWD_ON (1 << 11) 58 #define VIDEO_STATE_FFWD (VIDEO_STATE_FFWD_OFF | VIDEO_STATE_FFWD_ON) 59 #define VIDEO_STATE_PBEND_OFF (1 << 12) 60 #define VIDEO_STATE_PBEND_ON (1 << 13) 61 #define VIDEO_STATE_PBEND (VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PBEND_ON) 62 #define VIDEO_STATE_WARP_OFF (1 << 14) 63 #define VIDEO_STATE_WARP_ON (1 << 15) 64 #define VIDEO_STATE_WARP (VIDEO_STATE_WARP_OFF | VIDEO_STATE_WARP_ON) 65 #define VIDEO_STATE_WARP2_OFF (1 << 16) 66 #define VIDEO_STATE_WARP2_ON (1 << 17) 67 #define VIDEO_STATE_WARP2 (VIDEO_STATE_WARP_OFF | VIDEO_STATE_WARP_ON) 68 #define VIDEO_STATE_1STEP_OFF (1 << 18) 69 #define VIDEO_STATE_1STEP_ON (1 << 19) 70 #define VIDEO_STATE_1STEP (VIDEO_STATE_1STEP_OFF | VIDEO_STATE_1STEP_ON) 71 72 #define VIDEO_PRESS_PLAY_ON (1 << 20) 73 #define VIDEO_PRESS_PLAY_OFF (1 << 21) 74 #define VIDEO_PRESS_PLAY (VIDEO_PRESS_PLAY_OFF | VIDEO_PRESS_PLAY_ON) 75 #define VIDEO_PRESS_REC_ON (1 << 22) 76 #define VIDEO_PRESS_REC_OFF (1 << 23) 77 #define VIDEO_PRESS_REC (VIDEO_PRESS_REC_OFF | VIDEO_PRESS_REC_ON) 78 #define VIDEO_PRESS_PAUSE_ON (1 << 24) 79 #define VIDEO_PRESS_PAUSE_OFF (1 << 25) 80 #define VIDEO_PRESS_PAUSE (VIDEO_PRESS_PAUSE_OFF | VIDEO_PRESS_PAUSE_ON) 81 #define VIDEO_PRESS_STOP_ON (1 << 26) 82 #define VIDEO_PRESS_STOP_OFF (1 << 27) 83 #define VIDEO_PRESS_STOP (VIDEO_PRESS_STOP_OFF | VIDEO_PRESS_STOP_ON) 84 #define VIDEO_PRESS_EJECT_ON (1 << 28) 85 #define VIDEO_PRESS_EJECT_OFF (1 << 29) 86 #define VIDEO_PRESS_EJECT (VIDEO_PRESS_EJECT_OFF | VIDEO_PRESS_EJECT_ON) 87 88 /* tags to draw video display labels or symbols only */ 89 /* (negative values to prevent misinterpretation in DrawVideoDisplay(), where 90 the variable "value" is also used for tape length -- better fix this) */ 91 #define VIDEO_DISPLAY_DEFAULT 0 92 #define VIDEO_DISPLAY_LABEL_ONLY -1 93 #define VIDEO_DISPLAY_SYMBOL_ONLY -2 94 95 96 struct TapeButtonInfo 97 { 98 struct Rect eject; 99 struct Rect stop; 100 struct Rect pause; 101 struct Rect record; 102 struct Rect play; 103 }; 104 105 struct TapeSymbolInfo 106 { 107 struct Rect eject; 108 struct Rect stop; 109 struct Rect pause; 110 struct Rect record; 111 struct Rect play; 112 struct Rect fast_forward; 113 struct Rect warp_forward; 114 struct Rect warp_forward_blind; 115 struct Rect pause_before_end; 116 struct Rect single_step; 117 }; 118 119 struct TapeLabelInfo 120 { 121 struct Rect eject; 122 struct Rect stop; 123 struct Rect pause; 124 struct Rect record; 125 struct Rect play; 126 struct Rect fast_forward; 127 struct Rect warp_forward; 128 struct Rect warp_forward_blind; 129 struct Rect pause_before_end; 130 struct Rect single_step; 131 struct Rect date; 132 struct Rect time; 133 }; 134 135 struct TapeTextInfo 136 { 137 struct TextPosInfo date; 138 struct TextPosInfo time; 139 }; 140 141 struct TapeInfo 142 { 143 int file_version; /* file format version the tape is stored with */ 144 int game_version; /* game release version the tape was created with */ 145 int engine_version; /* game engine version the tape was recorded with */ 146 147 char *level_identifier; 148 int level_nr; 149 unsigned int random_seed; 150 unsigned int date; 151 unsigned int counter; 152 unsigned int length; 153 unsigned int length_seconds; 154 unsigned int delay_played; 155 boolean pause_before_death; 156 boolean recording, playing, pausing; 157 boolean fast_forward; 158 boolean warp_forward; 159 boolean deactivate_display; 160 boolean auto_play; 161 boolean auto_play_level_solved; 162 boolean quick_resume; 163 boolean single_step; 164 boolean changed; 165 boolean player_participates[MAX_PLAYERS]; 166 int num_participating_players; 167 int centered_player_nr_next; 168 boolean set_centered_player; 169 170 struct 171 { 172 byte action[MAX_PLAYERS]; 173 byte delay; 174 } pos[MAX_TAPE_LEN]; 175 176 struct TapeButtonInfo button; 177 struct TapeSymbolInfo symbol; 178 struct TapeLabelInfo label; 179 struct TapeTextInfo text; 180 181 boolean no_valid_file; /* set when tape file missing or invalid */ 182 }; 183 184 185 void DrawVideoDisplay(unsigned int, unsigned int); 186 void DrawCompleteVideoDisplay(void); 187 188 void TapeDeactivateDisplayOn(); 189 void TapeDeactivateDisplayOff(boolean); 190 191 void TapeSetDateFromEpochSeconds(time_t); 192 void TapeSetDateFromNow(); 193 194 void TapeStartRecording(int); 195 void TapeHaltRecording(void); 196 void TapeStopRecording(void); 197 void TapeRecordAction(byte *); 198 void TapeTogglePause(boolean); 199 void TapeStartPlaying(void); 200 void TapeStopPlaying(void); 201 byte *TapePlayAction(void); 202 void TapeStop(void); 203 void TapeErase(void); 204 unsigned int GetTapeLength(void); 205 void TapeQuickSave(void); 206 void TapeQuickLoad(void); 207 void InsertSolutionTape(void); 208 209 void AutoPlayTape(void); 210 211 void CreateTapeButtons(); 212 void FreeTapeButtons(); 213 void MapTapeEjectButton(); 214 void MapTapeWarpButton(); 215 void MapTapeButtons(); 216 void UnmapTapeButtons(); 217 218 void HandleTapeButtonKeys(Key); 219 220 #endif 221