- QueenAngleChase.

This commit is contained in:
Christoph Oelckers 2021-10-26 20:52:25 +02:00
parent ae271b272a
commit 52ab800548

View file

@ -276,19 +276,19 @@ void SetHeadVel(DExhumedActor* pActor)
pSprite->yvel = bsin(nAngle, nVelShift); pSprite->yvel = bsin(nAngle, nVelShift);
} }
int QueenAngleChase(short nSprite, short nSprite2, int val1, int val2) Collision QueenAngleChase(DExhumedActor* pActor, DExhumedActor* pActor2, int val1, int val2)
{ {
short nAngle; short nAngle;
spritetype* pSprite = &sprite[nSprite]; spritetype* pSprite = &pActor->s();
if (nSprite2 < 0) if (pActor2 == nullptr)
{ {
pSprite->zvel = 0; pSprite->zvel = 0;
nAngle = pSprite->ang; nAngle = pSprite->ang;
} }
else else
{ {
spritetype* pSprite2 = &sprite[nSprite2]; spritetype* pSprite2 = &pActor2->s();
int nTileY = (tileHeight(pSprite2->picnum) * pSprite2->yrepeat) * 2; int nTileY = (tileHeight(pSprite2->picnum) * pSprite2->yrepeat) * 2;
int nMyAngle = GetMyAngle(pSprite2->x - pSprite->x, pSprite2->y - pSprite->y); int nMyAngle = GetMyAngle(pSprite2->x - pSprite->x, pSprite2->y - pSprite->y);
@ -353,7 +353,7 @@ int QueenAngleChase(short nSprite, short nSprite2, int val1, int val2)
int nSqrt = ksqrt(sqrtNum) * bsin(da); int nSqrt = ksqrt(sqrtNum) * bsin(da);
return movesprite(nSprite, v26 >> 2, v27 >> 2, bsin(bobangle, -5) + (nSqrt >> 13), 0, 0, CLIPMASK1); return movesprite(pActor, v26 >> 2, v27 >> 2, bsin(bobangle, -5) + (nSqrt >> 13), 0, 0, CLIPMASK1);
} }
int DestroyTailPart() int DestroyTailPart()
@ -609,17 +609,17 @@ void AIQueenEgg::Tick(RunListEvent* ev)
case 2: case 2:
case 3: case 3:
{ {
int nMov = QueenAngleChase(pActor->GetSpriteIndex(), pTarget->GetSpriteIndex(), nHeadVel, 64); auto nMov = QueenAngleChase(pActor, pTarget, nHeadVel, 64);
switch (nMov & 0xC000) switch (nMov.type)
{ {
case 0xC000: case kHitSprite:
if (sprite[nMov & 0x3FFF].statnum != 121) if (nMov.actor->s().statnum != 121)
{ {
runlist_DamageEnemy(nMov & 0x3FFF, pActor->GetSpriteIndex(), 5); runlist_DamageEnemy(nMov.actor, pActor, 5);
} }
fallthrough__; [[fallthrough]];
case 0x8000: case kHitWall:
pSprite->ang += (RandomSize(9) + 768); pSprite->ang += (RandomSize(9) + 768);
pSprite->ang &= kAngleMask; pSprite->ang &= kAngleMask;
pSprite->xvel = bcos(pSprite->ang, -3); pSprite->xvel = bcos(pSprite->ang, -3);
@ -906,14 +906,11 @@ void AIQueenHead::Tick(RunListEvent* ev)
if (pTarget) if (pTarget)
{ {
int nMov = QueenAngleChase(pActor->GetSpriteIndex(), pTarget->GetSpriteIndex(), nHeadVel, 64); auto nMov = QueenAngleChase(pActor, pTarget, nHeadVel, 64);
switch (nMov & 0xC000) if (nMov.type == kHitSprite)
{ {
case 0x8000: if (nMov.actor == pTarget)
break;
case 0xC000:
if ((nMov & 0x3FFF) == pTarget->GetSpriteIndex())
{ {
runlist_DamageEnemy(pTarget, pActor, 10); runlist_DamageEnemy(pTarget, pActor, 10);
D3PlayFX(StaticSound[kSoundQTail] | 0x2000, pActor); D3PlayFX(StaticSound[kSoundQTail] | 0x2000, pActor);
@ -925,7 +922,6 @@ void AIQueenHead::Tick(RunListEvent* ev)
SetHeadVel(pActor); SetHeadVel(pActor);
} }
break;
} }
} }
@ -1335,7 +1331,7 @@ void AIQueen::Tick(RunListEvent* ev)
runlist_DamageEnemy(nTarget, nSprite, 5); runlist_DamageEnemy(nTarget, nSprite, 5);
break; break;
} }
fallthrough__; [[fallthrough]];
case 0x8000: case 0x8000:
pSprite->ang += 256; pSprite->ang += 256;
pSprite->ang &= kAngleMask; pSprite->ang &= kAngleMask;