VOID PAL_RNGPlay( INT iNumRNG, INT iStartFrame, INT iEndFrame, INT iSpeed ) /*++ Purpose: Play a RNG movie. Parameters: [IN] iNumRNG - number of the RNG movie. [IN] iStartFrame - start frame number. [IN] iEndFrame - end frame number. [IN] iSpeed - speed of playing. Return value: None. --*/ { UINT iTime; int iDelay = 800 / (iSpeed == 0 ? 16 : iSpeed); FILE *fp; fp = UTIL_OpenRequiredFile("rng.mkf"); for (; iStartFrame <= iEndFrame; iStartFrame++) { iTime = SDL_GetTicks() + iDelay; if (PAL_RNGBlitToSurface(iNumRNG, iStartFrame, gpScreen, fp) == -1) { // // Failed to get the frame, don't go further // fclose(fp); return; } // // Update the screen // VIDEO_UpdateScreen(NULL); // // Fade in the screen if needed // if (gpGlobals->fNeedToFadeIn) { PAL_FadeIn(gpGlobals->wNumPalette, gpGlobals->fNightPalette, 1); gpGlobals->fNeedToFadeIn = FALSE; } // // Delay for a while // PAL_ProcessEvent(); while (SDL_GetTicks() <= iTime) { PAL_ProcessEvent(); SDL_Delay(1); } } fclose(fp); }
VOID PAL_RNGPlay( INT iNumRNG, INT iStartFrame, INT iEndFrame, INT iSpeed ) /*++ Purpose: Play a RNG movie. Parameters: [IN] iNumRNG - number of the RNG movie. [IN] iStartFrame - start frame number. [IN] iEndFrame - end frame number. [IN] iSpeed - speed of playing. Return value: None. --*/ { int iDelay = 800 / (iSpeed == 0 ? 16 : iSpeed); uint8_t *rng = (uint8_t *)malloc(65000); uint8_t *buf = (uint8_t *)malloc(65000); FILE *fp = UTIL_OpenRequiredFile("rng.mkf"); for (; rng && buf && iStartFrame <= iEndFrame; iStartFrame++) { uint32_t iTime = SDL_GetTicks() + iDelay; // // Read, decompress and render the frame // if (PAL_RNGReadFrame(buf, 65000, iNumRNG, iStartFrame, fp) < 0 || PAL_RNGBlitToSurface(rng, Decompress(buf, rng, 65000), gpScreen) == -1) { // // Failed to get the frame, don't go further // break; } // // Update the screen // VIDEO_UpdateScreen(NULL); // // Fade in the screen if needed // if (gpGlobals->fNeedToFadeIn) { PAL_FadeIn(gpGlobals->wNumPalette, gpGlobals->fNightPalette, 1); gpGlobals->fNeedToFadeIn = FALSE; } // // Delay for a while // PAL_DelayUntil(iTime); } fclose(fp); free(rng); free(buf); }