Start on MxDirectDraw

This commit is contained in:
disinvite 2023-06-15 10:56:07 -04:00
parent 6843216dfa
commit 216332e64d
4 changed files with 174 additions and 7 deletions

110
LEGO1/mxdirectdraw.cpp Normal file
View File

@ -0,0 +1,110 @@
#pragma comment(lib, "ddraw")
#include "mxdirectdraw.h"
HRESULT MxDirectDraw::SetEntries()
{
HRESULT ret;
if (m_unk848) {
if (m_ddpal) {
ret = m_ddpal->SetEntries(0, 0, 256, m_pal1);
if (ret != DD_OK) {
FUN_1009e830("SetEntries failed", ret);
return 0;
}
}
}
return 1;
}
HRESULT MxDirectDraw::FlipToGDISurface()
{
HRESULT ret;
if (m_ddraw) {
ret = m_ddraw->FlipToGDISurface();
if (ret != DD_OK) {
FUN_1009e830("FlipToGDISurface failed", ret);
}
return !ret;
}
return 1;
}
void MxDirectDraw::FUN_1009e830(char *error_msg, HRESULT ret)
{
if (!DAT_10100c70) {
DAT_10100c70 = 1;
vtable08();
if (m_unk85c) {
m_unk85c(error_msg, ret, m_unk864);
}
}
DAT_10100c70 = 0;
}
int MxDirectDraw::GetPrimaryBitDepth()
{
LPDIRECTDRAW pDDraw;
DirectDrawCreate(NULL, &pDDraw, NULL);
return 0;
}
int MxDirectDraw::Pause(int param_1)
{
if (param_1) {
m_unk86c++;
if (m_unk86c > 1) {
return 1;
}
if (!SetEntries()) {
return 0;
}
if (m_unk84c) {
if (!FlipToGDISurface()) {
return 0;
}
DrawMenuBar(hWindow);
RedrawWindow(hWindow, NULL, NULL, RDW_FRAME);
}
return 1;
} else {
m_unk86c--;
if (m_unk86c > 0) {
return 1;
} else if (m_unk86c < 0) {
m_unk86c = 0;
}
FUN_1009e750();
}
return 0;
}
HRESULT MxDirectDraw::FUN_1009e750()
{
HRESULT ret;
if (m_unk84c && m_unk848) {
if (m_ddpal) {
ret = m_ddpal->SetEntries(0, 0, 256, m_pal0);
if (ret != DD_OK) {
FUN_1009e830("SetEntries failed", ret);
return 0;
}
}
}
return 1;
}

View File

@ -1,12 +1,37 @@
#ifndef MXDIRECTDRAW_H
#define MXDIRECTDRAW_H
#include <ddraw.h>
#include <Windows.h>
class MxDirectDraw
{
public:
__declspec(dllexport) int FlipToGDISurface();
HRESULT SetEntries();
__declspec(dllexport) HRESULT FlipToGDISurface();
void FUN_1009e830(char *, HRESULT);
__declspec(dllexport) static int GetPrimaryBitDepth();
__declspec(dllexport) int Pause(int);
HRESULT FUN_1009e750();
virtual ~MxDirectDraw();
virtual void vtable04();
virtual void vtable08();
private:
IDirectDraw *m_ddraw; // +0xc
IDirectDrawPalette *m_ddpal; // +0x28
PALETTEENTRY m_pal0[256]; // +0x2c
PALETTEENTRY m_pal1[256]; // +0x42c
HWND hWindow; // +0x83c
long m_unk848;
long m_unk84c;
void (*m_unk85c)(char *, HRESULT, long); // error handler or logger?
long m_unk864;
long m_unk86c;
};
BOOL DAT_10100c70 = 0;
#endif // MXDIRECTDRAW_H

View File

@ -59,6 +59,7 @@ CLEAN :
-@erase "$(INTDIR)\legoomni.obj"
-@erase "$(INTDIR)\mxcore.obj"
-@erase "$(INTDIR)\mxcriticalsection.obj"
-@erase "$(INTDIR)\mxdirectdraw.obj"
-@erase ".\Release\LEGO1.DLL"
-@erase ".\Release\LEGO1.EXP"
-@erase ".\Release\LEGO1.LIB"
@ -108,11 +109,11 @@ BSC32_SBRS= \
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386 /out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386 /out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB"
# SUBTRACT LINK32 /pdb:none
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\
odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /incremental:no\
/pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386\
/out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB"
LINK32_OBJS= \
@ -120,7 +121,8 @@ LINK32_OBJS= \
"$(INTDIR)\legonavcontroller.obj" \
"$(INTDIR)\legoomni.obj" \
"$(INTDIR)\mxcore.obj" \
"$(INTDIR)\mxcriticalsection.obj"
"$(INTDIR)\mxcriticalsection.obj" \
"$(INTDIR)\mxdirectdraw.obj"
".\Release\LEGO1.DLL" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
@ -150,6 +152,7 @@ CLEAN :
-@erase "$(INTDIR)\legoomni.obj"
-@erase "$(INTDIR)\mxcore.obj"
-@erase "$(INTDIR)\mxcriticalsection.obj"
-@erase "$(INTDIR)\mxdirectdraw.obj"
-@erase "$(INTDIR)\vc40.idb"
-@erase "$(INTDIR)\vc40.pdb"
-@erase "$(OUTDIR)\LEGO1.exp"
@ -203,11 +206,11 @@ BSC32_SBRS= \
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/LEGO1.DLL"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/LEGO1.DLL"
# SUBTRACT LINK32 /pdb:none
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes\
odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /incremental:yes\
/pdb:"$(OUTDIR)/LEGO1.pdb" /map:"$(INTDIR)/LEGO1.map" /debug /machine:I386\
/out:"Debug/LEGO1.DLL" /implib:"$(OUTDIR)/LEGO1.lib"
LINK32_OBJS= \
@ -215,7 +218,8 @@ LINK32_OBJS= \
"$(INTDIR)\legonavcontroller.obj" \
"$(INTDIR)\legoomni.obj" \
"$(INTDIR)\mxcore.obj" \
"$(INTDIR)\mxcriticalsection.obj"
"$(INTDIR)\mxcriticalsection.obj" \
"$(INTDIR)\mxdirectdraw.obj"
".\Debug\LEGO1.DLL" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
@ -516,6 +520,34 @@ DEP_CPP_LEGON=\
$(CPP) $(CPP_PROJ) $(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE=.\LEGO1\mxdirectdraw.cpp
!IF "$(CFG)" == "LEGO1 - Win32 Release"
DEP_CPP_MXDIR=\
".\LEGO1\mxdirectdraw.h"\
"$(INTDIR)\mxdirectdraw.obj" : $(SOURCE) $(DEP_CPP_MXDIR) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ELSEIF "$(CFG)" == "LEGO1 - Win32 Debug"
DEP_CPP_MXDIR=\
".\LEGO1\mxdirectdraw.h"\
"$(INTDIR)\mxdirectdraw.obj" : $(SOURCE) $(DEP_CPP_MXDIR) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF
# End Source File
# End Target
################################################################################

BIN
isle.mdp

Binary file not shown.