- changed parameter of aiNewState to DBloodActor

This commit is contained in:
Christoph Oelckers 2020-11-07 13:46:03 +01:00
parent 502d911a95
commit 44805e29b3
23 changed files with 573 additions and 563 deletions

View file

@ -3009,7 +3009,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
if (damageType == DAMAGE_TYPE_1 && pXSprite->medium == kMediumNormal)
{
pSprite->type = kDudeBurningCultist;
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(&bloodActors[pXSprite->reference], &cultistBurnGoto);
actHealDude(pXSprite, dudeInfo[40].startHealth, dudeInfo[40].startHealth);
return;
}
@ -3019,7 +3019,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
if (damageType == DAMAGE_TYPE_1 && pXSprite->medium == kMediumNormal)
{
pSprite->type = kDudeBurningBeast;
aiNewState(pSprite, pXSprite, &beastBurnGoto);
aiNewState(&bloodActors[pXSprite->reference], &beastBurnGoto);
actHealDude(pXSprite, dudeInfo[53].startHealth, dudeInfo[53].startHealth);
return;
}
@ -3029,7 +3029,7 @@ void actKillDude(int nKillerSprite, spritetype *pSprite, DAMAGE_TYPE damageType,
if (damageType == DAMAGE_TYPE_1 && pXSprite->medium == kMediumNormal)
{
pSprite->type = kDudeBurningInnocent;
aiNewState(pSprite, pXSprite, &innocentBurnGoto);
aiNewState(&bloodActors[pXSprite->reference], &innocentBurnGoto);
actHealDude(pXSprite, dudeInfo[39].startHealth, dudeInfo[39].startHealth);
return;
}
@ -4758,10 +4758,10 @@ void MoveDude(spritetype *pSprite)
switch (pSprite->type) {
case kDudeCultistTommy:
case kDudeCultistShotgun:
aiNewState(pSprite, pXSprite, &cultistGoto);
aiNewState(&bloodActors[pXSprite->reference], &cultistGoto);
break;
case kDudeGillBeast:
aiNewState(pSprite, pXSprite, &gillBeastGoto);
aiNewState(&bloodActors[pXSprite->reference], &gillBeastGoto);
pSprite->flags |= 6;
break;
case kDudeBoneEel:
@ -4805,7 +4805,7 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(&bloodActors[pXSprite->reference], &cultistSwimGoto);
break;
case kDudeBurningCultist:
{
@ -4815,7 +4815,7 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(&bloodActors[pXSprite->reference], &cultistSwimGoto);
}
else
{
@ -4823,7 +4823,7 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(&bloodActors[pXSprite->reference], &cultistSwimGoto);
}
break;
}
@ -4831,19 +4831,19 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &zombieAGoto);
aiNewState(&bloodActors[pXSprite->reference], &zombieAGoto);
break;
case kDudeZombieButcher:
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &zombieFGoto);
aiNewState(&bloodActors[pXSprite->reference], &zombieFGoto);
break;
case kDudeGillBeast:
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &gillBeastSwimGoto);
aiNewState(&bloodActors[pXSprite->reference], &gillBeastSwimGoto);
pSprite->flags &= ~6;
break;
@ -4887,7 +4887,7 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
break;
case kDudeBurningCultist:
if (Chance(0x400))
@ -4896,7 +4896,7 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
}
else
{
@ -4904,26 +4904,26 @@ void MoveDude(spritetype *pSprite)
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
}
break;
case kDudeZombieAxeNormal:
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &zombieAGoto);
aiNewState(actor, &zombieAGoto);
break;
case kDudeZombieButcher:
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &zombieFGoto);
aiNewState(actor, &zombieFGoto);
break;
case kDudeGillBeast:
pXSprite->burnTime = 0;
evPost(nSprite, 3, 0, kCallbackEnemeyBubble);
sfxPlay3DSound(pSprite, 720, -1, 0);
aiNewState(pSprite, pXSprite, &gillBeastSwimGoto);
aiNewState(actor, &gillBeastSwimGoto);
pSprite->flags &= ~6;
break;
case kDudeGargoyleFlesh:

View file

@ -85,8 +85,10 @@ void aiPlay3DSound(spritetype *pSprite, int a2, AI_SFX_PRIORITY a3, int a4)
}
}
void aiNewState(spritetype *pSprite, XSPRITE *pXSprite, AISTATE *pAIState)
void aiNewState(DBloodActor* actor, AISTATE *pAIState)
{
auto pXSprite = &actor->x();
auto pSprite = &actor->s();
DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type);
pXSprite->stateTimer = pAIState->stateTicks;
pXSprite->aiState = pAIState;
@ -341,11 +343,11 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval3 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &ghostSearch);
aiNewState(actor, &ghostSearch);
else
{
aiPlay3DSound(pSprite, 1600, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &ghostChase);
aiNewState(actor, &ghostChase);
}
break;
}
@ -361,7 +363,7 @@ void aiActivateDude(DBloodActor* actor)
if (pXSprite->target == -1) {
switch (pXSprite->medium) {
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
if (Chance(0x8000)) {
if (pSprite->type == kDudeCultistTommy) aiPlay3DSound(pSprite, 4008+Random(5), AI_SFX_PRIORITY_1, -1);
else aiPlay3DSound(pSprite, 1008+Random(5), AI_SFX_PRIORITY_1, -1);
@ -369,7 +371,7 @@ void aiActivateDude(DBloodActor* actor)
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
} else {
@ -379,12 +381,12 @@ void aiActivateDude(DBloodActor* actor)
}
switch (pXSprite->medium) {
case kMediumNormal:
if (pSprite->type == kDudeCultistTommy) aiNewState(pSprite, pXSprite, &fanaticChase);
else aiNewState(pSprite, pXSprite, &cultistChase);
if (pSprite->type == kDudeCultistTommy) aiNewState(actor, &fanaticChase);
else aiNewState(actor, &cultistChase);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimChase);
aiNewState(actor, &cultistSwimChase);
break;
}
}
@ -418,13 +420,13 @@ void aiActivateDude(DBloodActor* actor)
if (pXSprite->target == -1) {
switch (pXSprite->medium) {
case 0:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
if (Chance(0x8000))
aiPlay3DSound(pSprite, 4008+Random(5), AI_SFX_PRIORITY_1, -1);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
} else {
@ -433,11 +435,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium) {
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistProneChase);
aiNewState(actor, &cultistProneChase);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimChase);
aiNewState(actor, &cultistSwimChase);
break;
}
}
@ -454,13 +456,13 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
if (Chance(0x8000))
aiPlay3DSound(pSprite, 1008+Random(5), AI_SFX_PRIORITY_1, -1);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
}
@ -471,11 +473,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistProneChase);
aiNewState(actor, &cultistProneChase);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimChase);
aiNewState(actor, &cultistSwimChase);
break;
}
}
@ -483,9 +485,9 @@ void aiActivateDude(DBloodActor* actor)
}
case kDudeBurningCultist:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &cultistBurnSearch);
aiNewState(actor, &cultistBurnSearch);
else
aiNewState(pSprite, pXSprite, &cultistBurnChase);
aiNewState(actor, &cultistBurnChase);
break;
case kDudeBat:
{
@ -496,12 +498,12 @@ void aiActivateDude(DBloodActor* actor)
if (!pSprite->flags)
pSprite->flags = 9;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
else
{
if (Chance(0xa000))
aiPlay3DSound(pSprite, 2000, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &batChase);
aiNewState(actor, &batChase);
}
break;
}
@ -512,14 +514,14 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval3 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
else
{
if (Chance(0x8000))
aiPlay3DSound(pSprite, 1501, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 1500, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &eelChase);
aiNewState(actor, &eelChase);
}
break;
}
@ -534,9 +536,9 @@ void aiActivateDude(DBloodActor* actor)
if (pXSprite->target == -1)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
else
aiNewState(pSprite, pXSprite, &gillBeastSearch);
aiNewState(actor, &gillBeastSearch);
}
else
{
@ -545,9 +547,9 @@ void aiActivateDude(DBloodActor* actor)
else
aiPlay3DSound(pSprite, 1700, AI_SFX_PRIORITY_1, -1);
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimChase);
aiNewState(actor, &gillBeastSwimChase);
else
aiNewState(pSprite, pXSprite, &gillBeastChase);
aiNewState(actor, &gillBeastChase);
}
break;
}
@ -556,7 +558,7 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval2 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
else
{
if (Chance(0xa000))
@ -576,7 +578,7 @@ void aiActivateDude(DBloodActor* actor)
break;
}
}
aiNewState(pSprite, pXSprite, &zombieAChase);
aiNewState(actor, &zombieAChase);
}
break;
}
@ -586,7 +588,7 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval2 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->aiState == &zombieEIdle)
aiNewState(pSprite, pXSprite, &zombieEUp);
aiNewState(actor, &zombieEUp);
break;
}
case kDudeZombieAxeLaying:
@ -595,7 +597,7 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval2 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->aiState == &zombieSIdle)
aiNewState(pSprite, pXSprite, &zombie13AC2C);
aiNewState(actor, &zombie13AC2C);
break;
}
case kDudeZombieButcher: {
@ -603,28 +605,28 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval2 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &zombieFSearch);
aiNewState(actor, &zombieFSearch);
else
{
if (Chance(0x4000))
aiPlay3DSound(pSprite, 1201, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 1200, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &zombieFChase);
aiNewState(actor, &zombieFChase);
}
break;
}
case kDudeBurningZombieAxe:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &zombieABurnSearch);
aiNewState(actor, &zombieABurnSearch);
else
aiNewState(pSprite, pXSprite, &zombieABurnChase);
aiNewState(actor, &zombieABurnChase);
break;
case kDudeBurningZombieButcher:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &zombieFBurnSearch);
aiNewState(actor, &zombieFBurnSearch);
else
aiNewState(pSprite, pXSprite, &zombieFBurnChase);
aiNewState(actor, &zombieFBurnChase);
break;
case kDudeGargoyleFlesh: {
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1;
@ -632,14 +634,14 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval3 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &gargoyleFSearch);
aiNewState(actor, &gargoyleFSearch);
else
{
if (Chance(0x4000))
aiPlay3DSound(pSprite, 1401, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &gargoyleFChase);
aiNewState(actor, &gargoyleFChase);
}
break;
}
@ -650,14 +652,14 @@ void aiActivateDude(DBloodActor* actor)
pDudeExtraE->xval3 = 1;
pDudeExtraE->xval1 = 0;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &gargoyleFSearch);
aiNewState(actor, &gargoyleFSearch);
else
{
if (Chance(0x4000))
aiPlay3DSound(pSprite, 1451, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 1450, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &gargoyleFChase);
aiNewState(actor, &gargoyleFChase);
}
break;
}
@ -667,85 +669,85 @@ void aiActivateDude(DBloodActor* actor)
#ifdef NOONE_EXTENSIONS
// play gargoyle statue breaking animation if data1 = 1.
if (gModernMap && pXSprite->data1 == 1) {
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(pSprite, pXSprite, &statueFBreakSEQ);
else aiNewState(pSprite, pXSprite, &statueSBreakSEQ);
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(actor, &statueFBreakSEQ);
else aiNewState(actor, &statueSBreakSEQ);
} else {
if (Chance(0x4000)) aiPlay3DSound(pSprite, 1401, AI_SFX_PRIORITY_1, -1);
else aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(pSprite, pXSprite, &gargoyleFMorph);
else aiNewState(pSprite, pXSprite, &gargoyleSMorph);
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(actor, &gargoyleFMorph);
else aiNewState(actor, &gargoyleSMorph);
}
#else
if (Chance(0x4000)) aiPlay3DSound(pSprite, 1401, AI_SFX_PRIORITY_1, -1);
else aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(pSprite, pXSprite, &gargoyleFMorph);
else aiNewState(pSprite, pXSprite, &gargoyleSMorph);
if (pSprite->type == kDudeGargoyleStatueFlesh) aiNewState(actor, &gargoyleFMorph);
else aiNewState(actor, &gargoyleSMorph);
#endif
break;
case kDudeCerberusTwoHead:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &cerberusSearch);
aiNewState(actor, &cerberusSearch);
else
{
aiPlay3DSound(pSprite, 2300, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &cerberusChase);
aiNewState(actor, &cerberusChase);
}
break;
case kDudeCerberusOneHead:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &cerberus2Search);
aiNewState(actor, &cerberus2Search);
else
{
aiPlay3DSound(pSprite, 2300, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &cerberus2Chase);
aiNewState(actor, &cerberus2Chase);
}
break;
case kDudeHellHound:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &houndSearch);
aiNewState(actor, &houndSearch);
else
{
aiPlay3DSound(pSprite, 1300, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &houndChase);
aiNewState(actor, &houndChase);
}
break;
case kDudeHand:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &handSearch);
aiNewState(actor, &handSearch);
else
{
aiPlay3DSound(pSprite, 1900, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &handChase);
aiNewState(actor, &handChase);
}
break;
case kDudeRat:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &ratSearch);
aiNewState(actor, &ratSearch);
else
{
aiPlay3DSound(pSprite, 2100, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &ratChase);
aiNewState(actor, &ratChase);
}
break;
case kDudeInnocent:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &innocentSearch);
aiNewState(actor, &innocentSearch);
else
{
if (pXSprite->health > 0)
aiPlay3DSound(pSprite, 7000+Random(6), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &innocentChase);
aiNewState(actor, &innocentChase);
}
break;
case kDudeTchernobog:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &tchernobogSearch);
aiNewState(actor, &tchernobogSearch);
else
{
aiPlay3DSound(pSprite, 2350+Random(7), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &tchernobogChase);
aiNewState(actor, &tchernobogChase);
}
break;
case kDudeSpiderBrown:
@ -754,11 +756,11 @@ void aiActivateDude(DBloodActor* actor)
pSprite->flags |= 2;
pSprite->cstat &= ~8;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &spidSearch);
aiNewState(actor, &spidSearch);
else
{
aiPlay3DSound(pSprite, 1800, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &spidChase);
aiNewState(actor, &spidChase);
}
break;
case kDudeSpiderMother: {
@ -768,11 +770,11 @@ void aiActivateDude(DBloodActor* actor)
pSprite->flags |= 2;
pSprite->cstat &= ~8;
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &spidSearch);
aiNewState(actor, &spidSearch);
else
{
aiPlay3DSound(pSprite, 1853+Random(1), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &spidChase);
aiNewState(actor, &spidChase);
}
break;
}
@ -786,11 +788,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &tinycalebSearch);
aiNewState(actor, &tinycalebSearch);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
break;
}
}
@ -799,11 +801,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &tinycalebChase);
aiNewState(actor, &tinycalebChase);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &tinycalebSwimChase);
aiNewState(actor, &tinycalebSwimChase);
break;
}
}
@ -819,11 +821,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &beastSearch);
aiNewState(actor, &beastSearch);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
break;
}
}
@ -833,11 +835,11 @@ void aiActivateDude(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &beastChase);
aiNewState(actor, &beastChase);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &beastSwimChase);
aiNewState(actor, &beastSwimChase);
break;
}
}
@ -846,24 +848,24 @@ void aiActivateDude(DBloodActor* actor)
case kDudePodGreen:
case kDudePodFire:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &podSearch);
aiNewState(actor, &podSearch);
else
{
if (pSprite->type == kDudePodFire)
aiPlay3DSound(pSprite, 2453, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 2473, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &podChase);
aiNewState(actor, &podChase);
}
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
if (pXSprite->target == -1)
aiNewState(pSprite, pXSprite, &tentacleSearch);
aiNewState(actor, &tentacleSearch);
else
{
aiPlay3DSound(pSprite, 2503, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &tentacleChase);
aiNewState(actor, &tentacleChase);
}
break;
}
@ -900,6 +902,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
assert(nSource < kMaxSprites);
if (!pXSprite->health)
return 0;
auto actor = &bloodActors[pXSprite->reference];
pXSprite->health = ClipLow(pXSprite->health - nDamage, 0);
cumulDamage[pSprite->extra] += nDamage;
DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type);
@ -928,16 +931,16 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
if (nDmgType != DAMAGE_TYPE_1)
{
if (!dudeIsPlayingSeq(pSprite, 14) && !pXSprite->medium)
aiNewState(pSprite, pXSprite, &cultistDodge);
aiNewState(actor, &cultistDodge);
else if (dudeIsPlayingSeq(pSprite, 14) && !pXSprite->medium)
aiNewState(pSprite, pXSprite, &cultistProneDodge);
aiNewState(actor, &cultistProneDodge);
else if (dudeIsPlayingSeq(pSprite, 13) && (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo))
aiNewState(pSprite, pXSprite, &cultistSwimDodge);
aiNewState(actor, &cultistSwimDodge);
}
else if (nDmgType == DAMAGE_TYPE_1 && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth/* && (pXSprite->at17_6 != 1 || pXSprite->at17_6 != 2)*/)
{
pSprite->type = kDudeBurningCultist;
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(pSprite, 1031+Random(2), AI_SFX_PRIORITY_2, -1);
gDudeExtra[pSprite->extra].time = gFrameClock+360;
@ -949,7 +952,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
if (nDmgType == DAMAGE_TYPE_1 && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth/* && (pXSprite->at17_6 != 1 || pXSprite->at17_6 != 2)*/)
{
pSprite->type = kDudeBurningInnocent;
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
gDudeExtra[pSprite->extra].time = gFrameClock+360;
actHealDude(pXSprite, dudeInfo[39].startHealth, dudeInfo[39].startHealth);
@ -966,24 +969,24 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
{
pSprite->type = kDudeCultistTommy;
pXSprite->burnTime = 0;
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
}
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
{
pSprite->type = kDudeCultistShotgun;
pXSprite->burnTime = 0;
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
}
break;
case kDudeGargoyleFlesh:
aiNewState(pSprite, pXSprite, &gargoyleFChase);
aiNewState(actor, &gargoyleFChase);
break;
case kDudeZombieButcher:
if (nDmgType == DAMAGE_TYPE_1 && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth) {
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(pSprite, 1202, AI_SFX_PRIORITY_2, -1);
pSprite->type = kDudeBurningZombieButcher;
aiNewState(pSprite, pXSprite, &zombieFBurnGoto);
aiNewState(actor, &zombieFBurnGoto);
actHealDude(pXSprite, dudeInfo[42].startHealth, dudeInfo[42].startHealth);
evKill(nSprite, 3, kCallbackFXFlameLick);
}
@ -992,7 +995,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
if (nDmgType == DAMAGE_TYPE_1 && pXSprite->health <= (unsigned int)pDudeInfo->fleeHealth/* && (pXSprite->at17_6 != 1 || pXSprite->at17_6 != 2)*/)
{
pSprite->type = kDudeBurningInnocent;
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
gDudeExtra[pSprite->extra].time = gFrameClock+360;
actHealDude(pXSprite, dudeInfo[39].startHealth, dudeInfo[39].startHealth);
@ -1077,7 +1080,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
{
pSprite->type = kDudeBeast;
aiPlay3DSound(pSprite, 9008, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &beastMorphFromCultist);
aiNewState(actor, &beastMorphFromCultist);
actHealDude(pXSprite, dudeInfo[51].startHealth, dudeInfo[51].startHealth);
}
break;
@ -1088,7 +1091,7 @@ int aiDamageSprite(spritetype *pSprite, XSPRITE *pXSprite, int nSource, DAMAGE_T
aiPlay3DSound(pSprite, 361, AI_SFX_PRIORITY_0, -1);
aiPlay3DSound(pSprite, 1106, AI_SFX_PRIORITY_2, -1);
pSprite->type = kDudeBurningZombieAxe;
aiNewState(pSprite, pXSprite, &zombieABurnGoto);
aiNewState(actor, &zombieABurnGoto);
actHealDude(pXSprite, dudeInfo[41].startHealth, dudeInfo[41].startHealth);
evKill(nSprite, 3, kCallbackFXFlameLick);
}
@ -1164,26 +1167,26 @@ void RecoilDude(DBloodActor* actor)
else aiPlay3DSound(pSprite, 1013+Random(2), AI_SFX_PRIORITY_2, -1);
if (!v4 && pXSprite->medium == kMediumNormal) {
if (pDudeExtra->recoil) aiNewState(pSprite, pXSprite, &cultistTeslaRecoil);
else aiNewState(pSprite, pXSprite, &cultistRecoil);
if (pDudeExtra->recoil) aiNewState(actor, &cultistTeslaRecoil);
else aiNewState(actor, &cultistRecoil);
} else if (v4 && pXSprite->medium == kMediumNormal) {
if (pDudeExtra->recoil) aiNewState(pSprite, pXSprite, &cultistTeslaRecoil);
else if (gGameOptions.nDifficulty > 0) aiNewState(pSprite, pXSprite, &cultistProneRecoil);
else aiNewState(pSprite, pXSprite, &cultistRecoil);
if (pDudeExtra->recoil) aiNewState(actor, &cultistTeslaRecoil);
else if (gGameOptions.nDifficulty > 0) aiNewState(actor, &cultistProneRecoil);
else aiNewState(actor, &cultistRecoil);
}
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSwimRecoil);
aiNewState(actor, &cultistSwimRecoil);
else
{
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &cultistTeslaRecoil);
aiNewState(actor, &cultistTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &cultistRecoil);
aiNewState(actor, &cultistRecoil);
}
break;
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
@ -1193,70 +1196,70 @@ void RecoilDude(DBloodActor* actor)
case kDudeZombieButcher:
aiPlay3DSound(pSprite, 1202, AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &zombieFTeslaRecoil);
aiNewState(actor, &zombieFTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &zombieFRecoil);
aiNewState(actor, &zombieFRecoil);
break;
case kDudeZombieAxeNormal:
case kDudeZombieAxeBuried:
aiPlay3DSound(pSprite, 1106, AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil && pXSprite->data3 > pDudeInfo->startHealth/3)
aiNewState(pSprite, pXSprite, &zombieATeslaRecoil);
aiNewState(actor, &zombieATeslaRecoil);
else if (pXSprite->data3 > pDudeInfo->startHealth/3)
aiNewState(pSprite, pXSprite, &zombieARecoil2);
aiNewState(actor, &zombieARecoil2);
else
aiNewState(pSprite, pXSprite, &zombieARecoil);
aiNewState(actor, &zombieARecoil);
break;
case kDudeBurningZombieAxe:
aiPlay3DSound(pSprite, 1106, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &zombieABurnGoto);
aiNewState(actor, &zombieABurnGoto);
break;
case kDudeBurningZombieButcher:
aiPlay3DSound(pSprite, 1202, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &zombieFBurnGoto);
aiNewState(actor, &zombieFBurnGoto);
break;
case kDudeGargoyleFlesh:
case kDudeGargoyleStone:
aiPlay3DSound(pSprite, 1402, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &gargoyleFRecoil);
aiNewState(actor, &gargoyleFRecoil);
break;
case kDudeCerberusTwoHead:
aiPlay3DSound(pSprite, 2302+Random(2), AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil && pXSprite->data3 > pDudeInfo->startHealth/3)
aiNewState(pSprite, pXSprite, &cerberusTeslaRecoil);
aiNewState(actor, &cerberusTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &cerberusRecoil);
aiNewState(actor, &cerberusRecoil);
break;
case kDudeCerberusOneHead:
aiPlay3DSound(pSprite, 2302+Random(2), AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &cerberus2Recoil);
aiNewState(actor, &cerberus2Recoil);
break;
case kDudeHellHound:
aiPlay3DSound(pSprite, 1302, AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &houndTeslaRecoil);
aiNewState(actor, &houndTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &houndRecoil);
aiNewState(actor, &houndRecoil);
break;
case kDudeTchernobog:
aiPlay3DSound(pSprite, 2370+Random(2), AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &tchernobogRecoil);
aiNewState(actor, &tchernobogRecoil);
break;
case kDudeHand:
aiPlay3DSound(pSprite, 1902, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &handRecoil);
aiNewState(actor, &handRecoil);
break;
case kDudeRat:
aiPlay3DSound(pSprite, 2102, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &ratRecoil);
aiNewState(actor, &ratRecoil);
break;
case kDudeBat:
aiPlay3DSound(pSprite, 2002, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &batRecoil);
aiNewState(actor, &batRecoil);
break;
case kDudeBoneEel:
aiPlay3DSound(pSprite, 1502, AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &eelRecoil);
aiNewState(actor, &eelRecoil);
break;
case kDudeGillBeast: {
XSECTOR *pXSector = NULL;
@ -1264,51 +1267,51 @@ void RecoilDude(DBloodActor* actor)
pXSector = &xsector[sector[pSprite->sectnum].extra];
aiPlay3DSound(pSprite, 1702, AI_SFX_PRIORITY_2, -1);
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimRecoil);
aiNewState(actor, &gillBeastSwimRecoil);
else
aiNewState(pSprite, pXSprite, &gillBeastRecoil);
aiNewState(actor, &gillBeastRecoil);
break;
}
case kDudePhantasm:
aiPlay3DSound(pSprite, 1602, AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &ghostTeslaRecoil);
aiNewState(actor, &ghostTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &ghostRecoil);
aiNewState(actor, &ghostRecoil);
break;
case kDudeSpiderBrown:
case kDudeSpiderRed:
case kDudeSpiderBlack:
aiPlay3DSound(pSprite, 1802+Random(1), AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &spidDodge);
aiNewState(actor, &spidDodge);
break;
case kDudeSpiderMother:
aiPlay3DSound(pSprite, 1851+Random(1), AI_SFX_PRIORITY_2, -1);
aiNewState(pSprite, pXSprite, &spidDodge);
aiNewState(actor, &spidDodge);
break;
case kDudeInnocent:
aiPlay3DSound(pSprite, 7007+Random(2), AI_SFX_PRIORITY_2, -1);
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &innocentTeslaRecoil);
aiNewState(actor, &innocentTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &innocentRecoil);
aiNewState(actor, &innocentRecoil);
break;
case kDudeTinyCaleb:
if (pXSprite->medium == kMediumNormal)
{
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &tinycalebTeslaRecoil);
aiNewState(actor, &tinycalebTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &tinycalebRecoil);
aiNewState(actor, &tinycalebRecoil);
}
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &tinycalebSwimRecoil);
aiNewState(actor, &tinycalebSwimRecoil);
else
{
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &tinycalebTeslaRecoil);
aiNewState(actor, &tinycalebTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &tinycalebRecoil);
aiNewState(actor, &tinycalebRecoil);
}
break;
case kDudeBeast:
@ -1316,30 +1319,30 @@ void RecoilDude(DBloodActor* actor)
if (pXSprite->medium == kMediumNormal)
{
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &beastTeslaRecoil);
aiNewState(actor, &beastTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &beastRecoil);
aiNewState(actor, &beastRecoil);
}
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &beastSwimRecoil);
aiNewState(actor, &beastSwimRecoil);
else
{
if (pDudeExtra->recoil)
aiNewState(pSprite, pXSprite, &beastTeslaRecoil);
aiNewState(actor, &beastTeslaRecoil);
else
aiNewState(pSprite, pXSprite, &beastRecoil);
aiNewState(actor, &beastRecoil);
}
break;
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podRecoil);
aiNewState(actor, &podRecoil);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleRecoil);
aiNewState(actor, &tentacleRecoil);
break;
default:
aiNewState(pSprite, pXSprite, &genRecoil);
aiNewState(actor, &genRecoil);
break;
}
pDudeExtra->recoil = 0;
@ -1458,7 +1461,9 @@ void aiProcessDudes(void) {
spritetype *pSprite = &sprite[nSprite];
if (pSprite->flags & 32) continue;
int nXSprite = pSprite->extra;
XSPRITE *pXSprite = &xsprite[nXSprite]; DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type);
XSPRITE *pXSprite = &xsprite[nXSprite];
DUDEINFO *pDudeInfo = getDudeInfo(pSprite->type);
auto actor = &bloodActors[pXSprite->reference];
if (IsPlayerSprite(pSprite) || pXSprite->health == 0) continue;
pXSprite->stateTimer = ClipLow(pXSprite->stateTimer-4, 0);
@ -1489,9 +1494,9 @@ void aiProcessDudes(void) {
default:
if (pXSprite->stateTimer == 0 && pXSprite->aiState->nextState) {
if (pXSprite->aiState->stateTicks > 0)
aiNewState(pSprite, pXSprite, pXSprite->aiState->nextState);
aiNewState(actor, pXSprite->aiState->nextState);
else if (seqGetStatus(3, nXSprite) < 0)
aiNewState(pSprite, pXSprite, pXSprite->aiState->nextState);
aiNewState(actor, pXSprite->aiState->nextState);
}
if (pXSprite->health > 0 && ((pDudeInfo->hinderDamage << 4) <= cumulDamage[nXSprite])) {
@ -1518,6 +1523,7 @@ void aiInitSprite(spritetype *pSprite)
{
int nXSprite = pSprite->extra;
XSPRITE *pXSprite = &xsprite[nXSprite];
auto actor = &bloodActors[pXSprite->reference];
int nSector = pSprite->sectnum;
int nXSector = sector[nSector].extra;
XSECTOR *pXSector = NULL;
@ -1546,7 +1552,7 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u1;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &cultistIdle);
aiNewState(actor, &cultistIdle);
break;
}
case kDudeCultistTommyProne:
@ -1554,7 +1560,7 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u1;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &fanaticProneIdle);
aiNewState(actor, &fanaticProneIdle);
break;
}
case kDudeCultistShotgunProne:
@ -1562,21 +1568,21 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u1;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &cultistProneIdle);
aiNewState(actor, &cultistProneIdle);
break;
}
case kDudeZombieButcher: {
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &zombieFIdle);
aiNewState(actor, &zombieFIdle);
break;
}
case kDudeZombieAxeNormal: {
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &zombieAIdle);
aiNewState(actor, &zombieAIdle);
break;
}
case kDudeZombieAxeLaying:
@ -1584,7 +1590,7 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &zombieSIdle);
aiNewState(actor, &zombieSIdle);
pSprite->flags &= ~1;
break;
}
@ -1592,7 +1598,7 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &zombieEIdle);
aiNewState(actor, &zombieEIdle);
break;
}
case kDudeGargoyleFlesh:
@ -1601,25 +1607,25 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &gargoyleFIdle);
aiNewState(actor, &gargoyleFIdle);
break;
}
case kDudeGargoyleStatueFlesh:
case kDudeGargoyleStatueStone:
aiNewState(pSprite, pXSprite, &gargoyleStatueIdle);
aiNewState(actor, &gargoyleStatueIdle);
break;
case kDudeCerberusTwoHead: {
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &cerberusIdle);
aiNewState(actor, &cerberusIdle);
break;
}
case kDudeHellHound:
aiNewState(pSprite, pXSprite, &houndIdle);
aiNewState(actor, &houndIdle);
break;
case kDudeHand:
aiNewState(pSprite, pXSprite, &handIdle);
aiNewState(actor, &handIdle);
break;
case kDudePhantasm:
{
@ -1627,14 +1633,14 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &ghostIdle);
aiNewState(actor, &ghostIdle);
break;
}
case kDudeInnocent:
aiNewState(pSprite, pXSprite, &innocentIdle);
aiNewState(actor, &innocentIdle);
break;
case kDudeRat:
aiNewState(pSprite, pXSprite, &ratIdle);
aiNewState(actor, &ratIdle);
break;
case kDudeBoneEel:
{
@ -1642,11 +1648,11 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &eelIdle);
aiNewState(actor, &eelIdle);
break;
}
case kDudeGillBeast:
aiNewState(pSprite, pXSprite, &gillBeastIdle);
aiNewState(actor, &gillBeastIdle);
break;
case kDudeBat:
{
@ -1654,7 +1660,7 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &batIdle);
aiNewState(actor, &batIdle);
break;
}
case kDudeSpiderBrown:
@ -1665,7 +1671,7 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &spidIdle);
aiNewState(actor, &spidIdle);
break;
}
case kDudeSpiderMother:
@ -1674,7 +1680,7 @@ void aiInitSprite(spritetype *pSprite)
pDudeExtraE->xval3 = 0;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &spidIdle);
aiNewState(actor, &spidIdle);
break;
}
case kDudeTchernobog:
@ -1682,25 +1688,25 @@ void aiInitSprite(spritetype *pSprite)
DUDEEXTRA_at6_u2 *pDudeExtraE = &gDudeExtra[nXSprite].at6.u2;
pDudeExtraE->xval2 = 0;
pDudeExtraE->xval1 = 0;
aiNewState(pSprite, pXSprite, &tchernobogIdle);
aiNewState(actor, &tchernobogIdle);
break;
}
case kDudeTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebIdle);
aiNewState(actor, &tinycalebIdle);
break;
case kDudeBeast:
aiNewState(pSprite, pXSprite, &beastIdle);
aiNewState(actor, &beastIdle);
break;
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podIdle);
aiNewState(actor, &podIdle);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleIdle);
aiNewState(actor, &tentacleIdle);
break;
default:
aiNewState(pSprite, pXSprite, &genIdle);
aiNewState(actor, &genIdle);
break;
}
aiSetTarget(pXSprite, 0, 0, 0);

View file

@ -93,7 +93,7 @@ extern int cumulDamage[];
bool dudeIsPlayingSeq(spritetype *pSprite, int nSeq);
void aiPlay3DSound(spritetype *pSprite, int a2, AI_SFX_PRIORITY a3, int a4);
void aiNewState(spritetype *pSprite, XSPRITE *pXSprite, AISTATE *pAIState);
void aiNewState(DBloodActor* actor, AISTATE *pAIState);
void aiChooseDirection(spritetype *pSprite, XSPRITE *pXSprite, int a3);
void aiMoveForward(DBloodActor*pXSprite);
void aiMoveTurn(DBloodActor*pXSprite);

View file

@ -103,7 +103,7 @@ static void batThinkTarget(DBloodActor* actor)
pXSprite->goalAng += 256;
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
aiNewState(pSprite, pXSprite, &batTurn);
aiNewState(actor, &batTurn);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -162,7 +162,7 @@ static void batThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
batThinkTarget(actor);
}
@ -172,7 +172,7 @@ static void batThinkPonder(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -185,7 +185,7 @@ static void batThinkPonder(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -200,25 +200,25 @@ static void batThinkPonder(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (height2-height < 0x3000 && nDist < 0x1800 && nDist > 0xc00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batDodgeUp);
aiNewState(actor, &batDodgeUp);
else if (height2-height > 0x5000 && nDist < 0x1800 && nDist > 0xc00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batDodgeDown);
aiNewState(actor, &batDodgeDown);
else if (height2-height < 0x2000 && nDist < 0x200 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batDodgeUp);
aiNewState(actor, &batDodgeUp);
else if (height2-height > 0x6000 && nDist < 0x1400 && nDist > 0x800 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batDodgeDown);
aiNewState(actor, &batDodgeDown);
else if (height2-height < 0x2000 && nDist < 0x1400 && nDist > 0x800 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batDodgeUp);
aiNewState(actor, &batDodgeUp);
else if (height2-height < 0x2000 && klabs(nDeltaAngle) < 85 && nDist > 0x1400)
aiNewState(pSprite, pXSprite, &batDodgeUp);
aiNewState(actor, &batDodgeUp);
else if (height2-height > 0x4000)
aiNewState(pSprite, pXSprite, &batDodgeDown);
aiNewState(actor, &batDodgeDown);
else
aiNewState(pSprite, pXSprite, &batDodgeUp);
aiNewState(actor, &batDodgeUp);
return;
}
}
aiNewState(pSprite, pXSprite, &batGoto);
aiNewState(actor, &batGoto);
pXSprite->target = -1;
}
@ -280,7 +280,7 @@ static void batThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &batGoto);
aiNewState(actor, &batGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -293,12 +293,12 @@ static void batThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type - kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &batSearch);
aiNewState(actor, &batSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -317,23 +317,23 @@ static void batThinkChase(DBloodActor* actor)
aiSetTarget(pXSprite, pXSprite->target);
int floorZ = getflorzofslope(pSprite->sectnum, pSprite->x, pSprite->y);
if (height2-height < 0x2000 && nDist < 0x200 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batBite);
aiNewState(actor, &batBite);
else if ((height2-height > 0x5000 || floorZ-bottom > 0x5000) && nDist < 0x1400 && nDist > 0x800 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batSwoop);
aiNewState(actor, &batSwoop);
else if ((height2-height < 0x3000 || floorZ-bottom < 0x3000) && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &batFly);
aiNewState(actor, &batFly);
return;
}
}
else
{
aiNewState(pSprite, pXSprite, &batFly);
aiNewState(actor, &batFly);
return;
}
}
pXSprite->target = -1;
aiNewState(pSprite, pXSprite, &batHide);
aiNewState(actor, &batHide);
}
static void batMoveForward(DBloodActor* actor)
@ -446,7 +446,7 @@ void batMoveToCeil(DBloodActor* actor)
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1;
pDudeExtraE->xval3 = 0;
pSprite->flags = 0;
aiNewState(pSprite, pXSprite, &batIdle);
aiNewState(actor, &batIdle);
}
else
aiSetTarget(pXSprite, x, y, sector[nSector].ceilingz);

View file

@ -223,9 +223,9 @@ static void beastThinkGoto(DBloodActor* actor)
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
else
aiNewState(pSprite, pXSprite, &beastSearch);
aiNewState(actor, &beastSearch);
}
aiThinkTarget(actor);
}
@ -243,9 +243,9 @@ static void beastThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
else
aiNewState(pSprite, pXSprite, &beastSearch);
aiNewState(actor, &beastSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -265,9 +265,9 @@ static void beastThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
else
aiNewState(pSprite, pXSprite, &beastSearch);
aiNewState(actor, &beastSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
@ -279,9 +279,9 @@ static void beastThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
else
aiNewState(pSprite, pXSprite, &beastSearch);
aiNewState(actor, &beastSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -312,25 +312,25 @@ static void beastThinkChase(DBloodActor* actor)
{
case -1:
if (!pXSector || !pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastStomp);
aiNewState(actor, &beastStomp);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
{
if (!pXSector || !pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastStomp);
aiNewState(actor, &beastStomp);
}
else
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimDodge);
aiNewState(actor, &beastSwimDodge);
else
aiNewState(pSprite, pXSprite, &beastDodge);
aiNewState(actor, &beastDodge);
}
break;
default:
if (!pXSector || !pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastStomp);
aiNewState(actor, &beastStomp);
break;
}
}
@ -348,31 +348,31 @@ static void beastThinkChase(DBloodActor* actor)
{
case -1:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSlash);
aiNewState(actor, &beastSwimSlash);
else
aiNewState(pSprite, pXSprite, &beastSlash);
aiNewState(actor, &beastSlash);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSlash);
aiNewState(actor, &beastSwimSlash);
else
aiNewState(pSprite, pXSprite, &beastSlash);
aiNewState(actor, &beastSlash);
}
else
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimDodge);
aiNewState(actor, &beastSwimDodge);
else
aiNewState(pSprite, pXSprite, &beastDodge);
aiNewState(actor, &beastDodge);
}
break;
default:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimSlash);
aiNewState(actor, &beastSwimSlash);
else
aiNewState(pSprite, pXSprite, &beastSlash);
aiNewState(actor, &beastSlash);
break;
}
}
@ -388,9 +388,9 @@ static void beastThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &beastSwimGoto);
aiNewState(actor, &beastSwimGoto);
else
aiNewState(pSprite, pXSprite, &beastGoto);
aiNewState(actor, &beastGoto);
pXSprite->target = -1;
}
@ -406,7 +406,7 @@ static void beastThinkSwimGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
aiThinkTarget(actor);
}
@ -416,7 +416,7 @@ static void beastThinkSwimChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &beastSwimGoto);
aiNewState(actor, &beastSwimGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -429,12 +429,12 @@ static void beastThinkSwimChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &beastSwimSearch);
aiNewState(actor, &beastSwimSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -450,19 +450,19 @@ static void beastThinkSwimChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x400 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &beastSwimSlash);
aiNewState(actor, &beastSwimSlash);
else
{
aiPlay3DSound(pSprite, 9009+Random(2), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &beast138FD0);
aiNewState(actor, &beast138FD0);
}
}
}
else
aiNewState(pSprite, pXSprite, &beast138FD0);
aiNewState(actor, &beast138FD0);
return;
}
aiNewState(pSprite, pXSprite, &beastSwimGoto);
aiNewState(actor, &beastSwimGoto);
pXSprite->target = -1;
}

View file

@ -76,6 +76,7 @@ AISTATE eelDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeDown, NU
void eelBiteSeqCallback(int, int nXSprite)
{
XSPRITE *pXSprite = &xsprite[nXSprite];
auto actor = &bloodActors[pXSprite->reference];
spritetype *pSprite = &sprite[pXSprite->reference];
spritetype *pTarget = &sprite[pXSprite->target];
int dx = CosScale16(pSprite->ang);
@ -94,7 +95,7 @@ void eelBiteSeqCallback(int, int nXSprite)
*/
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
return;
}
assert(pXSprite->target >= 0 && pXSprite->target < kMaxSprites);
@ -116,7 +117,7 @@ static void eelThinkTarget(DBloodActor* actor)
pXSprite->goalAng += 256;
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
aiNewState(pSprite, pXSprite, &eelTurn);
aiNewState(actor, &eelTurn);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -177,7 +178,7 @@ static void eelThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
eelThinkTarget(actor);
}
@ -187,7 +188,7 @@ static void eelThinkPonder(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -200,7 +201,7 @@ static void eelThinkPonder(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -215,25 +216,25 @@ static void eelThinkPonder(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (height2-height < -0x2000 && nDist < 0x1800 && nDist > 0xc00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelDodgeUp);
aiNewState(actor, &eelDodgeUp);
else if (height2-height > 0xccc && nDist < 0x1800 && nDist > 0xc00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelDodgeDown);
aiNewState(actor, &eelDodgeDown);
else if (height2-height < 0xccc && nDist < 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelDodgeUp);
aiNewState(actor, &eelDodgeUp);
else if (height2-height > 0xccc && nDist < 0x1400 && nDist > 0x800 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelDodgeDown);
aiNewState(actor, &eelDodgeDown);
else if (height2-height < -0x2000 && nDist < 0x1400 && nDist > 0x800 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelDodgeUp);
aiNewState(actor, &eelDodgeUp);
else if (height2-height < -0x2000 && klabs(nDeltaAngle) < 85 && nDist > 0x1400)
aiNewState(pSprite, pXSprite, &eelDodgeUp);
aiNewState(actor, &eelDodgeUp);
else if (height2-height > 0xccc)
aiNewState(pSprite, pXSprite, &eelDodgeDown);
aiNewState(actor, &eelDodgeDown);
else
aiNewState(pSprite, pXSprite, &eelDodgeUp);
aiNewState(actor, &eelDodgeUp);
return;
}
}
aiNewState(pSprite, pXSprite, &eelGoto);
aiNewState(actor, &eelGoto);
pXSprite->target = -1;
}
@ -295,7 +296,7 @@ static void eelThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &eelGoto);
aiNewState(actor, &eelGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -308,12 +309,12 @@ static void eelThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -331,20 +332,20 @@ static void eelThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x399 && top2 > top && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelSwoop);
aiNewState(actor, &eelSwoop);
else if (nDist <= 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelBite);
aiNewState(actor, &eelBite);
else if (bottom2 > top && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelSwoop);
aiNewState(actor, &eelSwoop);
else if (top2 < top && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &eelFly);
aiNewState(actor, &eelFly);
}
}
return;
}
pXSprite->target = -1;
aiNewState(pSprite, pXSprite, &eelSearch);
aiNewState(actor, &eelSearch);
}
static void eelMoveForward(DBloodActor* actor)
@ -451,7 +452,7 @@ void eelMoveToCeil(DBloodActor* actor)
DUDEEXTRA_at6_u1 *pDudeExtraE = &gDudeExtra[pSprite->extra].at6.u1;
pDudeExtraE->xval3 = 0;
pSprite->flags = 0;
aiNewState(pSprite, pXSprite, &eelIdle);
aiNewState(actor, &eelIdle);
}
else
aiSetTarget(pXSprite, x, y, sector[nSector].ceilingz);

View file

@ -113,26 +113,26 @@ static void burnThinkGoto(DBloodActor* actor)
switch (pSprite->type)
{
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnSearch);
aiNewState(actor, &cultistBurnSearch);
break;
case kDudeBurningZombieAxe:
aiNewState(pSprite, pXSprite, &zombieABurnSearch);
aiNewState(actor, &zombieABurnSearch);
break;
case kDudeBurningZombieButcher:
aiNewState(pSprite, pXSprite, &zombieFBurnSearch);
aiNewState(actor, &zombieFBurnSearch);
break;
case kDudeBurningInnocent:
aiNewState(pSprite, pXSprite, &innocentBurnSearch);
aiNewState(actor, &innocentBurnSearch);
break;
case kDudeBurningBeast:
aiNewState(pSprite, pXSprite, &beastBurnSearch);
aiNewState(actor, &beastBurnSearch);
break;
case kDudeBurningTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebBurnSearch);
aiNewState(actor, &tinycalebBurnSearch);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(pSprite, pXSprite, &genDudeBurnSearch);
aiNewState(actor, &genDudeBurnSearch);
break;
#endif
}
@ -149,26 +149,26 @@ static void burnThinkChase(DBloodActor* actor)
switch (pSprite->type)
{
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
break;
case kDudeBurningZombieAxe:
aiNewState(pSprite, pXSprite, &zombieABurnGoto);
aiNewState(actor, &zombieABurnGoto);
break;
case kDudeBurningZombieButcher:
aiNewState(pSprite, pXSprite, &zombieFBurnGoto);
aiNewState(actor, &zombieFBurnGoto);
break;
case kDudeBurningInnocent:
aiNewState(pSprite, pXSprite, &innocentBurnGoto);
aiNewState(actor, &innocentBurnGoto);
break;
case kDudeBurningBeast:
aiNewState(pSprite, pXSprite, &beastBurnGoto);
aiNewState(actor, &beastBurnGoto);
break;
case kDudeBurningTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebBurnGoto);
aiNewState(actor, &tinycalebBurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(pSprite, pXSprite, &genDudeBurnGoto);
aiNewState(actor, &genDudeBurnGoto);
break;
#endif
}
@ -187,26 +187,26 @@ static void burnThinkChase(DBloodActor* actor)
switch (pSprite->type)
{
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnSearch);
aiNewState(actor, &cultistBurnSearch);
break;
case kDudeBurningZombieAxe:
aiNewState(pSprite, pXSprite, &zombieABurnSearch);
aiNewState(actor, &zombieABurnSearch);
break;
case kDudeBurningZombieButcher:
aiNewState(pSprite, pXSprite, &zombieFBurnSearch);
aiNewState(actor, &zombieFBurnSearch);
break;
case kDudeBurningInnocent:
aiNewState(pSprite, pXSprite, &innocentBurnSearch);
aiNewState(actor, &innocentBurnSearch);
break;
case kDudeBurningBeast:
aiNewState(pSprite, pXSprite, &beastBurnSearch);
aiNewState(actor, &beastBurnSearch);
break;
case kDudeBurningTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebBurnSearch);
aiNewState(actor, &tinycalebBurnSearch);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(pSprite, pXSprite, &genDudeBurnSearch);
aiNewState(actor, &genDudeBurnSearch);
break;
#endif
}
@ -227,26 +227,26 @@ static void burnThinkChase(DBloodActor* actor)
switch (pSprite->type)
{
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnAttack);
aiNewState(actor, &cultistBurnAttack);
break;
case kDudeBurningZombieAxe:
aiNewState(pSprite, pXSprite, &zombieABurnAttack);
aiNewState(actor, &zombieABurnAttack);
break;
case kDudeBurningZombieButcher:
aiNewState(pSprite, pXSprite, &zombieFBurnAttack);
aiNewState(actor, &zombieFBurnAttack);
break;
case kDudeBurningInnocent:
aiNewState(pSprite, pXSprite, &innocentBurnAttack);
aiNewState(actor, &innocentBurnAttack);
break;
case kDudeBurningBeast:
aiNewState(pSprite, pXSprite, &beastBurnAttack);
aiNewState(actor, &beastBurnAttack);
break;
case kDudeBurningTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebBurnAttack);
aiNewState(actor, &tinycalebBurnAttack);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(pSprite, pXSprite, &genDudeBurnSearch);
aiNewState(actor, &genDudeBurnSearch);
break;
#endif
}
@ -259,26 +259,26 @@ static void burnThinkChase(DBloodActor* actor)
switch (pSprite->type)
{
case kDudeBurningCultist:
aiNewState(pSprite, pXSprite, &cultistBurnGoto);
aiNewState(actor, &cultistBurnGoto);
break;
case kDudeBurningZombieAxe:
aiNewState(pSprite, pXSprite, &zombieABurnGoto);
aiNewState(actor, &zombieABurnGoto);
break;
case 242:
aiNewState(pSprite, pXSprite, &zombieFBurnGoto);
aiNewState(actor, &zombieFBurnGoto);
break;
case kDudeBurningInnocent:
aiNewState(pSprite, pXSprite, &innocentBurnGoto);
aiNewState(actor, &innocentBurnGoto);
break;
case kDudeBurningBeast:
aiNewState(pSprite, pXSprite, &beastBurnGoto);
aiNewState(actor, &beastBurnGoto);
break;
case kDudeBurningTinyCaleb:
aiNewState(pSprite, pXSprite, &tinycalebBurnGoto);
aiNewState(actor, &tinycalebBurnGoto);
break;
#ifdef NOONE_EXTENSIONS
case kDudeModernCustomBurning:
aiNewState(pSprite, pXSprite, &genDudeBurnSearch);
aiNewState(actor, &genDudeBurnSearch);
break;
#endif
}

View file

@ -123,9 +123,9 @@ static void calebThinkGoto(DBloodActor* actor)
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
else
aiNewState(pSprite, pXSprite, &tinycalebSearch);
aiNewState(actor, &tinycalebSearch);
}
aiThinkTarget(actor);
}
@ -143,9 +143,9 @@ static void calebThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
else
aiNewState(pSprite, pXSprite, &tinycalebSearch);
aiNewState(actor, &tinycalebSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -165,11 +165,11 @@ static void calebThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
else
{
aiPlay3DSound(pSprite, 11000+Random(4), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &tinycalebSearch);
aiNewState(actor, &tinycalebSearch);
}
return;
}
@ -182,9 +182,9 @@ static void calebThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
else
aiNewState(pSprite, pXSprite, &tinycalebSearch);
aiNewState(actor, &tinycalebSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -212,31 +212,31 @@ static void calebThinkChase(DBloodActor* actor)
{
case -1:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimAttack);
aiNewState(actor, &tinycalebSwimAttack);
else
aiNewState(pSprite, pXSprite, &tinycalebAttack);
aiNewState(actor, &tinycalebAttack);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimAttack);
aiNewState(actor, &tinycalebSwimAttack);
else
aiNewState(pSprite, pXSprite, &tinycalebAttack);
aiNewState(actor, &tinycalebAttack);
}
else
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimDodge);
aiNewState(actor, &tinycalebSwimDodge);
else
aiNewState(pSprite, pXSprite, &tinycalebDodge);
aiNewState(actor, &tinycalebDodge);
}
break;
default:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimAttack);
aiNewState(actor, &tinycalebSwimAttack);
else
aiNewState(pSprite, pXSprite, &tinycalebAttack);
aiNewState(actor, &tinycalebAttack);
break;
}
}
@ -252,9 +252,9 @@ static void calebThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &tinycalebSwimGoto);
aiNewState(actor, &tinycalebSwimGoto);
else
aiNewState(pSprite, pXSprite, &tinycalebGoto);
aiNewState(actor, &tinycalebGoto);
if (Chance(0x2000))
sfxPlay3DSound(pSprite, 10000 + Random(5), -1, 0);
pXSprite->target = -1;
@ -272,7 +272,7 @@ static void calebThinkSwimGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
aiThinkTarget(actor);
}
@ -282,7 +282,7 @@ static void calebThinkSwimChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &tinycalebSwimGoto);
aiNewState(actor, &tinycalebSwimGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -295,12 +295,12 @@ static void calebThinkSwimChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &tinycalebSwimSearch);
aiNewState(actor, &tinycalebSwimSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -316,14 +316,14 @@ static void calebThinkSwimChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x400 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &tinycalebSwimAttack);
aiNewState(actor, &tinycalebSwimAttack);
else
aiNewState(pSprite, pXSprite, &tinycaleb13967C);
aiNewState(actor, &tinycaleb13967C);
}
}
return;
}
aiNewState(pSprite, pXSprite, &tinycalebSwimGoto);
aiNewState(actor, &tinycalebSwimGoto);
pXSprite->target = -1;
}

View file

@ -290,9 +290,9 @@ static void cerberusThinkTarget(DBloodActor* actor)
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
if (pSprite->type == kDudeCerberusTwoHead)
aiNewState(pSprite, pXSprite, &cerberus139890);
aiNewState(actor, &cerberus139890);
else
aiNewState(pSprite, pXSprite, &cerberus1398AC);
aiNewState(actor, &cerberus1398AC);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -352,10 +352,10 @@ static void cerberusThinkGoto(DBloodActor* actor)
{
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusSearch);
aiNewState(actor, &cerberusSearch);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Search);
aiNewState(actor, &cerberus2Search);
break;
}
}
@ -369,10 +369,10 @@ static void cerberusThinkChase(DBloodActor* actor)
if (pXSprite->target == -1) {
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusGoto);
aiNewState(actor, &cerberusGoto);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Goto);
aiNewState(actor, &cerberus2Goto);
break;
}
return;
@ -400,10 +400,10 @@ static void cerberusThinkChase(DBloodActor* actor)
if (pXTarget->health == 0) {
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusSearch);
aiNewState(actor, &cerberusSearch);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Search);
aiNewState(actor, &cerberus2Search);
break;
}
return;
@ -412,10 +412,10 @@ static void cerberusThinkChase(DBloodActor* actor)
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0) {
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusSearch);
aiNewState(actor, &cerberusSearch);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Search);
aiNewState(actor, &cerberus2Search);
break;
}
return;
@ -434,10 +434,10 @@ static void cerberusThinkChase(DBloodActor* actor)
if (nDist < 0x1b00 && nDist > 0xd00 && klabs(nDeltaAngle) < 85) {
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusBurn);
aiNewState(actor, &cerberusBurn);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Burn);
aiNewState(actor, &cerberus2Burn);
break;
}
}
@ -445,10 +445,10 @@ static void cerberusThinkChase(DBloodActor* actor)
else if (nDist < 0xb00 && nDist > 0x500 && klabs(nDeltaAngle) < 85) {
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberus3Burn);
aiNewState(actor, &cerberus3Burn);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus4Burn);
aiNewState(actor, &cerberus4Burn);
break;
}
}
@ -459,34 +459,34 @@ static void cerberusThinkChase(DBloodActor* actor)
case kDudeCerberusTwoHead:
switch (hit) {
case -1:
aiNewState(pSprite, pXSprite, &cerberusBite);
aiNewState(actor, &cerberusBite);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeHellHound)
aiNewState(pSprite, pXSprite, &cerberusBite);
aiNewState(actor, &cerberusBite);
break;
case 0:
case 4:
break;
default:
aiNewState(pSprite, pXSprite, &cerberusBite);
aiNewState(actor, &cerberusBite);
break;
}
break;
case kDudeCerberusOneHead:
switch (hit) {
case -1:
aiNewState(pSprite, pXSprite, &cerberus2Bite);
aiNewState(actor, &cerberus2Bite);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeHellHound)
aiNewState(pSprite, pXSprite, &cerberus2Bite);
aiNewState(actor, &cerberus2Bite);
break;
case 0:
case 4:
break;
default:
aiNewState(pSprite, pXSprite, &cerberus2Bite);
aiNewState(actor, &cerberus2Bite);
break;
}
break;
@ -499,10 +499,10 @@ static void cerberusThinkChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudeCerberusTwoHead:
aiNewState(pSprite, pXSprite, &cerberusGoto);
aiNewState(actor, &cerberusGoto);
break;
case kDudeCerberusOneHead:
aiNewState(pSprite, pXSprite, &cerberus2Goto);
aiNewState(actor, &cerberus2Goto);
break;
}
pXSprite->target = -1;

View file

@ -241,11 +241,11 @@ static void cultThinkGoto(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
}
@ -261,11 +261,11 @@ static void cultThinkChase(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistGoto);
aiNewState(actor, &cultistGoto);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
break;
}
return;
@ -283,7 +283,7 @@ static void cultThinkChase(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
if (pSprite->type == kDudeCultistTommy)
aiPlay3DSound(pSprite, 4021+Random(4), AI_SFX_PRIORITY_1, -1);
else
@ -291,7 +291,7 @@ static void cultThinkChase(DBloodActor* actor)
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
return;
@ -301,11 +301,11 @@ static void cultThinkChase(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistSearch);
aiNewState(actor, &cultistSearch);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimSearch);
aiNewState(actor, &cultistSwimSearch);
break;
}
return;
@ -333,17 +333,17 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTThrow);
aiNewState(actor, &cultistTThrow);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTThrow);
aiNewState(actor, &cultistTThrow);
break;
default:
aiNewState(pSprite, pXSprite, &cultistTThrow);
aiNewState(actor, &cultistTThrow);
break;
}
}
@ -354,39 +354,39 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTFire);
aiNewState(actor, &cultistTFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTProneFire);
aiNewState(actor, &cultistTProneFire);
else if (dudeIsPlayingSeq(pSprite, 13) && (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo))
aiNewState(pSprite, pXSprite, &cultistTSwimFire);
aiNewState(actor, &cultistTSwimFire);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun)
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTFire);
aiNewState(actor, &cultistTFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTProneFire);
aiNewState(actor, &cultistTProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTSwimFire);
aiNewState(actor, &cultistTSwimFire);
}
else
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistDodge);
aiNewState(actor, &cultistDodge);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistProneDodge);
aiNewState(actor, &cultistProneDodge);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSwimDodge);
aiNewState(actor, &cultistSwimDodge);
}
break;
default:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTFire);
aiNewState(actor, &cultistTFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTProneFire);
aiNewState(actor, &cultistTProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTSwimFire);
aiNewState(actor, &cultistTSwimFire);
break;
}
}
@ -401,17 +401,17 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
default:
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
}
}
@ -422,39 +422,39 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistTommy)
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
}
else
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistDodge);
aiNewState(actor, &cultistDodge);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistProneDodge);
aiNewState(actor, &cultistProneDodge);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSwimDodge);
aiNewState(actor, &cultistSwimDodge);
}
break;
default:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
break;
}
}
@ -469,17 +469,17 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTsThrow);
aiNewState(actor, &cultistTsThrow);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTsThrow);
aiNewState(actor, &cultistTsThrow);
break;
default:
aiNewState(pSprite, pXSprite, &cultistTsThrow);
aiNewState(actor, &cultistTsThrow);
break;
}
}
@ -490,39 +490,39 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsFire);
aiNewState(actor, &cultistTsFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsProneFire);
aiNewState(actor, &cultistTsProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTsSwimFire);
aiNewState(actor, &cultistTsSwimFire);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistTommy)
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsFire);
aiNewState(actor, &cultistTsFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsProneFire);
aiNewState(actor, &cultistTsProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTsSwimFire);
aiNewState(actor, &cultistTsSwimFire);
}
else
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistDodge);
aiNewState(actor, &cultistDodge);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistProneDodge);
aiNewState(actor, &cultistProneDodge);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSwimDodge);
aiNewState(actor, &cultistSwimDodge);
}
break;
default:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsFire);
aiNewState(actor, &cultistTsFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistTsProneFire);
aiNewState(actor, &cultistTsProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistTsSwimFire);
aiNewState(actor, &cultistTsSwimFire);
break;
}
}
@ -536,16 +536,16 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistDThrow);
aiNewState(actor, &cultistDThrow);
break;
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistDThrow);
aiNewState(actor, &cultistDThrow);
break;
default:
aiNewState(pSprite, pXSprite, &cultistDThrow);
aiNewState(actor, &cultistDThrow);
break;
}
}
@ -557,16 +557,16 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != 1 && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultist139A78);
aiNewState(actor, &cultist139A78);
break;
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultist139A78);
aiNewState(actor, &cultist139A78);
break;
default:
aiNewState(pSprite, pXSprite, &cultist139A78);
aiNewState(actor, &cultist139A78);
break;
}
}
@ -581,17 +581,17 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistShotgun && pXSprite->medium != kMediumWater && pXSprite->medium != kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
default:
aiNewState(pSprite, pXSprite, &cultistSThrow);
aiNewState(actor, &cultistSThrow);
break;
}
}
@ -602,39 +602,39 @@ static void cultThinkChase(DBloodActor* actor)
{
case -1:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeCultistTommy)
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
}
else
{
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistDodge);
aiNewState(actor, &cultistDodge);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistProneDodge);
aiNewState(actor, &cultistProneDodge);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSwimDodge);
aiNewState(actor, &cultistSwimDodge);
}
break;
default:
if (!dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSFire);
aiNewState(actor, &cultistSFire);
else if (dudeIsPlayingSeq(pSprite, 14) && pXSprite->medium == kMediumNormal)
aiNewState(pSprite, pXSprite, &cultistSProneFire);
aiNewState(actor, &cultistSProneFire);
else if (pXSprite->medium == kMediumWater || pXSprite->medium == kMediumGoo)
aiNewState(pSprite, pXSprite, &cultistSSwimFire);
aiNewState(actor, &cultistSSwimFire);
break;
}
}
@ -647,11 +647,11 @@ static void cultThinkChase(DBloodActor* actor)
switch (pXSprite->medium)
{
case kMediumNormal:
aiNewState(pSprite, pXSprite, &cultistGoto);
aiNewState(actor, &cultistGoto);
break;
case kMediumWater:
case kMediumGoo:
aiNewState(pSprite, pXSprite, &cultistSwimGoto);
aiNewState(actor, &cultistSwimGoto);
break;
}
pXSprite->target = -1;

View file

@ -242,7 +242,7 @@ static void gargThinkTarget(DBloodActor* actor)
pXSprite->goalAng += 256;
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
aiNewState(pSprite, pXSprite, &gargoyleTurn);
aiNewState(actor, &gargoyleTurn);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -307,7 +307,7 @@ static void gargThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &gargoyleFSearch);
aiNewState(actor, &gargoyleFSearch);
aiThinkTarget(actor);
}
@ -377,7 +377,7 @@ static void gargThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &gargoyleFGoto);
aiNewState(actor, &gargoyleFGoto);
return;
}
///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -398,12 +398,12 @@ static void gargThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &gargoyleFSearch);
aiNewState(actor, &gargoyleFSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &gargoyleFSearch);
aiNewState(actor, &gargoyleFSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -430,7 +430,7 @@ static void gargThinkChase(DBloodActor* actor)
{
case -1:
sfxPlay3DSound(pSprite, 1408, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFThrow);
aiNewState(actor, &gargoyleFThrow);
break;
case 0:
case 4:
@ -439,12 +439,12 @@ static void gargThinkChase(DBloodActor* actor)
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeGargoyleStone)
{
sfxPlay3DSound(pSprite, 1408, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFThrow);
aiNewState(actor, &gargoyleFThrow);
}
break;
default:
sfxPlay3DSound(pSprite, 1408, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFThrow);
aiNewState(actor, &gargoyleFThrow);
break;
}
}
@ -455,7 +455,7 @@ static void gargThinkChase(DBloodActor* actor)
{
case -1:
sfxPlay3DSound(pSprite, 1406, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
break;
case 0:
case 4:
@ -464,19 +464,19 @@ static void gargThinkChase(DBloodActor* actor)
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeGargoyleStone)
{
sfxPlay3DSound(pSprite, 1406, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
}
break;
default:
sfxPlay3DSound(pSprite, 1406, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
break;
}
}
else if ((height2-height > 0x2000 || floorZ-bottom > 0x2000) && nDist < 0x1400 && nDist > 0xa00)
{
aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &gargoyleSwoop);
aiNewState(actor, &gargoyleSwoop);
}
else if ((height2-height < 0x2000 || floorZ-bottom < 0x2000) && klabs(nDeltaAngle) < 85)
aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
@ -489,7 +489,7 @@ static void gargThinkChase(DBloodActor* actor)
{
case -1:
sfxPlay3DSound(pSprite, 1457, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleSBlast);
aiNewState(actor, &gargoyleSBlast);
break;
case 0:
case 4:
@ -498,12 +498,12 @@ static void gargThinkChase(DBloodActor* actor)
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeGargoyleFlesh)
{
sfxPlay3DSound(pSprite, 1457, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleSBlast);
aiNewState(actor, &gargoyleSBlast);
}
break;
default:
sfxPlay3DSound(pSprite, 1457, 0, 0);
aiNewState(pSprite, pXSprite, &gargoyleSBlast);
aiNewState(actor, &gargoyleSBlast);
break;
}
}
@ -513,17 +513,17 @@ static void gargThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudeGargoyleFlesh)
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
break;
default:
aiNewState(pSprite, pXSprite, &gargoyleFSlash);
aiNewState(actor, &gargoyleFSlash);
break;
}
}
@ -533,7 +533,7 @@ static void gargThinkChase(DBloodActor* actor)
aiPlay3DSound(pSprite, 1400, AI_SFX_PRIORITY_1, -1);
else
aiPlay3DSound(pSprite, 1450, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &gargoyleSwoop);
aiNewState(actor, &gargoyleSwoop);
}
else if ((height2-height < 0x2000 || floorZ-bottom < 0x2000) && klabs(nDeltaAngle) < 85)
aiPlay3DSound(pSprite, 1450, AI_SFX_PRIORITY_1, -1);
@ -544,12 +544,12 @@ static void gargThinkChase(DBloodActor* actor)
}
else
{
aiNewState(pSprite, pXSprite, &gargoyleFly);
aiNewState(actor, &gargoyleFly);
return;
}
}
aiNewState(pSprite, pXSprite, &gargoyleFGoto);
aiNewState(actor, &gargoyleFGoto);
pXSprite->target = -1;
}

View file

@ -218,7 +218,7 @@ static void ghostThinkTarget(DBloodActor* actor)
pXSprite->goalAng += 256;
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
aiNewState(pSprite, pXSprite, &ghostTurn);
aiNewState(actor, &ghostTurn);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -282,7 +282,7 @@ static void ghostThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &ghostSearch);
aiNewState(actor, &ghostSearch);
aiThinkTarget(actor);
}
@ -354,7 +354,7 @@ static void ghostThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &ghostGoto);
aiNewState(actor, &ghostGoto);
return;
}
///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -375,12 +375,12 @@ static void ghostThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &ghostSearch);
aiNewState(actor, &ghostSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &ghostSearch);
aiNewState(actor, &ghostSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -405,17 +405,17 @@ static void ghostThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &ghostBlast);
aiNewState(actor, &ghostBlast);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudePhantasm)
aiNewState(pSprite, pXSprite, &ghostBlast);
aiNewState(actor, &ghostBlast);
break;
default:
aiNewState(pSprite, pXSprite, &ghostBlast);
aiNewState(actor, &ghostBlast);
break;
}
}
@ -425,24 +425,24 @@ static void ghostThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &ghostSlash);
aiNewState(actor, &ghostSlash);
break;
case 0:
case 4:
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type && sprite[gHitInfo.hitsprite].type != kDudePhantasm)
aiNewState(pSprite, pXSprite, &ghostSlash);
aiNewState(actor, &ghostSlash);
break;
default:
aiNewState(pSprite, pXSprite, &ghostSlash);
aiNewState(actor, &ghostSlash);
break;
}
}
else if ((height2-height > 0x2000 || floorZ-bottom > 0x2000) && nDist < 0x1400 && nDist > 0x800)
{
aiPlay3DSound(pSprite, 1600, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &ghostSwoop);
aiNewState(actor, &ghostSwoop);
}
else if ((height2-height < 0x2000 || floorZ-bottom < 0x2000) && klabs(nDeltaAngle) < 85)
aiPlay3DSound(pSprite, 1600, AI_SFX_PRIORITY_1, -1);
@ -453,12 +453,12 @@ static void ghostThinkChase(DBloodActor* actor)
}
else
{
aiNewState(pSprite, pXSprite, &ghostFly);
aiNewState(actor, &ghostFly);
return;
}
}
aiNewState(pSprite, pXSprite, &ghostGoto);
aiNewState(actor, &ghostGoto);
pXSprite->target = -1;
}

View file

@ -115,9 +115,9 @@ static void gillThinkGoto(DBloodActor* actor)
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
else
aiNewState(pSprite, pXSprite, &gillBeastSearch);
aiNewState(actor, &gillBeastSearch);
}
aiThinkTarget(actor);
}
@ -135,9 +135,9 @@ static void gillThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
else
aiNewState(pSprite, pXSprite, &gillBeastSearch);
aiNewState(actor, &gillBeastSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -157,9 +157,9 @@ static void gillThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
else
aiNewState(pSprite, pXSprite, &gillBeastSearch);
aiNewState(actor, &gillBeastSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
@ -171,9 +171,9 @@ static void gillThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
else
aiNewState(pSprite, pXSprite, &gillBeastSearch);
aiNewState(actor, &gillBeastSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -201,31 +201,31 @@ static void gillThinkChase(DBloodActor* actor)
{
case -1:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimBite);
aiNewState(actor, &gillBeastSwimBite);
else
aiNewState(pSprite, pXSprite, &gillBeastBite);
aiNewState(actor, &gillBeastBite);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimBite);
aiNewState(actor, &gillBeastSwimBite);
else
aiNewState(pSprite, pXSprite, &gillBeastBite);
aiNewState(actor, &gillBeastBite);
}
else
{
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimDodge);
aiNewState(actor, &gillBeastSwimDodge);
else
aiNewState(pSprite, pXSprite, &gillBeastDodge);
aiNewState(actor, &gillBeastDodge);
}
break;
default:
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimBite);
aiNewState(actor, &gillBeastSwimBite);
else
aiNewState(pSprite, pXSprite, &gillBeastBite);
aiNewState(actor, &gillBeastBite);
break;
}
}
@ -241,9 +241,9 @@ static void gillThinkChase(DBloodActor* actor)
else
pXSector = NULL;
if (pXSector && pXSector->Underwater)
aiNewState(pSprite, pXSprite, &gillBeastSwimGoto);
aiNewState(actor, &gillBeastSwimGoto);
else
aiNewState(pSprite, pXSprite, &gillBeastGoto);
aiNewState(actor, &gillBeastGoto);
sfxPlay3DSound(pSprite, 1701, -1, 0);
pXSprite->target = -1;
}
@ -260,7 +260,7 @@ static void gillThinkSwimGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
aiThinkTarget(actor);
}
@ -270,7 +270,7 @@ static void gillThinkSwimChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -283,12 +283,12 @@ static void gillThinkSwimChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &gillBeastSwimSearch);
aiNewState(actor, &gillBeastSwimSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -304,19 +304,19 @@ static void gillThinkSwimChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x400 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &gillBeastSwimBite);
aiNewState(actor, &gillBeastSwimBite);
else
{
aiPlay3DSound(pSprite, 1700, AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &gillBeast13A154);
aiNewState(actor, &gillBeast13A154);
}
}
}
else
aiNewState(pSprite, pXSprite, &gillBeast13A154);
aiNewState(actor, &gillBeast13A154);
return;
}
aiNewState(pSprite, pXSprite, &gillBeastSwimGoto);
aiNewState(actor, &gillBeastSwimGoto);
pXSprite->target = -1;
}

View file

@ -92,7 +92,7 @@ static void handThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &handSearch);
aiNewState(actor, &handSearch);
aiThinkTarget(actor);
}
@ -102,7 +102,7 @@ static void handThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &handGoto);
aiNewState(actor, &handGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -115,12 +115,12 @@ static void handThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &handSearch);
aiNewState(actor, &handSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &handSearch);
aiNewState(actor, &handSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -134,13 +134,13 @@ static void handThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x233 && klabs(nDeltaAngle) < 85 && gGameOptions.nGameType == 0)
aiNewState(pSprite, pXSprite, &handJump);
aiNewState(actor, &handJump);
return;
}
}
}
aiNewState(pSprite, pXSprite, &handGoto);
aiNewState(actor, &handGoto);
pXSprite->target = -1;
}

View file

@ -119,7 +119,7 @@ static void houndThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &houndSearch);
aiNewState(actor, &houndSearch);
aiThinkTarget(actor);
}
@ -129,7 +129,7 @@ static void houndThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &houndGoto);
aiNewState(actor, &houndGoto);
return;
}
///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -150,12 +150,12 @@ static void houndThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &houndSearch);
aiNewState(actor, &houndSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &houndSearch);
aiNewState(actor, &houndSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -169,15 +169,15 @@ static void houndThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0xb00 && nDist > 0x500 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &houndBurn);
aiNewState(actor, &houndBurn);
else if(nDist < 0x266 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &houndBite);
aiNewState(actor, &houndBite);
return;
}
}
}
aiNewState(pSprite, pXSprite, &houndGoto);
aiNewState(actor, &houndGoto);
pXSprite->target = -1;
}

View file

@ -74,7 +74,7 @@ static void innocThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &innocentSearch);
aiNewState(actor, &innocentSearch);
aiThinkTarget(actor);
}
@ -84,7 +84,7 @@ static void innocThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &innocentGoto);
aiNewState(actor, &innocentGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -97,12 +97,12 @@ static void innocThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &innocentSearch);
aiNewState(actor, &innocentSearch);
return;
}
if (IsPlayerSprite(pTarget))
{
aiNewState(pSprite, pXSprite, &innocentSearch);
aiNewState(actor, &innocentSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -116,14 +116,14 @@ static void innocThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x666 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &innocentIdle);
aiNewState(actor, &innocentIdle);
return;
}
}
}
aiPlay3DSound(pSprite, 7000+Random(6), AI_SFX_PRIORITY_1, -1);
aiNewState(pSprite, pXSprite, &innocentGoto);
aiNewState(actor, &innocentGoto);
pXSprite->target = -1;
}

View file

@ -189,11 +189,11 @@ static void aiPodMove(DBloodActor* actor)
switch (pSprite->type) {
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podSearch);
aiNewState(actor, &podSearch);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleSearch);
aiNewState(actor, &tentacleSearch);
break;
}
}
@ -208,11 +208,11 @@ static void aiPodChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podMove);
aiNewState(actor, &podMove);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleMove);
aiNewState(actor, &tentacleMove);
break;
}
return;
@ -238,11 +238,11 @@ static void aiPodChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podSearch);
aiNewState(actor, &podSearch);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleSearch);
aiNewState(actor, &tentacleSearch);
break;
}
return;
@ -261,11 +261,11 @@ static void aiPodChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podStartChase);
aiNewState(actor, &podStartChase);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleStartChase);
aiNewState(actor, &tentacleStartChase);
break;
}
}
@ -277,11 +277,11 @@ static void aiPodChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudePodGreen:
case kDudePodFire:
aiNewState(pSprite, pXSprite, &podMove);
aiNewState(actor, &podMove);
break;
case kDudeTentacleGreen:
case kDudeTentacleFire:
aiNewState(pSprite, pXSprite, &tentacleMove);
aiNewState(actor, &tentacleMove);
break;
}
pXSprite->target = -1;

View file

@ -89,7 +89,7 @@ static void ratThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &ratSearch);
aiNewState(actor, &ratSearch);
aiThinkTarget(actor);
}
@ -99,7 +99,7 @@ static void ratThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &ratGoto);
aiNewState(actor, &ratGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -112,12 +112,12 @@ static void ratThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &ratSearch);
aiNewState(actor, &ratSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &ratSearch);
aiNewState(actor, &ratSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -131,13 +131,13 @@ static void ratThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &ratBite);
aiNewState(actor, &ratBite);
return;
}
}
}
aiNewState(pSprite, pXSprite, &ratGoto);
aiNewState(actor, &ratGoto);
pXSprite->target = -1;
}

View file

@ -211,7 +211,7 @@ static void spidThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &spidSearch);
aiNewState(actor, &spidSearch);
aiThinkTarget(actor);
}
@ -221,7 +221,7 @@ static void spidThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &spidGoto);
aiNewState(actor, &spidGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -234,12 +234,12 @@ static void spidThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &spidSearch);
aiNewState(actor, &spidSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &spidSearch);
aiNewState(actor, &spidSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -253,20 +253,20 @@ static void spidThinkChase(DBloodActor* actor)
switch (pSprite->type) {
case kDudeSpiderRed:
if (nDist < 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &spidBite);
aiNewState(actor, &spidBite);
break;
case kDudeSpiderBrown:
case kDudeSpiderBlack:
if (nDist < 0x733 && nDist > 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &spidJump);
aiNewState(actor, &spidJump);
else if (nDist < 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &spidBite);
aiNewState(actor, &spidBite);
break;
case kDudeSpiderMother:
if (nDist < 0x733 && nDist > 0x399 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &spidJump);
aiNewState(actor, &spidJump);
else if (Chance(0x8000))
aiNewState(pSprite, pXSprite, &spid13A92C);
aiNewState(actor, &spid13A92C);
break;
}
@ -275,7 +275,7 @@ static void spidThinkChase(DBloodActor* actor)
}
}
aiNewState(pSprite, pXSprite, &spidGoto);
aiNewState(actor, &spidGoto);
pXSprite->target = -1;
}

View file

@ -63,6 +63,7 @@ AISTATE tcherno13AA28 = { kAiStateChase, 8, -1, 60, NULL, aiMoveTurn, NULL, &tch
void sub_71A90(int, int nXSprite)
{
XSPRITE *pXSprite = &xsprite[nXSprite];
auto actor = &bloodActors[pXSprite->reference];
int nSprite = pXSprite->reference;
spritetype *pSprite = &sprite[nSprite];
spritetype *pTarget = &sprite[pXSprite->target];
@ -73,7 +74,7 @@ void sub_71A90(int, int nXSprite)
evPost(nTarget, 3, 0, kCallbackFXFlameLick);
actBurnSprite(nOwner, pXTarget, 40);
if (Chance(0x6000))
aiNewState(pSprite, pXSprite, &tcherno13A9D4);
aiNewState(actor, &tcherno13A9D4);
}
void sub_71BD4(int, int nXSprite)
@ -258,7 +259,7 @@ static void sub_725A4(DBloodActor* actor)
pXSprite->goalAng += 256;
POINT3D *pTarget = &baseSprite[pSprite->index];
aiSetTarget(pXSprite, pTarget->x, pTarget->y, pTarget->z);
aiNewState(pSprite, pXSprite, &tcherno13AA28);
aiNewState(actor, &tcherno13AA28);
return;
}
if (Chance(pDudeInfo->alertChance))
@ -315,7 +316,7 @@ static void sub_72850(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &tchernobogSearch);
aiNewState(actor, &tchernobogSearch);
aiThinkTarget(actor);
}
@ -325,7 +326,7 @@ static void sub_72934(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &tcherno13A9B8);
aiNewState(actor, &tcherno13A9B8);
return;
}
///assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -346,12 +347,12 @@ static void sub_72934(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &tchernobogSearch);
aiNewState(actor, &tchernobogSearch);
return;
}
if (IsPlayerSprite(pTarget) && powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0)
{
aiNewState(pSprite, pXSprite, &tchernobogSearch);
aiNewState(actor, &tchernobogSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -365,17 +366,17 @@ static void sub_72934(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x1f00 && nDist > 0xd00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &tcherno13AA0C);
aiNewState(actor, &tcherno13AA0C);
else if (nDist < 0xd00 && nDist > 0xb00 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &tcherno13A9D4);
aiNewState(actor, &tcherno13A9D4);
else if (nDist < 0xb00 && nDist > 0x500 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &tcherno13A9F0);
aiNewState(actor, &tcherno13A9F0);
return;
}
}
}
aiNewState(pSprite, pXSprite, &tcherno13A9B8);
aiNewState(actor, &tcherno13A9B8);
pXSprite->target = -1;
}

View file

@ -120,7 +120,7 @@ static void zombaThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 921 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
aiThinkTarget(actor);
}
@ -130,7 +130,7 @@ static void zombaThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -143,12 +143,12 @@ static void zombaThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
return;
}
if (IsPlayerSprite(pTarget) && (powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0 || powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpDeathMaskUseless) > 0))
{
aiNewState(pSprite, pXSprite, &zombieAGoto);
aiNewState(actor, &zombieAGoto);
return;
}
// If the zombie gets whacked while rising from the grave it never executes this change and if it isn't done here at the very latest, will just aimlessly run around.
@ -166,13 +166,13 @@ static void zombaThinkChase(DBloodActor* actor)
{
aiSetTarget(pXSprite, pXSprite->target);
if (nDist < 0x400 && klabs(nDeltaAngle) < 85)
aiNewState(pSprite, pXSprite, &zombieAHack);
aiNewState(actor, &zombieAHack);
return;
}
}
}
aiNewState(pSprite, pXSprite, &zombieAGoto);
aiNewState(actor, &zombieAGoto);
pXSprite->target = -1;
}
@ -182,7 +182,7 @@ static void zombaThinkPonder(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -195,12 +195,12 @@ static void zombaThinkPonder(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &zombieASearch);
aiNewState(actor, &zombieASearch);
return;
}
if (IsPlayerSprite(pTarget) && (powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0 || powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpDeathMaskUseless) > 0))
{
aiNewState(pSprite, pXSprite, &zombieAGoto);
aiNewState(actor, &zombieAGoto);
return;
}
int nDist = approxDist(dx, dy);
@ -218,7 +218,7 @@ static void zombaThinkPonder(DBloodActor* actor)
if (klabs(nDeltaAngle) < 85)
{
sfxPlay3DSound(pSprite, 1101, 1, 0);
aiNewState(pSprite, pXSprite, &zombieAHack);
aiNewState(actor, &zombieAHack);
}
return;
}
@ -226,7 +226,7 @@ static void zombaThinkPonder(DBloodActor* actor)
}
}
aiNewState(pSprite, pXSprite, &zombieAChase);
aiNewState(actor, &zombieAChase);
}
static void myThinkTarget(DBloodActor* actor)

View file

@ -125,7 +125,7 @@ static void zombfThinkGoto(DBloodActor* actor)
int nDist = approxDist(dx, dy);
aiChooseDirection(pSprite, pXSprite, nAngle);
if (nDist < 512 && klabs(pSprite->ang - nAngle) < pDudeInfo->periphery)
aiNewState(pSprite, pXSprite, &zombieFSearch);
aiNewState(actor, &zombieFSearch);
aiThinkTarget(actor);
}
@ -135,7 +135,7 @@ static void zombfThinkChase(DBloodActor* actor)
auto pSprite = &actor->s();
if (pXSprite->target == -1)
{
aiNewState(pSprite, pXSprite, &zombieFGoto);
aiNewState(actor, &zombieFGoto);
return;
}
assert(pSprite->type >= kDudeBase && pSprite->type < kDudeMax);
@ -148,12 +148,12 @@ static void zombfThinkChase(DBloodActor* actor)
aiChooseDirection(pSprite, pXSprite, getangle(dx, dy));
if (pXTarget->health == 0)
{
aiNewState(pSprite, pXSprite, &zombieFSearch);
aiNewState(actor, &zombieFSearch);
return;
}
if (IsPlayerSprite(pTarget) && (powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpShadowCloak) > 0 || powerupCheck(&gPlayer[pTarget->type-kDudePlayer1], kPwUpDeathMaskUseless) > 0))
{
aiNewState(pSprite, pXSprite, &zombieFSearch);
aiNewState(actor, &zombieFSearch);
return;
}
int nDist = approxDist(dx, dy);
@ -172,16 +172,16 @@ static void zombfThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &zombieFThrow);
aiNewState(actor, &zombieFThrow);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
aiNewState(pSprite, pXSprite, &zombieFThrow);
aiNewState(actor, &zombieFThrow);
else
aiNewState(pSprite, pXSprite, &zombieFDodge);
aiNewState(actor, &zombieFDodge);
break;
default:
aiNewState(pSprite, pXSprite, &zombieFThrow);
aiNewState(actor, &zombieFThrow);
break;
}
}
@ -191,16 +191,16 @@ static void zombfThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &zombieFPuke);
aiNewState(actor, &zombieFPuke);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
aiNewState(pSprite, pXSprite, &zombieFPuke);
aiNewState(actor, &zombieFPuke);
else
aiNewState(pSprite, pXSprite, &zombieFDodge);
aiNewState(actor, &zombieFDodge);
break;
default:
aiNewState(pSprite, pXSprite, &zombieFPuke);
aiNewState(actor, &zombieFPuke);
break;
}
}
@ -210,16 +210,16 @@ static void zombfThinkChase(DBloodActor* actor)
switch (hit)
{
case -1:
aiNewState(pSprite, pXSprite, &zombieFHack);
aiNewState(actor, &zombieFHack);
break;
case 3:
if (pSprite->type != sprite[gHitInfo.hitsprite].type)
aiNewState(pSprite, pXSprite, &zombieFHack);
aiNewState(actor, &zombieFHack);
else
aiNewState(pSprite, pXSprite, &zombieFDodge);
aiNewState(actor, &zombieFDodge);
break;
default:
aiNewState(pSprite, pXSprite, &zombieFHack);
aiNewState(actor, &zombieFHack);
break;
}
}
@ -228,7 +228,7 @@ static void zombfThinkChase(DBloodActor* actor)
}
}
aiNewState(pSprite, pXSprite, &zombieFSearch);
aiNewState(actor, &zombieFSearch);
pXSprite->target = -1;
}

View file

@ -1268,14 +1268,16 @@ bool ceilIsTooLow(spritetype* pSprite) {
return false;
}
void aiSetGenIdleState(spritetype* pSprite, XSPRITE* pXSprite) {
void aiSetGenIdleState(spritetype* pSprite, XSPRITE* pXSprite)
{
auto actor = &bloodActors[pXSprite->reference];
switch (pSprite->type) {
case kDudeModernCustom:
case kDudeModernCustomBurning:
aiGenDudeNewState(pSprite, &genIdle);
break;
default:
aiNewState(pSprite, pXSprite, &genIdle);
aiNewState(actor, &genIdle);
break;
}
}