diff --git a/Source/multi.cpp b/Source/multi.cpp index 25a9d3203..1306be9de 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -547,23 +547,14 @@ void multi_process_tmsgs() } } -void multi_send_zero_packet(int pnum, char a2, void *pbSrc, int dwLen) -{ - unsigned int v4; // edi - short v5; // si - unsigned short dwBody; // ax - TPkt pkt; // [esp+Ch] [ebp-208h] - int pnuma; // [esp+20Ch] [ebp-8h] - int v10; // [esp+210h] [ebp-4h] - - v4 = dwLen; - _LOBYTE(v10) = a2; - pnuma = pnum; +void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen) +{ + DWORD v5, dwBody; + TPkt pkt; + int t; v5 = 0; - while (v4) { + while (dwLen) { pkt.hdr.wCheck = 'ip'; - pkt.body[0] = v10; - dwBody = gdwLargestMsgSize - 24; pkt.hdr.px = 0; pkt.hdr.py = 0; pkt.hdr.targx = 0; @@ -573,18 +564,21 @@ void multi_send_zero_packet(int pnum, char a2, void *pbSrc, int dwLen) pkt.hdr.bstr = 0; pkt.hdr.bmag = 0; pkt.hdr.bdex = 0; + pkt.body[0] = a2; *(_WORD *)&pkt.body[1] = v5; - if (v4 < gdwLargestMsgSize - 24) - dwBody = v4; + dwBody = gdwLargestMsgSize - 24; + if (dwLen < dwBody) + dwBody = dwLen; *(_WORD *)&pkt.body[3] = dwBody; - memcpy(&pkt.body[5], pbSrc, dwBody); - pkt.hdr.wLen = *(_WORD *)&pkt.body[3] + 24; - if (!SNetSendMessage(pnuma, &pkt.hdr, *(unsigned short *)&pkt.body[3] + 24)) { + memcpy(&pkt.body[5], pbSrc, *(_WORD *)&pkt.body[3]); + t = *(WORD *)&pkt.body[3] + 24; + pkt.hdr.wLen = t; + if (!SNetSendMessage(pnum, &pkt.hdr, t)) { nthread_terminate_game("SNetSendMessage2"); return; } - pbSrc = (char *)pbSrc + *(unsigned short *)&pkt.body[3]; - v4 -= *(unsigned short *)&pkt.body[3]; + pbSrc = (char *)pbSrc + *(WORD *)&pkt.body[3]; + dwLen -= *(WORD *)&pkt.body[3]; v5 += *(_WORD *)&pkt.body[3]; } } diff --git a/Source/multi.h b/Source/multi.h index 56269bf48..3fbb1d8b7 100644 --- a/Source/multi.h +++ b/Source/multi.h @@ -41,7 +41,7 @@ void multi_check_drop_player(); void multi_process_network_packets(); void multi_handle_all_packets(int players, TPkt *packet, int a3); void multi_process_tmsgs(); -void multi_send_zero_packet(int pnum, char a2, void *pbSrc, int dwLen); +void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen); void NetClose(); void multi_event_handler(BOOL add); void __stdcall multi_handle_events(_SNETEVENT *pEvt);