diff --git a/Source/nthread.cpp b/Source/nthread.cpp index abd6029fc..c1b568a3b 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -39,43 +39,37 @@ void nthread_terminate_game(const char *pszFcn) } } -int nthread_send_and_recv_turn(int cur_turn, int turn_delta) +DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta) { - unsigned int new_cur_turn; // edi - const char *lastStormFn; // ecx - int turn_tmp; // eax - int turn; // [esp+Ch] [ebp-8h] - int curTurnsInTransit; // [esp+10h] [ebp-4h] + DWORD new_cur_turn; + int turn_tmp; + int turn; + int curTurnsInTransit; new_cur_turn = cur_turn; - if (SNetGetTurnsInTransit(&curTurnsInTransit)) { - if (curTurnsInTransit >= (unsigned int)gdwTurnsInTransit) - return new_cur_turn; - while (1) { - ++curTurnsInTransit; - - turn_tmp = turn_upper_bit | new_cur_turn & 0x7FFFFFFF; - turn_upper_bit = 0; - turn = turn_tmp; + if (!SNetGetTurnsInTransit(&curTurnsInTransit)) { + nthread_terminate_game("SNetGetTurnsInTransit"); + return 0; + } + while (curTurnsInTransit < gdwTurnsInTransit) { + curTurnsInTransit++; - if (!SNetSendTurn((char *)&turn, sizeof(turn))) - break; + turn_tmp = turn_upper_bit | new_cur_turn & 0x7FFFFFFF; + turn_upper_bit = 0; + turn = turn_tmp; - new_cur_turn += turn_delta; - if (new_cur_turn >= 0x7FFFFFFF) - new_cur_turn = (unsigned short)new_cur_turn; - if (curTurnsInTransit >= (unsigned int)gdwTurnsInTransit) - return new_cur_turn; + if (!SNetSendTurn((char *)&turn, sizeof(turn))) { + nthread_terminate_game("SNetSendTurn"); + return 0; } - lastStormFn = "SNetSendTurn"; - } else { - lastStormFn = "SNetGetTurnsInTransit"; + + new_cur_turn += turn_delta; + if (new_cur_turn >= 0x7FFFFFFF) + new_cur_turn &= 0xFFFF; } - nthread_terminate_game(lastStormFn); - return 0; + return new_cur_turn; } -// 679738: using guessed type int gdwTurnsInTransit; -// 679754: using guessed type int turn_upper_bit; + BOOL nthread_recv_turns(BOOL *pfSendAsync) { diff --git a/Source/nthread.h b/Source/nthread.h index 62f605378..9710d8a91 100644 --- a/Source/nthread.h +++ b/Source/nthread.h @@ -16,7 +16,7 @@ extern int gdwNormalMsgSize; // weak extern int last_tick; // weak void nthread_terminate_game(const char *pszFcn); -int nthread_send_and_recv_turn(int cur_turn, int turn_delta); +DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta); BOOL nthread_recv_turns(BOOL *pfSendAsync); void nthread_set_turn_upper_bit(); void nthread_start(BOOL set_turn_upper_bit);