diff --git a/Source/msg.cpp b/Source/msg.cpp index d341b29a4..ba45e0820 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -8,7 +8,7 @@ static int sgnCurrMegaPlayer; static DLevel sgLevels[NUMLEVELS]; static BYTE sbLastCmd; static TMegaPkt *sgpCurrPkt; -static char sgRecvBuf[sizeof(DLevel) + 1]; +static BYTE sgRecvBuf[sizeof(DLevel) + 1]; static BYTE sgbRecvCmd; static LocalLevel sgLocals[NUMLEVELS]; static DJunk sgJunk; @@ -198,14 +198,14 @@ void __cdecl msg_pre_packet() void __fastcall DeltaExportData(int pnum) { - char *v1; // edi + BYTE *v1; // edi DObjectStr *v2; // esi - void *v3; // ebx - void *v4; // eax - void *v5; // eax - void *v6; // eax + BYTE *v3; // ebx + BYTE *v4; // eax + BYTE *v5; // eax + BYTE *v6; // eax int v7; // eax - void *v8; // eax + BYTE *v8; // eax int v9; // eax int player_num; // [esp+0h] [ebp-Ch] int v11; // [esp+4h] [ebp-8h] @@ -214,13 +214,13 @@ void __fastcall DeltaExportData(int pnum) player_num = pnum; if (sgbDeltaChanged) { v11 = 0; - v1 = (char *)DiabloAllocPtr(4722); + v1 = (BYTE *)DiabloAllocPtr(4722); v2 = sgLevels[0].object; v3 = v1 + 1; do { - v4 = DeltaExportItem(v3, &v2[-2794]); + v4 = DeltaExportItem(v3, (TCmdPItem *)&v2[-2794]); v5 = DeltaExportObject(v4, v2); - v6 = DeltaExportMonster(v5, &v2[127]); + v6 = DeltaExportMonster(v5, (DMonsterStr *)&v2[127]); v7 = msg_comp_level(v1, v6); dthread_send_delta(player_num, (_BYTE)v11++ + CMD_DLEVEL_0, v1, v7); v2 += 4721; @@ -235,68 +235,57 @@ void __fastcall DeltaExportData(int pnum) } // 67618C: using guessed type char sgbDeltaChanged; -void *__fastcall DeltaExportItem(void *dst, void *src) +BYTE *__fastcall DeltaExportItem(BYTE *dst, TCmdPItem *src) { - _BYTE *v2; // edi - _BYTE *v3; // esi - signed int v4; // ebx + int i; - v2 = (unsigned char *)src; - v3 = (unsigned char *)dst; - v4 = 127; - do { - if (*v2 == -1) { - *v3++ = -1; + for (i = 0; i < MAXITEMS; i++) { + if (src->bCmd == 0xFF) { + *dst = 0xFF; + dst++; } else { - memcpy(v3, v2, 0x16u); - v3 += 22; + memcpy(dst, src, sizeof(TCmdPItem)); + dst += sizeof(TCmdPItem); } - v2 += 22; - --v4; - } while (v4); - return v3; + src++; + } + + return dst; } -void *__fastcall DeltaExportObject(void *dst, void *src) +BYTE *__fastcall DeltaExportObject(BYTE *dst, DObjectStr *src) { - char *v2; // esi - - v2 = (char *)dst; - memcpy(dst, src, 0x7Fu); - return v2 + 127; + memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); + return dst + sizeof(DObjectStr) * MAXOBJECTS; } -void *__fastcall DeltaExportMonster(void *dst, void *src) +BYTE *__fastcall DeltaExportMonster(BYTE *dst, DMonsterStr *src) { - _BYTE *v2; // edi - _BYTE *v3; // esi - signed int v4; // ebx + int i; - v2 = (unsigned char *)src; - v3 = (unsigned char *)dst; - v4 = MAXMONSTERS; - do { - if (*v2 == -1) { - *v3++ = -1; + for (i = 0; i < MAXMONSTERS; i++) { + if (*(BYTE *)src == 0xFF) { + *dst = 0xFF; + dst++; } else { - memcpy(v3, v2, 9u); - v3 += 9; + memcpy(dst, src, sizeof(DMonsterStr)); + dst += sizeof(DMonsterStr); } - v2 += 9; - --v4; - } while (v4); - return v3; + src++; + } + + return dst; } -void *__fastcall DeltaExportJunk(void *dst) +BYTE *__fastcall DeltaExportJunk(BYTE *dst) { - char *v1; // ebx + BYTE *v1; // ebx DJunk *v2; // edi MultiQuests *v3; // esi unsigned char *v4; // edi int *v5; // ebp - v1 = (char *)dst; + v1 = dst; v2 = &sgJunk; v3 = sgJunk.quests; do { @@ -325,24 +314,22 @@ void *__fastcall DeltaExportJunk(void *dst) return v1; } -int __fastcall msg_comp_level(char *begin, void *end) +int __fastcall msg_comp_level(BYTE *buffer, BYTE *end) { - char *v2; // esi - int v3; // edi - int v4; // eax + int size, pkSize; + + size = end - buffer - 1; + pkSize = PkwareCompress(buffer + 1, size); + *buffer = size != pkSize; - v2 = begin; - v3 = (char *)end - begin - 1; - v4 = PkwareCompress(begin + 1, v3); - *v2 = v3 != v4; - return v4 + 1; + return pkSize + 1; } void __cdecl delta_init() { sgbDeltaChanged = 0; - memset(&sgJunk, 255, sizeof(sgJunk)); - memset(sgLevels, 255, sizeof(sgLevels)); + memset(&sgJunk, 0xFF, sizeof(sgJunk)); + memset(sgLevels, 0xFF, sizeof(sgLevels)); memset(sgLocals, 0, sizeof(sgLocals)); deltaload = 0; } @@ -448,12 +435,12 @@ void __fastcall delta_leave_sync(BYTE bLevel) BOOL __fastcall delta_portal_inited(int i) { - return sgJunk.portal[i].x == -1; + return sgJunk.portal[i].x == 0xFF; } BOOL __fastcall delta_quest_inited(int i) { - return sgJunk.quests[i].qstate != -1; + return sgJunk.quests[i].qstate != 0xFF; } void __fastcall DeltaAddItem(int ii) @@ -590,7 +577,7 @@ void __cdecl DeltaLoadLevel() v40 = 0; v1 = &monster[0]._mfuty; do { - if (sgLevels[currlevel].monster[v40]._mx != -1) { + if (sgLevels[currlevel].monster[v40]._mx != 0xFF) { M_ClearSquares(v0); v2 = v40 * 9 + 4721 * currlevel; v3 = *((unsigned char *)&sgLevels[0].monster[0]._mx + v2); @@ -644,7 +631,7 @@ void __cdecl DeltaLoadLevel() do { v9 = v8 + 4721 * currlevel; v10 = *(&sgLevels[0].item[0].bCmd + v9); - if (v10 != -1) { + if (v10 != 0xFF) { if (v10 == 1) { v11 = FindGetItem( *(unsigned short *)((char *)&sgLevels[0].item[0].wIndx + v9), @@ -1126,7 +1113,7 @@ void __fastcall NetSendCmdString(int pmask, const char *pszStr) void __fastcall RemovePlrPortal(int pnum) { - memset(&sgJunk.portal[pnum], 255, sizeof(sgJunk.portal[pnum])); + memset(&sgJunk.portal[pnum], 0xFF, sizeof(sgJunk.portal[pnum])); sgbDeltaChanged = 1; } // 67618C: using guessed type char sgbDeltaChanged; @@ -1354,86 +1341,73 @@ LABEL_16: void __fastcall DeltaImportData(BYTE cmd, DWORD recv_offset) { - unsigned char v2; // bl - int v3; // esi - void *v4; // eax - void *v5; // eax + BYTE i; + BYTE *src; - v2 = cmd; if (sgRecvBuf[0]) PkwareDecompress(&sgRecvBuf[1], recv_offset, 4721); - if (v2 == CMD_DLEVEL_JUNK) { - DeltaImportJunk(&sgRecvBuf[1]); - } else if (v2 < CMD_DLEVEL_0 || v2 > CMD_DLEVEL_16) { - TermMsg("msg:1"); + + src = &sgRecvBuf[1]; + if (cmd == CMD_DLEVEL_JUNK) { + DeltaImportJunk(src); + } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_16) { + i = cmd - CMD_DLEVEL_0; + src = DeltaImportItem(src, sgLevels[i].item); + src = DeltaImportObject(src, sgLevels[i].object); + DeltaImportMonster(src, sgLevels[i].monster); } else { - v3 = (unsigned char)(v2 - CMD_DLEVEL_0); - v4 = DeltaImportItem(&sgRecvBuf[1], &sgLevels[v3]); - v5 = DeltaImportObject(v4, sgLevels[v3].object); - DeltaImportMonster(v5, sgLevels[v3].monster); + TermMsg("msg:1"); } - ++sgbDeltaChunks; + + sgbDeltaChunks++; sgbDeltaChanged = 1; } // 67618C: using guessed type char sgbDeltaChanged; // 67618D: using guessed type char sgbDeltaChunks; -void *__fastcall DeltaImportItem(void *src, void *dst) +BYTE *__fastcall DeltaImportItem(BYTE *src, TCmdPItem *dst) { - char *v2; // edi - _BYTE *v3; // esi - signed int v4; // ebx + int i; - v2 = (char *)dst; - v3 = (unsigned char *)src; - v4 = 127; - do { - if (*v3 == -1) { - memset(v2, 255, 0x16u); - ++v3; + for (i = 0; i < MAXITEMS; i++) { + if (*src == 0xFF) { + memset(dst, 0xFF, sizeof(TCmdPItem)); + src++; } else { - memcpy(v2, v3, 0x16u); - v3 += 22; + memcpy(dst, src, sizeof(TCmdPItem)); + src += sizeof(TCmdPItem); } - v2 += 22; - --v4; - } while (v4); - return v3; + dst++; + } + + return src; } -void *__fastcall DeltaImportObject(void *src, void *dst) +BYTE *__fastcall DeltaImportObject(BYTE *src, DObjectStr *dst) { - char *v2; // esi - - v2 = (char *)src; - memcpy(dst, src, 0x7Fu); - return v2 + 127; + memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); + return src + sizeof(DObjectStr) * MAXOBJECTS; } -void *__fastcall DeltaImportMonster(void *src, void *dst) +BYTE *__fastcall DeltaImportMonster(BYTE *src, DMonsterStr *dst) { - char *v2; // edi - _BYTE *v3; // esi - signed int v4; // ebx + int i; - v2 = (char *)dst; - v3 = (unsigned char *)src; - v4 = MAXMONSTERS; - do { - if (*v3 == -1) { - memset(v2, 255, 9u); - ++v3; + for (i = 0; i < MAXMONSTERS; i++) { + if (*src == 0xFF) { + memset(dst, 0xFF, sizeof(DMonsterStr)); + src++; } else { - memcpy(v2, v3, 9u); - v3 += 9; + memcpy(dst, src, sizeof(DMonsterStr)); + src += sizeof(DMonsterStr); } - v2 += 9; - --v4; - } while (v4); - return v3; + dst++; + } + + return src; } -void __fastcall DeltaImportJunk(void *src) +void __fastcall DeltaImportJunk(BYTE *src) { _BYTE *v1; // ebx int v2; // edi diff --git a/Source/msg.h b/Source/msg.h index ebd603ecc..299810f4c 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -15,11 +15,11 @@ int __cdecl msg_wait_for_turns(); void __cdecl msg_process_net_packets(); void __cdecl msg_pre_packet(); void __fastcall DeltaExportData(int pnum); -void *__fastcall DeltaExportItem(void *dst, void *src); -void *__fastcall DeltaExportObject(void *dst, void *src); -void *__fastcall DeltaExportMonster(void *dst, void *src); -void *__fastcall DeltaExportJunk(void *dst); -int __fastcall msg_comp_level(char *begin, void *end); +BYTE *__fastcall DeltaExportItem(BYTE *dst, TCmdPItem *src); +BYTE *__fastcall DeltaExportObject(BYTE *dst, DObjectStr *src); +BYTE *__fastcall DeltaExportMonster(BYTE *dst, DMonsterStr *src); +BYTE *__fastcall DeltaExportJunk(BYTE *dst); +int __fastcall msg_comp_level(BYTE *buffer, BYTE *end); void __cdecl delta_init(); void __fastcall delta_kill_monster(int mi, BYTE x, BYTE y, BYTE bLevel); void __fastcall delta_monster_hp(int mi, int hp, BYTE bLevel); @@ -55,10 +55,10 @@ void __fastcall RemovePlrPortal(int pnum); int __fastcall ParseCmd(int pnum, TCmd *pCmd); int __fastcall On_DLEVEL(int pnum, TCmdPlrInfoHdr *pCmd); void __fastcall DeltaImportData(BYTE cmd, DWORD recv_offset); -void *__fastcall DeltaImportItem(void *src, void *dst); -void *__fastcall DeltaImportObject(void *src, void *dst); -void *__fastcall DeltaImportMonster(void *src, void *dst); -void __fastcall DeltaImportJunk(void *src); +BYTE *__fastcall DeltaImportItem(BYTE *src, TCmdPItem *dst); +BYTE *__fastcall DeltaImportObject(BYTE *src, DObjectStr *dst); +BYTE *__fastcall DeltaImportMonster(BYTE *src, DMonsterStr *dst); +void __fastcall DeltaImportJunk(BYTE *src); int __fastcall On_SYNCDATA(void *packet, int pnum); int __fastcall On_WALKXY(TCmdLoc *pCmd, int pnum); int __fastcall On_ADDSTR(TCmdParam1 *pCmd, int pnum); diff --git a/structs.h b/structs.h index 0a49c55b9..b6f27d48a 100644 --- a/structs.h +++ b/structs.h @@ -696,24 +696,24 @@ typedef struct PortalStruct { #pragma pack(push, 1) typedef struct TCmd { - char bCmd; + BYTE bCmd; } TCmd; typedef struct TCmdLoc { - char bCmd; + BYTE bCmd; BYTE x; BYTE y; } TCmdLoc; typedef struct TCmdLocParam1 { - char bCmd; + BYTE bCmd; BYTE x; BYTE y; WORD wParam1; } TCmdLocParam1; typedef struct TCmdLocParam2 { - char bCmd; + BYTE bCmd; BYTE x; BYTE y; WORD wParam1; @@ -721,7 +721,7 @@ typedef struct TCmdLocParam2 { } TCmdLocParam2; typedef struct TCmdLocParam3 { - char bCmd; + BYTE bCmd; BYTE x; BYTE y; WORD wParam1; @@ -730,25 +730,25 @@ typedef struct TCmdLocParam3 { } TCmdLocParam3; typedef struct TCmdParam1 { - char bCmd; + BYTE bCmd; WORD wParam1; } TCmdParam1; typedef struct TCmdParam2 { - char bCmd; + BYTE bCmd; WORD wParam1; WORD wParam2; } TCmdParam2; typedef struct TCmdParam3 { - char bCmd; + BYTE bCmd; WORD wParam1; WORD wParam2; WORD wParam3; } TCmdParam3; typedef struct TCmdGolem { - char bCmd; + BYTE bCmd; BYTE _mx; BYTE _my; BYTE _mdir; @@ -758,7 +758,7 @@ typedef struct TCmdGolem { } TCmdGolem; typedef struct TCmdQuest { - char bCmd; + BYTE bCmd; BYTE q; BYTE qstate; BYTE qlog; @@ -766,7 +766,7 @@ typedef struct TCmdQuest { } TCmdQuest; typedef struct TCmdGItem { - char bCmd; + BYTE bCmd; BYTE bMaster; BYTE bPnum; BYTE bCursitem; @@ -787,7 +787,7 @@ typedef struct TCmdGItem { } TCmdGItem; typedef struct TCmdPItem { - char bCmd; + BYTE bCmd; BYTE x; BYTE y; WORD wIndx; @@ -803,7 +803,7 @@ typedef struct TCmdPItem { } TCmdPItem; typedef struct TCmdChItem { - char bCmd; + BYTE bCmd; BYTE bLoc; WORD wIndx; WORD wCI; @@ -812,40 +812,40 @@ typedef struct TCmdChItem { } TCmdChItem; typedef struct TCmdDelItem { - char bCmd; + BYTE bCmd; BYTE bLoc; } TCmdDelItem; typedef struct TCmdDamage { - char bCmd; + BYTE bCmd; BYTE bPlr; DWORD dwDam; } TCmdDamage; typedef struct TCmdPlrInfoHdr { - char bCmd; + BYTE bCmd; WORD wOffset; WORD wBytes; } TCmdPlrInfoHdr; typedef struct TCmdString { - char bCmd; + BYTE bCmd; char str[MAX_SEND_STR_LEN]; } TCmdString; typedef struct TFakeCmdPlr { - char bCmd; + BYTE bCmd; BYTE bPlr; } TFakeCmdPlr; typedef struct TFakeDropPlr { - char bCmd; + BYTE bCmd; BYTE bPlr; DWORD dwReason; } TFakeDropPlr; typedef struct TSyncHeader { - char bCmd; + BYTE bCmd; BYTE bLevel; WORD wLen; BYTE bObjId; @@ -907,7 +907,7 @@ typedef struct DMonsterStr { } DMonsterStr; typedef struct DObjectStr { - char bCmd; + BYTE bCmd; } DObjectStr; typedef struct DLevel { @@ -921,8 +921,8 @@ typedef struct LocalLevel { } LocalLevel; typedef struct DPortal { - char x; - char y; + BYTE x; + BYTE y; BYTE level; BYTE ltype; BYTE setlvl; @@ -962,7 +962,7 @@ typedef struct QuestStruct { unsigned char _qmsg; unsigned char _qvar1; unsigned char _qvar2; - int _qlog; /* char */ + int _qlog; } QuestStruct; typedef struct QuestData {