Browse Source

sync monster mWhoHit and hitpoints

pull/3123/head
qndel 5 years ago committed by Anders Jenbo
parent
commit
b00feb4c3d
  1. 7
      Source/msg.cpp
  2. 3
      Source/msg.h
  3. 4
      Source/sync.cpp

7
Source/msg.cpp

@ -408,6 +408,7 @@ void DeltaLeaveSync(BYTE bLevel)
delta._menemy = encode_enemy(monster); delta._menemy = encode_enemy(monster);
delta._mhitpoints = monster._mhitpoints; delta._mhitpoints = monster._mhitpoints;
delta._mactive = monster._msquelch; delta._mactive = monster._msquelch;
delta.mWhoHit = monster.mWhoHit;
} }
memcpy(&sgLocals[bLevel].automapsv, AutomapView, sizeof(AutomapView)); 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._my = monsterSync._my;
monster._mactive = UINT8_MAX; monster._mactive = UINT8_MAX;
monster._menemy = monsterSync._menemy; monster._menemy = monsterSync._menemy;
monster._mhitpoints = monsterSync._mhitpoints;
monster.mWhoHit = monsterSync.mWhoHit;
} }
bool delta_portal_inited(int i) bool delta_portal_inited(int i)
@ -2171,8 +2174,10 @@ void DeltaLoadLevel()
monster.position.tile = { x, y }; monster.position.tile = { x, y };
monster.position.old = { x, y }; monster.position.old = { x, y };
monster.position.future = { 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._mhitpoints = sgLevels[currlevel].monster[i]._mhitpoints;
monster.mWhoHit = sgLevels[currlevel].monster[i].mWhoHit;
}
if (sgLevels[currlevel].monster[i]._mhitpoints == 0) { if (sgLevels[currlevel].monster[i]._mhitpoints == 0) {
M_ClearSquares(i); M_ClearSquares(i);
if (monster._mAi != AI_DIABLO) { if (monster._mAi != AI_DIABLO) {

3
Source/msg.h

@ -357,6 +357,8 @@ struct TSyncMonster {
uint8_t _my; uint8_t _my;
uint8_t _menemy; uint8_t _menemy;
uint8_t _mdelta; uint8_t _mdelta;
int32_t _mhitpoints;
int8_t mWhoHit;
}; };
struct TPktHdr { struct TPktHdr {
@ -385,6 +387,7 @@ struct DMonsterStr {
uint8_t _menemy; uint8_t _menemy;
uint8_t _mactive; uint8_t _mactive;
int32_t _mhitpoints; int32_t _mhitpoints;
int8_t mWhoHit;
}; };
struct DObjectStr { struct DObjectStr {

4
Source/sync.cpp

@ -41,6 +41,8 @@ void SyncMonsterPos(TSyncMonster &monsterSync, int ndx)
monsterSync._my = monster.position.tile.y; monsterSync._my = monster.position.tile.y;
monsterSync._menemy = encode_enemy(monster); monsterSync._menemy = encode_enemy(monster);
monsterSync._mdelta = sgnMonsterPriority[ndx] > 255 ? 255 : sgnMonsterPriority[ndx]; monsterSync._mdelta = sgnMonsterPriority[ndx] > 255 ? 255 : sgnMonsterPriority[ndx];
monsterSync.mWhoHit = monster.mWhoHit;
monsterSync._mhitpoints = monster._mhitpoints;
sgnMonsterPriority[ndx] = 0xFFFF; sgnMonsterPriority[ndx] = 0xFFFF;
sgwLRU[ndx] = monster._msquelch == 0 ? 0xFFFF : 0xFFFE; sgwLRU[ndx] = monster._msquelch == 0 ? 0xFFFF : 0xFFFE;
@ -195,6 +197,8 @@ void SyncMonster(int pnum, const TSyncMonster &monsterSync)
} }
decode_enemy(monster, enemyId); decode_enemy(monster, enemyId);
monster.mWhoHit = monsterSync.mWhoHit;
monster._mhitpoints = monsterSync._mhitpoints;
} }
bool IsEnemyIdValid(const Monster &monster, int enemyId) bool IsEnemyIdValid(const Monster &monster, int enemyId)

Loading…
Cancel
Save