Browse Source

Delta data (#504)

* Clean up DeltaImport*
* Clean up DeltaExportData related functions
pull/25/head
Anders Jenbo 7 years ago committed by GitHub
parent
commit
bd310ff8d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 218
      Source/msg.cpp
  2. 18
      Source/msg.h
  3. 48
      structs.h

218
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

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

48
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 {

Loading…
Cancel
Save