mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-21 19:11:06 +00:00
- QueenAngleChase.
This commit is contained in:
parent
ae271b272a
commit
52ab800548
1 changed files with 16 additions and 20 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue