int CMovieManager::StartRobot (char* filename) { CMovieLib* libP = movieManager.Find (filename); if (gameOpts->movies.nLevel < 1) return 0; #if TRACE console.printf (DEBUG_LEVEL, "movies.robot.cf=%s\n", filename); #endif MVE_sndInit (-1); //tell movies to play no sound for robots if (!(m_robotP = movieManager.Open (filename, 1))) { #if DBG Warning (TXT_MOVIE_ROBOT, filename); #endif return MOVIE_NOT_PLAYED; } gameOpts->movies.bFullScreen = 1; m_robotP->m_bLittleEndian = libP ? libP->m_bLittleEndian : 1; MVE_memCallbacks (CMovie::Alloc, CMovie::Free); MVE_ioCallbacks (CMovie::Read); MVE_sfCallbacks (CMovie::ShowFrame); MVE_palCallbacks (CMovie::SetPalette); if (MVE_rmPrepMovie (reinterpret_cast<void*> (&m_robotP->m_cf), gameStates.menus.bHires ? 280 : 140, gameStates.menus.bHires ? 200 : 80, 0, m_robotP->m_bLittleEndian)) { Int3 (); return 0; } return 1; }
//----------------------------------------------------------------------- //returns 1 if frame updated ok int CMovieManager::RotateRobot (void) { if (!m_robotP) return 0; int res; gameOpts->movies.bFullScreen = 1; #if 0 if (ogl.m_states.nDrawBuffer == GL_BACK) paletteManager.ResumeEffect (); #endif res = MVE_rmStepMovie (); //paletteManager.ResumeEffect (); if (res == MVE_ERR_EOF) { //end of movie, so reset m_robotP->Rewind (); if (MVE_rmPrepMovie (reinterpret_cast<void*> (&m_robotP->m_cf), gameStates.menus.bHires ? 280 : 140, gameStates.menus.bHires ? 200 : 80, 0, m_robotP->m_bLittleEndian)) { return 0; } } else if (res) { return 0; } return 1; }
static int doPlay(const char *filename) { int result; int done = 0; int bpp = 0; FILE *mve; MVE_videoSpec vSpec; mve = fopen(filename, "rb"); if (mve == NULL) { fprintf(stderr, "can't open MVE file\n"); return 1; } memset(g_palette, 0, 768); MVE_sndInit(1); MVE_memCallbacks(D2_ALLOC, D2_FREE); MVE_ioCallbacks(fileRead); MVE_sfCallbacks(showFrame); MVE_palCallbacks(setPalette); MVE_rmPrepMovie(mve, -1, -1, 1); MVE_getVideoSpec(&vSpec); #ifndef _WIN32_WCE // doesn't like to change bpp? bpp = vSpec.truecolor?16:8; #endif #ifdef LANDSCAPE real_screen = SDL_SetVideoMode(vSpec.screenHeight, vSpec.screenWidth, bpp, SDL_FULLSCREEN); g_screen = CreateRotatedSurface(real_screen); #else g_screen = SDL_SetVideoMode(vSpec.screenWidth, vSpec.screenHeight, bpp, SDL_ANYFORMAT); #endif g_truecolor = vSpec.truecolor; while (!done && (result = MVE_rmStepMovie()) == 0) { done = pollEvents(); } MVE_rmEndMovie(); fclose(mve); return 0; }
static int doPlay(const char *filename) { int result; int done = 0; int bpp = 0; FILE *mve; MVE_videoSpec vSpec; mve = fopen(filename, "rb"); if (mve == NULL) { fprintf(stderr, "can't open MVE file\n"); return 1; } memset(g_palette, 0, 768); MVE_sndInit(1); MVE_memCallbacks((mve_cb_Alloc)malloc, free); MVE_ioCallbacks(fileRead); MVE_sfCallbacks(showFrame); MVE_palCallbacks(setPalette); MVE_rmPrepMovie(mve, -1, -1, 1); MVE_getVideoSpec(&vSpec); bpp = vSpec.truecolor?16:8; g_screen = SDL_SetVideoMode(vSpec.screenWidth, vSpec.screenHeight, bpp, SDL_ANYFORMAT); g_truecolor = vSpec.truecolor; while (!done && (result = MVE_rmStepMovie()) == 0) { done = pollEvents(); } MVE_rmEndMovie(); fclose(mve); return 0; }
//----------------------------------------------------------------------- //returns status. see movie.h int CMovieManager::Run (char* filename, int bHires, int bRequired, int dx, int dy) { CFile cf; CMovie* movieP = NULL; int result = 1, aborted = 0; int track = 0; int nFrame; int key; CMovieLib* libP = Find (filename); result = 1; // Open Movie file. If it doesn't exist, no movie, just return. if (!(cf.Open (filename, gameFolders.szDataDir, "rb", 0) || (movieP = Open (filename, bRequired)))) { if (bRequired) { #if TRACE console.printf (CON_NORMAL, "movie: RunMovie: Cannot open movie <%s>\n", filename); #endif } return MOVIE_NOT_PLAYED; } SetScreenMode (SCREEN_MENU); //paletteManager.ResumeEffect (); MVE_memCallbacks (CMovie::Alloc, CMovie::Free); MVE_ioCallbacks (CMovie::Read); MVE_sfCallbacks (CMovie::ShowFrame); MVE_palCallbacks (CMovie::SetPalette); if (MVE_rmPrepMovie (reinterpret_cast<void*> (movieP ? &movieP->m_cf: &cf), dx, dy, track, libP ? libP->m_bLittleEndian : 1)) { Int3 (); return MOVIE_NOT_PLAYED; } nFrame = 0; gameStates.render.fonts.bHires = gameStates.render.fonts.bHiresAvailable && bHires; ogl.SetRenderQuality (gameOpts->movies.nQuality ? 5 : 0); while ((result = MVE_rmStepMovie ()) == 0) { subTitles.Draw (nFrame); //paletteManager.ResumeEffect (); // moved this here because of flashing GrUpdate (1); key = KeyInKey (); // If ESCAPE pressed, then quit movie. if (key == KEY_ESC) { result = aborted = 1; break; } // If PAUSE pressed, then pause movie if (key == KEY_PAUSE) { MVE_rmHoldMovie (); ShowPauseMessage (TXT_PAUSE); while (!KeyInKey ()) ; ClearPauseMessage (); } if ((key == KEY_ALTED+KEY_ENTER) || (key == KEY_ALTED+KEY_PADENTER)) GrToggleFullScreen (); nFrame++; } Assert (aborted || result == MVE_ERR_EOF); ///movie should be over MVE_rmEndMovie (); if (movieP) movieP->Close (); else cf.Close (); // Close Movie File // Restore old graphic state ogl.SetRenderQuality (); gameStates.video.nScreenMode = -1; //force reset of screen mode //paletteManager.ResumeEffect (); return (aborted ? MOVIE_ABORTED : MOVIE_PLAYED_FULL); }