projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fade sounds and music for main menu when entering other screen or menu
[rocksndiamonds.git]
/
src
/
tape.c
diff --git
a/src/tape.c
b/src/tape.c
index 8613f9ba7fafb369854cd8b955c38ff1cd99e0ca..07f8f82234b23f2a3008e2475ce03a49e058cb25 100644
(file)
--- a/
src/tape.c
+++ b/
src/tape.c
@@
-139,7
+139,8
@@
static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
#define PG_Y2(y) (DOOR_GFX_PAGEY2 + (y))
#define VIDEO_INFO_OFF (VIDEO_STATE_DATE_OFF | \
#define PG_Y2(y) (DOOR_GFX_PAGEY2 + (y))
#define VIDEO_INFO_OFF (VIDEO_STATE_DATE_OFF | \
- VIDEO_STATE_TIME_OFF)
+ VIDEO_STATE_TIME_OFF | \
+ VIDEO_STATE_FRAME_OFF)
#define VIDEO_STATE_OFF (VIDEO_STATE_PLAY_OFF | \
VIDEO_STATE_REC_OFF | \
VIDEO_STATE_PAUSE_OFF | \
#define VIDEO_STATE_OFF (VIDEO_STATE_PLAY_OFF | \
VIDEO_STATE_REC_OFF | \
VIDEO_STATE_PAUSE_OFF | \
@@
-156,7
+157,8
@@
static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
VIDEO_PRESS_OFF)
#define VIDEO_INFO_ON (VIDEO_STATE_DATE_ON | \
VIDEO_PRESS_OFF)
#define VIDEO_INFO_ON (VIDEO_STATE_DATE_ON | \
- VIDEO_STATE_TIME_ON)
+ VIDEO_STATE_TIME_ON | \
+ VIDEO_STATE_FRAME_ON)
#define VIDEO_STATE_ON (VIDEO_STATE_PLAY_ON | \
VIDEO_STATE_REC_ON | \
VIDEO_STATE_PAUSE_ON | \
#define VIDEO_STATE_ON (VIDEO_STATE_PLAY_ON | \
VIDEO_STATE_REC_ON | \
VIDEO_STATE_PAUSE_ON | \
@@
-177,7
+179,7
@@
static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
#define VIDEO_PRESS (VIDEO_PRESS_ON | VIDEO_PRESS_OFF)
#define VIDEO_ALL (VIDEO_ALL_ON | VIDEO_ALL_OFF)
#define VIDEO_PRESS (VIDEO_PRESS_ON | VIDEO_PRESS_OFF)
#define VIDEO_ALL (VIDEO_ALL_ON | VIDEO_ALL_OFF)
-#define NUM_TAPE_FUNCTIONS 1
0
+#define NUM_TAPE_FUNCTIONS 1
1
#define NUM_TAPE_FUNCTION_PARTS 2
#define NUM_TAPE_FUNCTION_STATES 2
#define NUM_TAPE_FUNCTION_PARTS 2
#define NUM_TAPE_FUNCTION_STATES 2
@@
-193,7
+195,7
@@
static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value)
static struct
{
int graphic;
static struct
{
int graphic;
- struct
Rect
*pos;
+ struct
XY
*pos;
}
video_pos[NUM_TAPE_FUNCTIONS][NUM_TAPE_FUNCTION_PARTS] =
{
}
video_pos[NUM_TAPE_FUNCTIONS][NUM_TAPE_FUNCTION_PARTS] =
{
@@
-217,6
+219,11
@@
static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value)
{ IMG_TAPE_LABEL_GFX_TIME, &tape.label.time },
{ -1, NULL },
},
{ IMG_TAPE_LABEL_GFX_TIME, &tape.label.time },
{ -1, NULL },
},
+ {
+ /* (no label for displaying optional frame) */
+ { -1, NULL },
+ { -1, NULL },
+ },
{
{ IMG_TAPE_LABEL_GFX_FAST_FORWARD, &tape.label.fast_forward },
{ IMG_TAPE_SYMBOL_GFX_FAST_FORWARD, &tape.symbol.fast_forward },
{
{ IMG_TAPE_LABEL_GFX_FAST_FORWARD, &tape.label.fast_forward },
{ IMG_TAPE_SYMBOL_GFX_FAST_FORWARD, &tape.symbol.fast_forward },
@@
-245,16
+252,18
@@
static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value)
{
for (j = 0; j < NUM_TAPE_FUNCTION_PARTS; j++) /* label or symbol */
{
{
for (j = 0; j < NUM_TAPE_FUNCTION_PARTS; j++) /* label or symbol */
{
- if (video_pos[i][j].graphic == -1 ||
- video_pos[i][j].pos->x < 0 ||
- video_pos[i][j].pos->y < 0)
+ int graphic = video_pos[i][j].graphic;
+ struct XY *pos = video_pos[i][j].pos;
+
+ if (graphic == -1 ||
+ pos->x == -1 ||
+ pos->y == -1)
continue;
if (state & (1 << (i * 2 + k)))
{
struct GraphicInfo *gfx_bg = &graphic_info[IMG_BACKGROUND_TAPE];
continue;
if (state & (1 << (i * 2 + k)))
{
struct GraphicInfo *gfx_bg = &graphic_info[IMG_BACKGROUND_TAPE];
- struct GraphicInfo *gfx = &graphic_info[video_pos[i][j].graphic];
- struct Rect *pos = video_pos[i][j].pos;
+ struct GraphicInfo *gfx = &graphic_info[graphic];
Bitmap *gd_bitmap;
int gd_x, gd_y;
int skip_value =
Bitmap *gd_bitmap;
int gd_x, gd_y;
int skip_value =
@@
-280,6
+289,8
@@
static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value)
if (gd_bitmap != NULL)
BlitBitmap(gd_bitmap, drawto, gd_x, gd_y, gfx->width, gfx->height,
VX + pos->x, VY + pos->y);
if (gd_bitmap != NULL)
BlitBitmap(gd_bitmap, drawto, gd_x, gd_y, gfx->width, gfx->height,
VX + pos->x, VY + pos->y);
+
+ redraw_mask |= REDRAW_DOOR_2;
}
}
}
}
}
}
@@
-300,8
+311,10
@@
static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value)
#define DATETIME_TIME_MM (1 << 7)
#define DATETIME_TIME_SS (1 << 8)
#define DATETIME_TIME_MM (1 << 7)
#define DATETIME_TIME_SS (1 << 8)
-#define DATETIME_XOFFSET_1 (1 << 9)
-#define DATETIME_XOFFSET_2 (1 << 10)
+#define DATETIME_FRAME (1 << 9)
+
+#define DATETIME_XOFFSET_1 (1 << 10)
+#define DATETIME_XOFFSET_2 (1 << 11)
#define DATETIME_DATE (DATETIME_DATE_YYYY | \
DATETIME_DATE_YY | \
#define DATETIME_DATE (DATETIME_DATE_YYYY | \
DATETIME_DATE_YY | \
@@
-358,6
+371,8
@@
static void DrawVideoDisplay_DateTime(unsigned int state, unsigned int value)
{ &tape.text.time_mm, DATETIME_TIME_MM },
{ &tape.text.time_ss, DATETIME_TIME_SS },
{ &tape.text.time_mm, DATETIME_TIME_MM },
{ &tape.text.time_ss, DATETIME_TIME_SS },
+ { &tape.text.frame, DATETIME_FRAME },
+
{ NULL, DATETIME_NONE },
};
{ NULL, DATETIME_NONE },
};
@@
-407,6
+422,10
@@
static void DrawVideoDisplay_DateTime(unsigned int state, unsigned int value)
DrawText(xpos, ypos, s, pos->font);
}
DrawText(xpos, ypos, s, pos->font);
}
+ else if ((type & DATETIME_FRAME) && (state & VIDEO_STATE_FRAME_ON))
+ {
+ DrawText(xpos, ypos, int2str(value, pos->size), pos->font);
+ }
}
}
}
}
@@
-414,8
+433,6
@@
void DrawVideoDisplay(unsigned int state, unsigned int value)
{
DrawVideoDisplay_Graphics(state, value);
DrawVideoDisplay_DateTime(state, value);
{
DrawVideoDisplay_Graphics(state, value);
DrawVideoDisplay_DateTime(state, value);
-
- redraw_mask |= REDRAW_DOOR_2;
}
void DrawCompleteVideoDisplay()
}
void DrawCompleteVideoDisplay()
@@
-437,6
+454,7
@@
void DrawCompleteVideoDisplay()
DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, tape.length_frames);
if (tape.pausing)
DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
if (tape.pausing)
DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
@@
-446,6
+464,7
@@
void DrawCompleteVideoDisplay()
DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, 0);
if (tape.pausing)
DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
if (tape.pausing)
DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
@@
-454,6
+473,7
@@
void DrawCompleteVideoDisplay()
{
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
{
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, tape.length_frames);
}
BlitBitmap(drawto, bitmap_db_door_2, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize,
}
BlitBitmap(drawto, bitmap_db_door_2, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize,
@@
-473,7
+493,7
@@
void TapeDeactivateDisplayOff(boolean redraw_display)
if (redraw_display)
{
if (redraw_display)
{
- RedrawPlayfield(
TRUE, 0,0,0,0
);
+ RedrawPlayfield();
DrawGameDoorValues();
}
}
DrawGameDoorValues();
}
}
@@
-501,6
+521,7
@@
void TapeErase()
tape.counter = 0;
tape.length = 0;
tape.counter = 0;
tape.length = 0;
+ tape.length_frames = 0;
tape.length_seconds = 0;
if (leveldir_current)
tape.length_seconds = 0;
if (leveldir_current)
@@
-565,6
+586,7
@@
void TapeStartRecording(int random_seed)
DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, 0);
MapTapeWarpButton();
MapTapeWarpButton();
@@
-615,7
+637,8
@@
void TapeHaltRecording()
tape.pos[tape.counter].delay = 0;
tape.length = tape.counter;
tape.pos[tape.counter].delay = 0;
tape.length = tape.counter;
- tape.length_seconds = GetTapeLength();
+ tape.length_frames = GetTapeLengthFrames();
+ tape.length_seconds = GetTapeLengthSeconds();
}
void TapeStopRecording()
}
void TapeStopRecording()
@@
-716,10
+739,23
@@
void TapeTogglePause(boolean toggle_manual)
TapeAppendRecording();
TapeAppendRecording();
- if (!CheckEngineSnapshot())
- SaveEngineSnapshot();
+ if (!CheckEngineSnapshotSingle())
+ SaveEngineSnapshotSingle();
+
+ // restart step/move snapshots after quick loading tape
+ SaveEngineSnapshotToListInitial();
}
}
}
}
+
+ if (setup.show_snapshot_buttons &&
+ game_status == GAME_MODE_PLAYING &&
+ CheckEngineSnapshotList())
+ {
+ if (tape.pausing)
+ MapUndoRedoButtons();
+ else if (!tape.single_step)
+ UnmapUndoRedoButtons();
+ }
}
void TapeStartPlaying()
}
void TapeStartPlaying()
@@
-737,6
+773,7
@@
void TapeStartPlaying()
DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, 0);
MapTapeWarpButton();
MapTapeWarpButton();
@@
-881,21
+918,27
@@
void TapeStop()
{
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
{
DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
+ DrawVideoDisplay(VIDEO_STATE_FRAME_ON, tape.length_frames);
}
}
}
}
-unsigned int GetTapeLength()
+unsigned int GetTapeLength
Frames
()
{
{
- unsigned int tape_length = 0;
+ unsigned int tape_length
_frames
= 0;
int i;
if (TAPE_IS_EMPTY(tape))
return(0);
for (i = 0; i < tape.length; i++)
int i;
if (TAPE_IS_EMPTY(tape))
return(0);
for (i = 0; i < tape.length; i++)
- tape_length += tape.pos[i].delay;
+ tape_length
_frames
+= tape.pos[i].delay;
- return(tape_length * GAME_FRAME_DELAY / 1000);
+ return tape_length_frames;
+}
+
+unsigned int GetTapeLengthSeconds()
+{
+ return (GetTapeLengthFrames() * GAME_FRAME_DELAY / 1000);
}
static void TapeStartWarpForward()
}
static void TapeStartWarpForward()
@@
-972,7
+1015,7
@@
void TapeQuickSave()
}
if (SaveTapeChecked(tape.level_nr))
}
if (SaveTapeChecked(tape.level_nr))
- SaveEngineSnapshot();
+ SaveEngineSnapshot
Single
();
}
void TapeQuickLoad()
}
void TapeQuickLoad()
@@
-997,11
+1040,11
@@
void TapeQuickLoad()
if (game_status != GAME_MODE_PLAYING && game_status != GAME_MODE_MAIN)
return;
if (game_status != GAME_MODE_PLAYING && game_status != GAME_MODE_MAIN)
return;
- if (CheckEngineSnapshot())
+ if (CheckEngineSnapshot
Single
())
{
TapeStartGamePlaying();
{
TapeStartGamePlaying();
- LoadEngineSnapshot();
+ LoadEngineSnapshot
Single
();
DrawCompleteVideoDisplay();
DrawCompleteVideoDisplay();
@@
-1011,6
+1054,9
@@
void TapeQuickLoad()
TapeStopWarpForward();
TapeAppendRecording();
TapeStopWarpForward();
TapeAppendRecording();
+ // restart step/move snapshots after quick loading tape
+ SaveEngineSnapshotToListInitial();
+
if (FrameCounter > 0)
return;
}
if (FrameCounter > 0)
return;
}
@@
-1079,7
+1125,9
@@
void AutoPlayTape()
else
{
DrawCompleteVideoDisplay();
else
{
DrawCompleteVideoDisplay();
+
audio.sound_enabled = FALSE;
audio.sound_enabled = FALSE;
+ setup.engine_snapshot_mode = getStringCopy(STR_SNAPSHOT_MODE_OFF);
autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first,
global.autoplay_leveldir);
autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first,
global.autoplay_leveldir);
@@
-1151,7
+1199,12
@@
void AutoPlayTape()
printf("playing tape ... ");
TapeStartGamePlaying();
printf("playing tape ... ");
TapeStartGamePlaying();
- TapeStartWarpForward();
+
+ if (global.autoplay_mode == AUTOPLAY_FFWD)
+ tape.fast_forward = TRUE;
+
+ if (global.autoplay_mode != AUTOPLAY_PLAY)
+ TapeStartWarpForward();
return;
}
return;
}
@@
-1187,7
+1240,7
@@
void AutoPlayTape()
static struct
{
int graphic;
static struct
{
int graphic;
- struct
Rect
*pos;
+ struct
XY
*pos;
int gadget_id;
char *infotext;
} tapebutton_info[NUM_TAPE_BUTTONS] =
int gadget_id;
char *infotext;
} tapebutton_info[NUM_TAPE_BUTTONS] =
@@
-1226,7
+1279,7
@@
void CreateTapeButtons()
for (i = 0; i < NUM_TAPE_BUTTONS; i++)
{
struct GraphicInfo *gfx = &graphic_info[tapebutton_info[i].graphic];
for (i = 0; i < NUM_TAPE_BUTTONS; i++)
{
struct GraphicInfo *gfx = &graphic_info[tapebutton_info[i].graphic];
- struct
Rect
*pos = tapebutton_info[i].pos;
+ struct
XY
*pos = tapebutton_info[i].pos;
struct GadgetInfo *gi;
int gd_x = gfx->src_x;
int gd_y = gfx->src_y;
struct GadgetInfo *gi;
int gd_x = gfx->src_x;
int gd_y = gfx->src_y;
@@
-1368,6
+1421,13
@@
static void HandleTapeButtonsExt(int id)
break;
case TAPE_CTRL_ID_PLAY:
break;
case TAPE_CTRL_ID_PLAY:
+ if (tape.recording && tape.pausing) /* PAUSE -> RECORD */
+ {
+ // ("TAPE_IS_EMPTY(tape)" is TRUE here -- probably fix this)
+
+ TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ }
+
if (TAPE_IS_EMPTY(tape))
break;
if (TAPE_IS_EMPTY(tape))
break;