Made previous chapter smart.

This commit is contained in:
n-a-c-h
2005-03-17 10:23:00 +00:00
parent c0cb10d72c
commit 311538b27b

View File

@@ -675,6 +675,7 @@ static struct
external_chapter_buf external_chapters; external_chapter_buf external_chapters;
unsigned short external_chapter_count; unsigned short external_chapter_count;
unsigned int frames_replayed; unsigned int frames_replayed;
size_t last_chapter_frame;
} zmv_open_vars; //Additional vars for open/replay of a ZMV } zmv_open_vars; //Additional vars for open/replay of a ZMV
static bool zmv_open(char *filename) static bool zmv_open(char *filename)
@@ -843,6 +844,27 @@ static void zmv_prev_chapter()
prev = prev_external; prev = prev_external;
} }
//Code to go back before the previous chapter if the previous chapter was loaded recently
if (zmv_open_vars.frames_replayed - zmv_open_vars.last_chapter_frame < 90) //1.5 seconds NTSC
{
size_t pprev = prev-1;
size_t pprev_internal = internal_chapter_lesser(&zmv_vars.internal_chapters, pprev);
size_t pprev_external = internal_chapter_lesser(&zmv_open_vars.external_chapters, pprev);
if (pprev_internal != pprev)
{
prev = prev_internal = pprev_internal;
}
else
{
pprev_internal = 0;
}
if ((pprev_external != pprev) && pprev_external > pprev_internal)
{
prev = prev_external = pprev_external;
}
}
if (prev) if (prev)
{ {
if (prev == prev_internal) if (prev == prev_internal)
@@ -866,6 +888,7 @@ static void zmv_prev_chapter()
fseek(zmv_vars.fp, prev_external, SEEK_SET); fseek(zmv_vars.fp, prev_external, SEEK_SET);
} }
zmv_open_vars.last_chapter_frame = zmv_open_vars.frames_replayed;
} }
} }
@@ -929,8 +952,41 @@ extern unsigned int MsgCount, MessageOn;
extern unsigned char MovieTemp, MovieProcessing, *Msgptr; extern unsigned char MovieTemp, MovieProcessing, *Msgptr;
char *txtmovieended = "MOVIE FINISHED."; char *txtmovieended = "MOVIE FINISHED.";
bool KeyNextChapBind;
void MovieInsertChapter()
{
switch (MovieProcessing)
{
case 1: puts("Adding external chapter"); zmv_add_chapter(); break; // replaying - external
case 2: puts("Adding internal chapter"); zmv_insert_chapter(); break; // recording - internal
}
}
void MovieSeekAhead()
{
if (MovieProcessing == 1) // replaying only - record can use ZMTs
{
puts("Going to next chapter"); zmv_next_chapter();
}
}
void MovieSeekBehind()
{
if (MovieProcessing == 1) // replaying only - record can use ZMTs
{
puts("Going to previous chapter"); zmv_prev_chapter();
}
}
void Replay() void Replay()
{ {
if (KeyNextChapBind)
{
MovieSeekAhead();
KeyNextChapBind = false;
}
if (zmv_replay()) if (zmv_replay())
{ {
char *sub; char *sub;
@@ -1008,6 +1064,7 @@ void MoviePlay()
if (zmv_open(fnamest+1)) if (zmv_open(fnamest+1))
{ {
MovieProcessing = 1; MovieProcessing = 1;
KeyNextChapBind = false;
memcpy(&fnamest[statefileloc-3], ".sub", 4); memcpy(&fnamest[statefileloc-3], ".sub", 4);
if (isdigit(CMovieExt)) { fnamest[statefileloc] = CMovieExt; } if (isdigit(CMovieExt)) { fnamest[statefileloc] = CMovieExt; }
MovieSub_Open(fnamest+1); MovieSub_Open(fnamest+1);
@@ -1057,27 +1114,3 @@ void MovieRecord()
} }
} }
void MovieInsertChapter()
{
switch (MovieProcessing)
{
case 1: puts("Adding external chapter"); zmv_add_chapter(); break; // replaying - external
case 2: puts("Adding internal chapter"); zmv_insert_chapter(); break; // recording - internal
}
}
void MovieSeekAhead()
{
if (MovieProcessing == 1) // replaying only - record can use ZMTs
{
puts("Going to next chapter"); zmv_next_chapter();
}
}
void MovieSeekBehind()
{
if (MovieProcessing == 1) // replaying only - record can use ZMTs
{
puts("Going to previous chapter"); zmv_prev_chapter();
}
}