From b00feb4c3d85fca3fa7cf2cf1975a1629744b35a Mon Sep 17 00:00:00 2001 From: qndel Date: Wed, 13 Oct 2021 09:34:53 +0200 Subject: [PATCH] sync monster mWhoHit and hitpoints --- Source/msg.cpp | 7 ++++++- Source/msg.h | 3 +++ Source/sync.cpp | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 0690fc750..9a1414cea 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -408,6 +408,7 @@ void DeltaLeaveSync(BYTE bLevel) delta._menemy = encode_enemy(monster); delta._mhitpoints = monster._mhitpoints; delta._mactive = monster._msquelch; + delta.mWhoHit = monster.mWhoHit; } memcpy(&sgLocals[bLevel].automapsv, AutomapView, sizeof(AutomapView)); } @@ -2062,6 +2063,8 @@ void delta_sync_monster(const TSyncMonster &monsterSync, uint8_t level) monster._my = monsterSync._my; monster._mactive = UINT8_MAX; monster._menemy = monsterSync._menemy; + monster._mhitpoints = monsterSync._mhitpoints; + monster.mWhoHit = monsterSync.mWhoHit; } bool delta_portal_inited(int i) @@ -2171,8 +2174,10 @@ void DeltaLoadLevel() monster.position.tile = { x, y }; monster.position.old = { x, y }; monster.position.future = { x, y }; - if (sgLevels[currlevel].monster[i]._mhitpoints != -1) + if (sgLevels[currlevel].monster[i]._mhitpoints != -1) { monster._mhitpoints = sgLevels[currlevel].monster[i]._mhitpoints; + monster.mWhoHit = sgLevels[currlevel].monster[i].mWhoHit; + } if (sgLevels[currlevel].monster[i]._mhitpoints == 0) { M_ClearSquares(i); if (monster._mAi != AI_DIABLO) { diff --git a/Source/msg.h b/Source/msg.h index acd726e01..f01a928aa 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -357,6 +357,8 @@ struct TSyncMonster { uint8_t _my; uint8_t _menemy; uint8_t _mdelta; + int32_t _mhitpoints; + int8_t mWhoHit; }; struct TPktHdr { @@ -385,6 +387,7 @@ struct DMonsterStr { uint8_t _menemy; uint8_t _mactive; int32_t _mhitpoints; + int8_t mWhoHit; }; struct DObjectStr { diff --git a/Source/sync.cpp b/Source/sync.cpp index f1cc61b51..b4d992639 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -41,6 +41,8 @@ void SyncMonsterPos(TSyncMonster &monsterSync, int ndx) monsterSync._my = monster.position.tile.y; monsterSync._menemy = encode_enemy(monster); monsterSync._mdelta = sgnMonsterPriority[ndx] > 255 ? 255 : sgnMonsterPriority[ndx]; + monsterSync.mWhoHit = monster.mWhoHit; + monsterSync._mhitpoints = monster._mhitpoints; sgnMonsterPriority[ndx] = 0xFFFF; sgwLRU[ndx] = monster._msquelch == 0 ? 0xFFFF : 0xFFFE; @@ -195,6 +197,8 @@ void SyncMonster(int pnum, const TSyncMonster &monsterSync) } decode_enemy(monster, enemyId); + monster.mWhoHit = monsterSync.mWhoHit; + monster._mhitpoints = monsterSync._mhitpoints; } bool IsEnemyIdValid(const Monster &monster, int enemyId)