diff --git a/source/games/exhumed/src/exhumed.cpp b/source/games/exhumed/src/exhumed.cpp index 1d7717fdf..16610e304 100644 --- a/source/games/exhumed/src/exhumed.cpp +++ b/source/games/exhumed/src/exhumed.cpp @@ -622,6 +622,7 @@ void DExhumedActor::Serialize(FSerializer& arc) ("index2", nIndex2) ("channel", nChannel) ("damage", nDamage) + ("angle2", angle2) ("turn", nTurn) ("x", x) diff --git a/source/games/exhumed/src/exhumedactor.h b/source/games/exhumed/src/exhumedactor.h index ae0cf9ce7..7ecb2d03e 100644 --- a/source/games/exhumed/src/exhumedactor.h +++ b/source/games/exhumed/src/exhumedactor.h @@ -32,6 +32,7 @@ public: union { int16_t nIndex2; int16_t nAngle2; }; // index2 is for scorpion, angle2 is for wasp. union { int16_t nChannel; int16_t nVel; }; // channel is for scorpion, vel is for wasp. union { int16_t nDamage; int16_t nAction2; }; // nAction2 is for the queen. + int/*DAngle*/ angle2; // used by the queen // for the grenade. int nTurn; diff --git a/source/games/exhumed/src/items.cpp b/source/games/exhumed/src/items.cpp index 671ec4c0b..50f6dba58 100644 --- a/source/games/exhumed/src/items.cpp +++ b/source/games/exhumed/src/items.cpp @@ -363,10 +363,12 @@ void StartRegenerate(DExhumedActor* pActor) auto pos = Regenerates.Find(pActor); if (pos >= Regenerates.Size()) { - // ?? CHECKME - pActor->spr.xvel = pActor->spr.xrepeat; - pActor->set_int_zvel(pActor->spr.shade); - pActor->spr.yvel = pActor->spr.pal; +#if 0 + // ?? CHECKME (looks like broken multiplayer stuff - fields get never set properly.) + pActor->spr. xvel = pActor->spr.xrepeat; + pActor->spr. zvel = pActor->spr.shade; + pActor->spr. yvel = pActor->spr.pal; +#endif } else { diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index 62a052520..63ef3ff54 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -1111,7 +1111,7 @@ Collision AngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int ebx, int if (pActor2 == nullptr) { - pActor->clear_zvel(); + pActor->angle2 = 0; nAngle = pActor->int_ang(); } else @@ -1150,14 +1150,14 @@ Collision AngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int ebx, int } nAngle = (nAngDelta + pActor->int_ang()) & kAngleMask; - int nAngDeltaD = AngleDelta(pActor->int_zvel(), var_18, 24); + int nAngDeltaD = AngleDelta(pActor->angle2, var_18, 24); - pActor->set_int_zvel((pActor->int_zvel() + nAngDeltaD) & kAngleMask); + pActor->angle2 = (pActor->angle2 + nAngDeltaD) & kAngleMask; } pActor->set_int_ang(nAngle); - int eax = abs(bcos(pActor->int_zvel())); + int eax = abs(bcos(pActor->angle2)); int x = ((bcos(nAngle) * ebx) >> 14) * eax; int y = ((bsin(nAngle) * ebx) >> 14) * eax; diff --git a/source/games/exhumed/src/queen.cpp b/source/games/exhumed/src/queen.cpp index 9731360ae..5e3883bee 100644 --- a/source/games/exhumed/src/queen.cpp +++ b/source/games/exhumed/src/queen.cpp @@ -290,7 +290,7 @@ Collision QueenAngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int val if (pActor2 == nullptr) { - pActor->clear_zvel(); + pActor->angle2 = 0; nAngle = pActor->int_ang(); } else @@ -325,12 +325,12 @@ Collision QueenAngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int val nAngle = (nAngDelta + pActor->int_ang()) & kAngleMask; - pActor->set_int_zvel((AngleDelta(pActor->int_zvel(), var_14, 24) + pActor->int_zvel()) & kAngleMask); // not really avelocity + pActor->angle2 = (AngleDelta(pActor->angle2, var_14, 24) + pActor->angle2) & kAngleMask; } pActor->set_int_ang(nAngle); - int da = pActor->int_zvel(); + int da = pActor->angle2; int x = abs(bcos(da)); int v26 = x * ((val1 * bcos(nAngle)) >> 14); diff --git a/source/games/exhumed/src/wasp.cpp b/source/games/exhumed/src/wasp.cpp index 3b9270a4f..29c3c3dc2 100644 --- a/source/games/exhumed/src/wasp.cpp +++ b/source/games/exhumed/src/wasp.cpp @@ -242,6 +242,7 @@ void AIWasp::Tick(RunListEvent* ev) } else { + pActor->angle2 = 0; pActor->clear_zvel(); pActor->nAction = 1; pActor->nFrame = 0;