Browse Source

nthread_send_and_recv_turn bin exact

pull/114/head
qndel 7 years ago committed by Anders Jenbo
parent
commit
bca7111fc4
  1. 52
      Source/nthread.cpp
  2. 2
      Source/nthread.h

52
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)
{

2
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);

Loading…
Cancel
Save