Mercurial > might-and-magic-trilogy
diff VideoPlayer.cpp @ 13:17150bdf321e
исправлено неполное воспроизведение роликов, бинков
author | Серик@ПончиК |
---|---|
date | Fri, 12 Oct 2012 21:18:16 +0600 |
parents | 540178ef9b18 |
children | 3fa5d0522f92 |
line wrap: on
line diff
--- a/VideoPlayer.cpp Wed Oct 10 23:56:16 2012 +0600 +++ b/VideoPlayer.cpp Fri Oct 12 21:18:16 2012 +0600 @@ -26,7 +26,7 @@ //----- (004BFE2D) -------------------------------------------------------- -_BINKBUF *VideoPlayer::CreateBinkBuffer(HWND a1, unsigned int uWidth, unsigned int uHeight, char a4) +_BINKBUF *VideoPlayer::CreateBinkBuffer(HWND hWindow, unsigned int uWidth, unsigned int uHeight, char a4) { __int32 v4; // edi@3 _BINKBUF *v5; // esi@3 @@ -43,13 +43,13 @@ HWND hWnd; // [sp+110h] [bp-4h]@1 v13 = uWidth; - hWnd = a1; - if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) + hWnd = hWindow; + if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion >= 5u ) { v4 = 0; v15 = 0; - v5 = (_BINKBUF *)malloc(0x7Cu); - memset(v5, 0, 0x7Cu); + v5 = (_BINKBUF *)malloc(0xA4u); + memset(v5, 0, 0xA4u); memset(&v11, 0, 0x7Cu); v11.dwSize = 124; v11.dwWidth = v13; @@ -78,8 +78,8 @@ { v4 = 0; a2 = 0; - v5 = (_BINKBUF *)malloc(0x7Cu); - memset(v5, 0, 0x7Cu); + v5 = (_BINKBUF *)malloc(0xA4u); + memset(v5, 0, 0xA4u); memset(&Dst, 0, 0x6Cu); Dst.dwSize = 108; Dst.dwWidth = v13; @@ -152,7 +152,7 @@ LPVOID v7; // eax@14 v1 = _this; - if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) + if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion >= 5u ) { DDSURFACEDESC2 v8; // [sp+Ch] [bp-7Ch]@4 if ( _this->pTargetDDrawSurface ) @@ -164,7 +164,7 @@ v6 = (IDirectDrawSurface4 *)v1->pTargetDDrawSurface; if ( !v6->Lock(0, &v8, 1u, 0) ) break; - BYTE3(v1->uBinkDDSurfaceType) |= 4u; + BYTE3(v1->uBinkDDSurfaceType) |= 0x80u; if ( v6->Restore() ) return 0; } @@ -216,7 +216,7 @@ v2->Unlock(0); v1->uDDrawSurfacePitch = 0; v1->pDDrawSurfaceData = 0; - BYTE3(v1->uBinkDDSurfaceType) &= 0xFBu; + BYTE3(v1->uBinkDDSurfaceType) &= 0x7Fu; } } @@ -245,7 +245,7 @@ { pGame->pCShow->PlayMovie(MOVIE_JVC, 1); if ( !pVideoPlayer->bStopBeforeSchedule ) - pGame->pCShow->PlayMovie(MOVIE_Emerald, 1); + pGame->pCShow->PlayMovie(MOVIE_Intro, 1); } } } @@ -480,7 +480,7 @@ v1->bFirstFrame = 0; v1->bUsingSmackerMMX = SmackUseMMX(1); BinkSetSoundSystem(BinkOpenMiles, pAudioPlayer->hDigDriver); - if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) + if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion >= 5u ) v2 = (IDirectDrawSurface*)pRenderer->pBackBuffer4; else v2 = (IDirectDrawSurface*)pRenderer->pBackBuffer2; @@ -638,7 +638,7 @@ a3a.right = v5->uWidth; a3a.bottom = v5->uHeight; pRenderer->BltToFront(&a1, v5->pTargetDDrawSurface, &a3a, 0x1000000u); - if ( v4->pBinkMovie->FrameRate != v4->pBinkMovie->Data1 - 1 || v4->bLoopPlaying ) + if ( v4->pBinkMovie->CurrentFrame != v4->pBinkMovie->Frame - 1 || v4->bLoopPlaying ) BinkNextFrame(v4->pBinkMovie); else Unload(); @@ -847,7 +847,7 @@ goto LABEL_5; } SetFilePointer(v2->hMightVid, v2->pMightVideoHeaders[v3].uFileOffset, 0, 0); - v9 = 0x82000000u; + v9 = 0x8800000u; v8 = v2->hMightVid; return BinkOpen(v8, v9); } @@ -864,7 +864,7 @@ return 0; } SetFilePointer(v2->hMagicVid, v2->pMagicVideoHeaders[v5].uFileOffset, 0, 0); - v9 = 0x82000000u; + v9 = 0x8800000u; v8 = v2->hMagicVid; return BinkOpen(v8, v9); } @@ -1004,7 +1004,7 @@ VideoPlayer *v4; // esi@1 _BINK *v5; // eax@2 _SMACK *v6; // eax@3 - _BINK *v7; // eax@5 + _BINK *pBinkMovie; // eax@5 _SMACK *v8; // eax@7 char *v9; // eax@7 unsigned int v10; // eax@11 @@ -1024,10 +1024,10 @@ { v4->uMovieFormat = 2; strcpy(v4->pCurrentMovieName, pFilename); - v7 = v4->pBinkMovie; + pBinkMovie = v4->pBinkMovie; v4->dword_0000A0 = 1; - if ( v7 ) - v4->pBinkBuffer = CreateBinkBuffer(v4->hWindow, v7->Width, v7->Height, 0); + if ( pBinkMovie ) + v4->pBinkBuffer = CreateBinkBuffer(v4->hWindow, pBinkMovie->Width, pBinkMovie->Height, 0); } else {