void cutscenes_screen_play() { char name[MAX_FILENAME_LEN]; // *full_name int which_cutscene; Assert( (Selected_line >= 0) && (Selected_line < (int)Cutscene_list.size()) ); which_cutscene = Cutscene_list[Selected_line]; strcpy_s(name, Cutscenes[which_cutscene].filename ); // full_name = cf_add_ext(name, NOX(".mve")); main_hall_stop_music(); main_hall_stop_ambient(); int rval = movie_play(name); main_hall_start_music(); if ( !rval ) { char str[256]; if (Cmdline_nomovies) strcpy_s(str, XSTR("Movies are currently disabled.", 1574)); else sprintf(str, XSTR("Unable to play movie %s.", 204), Cutscenes[which_cutscene].name); popup(0, 1, POPUP_OK, str ); } }
void movie_play_two(char *name1, char *name2) { if ( movie_play(name1) ) movie_play(name2); }
void moviemng_play(const char *fname, SCRN_T *scrn) { static const char ext[][5] = { "", ".AVI", ".MPG", ".avi", ".mpg" }; char movie_file[MAX_PATH] = ""; char path[MAX_PATH]; struct stat st; SDL_SysWMinfo info; ARCFILEH arch; int i; UNUSED(scrn); if (!nomovie_flag) return; memset(&info, 0, sizeof(info)); info.version.major = SDL_MAJOR_VERSION; info.version.minor = SDL_MINOR_VERSION; if (SDL_GetWMInfo(&info) <= 0) return; /* * 1. とりあえずデータディレクトリから検索 */ for (i = 0; i < NELEMENTS(ext); ++i) { milstr_ncpy(path, gamecore.suf.scriptpath, sizeof(path)); milstr_ncat(path, fname, sizeof(path)); cutExtName(path); milstr_ncat(path, ext[i], sizeof(path)); if (stat(path, &st) < 0) continue; if (st.st_mode & S_IFDIR) continue; if (access(path, R_OK) < 0) continue; /* OK */ goto run; } /* * 2. アーカイブ内に存在するか確認 * (こんなあったら嫌だなぁ…) */ for (arch = NULL, i = 0; i < ARCTYPES; ++i) { arch = arcfile_open(i, fname); if (arch) break; } if (arch) { int fd; char *buf; sprintf(path, "/tmp/." APP_NAME "-%s-XXXXXXX", fname); #if defined(HAVE_MKSTEMP) || defined(__NetBSD__) fd = mkstemp(path); #else mktemp(path); fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); #endif if (fd >= 0) { buf = (char *)_MALLOC(arch->size, "movie temp file"); arcfile_seek(arch, arch->pos, SEEK_SET); if (arcfile_read(arch, buf, arch->size) == arch->size) { write(fd, buf, arch->size); close(fd); _MFREE(buf); milstr_ncpy(movie_file,path,sizeof(movie_file)); goto run; } close(fd); _MFREE(buf); } } return; run: inputmng_resetmouse(0); sound_term(); info.info.x11.lock_func(); movie_play(path); info.info.x11.unlock_func(); if (movie_file[0] != '\0') { unlink(movie_file); } sound_init(audio_rate); sound_play(); }