diff --git a/LEGO1/mxdirectdraw.cpp b/LEGO1/mxdirectdraw.cpp index 2cd60b55..2afabda9 100644 --- a/LEGO1/mxdirectdraw.cpp +++ b/LEGO1/mxdirectdraw.cpp @@ -2,11 +2,14 @@ #include "mxdirectdraw.h" +BOOL g_paletteIndexed8 = 0; +BOOL DAT_10100c70 = 0; + HRESULT MxDirectDraw::SetEntries() { HRESULT ret; - if (m_unk848) { + if (m_paletteIndexed8) { if (m_ddpal) { ret = m_ddpal->SetEntries(0, 0, 256, m_pal1); if (ret != DD_OK) { @@ -49,11 +52,24 @@ void MxDirectDraw::FUN_1009e830(char *error_msg, HRESULT ret) int MxDirectDraw::GetPrimaryBitDepth() { + DWORD dwRGBBitCount; LPDIRECTDRAW pDDraw; + DDSURFACEDESC ddsd; - DirectDrawCreate(NULL, &pDDraw, NULL); + HRESULT result = DirectDrawCreate(NULL, &pDDraw, NULL); + dwRGBBitCount = 0; + if (!result) + { + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); - return 0; + pDDraw->GetDisplayMode(&ddsd); + dwRGBBitCount = ddsd.ddpfPixelFormat.dwRGBBitCount; + g_paletteIndexed8 = (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) != 0; + pDDraw->Release(); + } + + return dwRGBBitCount; } int MxDirectDraw::Pause(int param_1) @@ -69,7 +85,7 @@ int MxDirectDraw::Pause(int param_1) return 0; } - if (m_unk84c) { + if (m_fullScreen) { if (!FlipToGDISurface()) { return 0; } @@ -96,7 +112,7 @@ HRESULT MxDirectDraw::FUN_1009e750() { HRESULT ret; - if (m_unk84c && m_unk848) { + if (m_fullScreen && m_paletteIndexed8) { if (m_ddpal) { ret = m_ddpal->SetEntries(0, 0, 256, m_pal0); if (ret != DD_OK) { diff --git a/LEGO1/mxdirectdraw.h b/LEGO1/mxdirectdraw.h index 4f69de01..b372cc83 100644 --- a/LEGO1/mxdirectdraw.h +++ b/LEGO1/mxdirectdraw.h @@ -24,14 +24,12 @@ class MxDirectDraw PALETTEENTRY m_pal0[256]; // +0x2c PALETTEENTRY m_pal1[256]; // +0x42c HWND hWindow; // +0x83c - long m_unk848; - long m_unk84c; + BOOL m_paletteIndexed8; + BOOL m_fullScreen; void (*m_unk85c)(char *, HRESULT, long); // error handler or logger? long m_unk864; long m_unk86c; }; -BOOL DAT_10100c70 = 0; - #endif // MXDIRECTDRAW_H