X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftape.h;h=c3b3a6deaab4af8452a12521572b5d73159c4f90;hp=53065bf12b2e444b161a2891d70b6f82125b80eb;hb=HEAD;hpb=540581c4ab898cd7933cfff1f3ed6e56c4646d79 diff --git a/src/tape.h b/src/tape.h index 53065bf1..8b375ede 100644 --- a/src/tape.h +++ b/src/tape.h @@ -38,6 +38,16 @@ // 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 @@ -54,39 +64,39 @@ #define VIDEO_CONTROL_YSIZE VIDEO_BUTTON_YSIZE // 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) -#define VIDEO_STATE_REC_ON (1 << 3) -#define VIDEO_STATE_PAUSE_OFF (1 << 4) -#define VIDEO_STATE_PAUSE_ON (1 << 5) -#define VIDEO_STATE_DATE_OFF (1 << 6) -#define VIDEO_STATE_DATE_ON (1 << 7) -#define VIDEO_STATE_TIME_OFF (1 << 8) -#define VIDEO_STATE_TIME_ON (1 << 9) -#define VIDEO_STATE_FRAME_OFF (1 << 10) -#define VIDEO_STATE_FRAME_ON (1 << 11) -#define VIDEO_STATE_FFWD_OFF (1 << 12) -#define VIDEO_STATE_FFWD_ON (1 << 13) -#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_PRESS_PLAY_ON (1 << 22) -#define VIDEO_PRESS_PLAY_OFF (1 << 23) -#define VIDEO_PRESS_REC_ON (1 << 24) -#define VIDEO_PRESS_REC_OFF (1 << 25) -#define VIDEO_PRESS_PAUSE_ON (1 << 26) -#define VIDEO_PRESS_PAUSE_OFF (1 << 27) -#define VIDEO_PRESS_STOP_ON (1 << 28) -#define VIDEO_PRESS_STOP_OFF (1 << 29) -#define VIDEO_PRESS_EJECT_ON (1 << 30) -#define VIDEO_PRESS_EJECT_OFF (1 << 31) +#define VIDEO_STATE_PLAY_OFF (1u << 0) +#define VIDEO_STATE_PLAY_ON (1u << 1) +#define VIDEO_STATE_REC_OFF (1u << 2) +#define VIDEO_STATE_REC_ON (1u << 3) +#define VIDEO_STATE_PAUSE_OFF (1u << 4) +#define VIDEO_STATE_PAUSE_ON (1u << 5) +#define VIDEO_STATE_DATE_OFF (1u << 6) +#define VIDEO_STATE_DATE_ON (1u << 7) +#define VIDEO_STATE_TIME_OFF (1u << 8) +#define VIDEO_STATE_TIME_ON (1u << 9) +#define VIDEO_STATE_FRAME_OFF (1u << 10) +#define VIDEO_STATE_FRAME_ON (1u << 11) +#define VIDEO_STATE_FFWD_OFF (1u << 12) +#define VIDEO_STATE_FFWD_ON (1u << 13) +#define VIDEO_STATE_WARP_OFF (1u << 14) +#define VIDEO_STATE_WARP_ON (1u << 15) +#define VIDEO_STATE_WARP2_OFF (1u << 16) +#define VIDEO_STATE_WARP2_ON (1u << 17) +#define VIDEO_STATE_PBEND_OFF (1u << 18) +#define VIDEO_STATE_PBEND_ON (1u << 19) +#define VIDEO_STATE_1STEP_OFF (1u << 20) +#define VIDEO_STATE_1STEP_ON (1u << 21) + +#define VIDEO_PRESS_PLAY_ON (1u << 22) +#define VIDEO_PRESS_PLAY_OFF (1u << 23) +#define VIDEO_PRESS_REC_ON (1u << 24) +#define VIDEO_PRESS_REC_OFF (1u << 25) +#define VIDEO_PRESS_PAUSE_ON (1u << 26) +#define VIDEO_PRESS_PAUSE_OFF (1u << 27) +#define VIDEO_PRESS_STOP_ON (1u << 28) +#define VIDEO_PRESS_STOP_OFF (1u << 29) +#define VIDEO_PRESS_EJECT_ON (1u << 30) +#define VIDEO_PRESS_EJECT_OFF (1u << 31) #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) @@ -178,7 +188,8 @@ struct TapeInfo 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; @@ -199,6 +210,7 @@ struct TapeInfo boolean quick_resume; boolean single_step; boolean changed; + boolean solved; boolean player_participates[MAX_PLAYERS]; int num_participating_players; int centered_player_nr_next; @@ -211,6 +223,10 @@ struct TapeInfo // 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_TAPE_ACTIONS]; @@ -224,6 +240,7 @@ struct TapeInfo boolean show_game_buttons; // show game buttons in tape viewport + boolean no_info_chunk; // used to identify old tape file format boolean no_valid_file; // set when tape file missing or invalid }; @@ -240,27 +257,33 @@ void TapeSetDateFromNow(void); void TapeStartRecording(int); void TapeHaltRecording(void); void TapeStopRecording(void); -boolean TapeAddAction(byte *); -void TapeRecordAction(byte *); +boolean TapeAddAction(byte[MAX_TAPE_ACTIONS]); +void TapeRecordAction(byte[MAX_TAPE_ACTIONS]); void TapeTogglePause(boolean); 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); +boolean PlayScoreTape(int); void UndoTape(void); void FixTape_ForceSinglePlayer(void); -void AutoPlayTapes(void); +int AutoPlayTapes(void); +int AutoPlayTapesContinue(void); void PatchTapes(void); void CreateTapeButtons(void);