From 4b335e47109fb7d8c30df8e1674352cd9dce2135 Mon Sep 17 00:00:00 2001 From: jummy Date: Fri, 4 Oct 2024 20:59:47 -0500 Subject: [PATCH] new #define to toggle old broken code --- src/blupi.cpp | 12 +- src/ddutil.cpp | 4 - src/def.h | 5 +- src/event.cpp | 24 +- src/network.cpp | 573 ++++++++++++++++++++++++------------------------ src/network.h | 121 +++++----- src/pixmap.h | 2 - 7 files changed, 381 insertions(+), 360 deletions(-) diff --git a/src/blupi.cpp b/src/blupi.cpp index 8ea3d25..83be6e8 100644 --- a/src/blupi.cpp +++ b/src/blupi.cpp @@ -714,9 +714,15 @@ static BOOL DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow) SetRect(&WindowRect, (sx - LXIMAGE) / 2, (sy - LYIMAGE) / 2, (sx + LXIMAGE) / 2, (sy + LYIMAGE) / 2); - //AdjustWindowRect(&WindowRect, WS_POPUPWINDOW | WS_CAPTION, TRUE); // old faulty behavior - //WindowRect.top += GetSystemMetrics(SM_CYCAPTION); - AdjustWindowRect(&WindowRect, WS_POPUPWINDOW | WS_CAPTION, FALSE); // fixed behavior + +#if _LEGACY + // Old behavior is semantically incorrect. + // The game window becomes too short on modern versions of Windows. + AdjustWindowRect(&WindowRect, WS_POPUPWINDOW | WS_CAPTION, TRUE); + WindowRect.top += GetSystemMetrics(SM_CYCAPTION); +#else + AdjustWindowRect(&WindowRect, WS_POPUPWINDOW | WS_CAPTION, FALSE); +#endif g_hWnd = CreateWindow ( diff --git a/src/ddutil.cpp b/src/ddutil.cpp index b51b857..1cb9610 100644 --- a/src/ddutil.cpp +++ b/src/ddutil.cpp @@ -16,10 +16,6 @@ #include "ddutil.h" #include "misc.h" -using namespace std; - -#define DIRECTDRAW_VERSION 0x0500 - BOOL g_bDebug = TRUE; void DDSetDebug(BOOL bDebug) diff --git a/src/def.h b/src/def.h index 1110509..5bc12b6 100644 --- a/src/def.h +++ b/src/def.h @@ -17,8 +17,9 @@ #define _INTRO FALSE // TRUE si images d'introduction // additional flags -#define _CD FALSE // whether to require the game CD -#define _BYE !_EGAMES // whether to show exit image (like _INTRO) +#define _CD FALSE // if TRUE, require the game CD +#define _BYE !_EGAMES // if TRUE, show exit image (like _INTRO) +#define _LEGACY FALSE // if TRUE, keep broken/quirky legacy code #define MAXGAMER 8 diff --git a/src/event.cpp b/src/event.cpp index a2dce22..59d79ba 100644 --- a/src/event.cpp +++ b/src/event.cpp @@ -5722,6 +5722,22 @@ BOOL CEvent::CopyMission(char *srcFileName, char *dstFileName) destFile = fopen(dstFileName, "wb"); if (destFile) { + +#if _LEGACY and defined(_IOERR) + // original code relies on implementation-specific behavior. + // incompatible with modern toolsets. + do + { + num = fread(buffer, 1, 2560, srcFile); + if (srcFile->_flag & _IOERR) break; + if (num <= 0) + { + bOK = FALSE; + break; + } + fwrite(buffer, 1, num, destFile); + } while (!(destFile->_flag & _IOERR)); +#else do { num = fread(buffer, 1, 2560, srcFile); @@ -5733,6 +5749,8 @@ BOOL CEvent::CopyMission(char *srcFileName, char *dstFileName) } fwrite(buffer, 1, num, destFile); } while (!ferror(destFile)); // * +#endif // _LEGACY + } } if (srcFile) fclose(srcFile); @@ -5740,11 +5758,7 @@ die: if (destFile) fclose(destFile); if (buffer) free(buffer); return bOK; - - // * - // original code relies on undefined behavior specific to older msvc : - // if (srcFile->_flag & _IOERR) - // while (!(destFile->_flag & _IOERR)) + } void CEvent::DrawMap() diff --git a/src/network.cpp b/src/network.cpp index f640460..6988126 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -10,209 +10,162 @@ // a0f94abe-11c3-d111-be62-0040f6944838 #define APP_GUID { 0xbe4af9a0, 0xc311, 0x11d1, { 0xbe, 0x62, 0x00, 0x40, 0xf6, 0x94, 0x48, 0x38 } }; -CNetwork::CNetwork() -{ - m_pDP = NULL; - m_dpid = 0; - m_bHost = FALSE; - m_providers.nb = 0; - m_providers.pList = NULL; - m_sessions.nb = 0; - m_sessions.pList = NULL; - m_unknown.nb = 0; - m_unknown.pList = NULL; -} - -CNetwork::~CNetwork() -{ - FreeProviderList(); - FreeSessionList(); - FreeUnknownList(); - if (m_pDP) m_pDP->Release(); -} - -static BOOL EnumProvidersCallback(LPGUID lpguidSP, LPSTR lpSPName, - DWORD dwMajorVersion, DWORD dwMinorVersion, NamedGUIDList* lpContext) -{ - if (lpContext->nb < MAXSESSION) +extern "C" { + CNetwork::CNetwork() { - lpContext->pList[lpContext->nb]->guid = *lpguidSP; - strcpy(lpContext->pList[lpContext->nb]->name, lpSPName); - lpContext->nb++; + m_pDP = NULL; + m_dpid = 0; + m_bHost = FALSE; + m_providers.nb = 0; + m_providers.pList = NULL; + m_sessions.nb = 0; + m_sessions.pList = NULL; + m_unknown.nb = 0; + m_unknown.pList = NULL; } - return TRUE; -} -BOOL CNetwork::EnumProviders() -{ - FreeProviderList(); - m_providers.nb = 0; - m_providers.pList = (NamedGUID(*)[MAXSESSION]) malloc(MAXSESSION * sizeof(NamedGUID)); - - if (!m_providers.pList) return FALSE; -#ifdef _UNICODE - if (DirectPlayEnumerate((LPDPENUMDPCALLBACK)EnumProvidersCallback, &m_providers) != DP_OK) -#else - if (DirectPlayEnumerate((LPDPENUMDPCALLBACKA)EnumProvidersCallback, &m_providers) != DP_OK) -#endif + CNetwork::~CNetwork() { FreeProviderList(); - return FALSE; - } - return TRUE; -} - -int CNetwork::GetNbProviders() -{ - return m_providers.nb; -} - -char* CNetwork::GetProviderName(int index) -{ - if (index >= m_providers.nb) return NULL; - return m_providers.pList[index]->name; -} - -BOOL CNetwork::CreateProvider(int index) -{ - LPDIRECTPLAY lpDP; - BOOL bOK = FALSE; - - if (index >= m_providers.nb) return FALSE; - - if (DirectPlayCreate(&m_providers.pList[index]->guid, &lpDP, 0) == DP_OK) - { - if (lpDP->QueryInterface(IID_IDirectPlay2A, (LPVOID*)&m_pDP) == DP_OK) - { - return TRUE; - } - } - - if (lpDP) lpDP->Release(); - return FALSE; -} - -void CNetwork::FreeProviderList() -{ - if (m_providers.pList) free(m_providers.pList); // wrong - - m_providers.nb = 0; - m_providers.pList = NULL; -} - - -static BOOL EnumSessionsCallback(LPDPSESSIONDESC2 lpThisSD, - LPDWORD lpdwTimeOut, DWORD dwFlags, NamedGUIDList* lpContext) -{ - if (dwFlags & DPESC_TIMEDOUT) return FALSE; - - if (lpContext->nb < MAXSESSION) - { - lpContext->pList[lpContext->nb]->guid = lpThisSD->guidInstance; - strcpy(lpContext->pList[lpContext->nb]->name, lpThisSD->lpszSessionNameA); - lpContext->nb++; - } - return TRUE; -} - -BOOL CNetwork::EnumSessions() -{ - DPSESSIONDESC2 desc; - - FreeSessionList(); - m_sessions.nb = 0; - m_sessions.pList = (NamedGUID(*)[MAXSESSION]) malloc(MAXSESSION * sizeof(NamedGUID)); - - if (!m_sessions.pList) return FALSE; - - ZeroMemory(&desc, sizeof(desc)); - - desc.guidApplication = APP_GUID; - desc.dwSize = sizeof(desc); - - if (m_pDP->EnumSessions(&desc, 0, (LPDPENUMSESSIONSCALLBACK2)EnumSessionsCallback, &m_sessions, DPENUMSESSIONS_AVAILABLE) != DP_OK) - { FreeSessionList(); - return FALSE; + FreeUnknownList(); + if (m_pDP) m_pDP->Release(); } - return TRUE; -} - -char* CNetwork::GetSessionName(int index) -{ - if (index >= m_sessions.nb) return NULL; - return m_sessions.pList[index]->name; -} - -BOOL CNetwork::JoinSession(int index, char* pPlayerName) -{ - DPNAME name; - DPSESSIONDESC2 desc; - HRESULT hr; - - if (index > m_sessions.nb) return FALSE; - - ZeroMemory(&desc, sizeof(desc)); - - desc.guidInstance = m_sessions.pList[index]->guid; - - hr = m_pDP->Open(&desc, DPOPEN_OPENSESSION); - if (hr != DP_OK) + static BOOL EnumProvidersCallback(LPGUID lpguidSP, LPSTR lpSPName, + DWORD dwMajorVersion, DWORD dwMinorVersion, NamedGUIDList* lpContext) { - TraceErrorDP(hr); - return FALSE; - } - - name.dwSize = 16; - name.dwFlags = 0; - name.lpszShortNameA = pPlayerName; - name.lpszLongNameA = NULL; - hr = m_pDP->CreatePlayer(&m_dpid, &name, NULL, NULL, 0, 0); - if (hr != DP_OK) - { - TraceErrorDP(hr); - m_pDP->Close(); - return FALSE; - } - else - { - m_bHost = FALSE; + if (lpContext->nb < MAXSESSION) + { + lpContext->pList[lpContext->nb]->guid = *lpguidSP; + strcpy(lpContext->pList[lpContext->nb]->name, lpSPName); + lpContext->nb++; + } return TRUE; } -} -void CNetwork::FreeSessionList() -{ - if (m_sessions.pList) free(m_sessions.pList); - - m_sessions.nb = 0; - m_sessions.pList = NULL; -} - -BOOL CNetwork::CreateSession(char* pSessionName, char* pPlayerName) -{ - DPNAME name; - DPSESSIONDESC2 desc; - HRESULT hr; - - ZeroMemory(&desc, sizeof(desc)); - - desc.guidApplication = APP_GUID; - desc.lpszSessionNameA = pSessionName; - desc.dwSize = sizeof(desc); - desc.dwFlags = DPSESSION_KEEPALIVE | DPSESSION_MIGRATEHOST; - desc.dwMaxPlayers = MAXPLAYERS; - - hr = m_pDP->Open(&desc, DPOPEN_CREATE); - if (hr != DP_OK) + BOOL CNetwork::EnumProviders() { - TraceErrorDP(hr); + FreeProviderList(); + m_providers.nb = 0; + m_providers.pList = (NamedGUID(*)[MAXSESSION]) malloc(MAXSESSION * sizeof(NamedGUID)); + + if (!m_providers.pList) return FALSE; +#ifdef _UNICODE + if (DirectPlayEnumerate((LPDPENUMDPCALLBACK)EnumProvidersCallback, &m_providers) != DP_OK) +#else + if (DirectPlayEnumerate((LPDPENUMDPCALLBACKA)EnumProvidersCallback, &m_providers) != DP_OK) +#endif + { + FreeProviderList(); + return FALSE; + } + return TRUE; + } + + int CNetwork::GetNbProviders() + { + return m_providers.nb; + } + + char* CNetwork::GetProviderName(int index) + { + if (index >= m_providers.nb) return NULL; + return m_providers.pList[index]->name; + } + + BOOL CNetwork::CreateProvider(int index) + { + LPDIRECTPLAY lpDP; + BOOL bOK = FALSE; + + if (index >= m_providers.nb) return FALSE; + + if (DirectPlayCreate(&m_providers.pList[index]->guid, &lpDP, 0) == DP_OK) + { + if (lpDP->QueryInterface(IID_IDirectPlay2A, (LPVOID*)&m_pDP) == DP_OK) + { + return TRUE; + } + } + + if (lpDP) lpDP->Release(); return FALSE; } - else + + void CNetwork::FreeProviderList() { - name.dwSize = 16; + if (m_providers.pList) free(m_providers.pList); // wrong + + m_providers.nb = 0; + m_providers.pList = NULL; + } + + + static BOOL EnumSessionsCallback(LPDPSESSIONDESC2 lpThisSD, + LPDWORD lpdwTimeOut, DWORD dwFlags, NamedGUIDList* lpContext) + { + if (dwFlags & DPESC_TIMEDOUT) return FALSE; + + if (lpContext->nb < MAXSESSION) + { + lpContext->pList[lpContext->nb]->guid = lpThisSD->guidInstance; + strcpy(lpContext->pList[lpContext->nb]->name, lpThisSD->lpszSessionNameA); + lpContext->nb++; + } + return TRUE; + } + + BOOL CNetwork::EnumSessions() + { + DPSESSIONDESC2 desc; + + FreeSessionList(); + m_sessions.nb = 0; + m_sessions.pList = (NamedGUID(*)[MAXSESSION]) malloc(MAXSESSION * sizeof(NamedGUID)); + + if (!m_sessions.pList) return FALSE; + + ZeroMemory(&desc, sizeof(desc)); + + desc.guidApplication = APP_GUID; + desc.dwSize = sizeof(desc); + + if (m_pDP->EnumSessions(&desc, 0, (LPDPENUMSESSIONSCALLBACK2)EnumSessionsCallback, &m_sessions, DPENUMSESSIONS_AVAILABLE) != DP_OK) + { + FreeSessionList(); + return FALSE; + } + + return TRUE; + } + + char* CNetwork::GetSessionName(int index) + { + if (index >= m_sessions.nb) return NULL; + return m_sessions.pList[index]->name; + } + + BOOL CNetwork::JoinSession(int index, char* pPlayerName) + { + DPNAME name; + DPSESSIONDESC2 desc; + HRESULT hr; + + if (index > m_sessions.nb) return FALSE; + + ZeroMemory(&desc, sizeof(desc)); + + desc.guidInstance = m_sessions.pList[index]->guid; + + hr = m_pDP->Open(&desc, DPOPEN_OPENSESSION); + if (hr != DP_OK) + { + TraceErrorDP(hr); + return FALSE; + } + + name.dwSize = sizeof(name); name.dwFlags = 0; name.lpszShortNameA = pPlayerName; name.lpszLongNameA = NULL; @@ -225,118 +178,168 @@ BOOL CNetwork::CreateSession(char* pSessionName, char* pPlayerName) } else { - m_bHost = TRUE; + m_bHost = FALSE; return TRUE; } } -} -BOOL CNetwork::Send(LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) -{ - HRESULT hr; - - if (!m_pDP) return FALSE; - - if (hr = m_pDP->Send(m_dpid, 0, !!dwFlags, lpData, dwDataSize), hr != DP_OK) + void CNetwork::FreeSessionList() { - TraceErrorDP(hr); - return FALSE; - } - return TRUE; -} + if (m_sessions.pList) free(m_sessions.pList); -BOOL CNetwork::Receive(LPVOID pDest, DWORD dwDataSize, LPDWORD lpdwPlayer) -{ - DPID from = 0, to = 0, dataSize = 500; - char dataBuffer[500]; - HRESULT hr; - - hr = m_pDP->Receive(&from, &to, DPRECEIVE_ALL, dataBuffer, &dataSize); - if (hr != DP_OK) - { - if (hr != DPERR_NOMESSAGES) TraceErrorDP(hr); - return FALSE; + m_sessions.nb = 0; + m_sessions.pList = NULL; } - ZeroMemory(pDest, dwDataSize); - - *lpdwPlayer = -1; - for (int i = 0; i < MAXPLAYERS; i++) + BOOL CNetwork::CreateSession(char* pSessionName, char* pPlayerName) { - if (m_players[i].bIsPresent && from == i) + DPNAME name; + DPSESSIONDESC2 desc; + HRESULT hr; + + ZeroMemory(&desc, sizeof(desc)); + + desc.guidApplication = APP_GUID; + desc.lpszSessionNameA = pSessionName; + desc.dwSize = sizeof(desc); + desc.dwFlags = DPSESSION_KEEPALIVE | DPSESSION_MIGRATEHOST; + desc.dwMaxPlayers = MAXPLAYERS; + + hr = m_pDP->Open(&desc, DPOPEN_CREATE); + if (hr != DP_OK) { - *lpdwPlayer = i; - break; + TraceErrorDP(hr); + return FALSE; + } + else + { + name.dwSize = sizeof(name); + name.dwFlags = 0; + name.lpszShortNameA = pPlayerName; + name.lpszLongNameA = NULL; + hr = m_pDP->CreatePlayer(&m_dpid, &name, NULL, NULL, 0, 0); + if (hr != DP_OK) + { + TraceErrorDP(hr); + m_pDP->Close(); + return FALSE; + } + else + { + m_bHost = TRUE; + return TRUE; + } } } - return TRUE; -} - -BOOL CNetwork::Close() -{ - return m_pDP->Close() == DP_OK; -} - -void CNetwork::FreeUnknownList() -{ - if (m_unknown.pList) free(m_unknown.pList); - - m_unknown.nb = 0; - m_unknown.pList = NULL; -} - -BOOL CNetwork::IsHost() -{ - return m_bHost; -} - -void TraceErrorDP(HRESULT hErr) -{ - char dperr[256]; - char err[1024]; - - switch (hErr) + BOOL CNetwork::Send(LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) { - case DPERR_OUTOFMEMORY: sprintf(dperr, "DPERR_OUTOFMEMORY"); break; - case DPERR_UNSUPPORTED: sprintf(dperr, "DPERR_UNSUPPORTED"); break; - case DPERR_NOINTERFACE: sprintf(dperr, "DPERR_NOINTERFACE"); break; - case DPERR_GENERIC: sprintf(dperr, "DPERR_GENERIC"); break; - case DPERR_INVALIDPARAMS: sprintf(dperr, "DPERR_INVALIDPARAMS"); break; - case DPERR_ACTIVEPLAYERS: sprintf(dperr, "DPERR_ACTIVEPLAYERS"); break; - case DPERR_ACCESSDENIED: sprintf(dperr, "DPERR_ACCESSDENIED"); break; - case DPERR_CANTADDPLAYER: sprintf(dperr, "DPERR_CANTADDPLAYER"); break; - case DPERR_CANTCREATEPLAYER: sprintf(dperr, "DPERR_CANTCREATEPLAYER"); break; - case DPERR_CANTCREATEGROUP: sprintf(dperr, "DPERR_CANTCREATEGROUP"); break; - case DPERR_CANTCREATESESSION: sprintf(dperr, "DPERR_CANTCREATESESSION"); break; - case DPERR_CAPSNOTAVAILABLEYET: sprintf(dperr, "DPERR_CAPTSNOTAVAILABLEYET"); break; - case DPERR_ALREADYINITIALIZED: sprintf(dperr, "DPERR_ALREADYINITIALIZED"); break; - case DPERR_INVALIDFLAGS: sprintf(dperr, "DPERR_INVALIDFLAGS"); break; - case DPERR_EXCEPTION: sprintf(dperr, "DPERR_EXCEPTION"); break; - case DPERR_INVALIDPLAYER: sprintf(dperr, "DPERR_INVALIDPLAYER"); break; - case DPERR_INVALIDOBJECT: sprintf(dperr, "DPERR_INVALIDOBJECT"); break; - case DPERR_NOCONNECTION: sprintf(dperr, "DPERR_NOCONNECTION"); break; - case DPERR_NONAMESERVERFOUND: sprintf(dperr, "DPERR_NONAMESERVERFOUND"); break; - case DPERR_NOMESSAGES: sprintf(dperr, "DPERR_NOMESSAGES"); break; - case DPERR_NOSESSIONS: sprintf(dperr, "DPERR_NOSESSIONS"); break; - case DPERR_NOPLAYERS: sprintf(dperr, "DPERR_NOPLAYERS"); break; - case DPERR_TIMEOUT: sprintf(dperr, "DPERR_TIMEOUT"); break; - case DPERR_SENDTOOBIG: sprintf(dperr, "DPERR_SENDTOOBIG"); break; - case DPERR_BUSY: sprintf(dperr, "DPERR_BUSY"); break; - case DPERR_UNAVAILABLE: sprintf(dperr, "DPERR_UNAVAILABLE"); break; - case DPERR_PLAYERLOST: sprintf(dperr, "DPERR_PLAYERLOST"); break; - case DPERR_USERCANCEL: sprintf(dperr, "DPERR_USERCANCEL"); break; - case DPERR_BUFFERTOOLARGE: sprintf(dperr, "DPERR_BUFFERTOOLARGE"); break; - case DPERR_SESSIONLOST: sprintf(dperr, "DPERR_SESSIONLOST"); break; - case DPERR_APPNOTSTARTED: sprintf(dperr, "DPERR_APPNOTSTARTED"); break; - case DPERR_CANTCREATEPROCESS: sprintf(dperr, "DPERR_CANTCREATEPROCESS"); break; - case DPERR_UNKNOWNAPPLICATION: sprintf(dperr, "DPERR_UNKNOWNAPPLICATION"); break; - case DPERR_INVALIDINTERFACE: sprintf(dperr, "DPERR_INVALIDINTERFACE"); break; - case DPERR_NOTLOBBIED: sprintf(dperr, "DPERR_NOTLOBBIED"); break; - case DP_OK: sprintf(dperr, "DP_OK"); break; + HRESULT hr; - default: sprintf(dperr, "Unknown Error"); break; + if (!m_pDP) return FALSE; + + if (hr = m_pDP->Send(m_dpid, 0, !!dwFlags, lpData, dwDataSize), hr != DP_OK) + { + TraceErrorDP(hr); + return FALSE; + } + return TRUE; + } + + BOOL CNetwork::Receive(LPVOID pDest, DWORD dwDataSize, LPDWORD lpdwPlayer) + { + DPID from = 0, to = 0; + DWORD dataSize = 500; + char dataBuffer[500]; + HRESULT hr; + + hr = m_pDP->Receive(&from, &to, DPRECEIVE_ALL, dataBuffer, &dataSize); + if (hr != DP_OK) + { + if (hr != DPERR_NOMESSAGES) TraceErrorDP(hr); + return FALSE; + } + + ZeroMemory(pDest, dwDataSize); + + *lpdwPlayer = -1; + for (int i = 0; i < MAXPLAYERS; i++) + { + if (m_players[i].bIsPresent && from == i) + { + *lpdwPlayer = i; + break; + } + } + + return TRUE; + } + + BOOL CNetwork::Close() + { + return m_pDP->Close() == DP_OK; + } + + void CNetwork::FreeUnknownList() + { + if (m_unknown.pList) free(m_unknown.pList); + + m_unknown.nb = 0; + m_unknown.pList = NULL; + } + + BOOL CNetwork::IsHost() + { + return m_bHost; + } + + void TraceErrorDP(HRESULT hErr) + { + char dperr[256]; + char err[1024]; + + switch (hErr) + { + case DPERR_OUTOFMEMORY: sprintf(dperr, "DPERR_OUTOFMEMORY"); break; + case DPERR_UNSUPPORTED: sprintf(dperr, "DPERR_UNSUPPORTED"); break; + case DPERR_NOINTERFACE: sprintf(dperr, "DPERR_NOINTERFACE"); break; + case DPERR_GENERIC: sprintf(dperr, "DPERR_GENERIC"); break; + case DPERR_INVALIDPARAMS: sprintf(dperr, "DPERR_INVALIDPARAMS"); break; + case DPERR_ACTIVEPLAYERS: sprintf(dperr, "DPERR_ACTIVEPLAYERS"); break; + case DPERR_ACCESSDENIED: sprintf(dperr, "DPERR_ACCESSDENIED"); break; + case DPERR_CANTADDPLAYER: sprintf(dperr, "DPERR_CANTADDPLAYER"); break; + case DPERR_CANTCREATEPLAYER: sprintf(dperr, "DPERR_CANTCREATEPLAYER"); break; + case DPERR_CANTCREATEGROUP: sprintf(dperr, "DPERR_CANTCREATEGROUP"); break; + case DPERR_CANTCREATESESSION: sprintf(dperr, "DPERR_CANTCREATESESSION"); break; + case DPERR_CAPSNOTAVAILABLEYET: sprintf(dperr, "DPERR_CAPTSNOTAVAILABLEYET"); break; + case DPERR_ALREADYINITIALIZED: sprintf(dperr, "DPERR_ALREADYINITIALIZED"); break; + case DPERR_INVALIDFLAGS: sprintf(dperr, "DPERR_INVALIDFLAGS"); break; + case DPERR_EXCEPTION: sprintf(dperr, "DPERR_EXCEPTION"); break; + case DPERR_INVALIDPLAYER: sprintf(dperr, "DPERR_INVALIDPLAYER"); break; + case DPERR_INVALIDOBJECT: sprintf(dperr, "DPERR_INVALIDOBJECT"); break; + case DPERR_NOCONNECTION: sprintf(dperr, "DPERR_NOCONNECTION"); break; + case DPERR_NONAMESERVERFOUND: sprintf(dperr, "DPERR_NONAMESERVERFOUND"); break; + case DPERR_NOMESSAGES: sprintf(dperr, "DPERR_NOMESSAGES"); break; + case DPERR_NOSESSIONS: sprintf(dperr, "DPERR_NOSESSIONS"); break; + case DPERR_NOPLAYERS: sprintf(dperr, "DPERR_NOPLAYERS"); break; + case DPERR_TIMEOUT: sprintf(dperr, "DPERR_TIMEOUT"); break; + case DPERR_SENDTOOBIG: sprintf(dperr, "DPERR_SENDTOOBIG"); break; + case DPERR_BUSY: sprintf(dperr, "DPERR_BUSY"); break; + case DPERR_UNAVAILABLE: sprintf(dperr, "DPERR_UNAVAILABLE"); break; + case DPERR_PLAYERLOST: sprintf(dperr, "DPERR_PLAYERLOST"); break; + case DPERR_USERCANCEL: sprintf(dperr, "DPERR_USERCANCEL"); break; + case DPERR_BUFFERTOOLARGE: sprintf(dperr, "DPERR_BUFFERTOOLARGE"); break; + case DPERR_SESSIONLOST: sprintf(dperr, "DPERR_SESSIONLOST"); break; + case DPERR_APPNOTSTARTED: sprintf(dperr, "DPERR_APPNOTSTARTED"); break; + case DPERR_CANTCREATEPROCESS: sprintf(dperr, "DPERR_CANTCREATEPROCESS"); break; + case DPERR_UNKNOWNAPPLICATION: sprintf(dperr, "DPERR_UNKNOWNAPPLICATION"); break; + case DPERR_INVALIDINTERFACE: sprintf(dperr, "DPERR_INVALIDINTERFACE"); break; + case DPERR_NOTLOBBIED: sprintf(dperr, "DPERR_NOTLOBBIED"); break; + case DP_OK: sprintf(dperr, "DP_OK"); break; + + default: sprintf(dperr, "Unknown Error"); break; + } + sprintf(err, "DirectPlay Error %s\n", dperr); + OutputDebug(err); } - sprintf(err, "DirectPlay Error %s\n", dperr); - OutputDebug(err); } \ No newline at end of file diff --git a/src/network.h b/src/network.h index 7d62056..7243894 100644 --- a/src/network.h +++ b/src/network.h @@ -9,71 +9,74 @@ #define MAXSESSION 100 #define MAXPLAYERS 4 -typedef struct -{ - char bIsPresent; - char ready; - char unk_2; - char unk_3; - DPID dpid; - short team; - char name[22]; -} -NetPlayer; +extern "C" { -typedef struct -{ - GUID guid; - char name[100]; -} -NamedGUID; + typedef struct + { + char bIsPresent; + char ready; + char unk_2; + char unk_3; + DPID dpid; + short team; + char name[22]; + } + NetPlayer; -typedef struct -{ - int nb; - NamedGUID (*pList)[MAXSESSION]; -} -NamedGUIDList; + typedef struct + { + GUID guid; + char name[100]; + } + NamedGUID; -class CNetwork -{ -public: - CNetwork(); - ~CNetwork(); + typedef struct + { + int nb; + NamedGUID(*pList)[MAXSESSION]; + } + NamedGUIDList; - BOOL EnumProviders(); - BOOL GetNbProviders(); - char* GetProviderName(int index); - BOOL CreateProvider(int index); - void FreeProviderList(); - BOOL EnumSessions(); - char* GetSessionName(int index); - BOOL JoinSession(int index, char* pPlayerName); - void FreeSessionList(); - BOOL CreateSession(char* pSessionName, char* pPlayerName); - BOOL Send(LPVOID lpData, DWORD dwDataSize, DWORD dwFlags); - BOOL Receive(LPVOID pDest, DWORD dwDataSize, LPDWORD lpdwPlayer); - BOOL Close(); - void FreeUnknownList(); - BOOL IsHost(); + class CNetwork + { + public: + CNetwork(); + ~CNetwork(); - NetPlayer m_players[4]; - DPID m_dpid; + BOOL EnumProviders(); + BOOL GetNbProviders(); + char* GetProviderName(int index); + BOOL CreateProvider(int index); + void FreeProviderList(); + BOOL EnumSessions(); + char* GetSessionName(int index); + BOOL JoinSession(int index, char* pPlayerName); + void FreeSessionList(); + BOOL CreateSession(char* pSessionName, char* pPlayerName); + BOOL Send(LPVOID lpData, DWORD dwDataSize, DWORD dwFlags); + BOOL Receive(LPVOID pDest, DWORD dwDataSize, LPDWORD lpdwPlayer); + BOOL Close(); + void FreeUnknownList(); + BOOL IsHost(); -protected: - LPDIRECTPLAY2 m_pDP; - NamedGUIDList m_providers; - NamedGUIDList m_sessions; - NamedGUIDList m_unknown; - BOOL m_bHost; - -// NetPlayer m_players[4]; -}; + NetPlayer m_players[4]; + DPID m_dpid; -static BOOL EnumProvidersCallback(LPGUID lpguidSP, LPSTR lpSTName, - DWORD dwMajorVersion, DWORD dwMinorVersion, NamedGUIDList* lpContext); + protected: + LPDIRECTPLAY2 m_pDP; + NamedGUIDList m_providers; + NamedGUIDList m_sessions; + NamedGUIDList m_unknown; + BOOL m_bHost; -static BOOL EnumSessionsCallback(LPDPSESSIONDESC2 lpThisSD, - LPDWORD lpdwTimeOut, DWORD dwFlags, NamedGUIDList* lpContext); + // NetPlayer m_players[4]; + }; -void TraceErrorDP(HRESULT hErr); \ No newline at end of file + static BOOL EnumProvidersCallback(LPGUID lpguidSP, LPSTR lpSTName, + DWORD dwMajorVersion, DWORD dwMinorVersion, NamedGUIDList* lpContext); + + static BOOL EnumSessionsCallback(LPDPSESSIONDESC2 lpThisSD, + LPDWORD lpdwTimeOut, DWORD dwFlags, NamedGUIDList* lpContext); + + void TraceErrorDP(HRESULT hErr); +} \ No newline at end of file diff --git a/src/pixmap.h b/src/pixmap.h index f36c438..68e0ef8 100644 --- a/src/pixmap.h +++ b/src/pixmap.h @@ -97,8 +97,6 @@ protected: HWND m_hWnd; POINT m_dim; RECT m_clipRect; - double originX; - double originY; POINT m_mousePos; int m_mouseSprite;