diff --git a/Source/msg.cpp b/Source/msg.cpp index 25599d078..ca9969857 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -168,7 +168,7 @@ int WaitForTurns() return 100 * sgbDeltaChunks / MAX_CHUNKS; } -byte *DeltaExportItem(byte *dst, TCmdPItem *src) +byte *DeltaExportItem(byte *dst, const TCmdPItem *src) { for (int i = 0; i < MAXITEMS; i++, src++) { if (src->bCmd == CMD_INVALID) { @@ -182,34 +182,35 @@ byte *DeltaExportItem(byte *dst, TCmdPItem *src) return dst; } -byte *DeltaImportItem(byte *src, TCmdPItem *dst) +size_t DeltaImportItem(const byte *src, TCmdPItem *dst) { + size_t size = 0; for (int i = 0; i < MAXITEMS; i++, dst++) { - if (*src == byte { 0xFF }) { + if (src[size] == byte { 0xFF }) { memset(dst, 0xFF, sizeof(TCmdPItem)); - src++; + size++; } else { - memcpy(dst, src, sizeof(TCmdPItem)); - src += sizeof(TCmdPItem); + memcpy(dst, &src[size], sizeof(TCmdPItem)); + size += sizeof(TCmdPItem); } } - return src; + return size; } -byte *DeltaExportObject(byte *dst, DObjectStr *src) +byte *DeltaExportObject(byte *dst, const DObjectStr *src) { memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); return dst + sizeof(DObjectStr) * MAXOBJECTS; } -byte *DeltaImportObject(byte *src, DObjectStr *dst) +size_t DeltaImportObject(const byte *src, DObjectStr *dst) { memcpy(dst, src, sizeof(DObjectStr) * MAXOBJECTS); - return src + sizeof(DObjectStr) * MAXOBJECTS; + return sizeof(DObjectStr) * MAXOBJECTS; } -byte *DeltaExportMonster(byte *dst, DMonsterStr *src) +byte *DeltaExportMonster(byte *dst, const DMonsterStr *src) { for (int i = 0; i < MAXMONSTERS; i++, src++) { if (src->_mx == 0xFF) { @@ -223,19 +224,18 @@ byte *DeltaExportMonster(byte *dst, DMonsterStr *src) return dst; } -byte *DeltaImportMonster(byte *src, DMonsterStr *dst) +void DeltaImportMonster(const byte *src, DMonsterStr *dst) { + size_t size = 0; for (int i = 0; i < MAXMONSTERS; i++, dst++) { - if (*src == byte { 0xFF }) { + if (src[size] == byte { 0xFF }) { memset(dst, 0xFF, sizeof(DMonsterStr)); - src++; + size++; } else { - memcpy(dst, src, sizeof(DMonsterStr)); - src += sizeof(DMonsterStr); + memcpy(dst, &src[size], sizeof(DMonsterStr)); + size += sizeof(DMonsterStr); } } - - return src; } byte *DeltaExportJunk(byte *dst) @@ -264,7 +264,7 @@ byte *DeltaExportJunk(byte *dst) return dst; } -void DeltaImportJunk(byte *src) +void DeltaImportJunk(const byte *src) { for (int i = 0; i < MAXPORTAL; i++) { if (*src == byte { 0xFF }) { @@ -317,8 +317,8 @@ void DeltaImportData(BYTE cmd, DWORD recvOffset) DeltaImportJunk(src); } else if (cmd >= CMD_DLEVEL_0 && cmd <= CMD_DLEVEL_24) { BYTE i = cmd - CMD_DLEVEL_0; - src = DeltaImportItem(src, sgLevels[i].item); - src = DeltaImportObject(src, sgLevels[i].object); + src += DeltaImportItem(src, sgLevels[i].item); + src += DeltaImportObject(src, sgLevels[i].object); DeltaImportMonster(src, sgLevels[i].monster); } else { app_fatal("Unkown network message type: %i", cmd); @@ -328,7 +328,7 @@ void DeltaImportData(BYTE cmd, DWORD recvOffset) sgbDeltaChanged = true; } -DWORD OnLevelData(int pnum, TCmd *pCmd) +DWORD OnLevelData(int pnum, const TCmd *pCmd) { auto *p = (TCmdPlrInfoHdr *)pCmd; @@ -368,7 +368,7 @@ DWORD OnLevelData(int pnum, TCmd *pCmd) return p->wBytes + sizeof(*p); } -void DeltaSyncGolem(TCmdGolem *pG, int pnum, BYTE bLevel) +void DeltaSyncGolem(const TCmdGolem *pG, int pnum, BYTE bLevel) { if (!gbIsMultiplayer) return; @@ -418,7 +418,7 @@ void DeltaSyncObject(int oi, _cmd_id bCmd, BYTE bLevel) sgLevels[bLevel].object[oi].bCmd = bCmd; } -bool DeltaGetItem(TCmdGItem *pI, BYTE bLevel) +bool DeltaGetItem(const TCmdGItem *pI, BYTE bLevel) { if (!gbIsMultiplayer) return true; @@ -477,7 +477,7 @@ bool DeltaGetItem(TCmdGItem *pI, BYTE bLevel) return true; } -void DeltaPutItem(TCmdPItem *pI, int x, int y, BYTE bLevel) +void DeltaPutItem(const TCmdPItem *pI, int x, int y, BYTE bLevel) { if (!gbIsMultiplayer) return; @@ -559,7 +559,7 @@ void PlayerMessageFormat(const char *pszFmt, ...) va_end(va); } -void NetSendCmdGItem2(bool usonly, _cmd_id bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) +void NetSendCmdGItem2(bool usonly, _cmd_id bCmd, BYTE mast, BYTE pnum, const TCmdGItem *p) { TCmdGItem cmd; @@ -584,7 +584,7 @@ void NetSendCmdGItem2(bool usonly, _cmd_id bCmd, BYTE mast, BYTE pnum, TCmdGItem multi_msg_add((byte *)&cmd.bCmd, sizeof(cmd)); } -bool NetSendCmdReq2(_cmd_id bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) +bool NetSendCmdReq2(_cmd_id bCmd, BYTE mast, BYTE pnum, const TCmdGItem *p) { TCmdGItem cmd; @@ -604,7 +604,7 @@ bool NetSendCmdReq2(_cmd_id bCmd, BYTE mast, BYTE pnum, TCmdGItem *p) return true; } -void NetSendCmdExtra(TCmdGItem *p) +void NetSendCmdExtra(const TCmdGItem *p) { TCmdGItem cmd; @@ -614,7 +614,7 @@ void NetSendCmdExtra(TCmdGItem *p) NetSendHiPri(MyPlayerId, (byte *)&cmd, sizeof(cmd)); } -DWORD OnWalk(TCmd *pCmd, Player &player) +DWORD OnWalk(const TCmd *pCmd, Player &player) { auto *p = (TCmdLoc *)pCmd; @@ -627,7 +627,7 @@ DWORD OnWalk(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnAddStrength(TCmd *pCmd, int pnum) +DWORD OnAddStrength(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -639,7 +639,7 @@ DWORD OnAddStrength(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnAddMagic(TCmd *pCmd, int pnum) +DWORD OnAddMagic(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -651,7 +651,7 @@ DWORD OnAddMagic(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnAddDexterity(TCmd *pCmd, int pnum) +DWORD OnAddDexterity(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -663,7 +663,7 @@ DWORD OnAddDexterity(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnAddVitality(TCmd *pCmd, int pnum) +DWORD OnAddVitality(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -675,7 +675,7 @@ DWORD OnAddVitality(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnGotoGetItem(TCmd *pCmd, Player &player) +DWORD OnGotoGetItem(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam1 *)pCmd; @@ -688,7 +688,7 @@ DWORD OnGotoGetItem(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnRequestGetItem(TCmd *pCmd, Player &player) +DWORD OnRequestGetItem(const TCmd *pCmd, Player &player) { auto *p = (TCmdGItem *)pCmd; @@ -711,7 +711,7 @@ DWORD OnRequestGetItem(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnGetItem(TCmd *pCmd, int pnum) +DWORD OnGetItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdGItem *)pCmd; @@ -742,7 +742,7 @@ DWORD OnGetItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnGotoAutoGetItem(TCmd *pCmd, Player &player) +DWORD OnGotoAutoGetItem(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam1 *)pCmd; @@ -755,7 +755,7 @@ DWORD OnGotoAutoGetItem(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnRequestAutoGetItem(TCmd *pCmd, Player &player) +DWORD OnRequestAutoGetItem(const TCmd *pCmd, Player &player) { auto *p = (TCmdGItem *)pCmd; @@ -778,7 +778,7 @@ DWORD OnRequestAutoGetItem(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnAutoGetItem(TCmd *pCmd, int pnum) +DWORD OnAutoGetItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdGItem *)pCmd; @@ -809,7 +809,7 @@ DWORD OnAutoGetItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnItemExtra(TCmd *pCmd, int pnum) +DWORD OnItemExtra(const TCmd *pCmd, int pnum) { auto *p = (TCmdGItem *)pCmd; @@ -824,7 +824,7 @@ DWORD OnItemExtra(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPutItem(TCmd *pCmd, int pnum) +DWORD OnPutItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdPItem *)pCmd; @@ -851,7 +851,7 @@ DWORD OnPutItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSyncPutItem(TCmd *pCmd, int pnum) +DWORD OnSyncPutItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdPItem *)pCmd; @@ -874,7 +874,7 @@ DWORD OnSyncPutItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnRespawnItem(TCmd *pCmd, int pnum) +DWORD OnRespawnItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdPItem *)pCmd; @@ -893,7 +893,7 @@ DWORD OnRespawnItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnAttackTile(TCmd *pCmd, Player &player) +DWORD OnAttackTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLoc *)pCmd; @@ -907,7 +907,7 @@ DWORD OnAttackTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnStandingAttackTile(TCmd *pCmd, Player &player) +DWORD OnStandingAttackTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLoc *)pCmd; @@ -921,7 +921,7 @@ DWORD OnStandingAttackTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnRangedAttackTile(TCmd *pCmd, Player &player) +DWORD OnRangedAttackTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLoc *)pCmd; @@ -935,7 +935,7 @@ DWORD OnRangedAttackTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnSpellWall(TCmd *pCmd, Player &player) +DWORD OnSpellWall(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam4 *)pCmd; @@ -960,7 +960,7 @@ DWORD OnSpellWall(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnSpellTile(TCmd *pCmd, Player &player) +DWORD OnSpellTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam3 *)pCmd; @@ -984,7 +984,7 @@ DWORD OnSpellTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnTargetSpellTile(TCmd *pCmd, Player &player) +DWORD OnTargetSpellTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam2 *)pCmd; @@ -1007,7 +1007,7 @@ DWORD OnTargetSpellTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnOperateObjectTile(TCmd *pCmd, Player &player) +DWORD OnOperateObjectTile(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1020,7 +1020,7 @@ DWORD OnOperateObjectTile(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnDisarm(TCmd *pCmd, Player &player) +DWORD OnDisarm(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1033,7 +1033,7 @@ DWORD OnDisarm(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnOperateObjectTelekinesis(TCmd *pCmd, Player &player) +DWORD OnOperateObjectTelekinesis(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; @@ -1045,7 +1045,7 @@ DWORD OnOperateObjectTelekinesis(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnAttackMonster(TCmd *pCmd, Player &player) +DWORD OnAttackMonster(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; @@ -1060,7 +1060,7 @@ DWORD OnAttackMonster(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnAttackPlayer(TCmd *pCmd, Player &player) +DWORD OnAttackPlayer(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; @@ -1073,7 +1073,7 @@ DWORD OnAttackPlayer(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnRangedAttackMonster(TCmd *pCmd, Player &player) +DWORD OnRangedAttackMonster(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; @@ -1086,7 +1086,7 @@ DWORD OnRangedAttackMonster(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnRangedAttackPlayer(TCmd *pCmd, Player &player) +DWORD OnRangedAttackPlayer(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; @@ -1099,7 +1099,7 @@ DWORD OnRangedAttackPlayer(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnSpellMonster(TCmd *pCmd, Player &player) +DWORD OnSpellMonster(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam4 *)pCmd; @@ -1122,7 +1122,7 @@ DWORD OnSpellMonster(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnSpellPlayer(TCmd *pCmd, Player &player) +DWORD OnSpellPlayer(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam4 *)pCmd; @@ -1145,7 +1145,7 @@ DWORD OnSpellPlayer(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnTargetSpellMonster(TCmd *pCmd, Player &player) +DWORD OnTargetSpellMonster(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam3 *)pCmd; @@ -1167,7 +1167,7 @@ DWORD OnTargetSpellMonster(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnTargetSpellPlayer(TCmd *pCmd, Player &player) +DWORD OnTargetSpellPlayer(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam3 *)pCmd; @@ -1189,7 +1189,7 @@ DWORD OnTargetSpellPlayer(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnKnockback(TCmd *pCmd, int pnum) +DWORD OnKnockback(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1201,7 +1201,7 @@ DWORD OnKnockback(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnResurrect(TCmd *pCmd, int pnum) +DWORD OnResurrect(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1215,7 +1215,7 @@ DWORD OnResurrect(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnHealOther(TCmd *pCmd, int pnum) +DWORD OnHealOther(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1225,7 +1225,7 @@ DWORD OnHealOther(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnTalkXY(TCmd *pCmd, Player &player) +DWORD OnTalkXY(const TCmd *pCmd, Player &player) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1238,7 +1238,7 @@ DWORD OnTalkXY(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnNewLevel(TCmd *pCmd, int pnum) +DWORD OnNewLevel(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam2 *)pCmd; @@ -1250,7 +1250,7 @@ DWORD OnNewLevel(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnWarp(TCmd *pCmd, int pnum) +DWORD OnWarp(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1263,7 +1263,7 @@ DWORD OnWarp(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnMonstDeath(TCmd *pCmd, int pnum) +DWORD OnMonstDeath(const TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1279,7 +1279,7 @@ DWORD OnMonstDeath(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnKillGolem(TCmd *pCmd, int pnum) +DWORD OnKillGolem(const TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1294,7 +1294,7 @@ DWORD OnKillGolem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnAwakeGolem(TCmd *pCmd, int pnum) +DWORD OnAwakeGolem(const TCmd *pCmd, int pnum) { auto *p = (TCmdGolem *)pCmd; @@ -1320,7 +1320,7 @@ DWORD OnAwakeGolem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnMonstDamage(TCmd *pCmd, int pnum) +DWORD OnMonstDamage(const TCmd *pCmd, int pnum) { auto *p = (TCmdMonDamage *)pCmd; @@ -1343,7 +1343,7 @@ DWORD OnMonstDamage(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPlayerDeath(TCmd *pCmd, int pnum) +DWORD OnPlayerDeath(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1357,7 +1357,7 @@ DWORD OnPlayerDeath(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPlayerDamage(TCmd *pCmd, Player &player) +DWORD OnPlayerDamage(const TCmd *pCmd, Player &player) { auto *p = (TCmdDamage *)pCmd; @@ -1370,7 +1370,7 @@ DWORD OnPlayerDamage(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnOpenDoor(TCmd *pCmd, int pnum) +DWORD OnOpenDoor(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1386,7 +1386,7 @@ DWORD OnOpenDoor(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnCloseDoor(TCmd *pCmd, int pnum) +DWORD OnCloseDoor(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1402,7 +1402,7 @@ DWORD OnCloseDoor(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnOperateObject(TCmd *pCmd, int pnum) +DWORD OnOperateObject(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1418,7 +1418,7 @@ DWORD OnOperateObject(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPlayerOperateObject(TCmd *pCmd, int pnum) +DWORD OnPlayerOperateObject(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam2 *)pCmd; @@ -1434,7 +1434,7 @@ DWORD OnPlayerOperateObject(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnBreakObject(TCmd *pCmd, int pnum) +DWORD OnBreakObject(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam2 *)pCmd; @@ -1450,7 +1450,7 @@ DWORD OnBreakObject(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnChangePlayerItems(TCmd *pCmd, int pnum) +DWORD OnChangePlayerItems(const TCmd *pCmd, int pnum) { auto *p = (TCmdChItem *)pCmd; auto bodyLocation = static_cast(p->bLoc); @@ -1467,7 +1467,7 @@ DWORD OnChangePlayerItems(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnDeletePlayerItems(TCmd *pCmd, int pnum) +DWORD OnDeletePlayerItems(const TCmd *pCmd, int pnum) { auto *p = (TCmdDelItem *)pCmd; @@ -1479,7 +1479,7 @@ DWORD OnDeletePlayerItems(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnPlayerLevel(TCmd *pCmd, int pnum) +DWORD OnPlayerLevel(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1491,7 +1491,7 @@ DWORD OnPlayerLevel(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnDropItem(TCmd *pCmd, int pnum) +DWORD OnDropItem(const TCmd *pCmd, int pnum) { auto *p = (TCmdPItem *)pCmd; @@ -1503,7 +1503,7 @@ DWORD OnDropItem(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSendPlayerInfo(TCmd *pCmd, int pnum) +DWORD OnSendPlayerInfo(const TCmd *pCmd, int pnum) { auto *p = (TCmdPlrInfoHdr *)pCmd; @@ -1515,7 +1515,7 @@ DWORD OnSendPlayerInfo(TCmd *pCmd, int pnum) return p->wBytes + sizeof(*p); } -DWORD OnPlayerJoinLevel(TCmd *pCmd, int pnum) +DWORD OnPlayerJoinLevel(const TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam1 *)pCmd; @@ -1557,7 +1557,7 @@ DWORD OnPlayerJoinLevel(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnActivatePortal(TCmd *pCmd, int pnum) +DWORD OnActivatePortal(const TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam3 *)pCmd; @@ -1590,7 +1590,7 @@ DWORD OnActivatePortal(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnDeactivatePortal(TCmd *pCmd, int pnum) +DWORD OnDeactivatePortal(const TCmd *pCmd, int pnum) { if (gbBufferMsgs == 1) { SendPacket(pnum, pCmd, sizeof(*pCmd)); @@ -1604,7 +1604,7 @@ DWORD OnDeactivatePortal(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD OnRestartTown(TCmd *pCmd, int pnum) +DWORD OnRestartTown(const TCmd *pCmd, int pnum) { if (gbBufferMsgs == 1) { SendPacket(pnum, pCmd, sizeof(*pCmd)); @@ -1619,7 +1619,7 @@ DWORD OnRestartTown(TCmd *pCmd, int pnum) return sizeof(*pCmd); } -DWORD OnSetStrength(TCmd *pCmd, int pnum) +DWORD OnSetStrength(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1631,7 +1631,7 @@ DWORD OnSetStrength(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSetDexterity(TCmd *pCmd, int pnum) +DWORD OnSetDexterity(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1643,7 +1643,7 @@ DWORD OnSetDexterity(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSetMagic(TCmd *pCmd, int pnum) +DWORD OnSetMagic(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1655,7 +1655,7 @@ DWORD OnSetMagic(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSetVitality(TCmd *pCmd, int pnum) +DWORD OnSetVitality(const TCmd *pCmd, int pnum) { auto *p = (TCmdParam1 *)pCmd; @@ -1667,7 +1667,7 @@ DWORD OnSetVitality(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnString(TCmd *pCmd, int pnum) +DWORD OnString(const TCmd *pCmd, int pnum) { auto *p = (TCmdString *)pCmd; @@ -1678,7 +1678,7 @@ DWORD OnString(TCmd *pCmd, int pnum) return len + 2; // length of string + nul terminator + sizeof(p->bCmd) } -DWORD OnSyncQuest(TCmd *pCmd, int pnum) +DWORD OnSyncQuest(const TCmd *pCmd, int pnum) { auto *p = (TCmdQuest *)pCmd; @@ -1693,7 +1693,7 @@ DWORD OnSyncQuest(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnCheatExperience(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) +DWORD OnCheatExperience(const TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) { #ifdef _DEBUG if (gbBufferMsgs == 1) @@ -1709,7 +1709,7 @@ DWORD OnCheatExperience(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) return sizeof(*pCmd); } -DWORD OnCheatSpellLevel(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) +DWORD OnCheatSpellLevel(const TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) { #ifdef _DEBUG if (gbBufferMsgs == 1) { @@ -1722,12 +1722,12 @@ DWORD OnCheatSpellLevel(TCmd *pCmd, int pnum) // NOLINT(misc-unused-parameters) return sizeof(*pCmd); } -DWORD OnDebug(TCmd *pCmd) +DWORD OnDebug(const TCmd *pCmd) { return sizeof(*pCmd); } -DWORD OnNova(TCmd *pCmd, int pnum) +DWORD OnNova(const TCmd *pCmd, int pnum) { auto *p = (TCmdLoc *)pCmd; @@ -1747,7 +1747,7 @@ DWORD OnNova(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnSetShield(TCmd *pCmd, Player &player) +DWORD OnSetShield(const TCmd *pCmd, Player &player) { if (gbBufferMsgs != 1) player.pManaShield = true; @@ -1755,7 +1755,7 @@ DWORD OnSetShield(TCmd *pCmd, Player &player) return sizeof(*pCmd); } -DWORD OnRemoveShield(TCmd *pCmd, Player &player) +DWORD OnRemoveShield(const TCmd *pCmd, Player &player) { if (gbBufferMsgs != 1) player.pManaShield = false; @@ -1763,7 +1763,7 @@ DWORD OnRemoveShield(TCmd *pCmd, Player &player) return sizeof(*pCmd); } -DWORD OnSetReflect(TCmd *pCmd, Player &player) +DWORD OnSetReflect(const TCmd *pCmd, Player &player) { auto *p = (TCmdParam1 *)pCmd; if (gbBufferMsgs != 1) @@ -1772,7 +1772,7 @@ DWORD OnSetReflect(TCmd *pCmd, Player &player) return sizeof(*p); } -DWORD OnNakrul(TCmd *pCmd) +DWORD OnNakrul(const TCmd *pCmd) { if (gbBufferMsgs != 1) { OperateNakrulLever(); @@ -1783,7 +1783,7 @@ DWORD OnNakrul(TCmd *pCmd) return sizeof(*pCmd); } -DWORD OnOpenHive(TCmd *pCmd, int pnum) +DWORD OnOpenHive(const TCmd *pCmd, int pnum) { auto *p = (TCmdLocParam2 *)pCmd; if (gbBufferMsgs != 1) { @@ -1794,7 +1794,7 @@ DWORD OnOpenHive(TCmd *pCmd, int pnum) return sizeof(*p); } -DWORD OnOpenCrypt(TCmd *pCmd) +DWORD OnOpenCrypt(const TCmd *pCmd) { if (gbBufferMsgs != 1) { TownOpenGrave(); @@ -2540,7 +2540,7 @@ void delta_close_portal(int pnum) sgbDeltaChanged = true; } -uint32_t ParseCmd(int pnum, TCmd *pCmd) +uint32_t ParseCmd(int pnum, const TCmd *pCmd) { sbLastCmd = pCmd->bCmd; if (sgwPackPlrOffsetTbl[pnum] != 0 && sbLastCmd != CMD_ACK_PLRINFO && sbLastCmd != CMD_SEND_PLRINFO) diff --git a/Source/msg.h b/Source/msg.h index 8d3a7575e..203135af5 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -458,6 +458,6 @@ void NetSendCmdDamage(bool bHiPri, uint8_t bPlr, uint32_t dwDam); void NetSendCmdMonDmg(bool bHiPri, uint16_t wMon, uint32_t dwDam); void NetSendCmdString(uint32_t pmask, const char *pszStr); void delta_close_portal(int pnum); -uint32_t ParseCmd(int pnum, TCmd *pCmd); +uint32_t ParseCmd(int pnum, const TCmd *pCmd); } // namespace devilution diff --git a/Source/multi.cpp b/Source/multi.cpp index f6e1e387c..063943f13 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -76,7 +76,7 @@ void BufferInit(TBuffer *pBuf) pBuf->bData[0] = byte { 0 }; } -void CopyPacket(TBuffer *buf, byte *packet, uint8_t size) +void CopyPacket(TBuffer *buf, const byte *packet, uint8_t size) { if (buf->dwNextWriteOffset + size + 2 > 0x1000) { return; @@ -130,13 +130,13 @@ void NetReceivePlayerData(TPkt *pkt) pkt->hdr.bdex = myPlayer._pBaseDex; } -void SendPacket(int playerId, void *packet, BYTE dwSize) +void SendPacket(int playerId, const byte *packet, size_t size) { TPkt pkt; NetReceivePlayerData(&pkt); - pkt.hdr.wLen = dwSize + sizeof(pkt.hdr); - memcpy(pkt.body, packet, dwSize); + pkt.hdr.wLen = size + sizeof(pkt.hdr); + memcpy(pkt.body, packet, size); if (!SNetSendMessage(playerId, &pkt.hdr, pkt.hdr.wLen)) nthread_terminate_game("SNetSendMessage0"); } @@ -292,25 +292,27 @@ void BeginTimeout() } } -void HandleAllPackets(int pnum, byte *pData, size_t nSize) +void HandleAllPackets(int pnum, const byte *data, size_t size) { - while (nSize != 0) { - int nLen = ParseCmd(pnum, (TCmd *)pData); - if (nLen == 0) { + for (unsigned offset = 0; offset < size;) { + int messageSize = ParseCmd(pnum, reinterpret_cast(&data[offset])); + if (messageSize == 0) { break; } - pData += nLen; - nSize -= nLen; + offset += messageSize; } } void ProcessTmsgs() { - uint8_t cnt; - std::unique_ptr msg; + while (true) { + std::unique_ptr msg; + uint8_t size = tmsg_get(&msg); + if (size == 0) + break; - while ((cnt = tmsg_get(&msg)) != 0) - HandleAllPackets(MyPlayerId, msg.get(), cnt); + HandleAllPackets(MyPlayerId, msg.get(), size); + } } void SendPlayerInfo(int pnum, _cmd_id cmd) @@ -463,49 +465,49 @@ bool InitMulti(GameData *gameData) } // namespace -void multi_msg_add(byte *pbMsg, BYTE bLen) +void multi_msg_add(const byte *data, size_t size) { - if (pbMsg != nullptr && bLen != 0) { - tmsg_add(pbMsg, bLen); + if (data != nullptr && size != 0) { + tmsg_add(data, size); } } -void NetSendLoPri(int playerId, byte *pbMsg, BYTE bLen) +void NetSendLoPri(int playerId, const byte *data, size_t size) { - if (pbMsg != nullptr && bLen != 0) { - CopyPacket(&sgLoPriBuf, pbMsg, bLen); - SendPacket(playerId, pbMsg, bLen); + if (data != nullptr && size != 0) { + CopyPacket(&sgLoPriBuf, data, size); + SendPacket(playerId, data, size); } } -void NetSendHiPri(int playerId, byte *pbMsg, BYTE bLen) +void NetSendHiPri(int playerId, const byte *data, size_t size) { - if (pbMsg != nullptr && bLen != 0) { - CopyPacket(&sgHiPriBuf, pbMsg, bLen); - SendPacket(playerId, pbMsg, bLen); + if (data != nullptr && size != 0) { + CopyPacket(&sgHiPriBuf, data, size); + SendPacket(playerId, data, size); } if (!gbShouldValidatePackage) { gbShouldValidatePackage = true; TPkt pkt; NetReceivePlayerData(&pkt); - size_t size = gdwNormalMsgSize - sizeof(TPktHdr); - byte *hipriBody = ReceivePacket(&sgHiPriBuf, pkt.body, &size); - byte *lowpriBody = ReceivePacket(&sgLoPriBuf, hipriBody, &size); - size = sync_all_monsters(lowpriBody, size); - size_t len = gdwNormalMsgSize - size; + size_t msgSize = gdwNormalMsgSize - sizeof(TPktHdr); + byte *hipriBody = ReceivePacket(&sgHiPriBuf, pkt.body, &msgSize); + byte *lowpriBody = ReceivePacket(&sgLoPriBuf, hipriBody, &msgSize); + msgSize = sync_all_monsters(lowpriBody, msgSize); + size_t len = gdwNormalMsgSize - msgSize; pkt.hdr.wLen = len; if (!SNetSendMessage(-2, &pkt.hdr, len)) nthread_terminate_game("SNetSendMessage"); } } -void multi_send_msg_packet(uint32_t pmask, byte *src, BYTE len) +void multi_send_msg_packet(uint32_t pmask, const byte *data, size_t size) { TPkt pkt; NetReceivePlayerData(&pkt); - size_t t = len + sizeof(pkt.hdr); + size_t t = size + sizeof(pkt.hdr); pkt.hdr.wLen = t; - memcpy(pkt.body, src, len); + memcpy(pkt.body, data, size); size_t p = 0; for (size_t v = 1; p < MAX_PLRS; p++, v <<= 1) { if ((v & pmask) != 0) { @@ -630,21 +632,21 @@ void multi_process_network_packets() } } } - HandleAllPackets(dwID, (byte *)(pkt + 1), dwMsgSize - sizeof(TPktHdr)); + HandleAllPackets(dwID, (const byte *)(pkt + 1), dwMsgSize - sizeof(TPktHdr)); } if (SErrGetLastError() != STORM_ERROR_NO_MESSAGES_WAITING) nthread_terminate_game("SNetReceiveMsg"); } -void multi_send_zero_packet(int pnum, _cmd_id bCmd, byte *pbSrc, DWORD dwLen) +void multi_send_zero_packet(int pnum, _cmd_id bCmd, const byte *data, size_t size) { assert(pnum != MyPlayerId); - assert(pbSrc); - assert(dwLen <= 0x0ffff); + assert(data); + assert(size <= 0x0ffff); uint32_t dwOffset = 0; - while (dwLen != 0) { + while (size != 0) { TPkt pkt; pkt.hdr.wCheck = LoadBE32("\0\0ip"); pkt.hdr.px = 0; @@ -660,12 +662,12 @@ void multi_send_zero_packet(int pnum, _cmd_id bCmd, byte *pbSrc, DWORD dwLen) p->bCmd = bCmd; p->wOffset = dwOffset; size_t dwBody = gdwLargestMsgSize - sizeof(pkt.hdr) - sizeof(*p); - if (dwLen < dwBody) { - dwBody = dwLen; + if (size < dwBody) { + dwBody = size; } assert(dwBody <= 0x0ffff); p->wBytes = dwBody; - memcpy(&pkt.body[sizeof(*p)], pbSrc, p->wBytes); + memcpy(&pkt.body[sizeof(*p)], data, p->wBytes); size_t dwMsg = sizeof(pkt.hdr); dwMsg += sizeof(*p); dwMsg += p->wBytes; @@ -675,8 +677,8 @@ void multi_send_zero_packet(int pnum, _cmd_id bCmd, byte *pbSrc, DWORD dwLen) return; } - pbSrc += p->wBytes; - dwLen -= p->wBytes; + data += p->wBytes; + size -= p->wBytes; dwOffset += p->wBytes; } } @@ -773,7 +775,7 @@ bool NetInit(bool bSinglePlayer) return true; } -void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, bool recv) +void recv_plrinfo(int pnum, const TCmdPlrInfoHdr *p, bool recv) { const char *szEvent; diff --git a/Source/multi.h b/Source/multi.h index 2281fcb7c..9218eed7b 100644 --- a/Source/multi.h +++ b/Source/multi.h @@ -48,10 +48,10 @@ extern char szPlayerName[128]; extern BYTE gbDeltaSender; extern uint32_t player_state[MAX_PLRS]; -void multi_msg_add(byte *pbMsg, BYTE bLen); -void NetSendLoPri(int playerId, byte *pbMsg, BYTE bLen); -void NetSendHiPri(int playerId, byte *pbMsg, BYTE bLen); -void multi_send_msg_packet(uint32_t pmask, byte *src, BYTE len); +void multi_msg_add(const byte *data, size_t size); +void NetSendLoPri(int playerId, const byte *data, size_t size); +void NetSendHiPri(int playerId, const byte *data, size_t size); +void multi_send_msg_packet(uint32_t pmask, const byte *data, size_t size); void multi_msg_countdown(); void multi_player_left(int pnum, int reason); void multi_net_ping(); @@ -61,9 +61,9 @@ void multi_net_ping(); */ bool multi_handle_delta(); void multi_process_network_packets(); -void multi_send_zero_packet(int pnum, _cmd_id bCmd, byte *pbSrc, DWORD dwLen); +void multi_send_zero_packet(int pnum, _cmd_id bCmd, const byte *data, size_t size); void NetClose(); bool NetInit(bool bSinglePlayer); -void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, bool recv); +void recv_plrinfo(int pnum, const TCmdPlrInfoHdr *p, bool recv); } // namespace devilution diff --git a/Source/tmsg.cpp b/Source/tmsg.cpp index 3f23f396c..0940e2ec3 100644 --- a/Source/tmsg.cpp +++ b/Source/tmsg.cpp @@ -17,7 +17,7 @@ struct TMsg { std::unique_ptr body; uint8_t len; - TMsg(uint32_t time, byte *data, uint8_t len) + TMsg(uint32_t time, const byte *data, uint8_t len) : time(time) , body(new byte[len]) , len(len) @@ -45,7 +45,7 @@ uint8_t tmsg_get(std::unique_ptr *msg) return len; } -void tmsg_add(byte *msg, uint8_t len) +void tmsg_add(const byte *msg, uint8_t len) { uint32_t time = SDL_GetTicks() + gnTickDelay * 10; TimedMsgList.emplace_back(time, msg, len); diff --git a/Source/tmsg.h b/Source/tmsg.h index a57e50f1c..597888696 100644 --- a/Source/tmsg.h +++ b/Source/tmsg.h @@ -13,7 +13,7 @@ namespace devilution { uint8_t tmsg_get(std::unique_ptr *msg); -void tmsg_add(byte *msg, uint8_t bLen); +void tmsg_add(const byte *msg, uint8_t bLen); void tmsg_start(); void tmsg_cleanup();