diff --git a/3rdParty/Storm/Source/storm.cpp b/3rdParty/Storm/Source/storm.cpp index 21828a12e..a361d2954 100644 --- a/3rdParty/Storm/Source/storm.cpp +++ b/3rdParty/Storm/Source/storm.cpp @@ -23,7 +23,7 @@ BOOL STORMAPI SNetJoinGame(int id, char *gameName, char *gamePassword, char *pla BOOL STORMAPI SNetLeaveGame(int type) rBool; BOOL STORMAPI SNetPerformUpgrade(DWORD *upgradestatus) rBool; BOOL STORMAPI SNetReceiveMessage(int *senderplayerid, char **data, int *databytes) rBool; -BOOL STORMAPI SNetReceiveTurns(int a1, int arraysize, char **arraydata, unsigned int *arraydatabytes, DWORD *arrayplayerstatus) rBool; +BOOL STORMAPI SNetReceiveTurns(int a1, int arraysize, char **arraydata, DWORD *arraydatabytes, DWORD *arrayplayerstatus) rBool; //HANDLE STORMAPI SNetRegisterEventHandler(int type, void (STORMAPI *sEvent)(PS_EVT)) rPVoid; int STORMAPI SNetSelectGame(int a1, int a2, int a3, int a4, int a5, int *playerid) rInt; diff --git a/3rdParty/Storm/Source/storm.h b/3rdParty/Storm/Source/storm.h index 52954f76a..6a80540c3 100644 --- a/3rdParty/Storm/Source/storm.h +++ b/3rdParty/Storm/Source/storm.h @@ -354,7 +354,7 @@ SNetLeaveGame( BOOL STORMAPI SNetPerformUpgrade(DWORD *upgradestatus); BOOL STORMAPI SNetReceiveMessage(int *senderplayerid, char **data, int *databytes); -BOOL STORMAPI SNetReceiveTurns(int a1, int arraysize, char **arraydata, unsigned int *arraydatabytes, DWORD *arrayplayerstatus); +BOOL STORMAPI SNetReceiveTurns(int a1, int arraysize, char **arraydata, DWORD *arraydatabytes, DWORD *arrayplayerstatus); // Values for arrayplayerstatus #define SNET_PS_OK 0 diff --git a/Source/msg.cpp b/Source/msg.cpp index 0b32af186..e40393b6f 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -149,7 +149,6 @@ int msg_wait_for_turns() // 67618D: using guessed type char sgbDeltaChunks; // 67862D: using guessed type char gbGameDestroyed; // 6796E4: using guessed type char gbDeltaSender; -// 679738: using guessed type int gdwTurnsInTransit; void msg_process_net_packets() { diff --git a/Source/multi.cpp b/Source/multi.cpp index 1306be9de..e870b4d4d 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -227,7 +227,7 @@ void multi_parse_turn(int pnum, int turn) if (absTurns >= 0x7FFFFFFF) absTurns &= 0xFFFF; sgbSentThisCycle = absTurns + gdwTurnsInTransit; - sgdwGameLoops = 4 * absTurns * (BYTE)byte_679704; + sgdwGameLoops = 4 * absTurns * sgbNetUpdateRate; } } @@ -621,12 +621,12 @@ void multi_event_handler(BOOL add) void __stdcall multi_handle_events(_SNETEVENT *pEvt) { - int LeftReason; - int *data; + DWORD LeftReason; + DWORD *data; switch (pEvt->eventid) { case EVENT_TYPE_PLAYER_CREATE_GAME: - data = (int *)pEvt->data; + data = (DWORD *)pEvt->data; sgGameInitInfo.dwSeed = data[0]; sgGameInitInfo.bDiff = data[1]; sgbPlayerTurnBitTbl[pEvt->playerid] = TRUE; @@ -635,7 +635,7 @@ void __stdcall multi_handle_events(_SNETEVENT *pEvt) sgbPlayerLeftGameTbl[pEvt->playerid] = TRUE; sgbPlayerTurnBitTbl[pEvt->playerid] = FALSE; LeftReason = 0; - data = (int *)pEvt->data; + data = (DWORD *)pEvt->data; if (data && (DWORD)pEvt->databytes >= 4) LeftReason = data[0]; sgdwPlayerLeftReasonTbl[pEvt->playerid] = LeftReason; diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 096bd08e2..54e26a016 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -1,24 +1,24 @@ #include "diablo.h" #include "../3rdParty/Storm/Source/storm.h" -char byte_679704; // weak -int gdwMsgLenTbl[MAX_PLRS]; +BYTE sgbNetUpdateRate; +DWORD gdwMsgLenTbl[MAX_PLRS]; #ifdef __cplusplus static CCritSect sgMemCrit; #endif -int gdwDeltaBytesSec; // weak -char nthread_should_run; // weak -DWORD gdwTurnsInTransit; // weak +DWORD gdwDeltaBytesSec; +BOOLEAN nthread_should_run; +DWORD gdwTurnsInTransit; int glpMsgTbl[MAX_PLRS]; unsigned int glpNThreadId; -char sgbSyncCountdown; // weak -int turn_upper_bit; // weak -char byte_679758; // weak -char sgbPacketCountdown; // weak -char sgbThreadIsRunning; // weak -DWORD gdwLargestMsgSize; // weak -DWORD gdwNormalMsgSize; // weak -int last_tick; // weak +char sgbSyncCountdown; +int turn_upper_bit; +BOOLEAN sgbTicsOutOfSync; +char sgbPacketCountdown; +BOOLEAN sgbThreadIsRunning; +DWORD gdwLargestMsgSize; +DWORD gdwNormalMsgSize; +int last_tick; /* data */ static HANDLE sghThread = INVALID_HANDLE_VALUE; @@ -42,8 +42,7 @@ void nthread_terminate_game(const char *pszFcn) DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta) { DWORD new_cur_turn; - int turn_tmp; - int turn; + int turn, turn_tmp; int curTurnsInTransit; new_cur_turn = cur_turn; @@ -70,7 +69,6 @@ DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta) return new_cur_turn; } - BOOL nthread_recv_turns(BOOL *pfSendAsync) { *pfSendAsync = FALSE; @@ -80,25 +78,23 @@ BOOL nthread_recv_turns(BOOL *pfSendAsync) return TRUE; } sgbSyncCountdown--; - sgbPacketCountdown = byte_679704; + sgbPacketCountdown = sgbNetUpdateRate; if (sgbSyncCountdown != 0) { - + *pfSendAsync = TRUE; last_tick += 50; return TRUE; } - if (!SNetReceiveTurns(0, MAX_PLRS, (char **)glpMsgTbl, (unsigned int *)gdwMsgLenTbl, (LPDWORD)player_state)) { + if (!SNetReceiveTurns(0, MAX_PLRS, (char **)glpMsgTbl, gdwMsgLenTbl, (LPDWORD)player_state)) { if (SErrGetLastError() != STORM_ERROR_NO_MESSAGES_WAITING) nthread_terminate_game("SNetReceiveTurns"); - byte_679758 = 0; + sgbTicsOutOfSync = FALSE; sgbSyncCountdown = 1; sgbPacketCountdown = 1; return 0; - } - else{ - - if (!byte_679758) { - byte_679758 = 1; + } else { + if (!sgbTicsOutOfSync) { + sgbTicsOutOfSync = TRUE; last_tick = GetTickCount(); } sgbSyncCountdown = 4; @@ -108,11 +104,6 @@ BOOL nthread_recv_turns(BOOL *pfSendAsync) return TRUE; } } -// 679704: using guessed type char byte_679704; -// 679750: using guessed type char sgbSyncCountdown; -// 679758: using guessed type char byte_679758; -// 679759: using guessed type char sgbPacketCountdown; -// 679764: using guessed type int last_tick; void nthread_set_turn_upper_bit() { @@ -121,16 +112,14 @@ void nthread_set_turn_upper_bit() void nthread_start(BOOL set_turn_upper_bit) { - char *err; // eax - unsigned int largestMsgSize; // esi - unsigned int normalMsgSize; // eax - char *err2; // eax - _SNETCAPS caps; // [esp+8h] [ebp-24h] + char *err, *err2; + DWORD largestMsgSize; + _SNETCAPS caps; last_tick = GetTickCount(); sgbPacketCountdown = 1; sgbSyncCountdown = 1; - byte_679758 = 1; + sgbTicsOutOfSync = TRUE; if (set_turn_upper_bit) nthread_set_turn_upper_bit(); else @@ -143,33 +132,33 @@ void nthread_start(BOOL set_turn_upper_bit) gdwTurnsInTransit = caps.defaultturnsintransit; if (!caps.defaultturnsintransit) gdwTurnsInTransit = 1; - if (caps.defaultturnssec <= 0x14u && caps.defaultturnssec) - byte_679704 = 0x14u / caps.defaultturnssec; + if (caps.defaultturnssec <= 20 && caps.defaultturnssec) + sgbNetUpdateRate = 20 / caps.defaultturnssec; else - byte_679704 = 1; + sgbNetUpdateRate = 1; largestMsgSize = 512; - if (caps.maxmessagesize < 0x200u) + if (caps.maxmessagesize < 0x200) largestMsgSize = caps.maxmessagesize; - gdwDeltaBytesSec = (unsigned int)caps.bytessec >> 2; + gdwDeltaBytesSec = caps.bytessec >> 2; gdwLargestMsgSize = largestMsgSize; - gdwNormalMsgSize = caps.bytessec * (unsigned int)(unsigned char)byte_679704 / 0x14; + gdwNormalMsgSize = caps.bytessec * sgbNetUpdateRate / 20; gdwNormalMsgSize *= 3; - gdwNormalMsgSize = gdwNormalMsgSize >> 2; - if (caps.maxplayers > 4u) - caps.maxplayers = 4; + gdwNormalMsgSize >>= 2; + if (caps.maxplayers > MAX_PLRS) + caps.maxplayers = MAX_PLRS; gdwNormalMsgSize /= caps.maxplayers; - while (gdwNormalMsgSize < 0x80){ - gdwNormalMsgSize *= 2; - byte_679704 *= 2; + while (gdwNormalMsgSize < 0x80) { + gdwNormalMsgSize *= 2; + sgbNetUpdateRate *= 2; } if (gdwNormalMsgSize > largestMsgSize) gdwNormalMsgSize = largestMsgSize; - if ((unsigned char)gbMaxPlayers > 1u) { - sgbThreadIsRunning = 0; + if (gbMaxPlayers > 1) { + sgbThreadIsRunning = FALSE; #ifdef __cplusplus sgMemCrit.Enter(); #endif - nthread_should_run = 1; + nthread_should_run = TRUE; sghThread = (HANDLE)_beginthreadex(NULL, 0, nthread_handler, NULL, 0, &glpNThreadId); if (sghThread == INVALID_HANDLE_VALUE) { err2 = TraceLastError(); @@ -213,7 +202,7 @@ unsigned int __stdcall nthread_handler(void *a1) void nthread_cleanup() { - nthread_should_run = 0; + nthread_should_run = FALSE; gdwTurnsInTransit = 0; gdwNormalMsgSize = 0; gdwLargestMsgSize = 0; diff --git a/Source/nthread.h b/Source/nthread.h index 479512318..8b0a98c10 100644 --- a/Source/nthread.h +++ b/Source/nthread.h @@ -2,18 +2,18 @@ #ifndef __NTHREAD_H__ #define __NTHREAD_H__ -extern char byte_679704; // weak -extern int gdwMsgLenTbl[MAX_PLRS]; -extern int gdwDeltaBytesSec; // weak -extern char nthread_should_run; // weak -extern DWORD gdwTurnsInTransit; // weak +extern BYTE sgbNetUpdateRate; +extern DWORD gdwMsgLenTbl[MAX_PLRS]; +extern DWORD gdwDeltaBytesSec; +extern BOOLEAN nthread_should_run; +extern DWORD gdwTurnsInTransit; extern int glpMsgTbl[MAX_PLRS]; extern unsigned int glpNThreadId; -extern int turn_upper_bit; // weak -extern char byte_679758; // weak -extern DWORD gdwLargestMsgSize; // weak -extern DWORD gdwNormalMsgSize; // weak -extern int last_tick; // weak +extern int turn_upper_bit; +extern BOOLEAN sgbThreadIsRunning; +extern DWORD gdwLargestMsgSize; +extern DWORD gdwNormalMsgSize; +extern int last_tick; void nthread_terminate_game(const char *pszFcn); DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta); diff --git a/structs.h b/structs.h index 93722191c..5c682fbca 100644 --- a/structs.h +++ b/structs.h @@ -1251,22 +1251,22 @@ typedef struct _uiheroinfo { // TPDEF PTR FCN VOID SMSGHANDLER typedef struct _SNETCAPS { - int size; - int flags; - int maxmessagesize; - int maxqueuesize; - int maxplayers; - int bytessec; - int latencyms; - int defaultturnssec; - int defaultturnsintransit; + DWORD size; + DWORD flags; + DWORD maxmessagesize; + DWORD maxqueuesize; + DWORD maxplayers; + DWORD bytessec; + DWORD latencyms; + DWORD defaultturnssec; + DWORD defaultturnsintransit; } _SNETCAPS; typedef struct _SNETEVENT { - int eventid; - int playerid; + DWORD eventid; + DWORD playerid; void *data; - int databytes; + DWORD databytes; } _SNETEVENT; // TPDEF PTR FCN UCHAR SNETABORTPROC