- Exhumed: separate AngleChase abuse from zvel variable.

This commit is contained in:
Christoph Oelckers 2022-09-01 00:59:56 +02:00
parent bd520e63dd
commit 446b02c11b
6 changed files with 16 additions and 11 deletions

View file

@ -622,6 +622,7 @@ void DExhumedActor::Serialize(FSerializer& arc)
("index2", nIndex2)
("channel", nChannel)
("damage", nDamage)
("angle2", angle2)
("turn", nTurn)
("x", x)

View file

@ -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;

View file

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

View file

@ -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;

View file

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

View file

@ -242,6 +242,7 @@ void AIWasp::Tick(RunListEvent* ev)
}
else
{
pActor->angle2 = 0;
pActor->clear_zvel();
pActor->nAction = 1;
pActor->nFrame = 0;