# HG changeset patch # User Серик@ПончиК # Date 1350055096 -21600 # Node ID 17150bdf321e174a5ef075173d993c57b1352913 # Parent ab992012b95fdcd5d3bb3c7799e88d535d7297df исправлено неполное воспроизведение роликов, бинков diff -r ab992012b95f -r 17150bdf321e CShow.h --- a/CShow.h Wed Oct 10 23:56:16 2012 +0600 +++ b/CShow.h Fri Oct 12 21:18:16 2012 +0600 @@ -11,8 +11,8 @@ MOVIE_3DOLogo = 0x1, MOVIE_NWCLogo = 0x2, MOVIE_JVC = 0x3, - MOVIE_Intro = 0x4, - MOVIE_Emerald = 0x5, + MOVIE_Emerald = 0x4, + MOVIE_Intro = 0x5, MOVIE_Death = 0x6, MOVIE_Outro = 0x7, }; @@ -32,10 +32,10 @@ void CShow::PlayMovie(MovieType eVideo, bool bShowMouseAfterPlayback) { int v3; // edx@5 - const char *v4; // ecx@5 + const char *Name; // ecx@5 std::string v5; // [sp-18h] [bp-24h]@4 signed int v6; // [sp-Ch] [bp-18h]@10 - int v7; // [sp-8h] [bp-14h]@4 + int ScreenSizeFlag; // [sp-8h] [bp-14h]@4 int v8; // [sp-4h] [bp-10h]@4 char v9; // [sp+0h] [bp-Ch]@14 char v10; // [sp+4h] [bp-8h]@4 @@ -50,49 +50,49 @@ break; case MOVIE_3DOLogo: v8 = 1; - v7 = 0; + ScreenSizeFlag = 0; v3 = 0; - v4 = "3dologo"; + Name = "3dologo"; goto LABEL_13; case MOVIE_NWCLogo: v8 = 1; - v7 = 1; + ScreenSizeFlag = 1; v3 = 0; - v4 = "new world logo"; + Name = "new world logo"; goto LABEL_13; case MOVIE_JVC: v8 = 1; - v7 = 1; + ScreenSizeFlag = 1; v3 = 0; - v4 = "jvc"; + Name = "jvc"; + goto LABEL_13; + case MOVIE_Intro: + v8 = 1; + ScreenSizeFlag = 1; + v3 = 0; + Name = "Intro"; goto LABEL_13; case MOVIE_Emerald: v8 = 1; - v7 = 1; + ScreenSizeFlag = 1; v3 = 0; - v4 = "Intro"; - goto LABEL_13; - case MOVIE_Intro: - v8 = 1; - v7 = 1; - v3 = 0; - v4 = "Intro Post"; + Name = "Intro Post"; goto LABEL_13; case MOVIE_Death: v8 = 1; - v7 = 1; + ScreenSizeFlag = 1; v6 = 2; - v4 = "losegame"; + Name = "losegame"; goto LABEL_12; case MOVIE_Outro: v8 = 1; - v7 = 1; + ScreenSizeFlag = 1; v6 = 20; - v4 = "end_seq1"; + Name = "end_seq1"; LABEL_12: v3 = v6; LABEL_13: - VideoPlayer::MovieLoop(v4, v3, v7, v8); + VideoPlayer::MovieLoop(Name, v3, ScreenSizeFlag, v8); break; default: MessageBoxW(nullptr, L"Invalid movie requested in CShow::Run()", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Show.cpp:72", 0); diff -r ab992012b95f -r 17150bdf321e Might and Magic Trilogy.suo Binary file Might and Magic Trilogy.suo has changed diff -r ab992012b95f -r 17150bdf321e Might and Magic Trilogy.vcxproj.filters --- a/Might and Magic Trilogy.vcxproj.filters Wed Oct 10 23:56:16 2012 +0600 +++ b/Might and Magic Trilogy.vcxproj.filters Fri Oct 12 21:18:16 2012 +0600 @@ -200,6 +200,7 @@ + @@ -316,4 +317,7 @@ + + + \ No newline at end of file diff -r ab992012b95f -r 17150bdf321e Render.cpp --- a/Render.cpp Wed Oct 10 23:56:16 2012 +0600 +++ b/Render.cpp Fri Oct 12 21:18:16 2012 +0600 @@ -6983,7 +6983,7 @@ int v7; // [sp-8h] [bp-8h]@3 unsigned int v8; // [sp-4h] [bp-4h]@3 - if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) + if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion >= 5u ) ErrD3D(pFrontBuffer4->Blt(pDstRect, (IDirectDrawSurface4 *)pSrcSurface, pSrcRect, uBltFlags, nullptr)); else ErrD3D(pFrontBuffer2->Blt(pDstRect, (IDirectDrawSurface2 *)pSrcSurface, pSrcRect, uBltFlags, nullptr)); diff -r ab992012b95f -r 17150bdf321e VideoPlayer.cpp --- 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 { diff -r ab992012b95f -r 17150bdf321e mm7_2.cpp --- a/mm7_2.cpp Wed Oct 10 23:56:16 2012 +0600 +++ b/mm7_2.cpp Fri Oct 12 21:18:16 2012 +0600 @@ -15278,7 +15278,7 @@ } DeleteCCharFont(); bFlashQuestBook = 1; - pGame->pCShow->PlayMovie(MOVIE_Intro, 0); + pGame->pCShow->PlayMovie(MOVIE_Emerald, 0); MaybeDoAutosave(); goto LABEL_48; }