X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftape.h;h=23773684aeb794702b18ed56d3d4c1c6dc0b5536;hp=34f17889f7f84916eef0edc6cf18f1e7682cf565;hb=38212569c2f58866417f26e9c813ed8b23c5b2c4;hpb=f14f53f27cfe4666e2cdb79899896b91eec80a51 diff --git a/src/tape.h b/src/tape.h index 34f17889..23773684 100644 --- a/src/tape.h +++ b/src/tape.h @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // tape.h // ============================================================================ @@ -13,14 +13,33 @@ #define TAPE_H -/* values for TapeTogglePause() */ -#define TAPE_TOGGLE_MANUAL TRUE -#define TAPE_TOGGLE_AUTOMATIC FALSE +// values for TapeTogglePause() +#define TAPE_TOGGLE_AUTOMATIC 0 +#define TAPE_TOGGLE_MANUAL (1 << 0) +#define TAPE_TOGGLE_PLAY_PAUSE (1 << 1) -/* values for tape properties */ -#define MAX_TAPE_LEN (1000 * FRAMES_PER_SECOND) /* max.time x fps */ +// values for tape properties +#define MAX_TAPE_LEN (1000 * FRAMES_PER_SECOND) // max.time x fps -/* some positions in the video tape control window */ +// values for tape action array positions +#define TAPE_ACTION_LX (MAX_PLAYERS + 0) +#define TAPE_ACTION_LY (MAX_PLAYERS + 1) +#define TAPE_ACTION_BUTTON (MAX_PLAYERS + 2) + +#define MAX_TAPE_ACTIONS (MAX_PLAYERS + 3) + +// values for tape actions stored in tape file +#define TAPE_USE_KEY_ACTIONS_ONLY 0 +#define TAPE_USE_MOUSE_ACTIONS_ONLY 1 +#define TAPE_USE_KEY_AND_MOUSE_ACTIONS 2 + +#define TAPE_ACTIONS_DEFAULT TAPE_USE_KEY_ACTIONS_ONLY + +// values for tape properties stored in tape file +#define TAPE_PROPERTY_NONE 0 +#define TAPE_PROPERTY_EM_RANDOM_BUG (1 << 0) + +// some positions in the video tape control window #define VIDEO_DISPLAY1_XPOS 5 #define VIDEO_DISPLAY1_YPOS 5 #define VIDEO_DISPLAY2_XPOS 5 @@ -34,61 +53,62 @@ #define VIDEO_CONTROL_XSIZE VIDEO_DISPLAY_XSIZE #define VIDEO_CONTROL_YSIZE VIDEO_BUTTON_YSIZE -/* values for video tape control */ +// values for video tape control #define VIDEO_STATE_PLAY_OFF (1 << 0) #define VIDEO_STATE_PLAY_ON (1 << 1) -#define VIDEO_STATE_PLAY (VIDEO_STATE_PLAY_OFF | VIDEO_STATE_PLAY_ON) #define VIDEO_STATE_REC_OFF (1 << 2) #define VIDEO_STATE_REC_ON (1 << 3) -#define VIDEO_STATE_REC (VIDEO_STATE_REC_OFF | VIDEO_STATE_REC_ON) #define VIDEO_STATE_PAUSE_OFF (1 << 4) #define VIDEO_STATE_PAUSE_ON (1 << 5) -#define VIDEO_STATE_PAUSE (VIDEO_STATE_PAUSE_OFF | VIDEO_STATE_PAUSE_ON) #define VIDEO_STATE_DATE_OFF (1 << 6) #define VIDEO_STATE_DATE_ON (1 << 7) -#define VIDEO_STATE_DATE (VIDEO_STATE_DATE_OFF | VIDEO_STATE_DATE_ON) #define VIDEO_STATE_TIME_OFF (1 << 8) #define VIDEO_STATE_TIME_ON (1 << 9) -#define VIDEO_STATE_TIME (VIDEO_STATE_TIME_OFF | VIDEO_STATE_TIME_ON) #define VIDEO_STATE_FRAME_OFF (1 << 10) #define VIDEO_STATE_FRAME_ON (1 << 11) -#define VIDEO_STATE_FRAME (VIDEO_STATE_FRAME_OFF | VIDEO_STATE_FRAME_ON) - #define VIDEO_STATE_FFWD_OFF (1 << 12) #define VIDEO_STATE_FFWD_ON (1 << 13) -#define VIDEO_STATE_FFWD (VIDEO_STATE_FFWD_OFF | VIDEO_STATE_FFWD_ON) -#define VIDEO_STATE_PBEND_OFF (1 << 14) -#define VIDEO_STATE_PBEND_ON (1 << 15) -#define VIDEO_STATE_PBEND (VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PBEND_ON) -#define VIDEO_STATE_WARP_OFF (1 << 16) -#define VIDEO_STATE_WARP_ON (1 << 17) -#define VIDEO_STATE_WARP (VIDEO_STATE_WARP_OFF | VIDEO_STATE_WARP_ON) -#define VIDEO_STATE_WARP2_OFF (1 << 18) -#define VIDEO_STATE_WARP2_ON (1 << 19) -#define VIDEO_STATE_WARP2 (VIDEO_STATE_WARP2_OFF | VIDEO_STATE_WARP2_ON) +#define VIDEO_STATE_WARP_OFF (1 << 14) +#define VIDEO_STATE_WARP_ON (1 << 15) +#define VIDEO_STATE_WARP2_OFF (1 << 16) +#define VIDEO_STATE_WARP2_ON (1 << 17) +#define VIDEO_STATE_PBEND_OFF (1 << 18) +#define VIDEO_STATE_PBEND_ON (1 << 19) #define VIDEO_STATE_1STEP_OFF (1 << 20) #define VIDEO_STATE_1STEP_ON (1 << 21) -#define VIDEO_STATE_1STEP (VIDEO_STATE_1STEP_OFF | VIDEO_STATE_1STEP_ON) #define VIDEO_PRESS_PLAY_ON (1 << 22) #define VIDEO_PRESS_PLAY_OFF (1 << 23) -#define VIDEO_PRESS_PLAY (VIDEO_PRESS_PLAY_OFF | VIDEO_PRESS_PLAY_ON) #define VIDEO_PRESS_REC_ON (1 << 24) #define VIDEO_PRESS_REC_OFF (1 << 25) -#define VIDEO_PRESS_REC (VIDEO_PRESS_REC_OFF | VIDEO_PRESS_REC_ON) #define VIDEO_PRESS_PAUSE_ON (1 << 26) #define VIDEO_PRESS_PAUSE_OFF (1 << 27) -#define VIDEO_PRESS_PAUSE (VIDEO_PRESS_PAUSE_OFF | VIDEO_PRESS_PAUSE_ON) #define VIDEO_PRESS_STOP_ON (1 << 28) #define VIDEO_PRESS_STOP_OFF (1 << 29) -#define VIDEO_PRESS_STOP (VIDEO_PRESS_STOP_OFF | VIDEO_PRESS_STOP_ON) #define VIDEO_PRESS_EJECT_ON (1 << 30) #define VIDEO_PRESS_EJECT_OFF (1 << 31) -#define VIDEO_PRESS_EJECT (VIDEO_PRESS_EJECT_OFF | VIDEO_PRESS_EJECT_ON) -/* tags to draw video display labels or symbols only */ -/* (negative values to prevent misinterpretation in DrawVideoDisplay(), where - the variable "value" is also used for tape length -- better fix this) */ +#define VIDEO_STATE_PLAY(x) ((x) ? VIDEO_STATE_PLAY_ON : VIDEO_STATE_PLAY_OFF) +#define VIDEO_STATE_REC(x) ((x) ? VIDEO_STATE_REC_ON : VIDEO_STATE_REC_OFF) +#define VIDEO_STATE_PAUSE(x) ((x) ? VIDEO_STATE_PAUSE_ON: VIDEO_STATE_PAUSE_OFF) +#define VIDEO_STATE_DATE(x) ((x) ? VIDEO_STATE_DATE_ON : VIDEO_STATE_DATE_OFF) +#define VIDEO_STATE_TIME(x) ((x) ? VIDEO_STATE_TIME_ON : VIDEO_STATE_TIME_OFF) +#define VIDEO_STATE_FRAME(x) ((x) ? VIDEO_STATE_FRAME_ON: VIDEO_STATE_FRAME_OFF) +#define VIDEO_STATE_FFWD(x) ((x) ? VIDEO_STATE_FFWD_ON : VIDEO_STATE_FFWD_OFF) +#define VIDEO_STATE_WARP(x) ((x) ? VIDEO_STATE_WARP_ON : VIDEO_STATE_WARP_OFF) +#define VIDEO_STATE_WARP2(x) ((x) ? VIDEO_STATE_WARP2_ON: VIDEO_STATE_WARP2_OFF) +#define VIDEO_STATE_PBEND(x) ((x) ? VIDEO_STATE_PBEND_ON: VIDEO_STATE_PBEND_OFF) +#define VIDEO_STATE_1STEP(x) ((x) ? VIDEO_STATE_1STEP_ON: VIDEO_STATE_1STEP_OFF) + +#define VIDEO_PRESS_PLAY(x) ((x) ? VIDEO_PRESS_PLAY_ON : VIDEO_PRESS_PLAY_OFF) +#define VIDEO_PRESS_REC(x) ((x) ? VIDEO_PRESS_REC_ON : VIDEO_PRESS_REC_OFF) +#define VIDEO_PRESS_PAUSE(x) ((x) ? VIDEO_PRESS_PAUSE_ON: VIDEO_PRESS_PAUSE_OFF) +#define VIDEO_PRESS_STOP(x) ((x) ? VIDEO_PRESS_STOP_ON : VIDEO_PRESS_STOP_OFF) +#define VIDEO_PRESS_EJECT(x) ((x) ? VIDEO_PRESS_EJECT_ON: VIDEO_PRESS_EJECT_OFF) + +// tags to draw video display labels or symbols only +// (negative values to prevent misinterpretation in DrawVideoDisplay(), where +// the variable "value" is also used for tape length -- better fix this) #define VIDEO_DISPLAY_DEFAULT 0 #define VIDEO_DISPLAY_LABEL_ONLY -1 #define VIDEO_DISPLAY_SYMBOL_ONLY -2 @@ -101,6 +121,8 @@ struct TapeButtonInfo struct XY pause; struct XY record; struct XY play; + struct XY insert_solution; + struct XY play_solution; }; struct TapeSymbolInfo @@ -152,9 +174,9 @@ struct TapeTextInfo struct TapeInfo { - int file_version; /* file format version the tape is stored with */ - int game_version; /* game release version the tape was created with */ - int engine_version; /* game engine version the tape was recorded with */ + int file_version; // file format version the tape is stored with + int game_version; // game release version the tape was created with + int engine_version; // game engine version the tape was recorded with char *level_identifier; int level_nr; @@ -165,13 +187,15 @@ struct TapeInfo unsigned int length_frames; unsigned int length_seconds; unsigned int delay_played; - boolean pause_before_death; + boolean pause_before_end; boolean recording, playing, pausing; boolean fast_forward; boolean warp_forward; boolean deactivate_display; boolean auto_play; boolean auto_play_level_solved; + boolean auto_play_level_fixed; + boolean auto_play_level_not_fixable; boolean quick_resume; boolean single_step; boolean changed; @@ -180,9 +204,16 @@ struct TapeInfo int centered_player_nr_next; boolean set_centered_player; + // flags to indicate which game actions are stored in this tape + boolean use_key_actions; + boolean use_mouse_actions; + + // bits to indicate which tape properties are stored in this tape + byte property_bits; + struct { - byte action[MAX_PLAYERS]; + byte action[MAX_TAPE_ACTIONS]; byte delay; } pos[MAX_TAPE_LEN]; @@ -191,24 +222,25 @@ struct TapeInfo struct TapeLabelInfo label; struct TapeTextInfo text; - boolean show_game_buttons; /* show game buttons in tape viewport */ + boolean show_game_buttons; // show game buttons in tape viewport - boolean no_valid_file; /* set when tape file missing or invalid */ + boolean no_valid_file; // set when tape file missing or invalid }; void DrawVideoDisplay(unsigned int, unsigned int); void DrawCompleteVideoDisplay(void); -void TapeDeactivateDisplayOn(); +void TapeDeactivateDisplayOn(void); void TapeDeactivateDisplayOff(boolean); void TapeSetDateFromEpochSeconds(time_t); -void TapeSetDateFromNow(); +void TapeSetDateFromNow(void); void TapeStartRecording(int); void TapeHaltRecording(void); void TapeStopRecording(void); +boolean TapeAddAction(byte *); void TapeRecordAction(byte *); void TapeTogglePause(boolean); void TapeStartPlaying(void); @@ -220,16 +252,25 @@ unsigned int GetTapeLengthFrames(void); unsigned int GetTapeLengthSeconds(void); void TapeQuickSave(void); void TapeQuickLoad(void); -void InsertSolutionTape(void); -void AutoPlayTape(void); +boolean hasSolutionTape(void); +boolean InsertSolutionTape(void); +boolean PlaySolutionTape(void); + +void UndoTape(void); +void FixTape_ForceSinglePlayer(void); + +void AutoPlayTapes(void); +void PatchTapes(void); -void CreateTapeButtons(); -void FreeTapeButtons(); -void MapTapeEjectButton(); -void MapTapeWarpButton(); -void MapTapeButtons(); -void UnmapTapeButtons(); +void CreateTapeButtons(void); +void FreeTapeButtons(void); +void MapTapeEjectButton(void); +void MapTapeWarpButton(void); +void MapTapeButtons(void); +void UnmapTapeButtons(void); +void RedrawTapeButtons(void); +void RedrawOrRemapTapeButtons(void); void HandleTapeButtonKeys(Key);