X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.h;h=c4fba44dba2ba2351f33325e100a1a9f8b2838d2;hb=9c94b5f043a204edb69f88c95d6a44fafa95ddb2;hp=0924395c0e11a089784c3664044681a230422ff1;hpb=de4a228f8a3b4889d484bc955bae463cee2c6a25;p=rocksndiamonds.git diff --git a/src/tape.h b/src/tape.h index 0924395c..c4fba44d 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,21 +13,43 @@ #define TAPE_H -/* values for TapeTogglePause() */ +// 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 (10000 * FRAMES_PER_SECOND) // max.time x fps -/* values for tape mouse actions */ -#define TAPE_ACTION_LX 0 -#define TAPE_ACTION_LY 1 -#define TAPE_ACTION_BUTTON 2 -#define TAPE_ACTION_UNUSED 3 +// 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) -/* some positions in the video tape control window */ +#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) +#define TAPE_PROPERTY_GAME_SPEED (1 << 1) +#define TAPE_PROPERTY_PAUSE_MODE (1 << 2) +#define TAPE_PROPERTY_SINGLE_STEP (1 << 3) +#define TAPE_PROPERTY_SNAPSHOT (1 << 4) +#define TAPE_PROPERTY_REPLAYED (1 << 5) +#define TAPE_PROPERTY_TAS_KEYS (1 << 6) +#define TAPE_PROPERTY_SMALL_GRAPHICS (1 << 7) + +// values for score tape basename length (date, time, name hash, no extension) +#define MAX_SCORE_TAPE_BASENAME_LEN 24 + +// some positions in the video tape control window #define VIDEO_DISPLAY1_XPOS 5 #define VIDEO_DISPLAY1_YPOS 5 #define VIDEO_DISPLAY2_XPOS 5 @@ -41,7 +63,7 @@ #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_REC_OFF (1 << 2) @@ -94,9 +116,9 @@ #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) */ +// 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 @@ -162,11 +184,12 @@ 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; + char score_tape_basename[MAX_FILENAME_LEN + 1]; + char level_identifier[MAX_FILENAME_LEN + 1]; int level_nr; unsigned int random_seed; unsigned int date; @@ -182,19 +205,31 @@ struct TapeInfo 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; + boolean solved; boolean player_participates[MAX_PLAYERS]; int num_participating_players; int centered_player_nr_next; boolean set_centered_player; - boolean use_mouse; + // 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; + + // visible playfield size when recording this tape (for team mode) + int scr_fieldx; + int scr_fieldy; struct { - byte action[MAX_PLAYERS]; + byte action[MAX_TAPE_ACTIONS]; byte delay; } pos[MAX_TAPE_LEN]; @@ -203,20 +238,21 @@ 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_info_chunk; // used to identify old tape file format + 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); @@ -228,24 +264,36 @@ void TapeStartPlaying(void); void TapeStopPlaying(void); byte *TapePlayAction(void); void TapeStop(void); +void TapeStopGame(void); +void TapeStopTape(void); void TapeErase(void); unsigned int GetTapeLengthFrames(void); unsigned int GetTapeLengthSeconds(void); void TapeQuickSave(void); void TapeQuickLoad(void); +void TapeRestartGame(void); +void TapeReplayAndPauseBeforeEnd(void); + +boolean hasSolutionTape(void); boolean InsertSolutionTape(void); boolean PlaySolutionTape(void); - -void AutoPlayTape(void); - -void CreateTapeButtons(); -void FreeTapeButtons(); -void MapTapeEjectButton(); -void MapTapeWarpButton(); -void MapTapeButtons(); -void UnmapTapeButtons(); -void RedrawTapeButtons(); -void RedrawOrRemapTapeButtons(); +boolean PlayScoreTape(int); + +void UndoTape(void); +void FixTape_ForceSinglePlayer(void); + +int AutoPlayTapes(void); +int AutoPlayTapesContinue(void); +void PatchTapes(void); + +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);