예제 #1
0
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 );
	}
	
}
예제 #2
0
void movie_play_two(char *name1, char *name2)
{
	if ( movie_play(name1) )
		movie_play(name2);
}
예제 #3
0
파일: moviemng.c 프로젝트: nonakap/xkazoku
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();
}