refactored SEQ callbacks as well.

This commit is contained in:
Christoph Oelckers 2023-10-05 16:51:19 +02:00
parent 11f094c7fb
commit 2c08ee0c5d
37 changed files with 517 additions and 756 deletions

View file

@ -1914,7 +1914,7 @@ static void actNapalmMove(DBloodActor* actor)
actor->spr.Angles.Yaw = (ang + rndang).Normalized360();
auto spawned = actFireThing(actor, 0., 0., -0.5774, kThingNapalmBall, t1);
spawned->SetOwner(actor->GetOwner());
seqSpawn(61, spawned, nNapalmClient);
seqSpawn(61, spawned, AF(NapalmSeqCallback));
spawned->xspr.data4 = spawnparam[i];
}
}
@ -1957,7 +1957,7 @@ static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
break;
#endif
case kDudeCerberusTwoHead: // Cerberus
seqSpawn(getDudeInfo(actor)->seqStartID + 1, actor, -1);
seqSpawn(getDudeInfo(actor)->seqStartID + 1, actor, nullptr);
return true;
case kDudeCultistTommy:
@ -2184,12 +2184,12 @@ static void zombieAxeNormalDeath(DBloodActor* actor, int nSeq)
sfxPlay3DSound(actor, 1107 + Random(2), -1, 0);
if (nSeq == 2)
{
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, AF(DudeToGibCallback1));
spawnGibs(actor, GIBTYPE_27, -0xccccc);
}
else if (nSeq == 1 && Chance(0x4000))
{
seqSpawn(pDudeInfo->seqStartID + 7, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 7, actor, AF(DudeToGibCallback1));
evPostActor(actor, 0, AF(fxZombieBloodSpurt));
sfxPlay3DSound(actor, 362, -1, 0);
actor->xspr.data1 = 35;
@ -2197,9 +2197,9 @@ static void zombieAxeNormalDeath(DBloodActor* actor, int nSeq)
spawnGibs(actor, GIBTYPE_27, -0x111111);
}
else if (nSeq == 14)seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
else if (nSeq == 3) seqSpawn(pDudeInfo->seqStartID + 13, actor, nDudeToGibClient2);
else seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nDudeToGibClient1);
else if (nSeq == 14)seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nullptr);
else if (nSeq == 3) seqSpawn(pDudeInfo->seqStartID + 13, actor, AF(DudeToGibCallback2));
else seqSpawn(pDudeInfo->seqStartID + nSeq, actor, AF(DudeToGibCallback1));
}
//---------------------------------------------------------------------------
@ -2218,10 +2218,10 @@ static void burningCultistDeath(DBloodActor* actor, int nSeq)
{
for (int i = 0; i < 3; i++)
GibSprite(actor, GIBTYPE_7, nullptr, nullptr);
seqSpawn(pDudeInfo->seqStartID + 16 - Random(1), actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 16 - Random(1), actor, AF(DudeToGibCallback1));
}
else
seqSpawn(pDudeInfo->seqStartID + 15, actor, nDudeToGibClient2);
seqSpawn(pDudeInfo->seqStartID + 15, actor, AF(DudeToGibCallback2));
}
//---------------------------------------------------------------------------
@ -2241,11 +2241,11 @@ void zombieAxeBurningDeath(DBloodActor* actor, int nSeq)
if (Chance(0x8000))
{
seqSpawn(pDudeInfo->seqStartID + 13, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 13, actor, AF(DudeToGibCallback1));
spawnGibs(actor, GIBTYPE_27, -0xccccc);
}
else
seqSpawn(pDudeInfo->seqStartID + 13, actor, nDudeToGibClient2);
seqSpawn(pDudeInfo->seqStartID + 13, actor, AF(DudeToGibCallback2));
}
//---------------------------------------------------------------------------
@ -2261,14 +2261,14 @@ static void zombieButcherDeath(DBloodActor* actor, int nSeq)
if (nSeq == 14)
{
sfxPlay3DSound(actor, 1206, -1, 0);
seqSpawn(pDudeInfo->seqStartID + 11, actor, -1);
seqSpawn(pDudeInfo->seqStartID + 11, actor);
return;
}
sfxPlay3DSound(actor, 1204 + Random(2), -1, 0);
if (nSeq == 3)
seqSpawn(pDudeInfo->seqStartID + 10, actor, -1);
seqSpawn(pDudeInfo->seqStartID + 10, actor);
else
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
}
//---------------------------------------------------------------------------
@ -2281,7 +2281,7 @@ static void genericDeath(DBloodActor* actor, int nSeq, int sound1, int seqnum)
{
if (Chance(0x4000) && nSeq == 3) sfxPlay3DSound(actor, sound1 + 2, -1, 0);
else sfxPlay3DSound(actor, sound1 + Random(2), -1, 0);
seqSpawn(seqnum, actor, -1);
seqSpawn(seqnum, actor);
}
//---------------------------------------------------------------------------
@ -2331,7 +2331,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
case kDudeCultistTesla:
case kDudeCultistTNT:
sfxPlay3DSound(actor, 1018 + Random(2), -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nSeq == 3 ? nDudeToGibClient2 : nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
break;
case kDudeBurningCultist:
@ -2362,7 +2362,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
case kDudeBurningInnocent:
damageType = kDamageExplode;
seqSpawn(pDudeInfo->seqStartID + 7, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 7, actor, AF(DudeToGibCallback1));
break;
case kDudeZombieButcher:
@ -2406,7 +2406,7 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
case kDudeSpiderMother:
sfxPlay3DSound(actor, 1850, -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
case kDudeGillBeast:
@ -2437,15 +2437,15 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
break;
case kDudeTentacleGreen:
sfxPlay3DSound(actor, damage == 5 ? 2471 : 2472, -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
case kDudePodFire:
sfxPlay3DSound(actor, damage == 5 ? 2451 : 2452, -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
case kDudeTentacleFire:
sfxPlay3DSound(actor, 2501, -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
}
break;
@ -2462,26 +2462,26 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
case kDudeTchernobog:
sfxPlay3DSound(actor, 2380, -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
case kDudeBurningTinyCaleb:
damageType = kDamageExplode;
seqSpawn(pDudeInfo->seqStartID + 11, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 11, actor, AF(DudeToGibCallback1));
break;
case kDudeBeast:
sfxPlay3DSound(actor, 9000 + Random(2), -1, 0);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nSeq == 3 ? nDudeToGibClient2 : nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, nSeq == 3 ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
break;
case kDudeBurningBeast:
damageType = kDamageExplode;
seqSpawn(pDudeInfo->seqStartID + 12, actor, nDudeToGibClient1);
seqSpawn(pDudeInfo->seqStartID + 12, actor, AF(DudeToGibCallback1));
break;
default:
seqSpawn(pDudeInfo->seqStartID + nSeq, actor, -1);
seqSpawn(pDudeInfo->seqStartID + nSeq, actor);
break;
}
@ -2598,20 +2598,20 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
}
break;
case kTrapMachinegun:
seqSpawn(28, actor, -1);
seqSpawn(28, actor);
break;
case kThingFluorescent:
seqSpawn(12, actor, -1);
seqSpawn(12, actor);
GibSprite(actor, GIBTYPE_6, nullptr, nullptr);
break;
case kThingSpiderWeb:
seqSpawn(15, actor, -1);
seqSpawn(15, actor);
break;
case kThingMetalGrate:
seqSpawn(21, actor, -1);
seqSpawn(21, actor);
GibSprite(actor, GIBTYPE_4, nullptr, nullptr);
break;
@ -2625,12 +2625,12 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
break;
case 0:
seqSpawn(25, actor, nTreeToGibClient);
seqSpawn(25, actor, AF(TreeToGibCallback));
sfxPlay3DSound(actor, 351, -1, 0);
break;
case 1:
seqSpawn(26, actor, nTreeToGibClient);
seqSpawn(26, actor, AF(TreeToGibCallback));
sfxPlay3DSound(actor, 351, -1, 0);
break;
}
@ -2756,7 +2756,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
actPostSprite(missileActor, kStatDecoration);
if (missileActor->spr.Angles.Yaw == DAngle180) sfxPlay3DSound(missileActor, 307, -1, 0);
missileActor->ChangeType(kSpriteDecoration);
seqSpawn(9, missileActor, -1);
seqSpawn(9, missileActor);
}
else
{
@ -2923,7 +2923,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
sfxKill3DSound(missileActor, -1, -1);
sfxPlay3DSectorSound(missileActor->spr.pos, 522, missileActor->sector());
actPostSprite(missileActor, kStatDebris);
seqSpawn(20, missileActor, -1);
seqSpawn(20, missileActor);
if (hitCode == 3 && actorHit && actorHit->hasX())
{
if (actorHit->spr.statnum == kStatDude)
@ -2938,7 +2938,7 @@ static void actImpactMissile(DBloodActor* missileActor, int hitCode)
actPostSprite(missileActor, kStatDebris);
missileActor->spr.cstat &= ~CSTAT_SPRITE_ALIGNMENT_WALL;
missileActor->ChangeType(kSpriteDecoration);
seqSpawn(20, missileActor, -1);
seqSpawn(20, missileActor);
if (hitCode == 3 && actorHit && actorHit->hasX())
{
if (actorHit->spr.statnum == kStatDude)
@ -4242,7 +4242,7 @@ void actExplodeSprite(DBloodActor* actor)
{
case kMissileFireballNapalm:
nType = kExplosionNapalm;
seqSpawn(4, actor, -1);
seqSpawn(4, actor);
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
sfxPlay3DSound(actor, 303, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
@ -4250,7 +4250,7 @@ void actExplodeSprite(DBloodActor* actor)
case kMissileFlareAlt:
nType = kExplosionFireball;
seqSpawn(9, actor, -1);
seqSpawn(9, actor);
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
sfxPlay3DSound(actor, 306, 24 + (actor->GetIndex() & 3), FX_GlobalChannel);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
@ -4259,15 +4259,15 @@ void actExplodeSprite(DBloodActor* actor)
case kMissileFireballCerberus:
case kMissileFireballTchernobog:
nType = kExplosionFireball;
seqSpawn(5, actor, -1);
seqSpawn(5, actor);
sfxPlay3DSound(actor, 304, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
break;
case kThingArmedTNTStick:
nType = kExplosionSmall;
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor, -1);
else seqSpawn(3, actor, -1);
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor);
else seqSpawn(3, actor);
sfxPlay3DSound(actor, 303, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
break;
@ -4279,16 +4279,16 @@ void actExplodeSprite(DBloodActor* actor)
case kModernThingTNTProx:
#endif
nType = kExplosionStandard;
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor, -1);
if (actor->hit.florhit.type == kHitNone) seqSpawn(4, actor);
else
seqSpawn(3, actor, -1);
seqSpawn(3, actor);
sfxPlay3DSound(actor, 304, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
break;
case kThingArmedSpray:
nType = kExplosionSpray;
seqSpawn(5, actor, -1);
seqSpawn(5, actor);
sfxPlay3DSound(actor, 307, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
break;
@ -4305,7 +4305,7 @@ void actExplodeSprite(DBloodActor* actor)
else actPostSprite(actor, kStatFree);
nType = kExplosionLarge;
seqSpawn(4, spawned, -1);
seqSpawn(4, spawned);
actor = spawned;
sfxPlay3DSound(actor, 305, -1, 0);
@ -4341,13 +4341,13 @@ void actExplodeSprite(DBloodActor* actor)
}
#endif
if (getSequence(nSeq)) seqSpawn(nSeq, actor, -1);
if (getSequence(nSeq)) seqSpawn(nSeq, actor);
sfxPlay3DSound(actor, nSnd, -1, 0);
break;
}
case kThingPodFireBall:
nType = kExplosionFireball;
seqSpawn(9, actor, -1);
seqSpawn(9, actor);
sfxPlay3DSound(actor, 307, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
fxSpawnPodStuff(actor, 240);
@ -4355,7 +4355,7 @@ void actExplodeSprite(DBloodActor* actor)
default:
nType = kExplosionStandard;
seqSpawn(4, actor, -1);
seqSpawn(4, actor);
if (Chance(0x8000)) actor->spr.cstat |= CSTAT_SPRITE_XFLIP;
sfxPlay3DSound(actor, 303, -1, 0);
GibSprite(actor, GIBTYPE_5, nullptr, nullptr);
@ -4567,7 +4567,7 @@ static void actCheckThings()
break;
#ifdef NOONE_EXTENSIONS
case kModernThingThrowableRock:
seqSpawn(24, actor, -1);
seqSpawn(24, actor);
if (hit.type == kHitSprite)
{
actor->spr.scale = DVector2(0.5, 0.5);
@ -4576,7 +4576,7 @@ static void actCheckThings()
break;
#endif
case kThingBone:
seqSpawn(24, actor, -1);
seqSpawn(24, actor);
if (hit.type == kHitSprite)
{
actDamageSprite(actor->GetOwner(), hit.actor(), kDamageFall, 12);
@ -5115,7 +5115,7 @@ DBloodActor* actSpawnDude(DBloodActor* source, int nType, double dist)
spawned->xspr.health = getDudeInfo(nDude + kDudeBase)->startHealth << 4;
spawned->xspr.respawn = 1;
if (getSequence(getDudeInfo(nDude + kDudeBase)->seqStartID))
seqSpawn(getDudeInfo(nDude + kDudeBase)->seqStartID, spawned, -1);
seqSpawn(getDudeInfo(nDude + kDudeBase)->seqStartID, spawned);
#ifdef NOONE_EXTENSIONS
// add a way to inherit some values of spawner type 18 by dude.
@ -5719,17 +5719,17 @@ void MakeSplash(DBloodActor* actor)
switch (nSurface)
{
case kSurfWater:
seqSpawn(6, actor, -1);
seqSpawn(6, actor);
sfxPlay3DSound(actor, 356, -1, 0);
break;
default:
seqSpawn(7, actor, -1);
seqSpawn(7, actor);
sfxPlay3DSound(actor, 354, -1, 0);
break;
}
break;
case kThingDripBlood:
seqSpawn(8, actor, -1);
seqSpawn(8, actor);
sfxPlay3DSound(actor, 354, -1, 0);
break;
}

View file

@ -203,6 +203,7 @@ bool IsUnderwaterSector(sectortype* pSector);
}
#define AF(func) DBloodActor_##func##_VMPtr
void callActorFunction(VMFunction* callback, DBloodActor* actor);
#define xx(n) inline PClassActor* n##Class;
#include "classnames.h"

View file

@ -32,8 +32,8 @@ BEGIN_BLD_NS
void RecoilDude(DBloodActor* actor);
AISTATE genIdle = { kAiStateGenIdle, 0, -1, 0, NULL, NULL, NULL, NULL };
AISTATE genRecoil = { kAiStateRecoil, 5, -1, 20, NULL, NULL, NULL, &genIdle };
AISTATE genIdle = { kAiStateGenIdle, 0, nullptr, 0, NULL, NULL, NULL, NULL };
AISTATE genRecoil = { kAiStateRecoil, 5, nullptr, 20, NULL, NULL, NULL, &genIdle };
const int gCultTeslaFireChance[5] = { 0x2000, 0x4000, 0x8000, 0xa000, 0xe000 };
@ -91,7 +91,7 @@ void aiNewState(DBloodActor* actor, AISTATE* pAIState)
{
seqStartId += pAIState->seqId;
if (getSequence(seqStartId))
seqSpawn(seqStartId, actor, pAIState->funcId);
seqSpawn(seqStartId, actor, *pAIState->funcId);
}
if (pAIState->enterFunc)

View file

@ -32,7 +32,7 @@ BEGIN_BLD_NS
struct AISTATE {
int stateType; // By NoOne: current type of state. Basically required for kModernDudeTargetChanger, but can be used for something else.
int seqId;
int funcId; // seq callback
VMNativeFunction** funcId;
int stateTicks;
void(*enterFunc)(DBloodActor *);
void(*moveFunc)(DBloodActor *);

View file

@ -42,24 +42,24 @@ static void batMoveFly(DBloodActor*);
static void batMoveToCeil(DBloodActor*);
AISTATE batIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, batThinkTarget, NULL };
AISTATE batFlyIdle = { kAiStateIdle, 6, -1, 0, NULL, NULL, batThinkTarget, NULL };
AISTATE batChase = { kAiStateChase, 6, -1, 0, NULL, batMoveForward, batThinkChase, &batFlyIdle };
AISTATE batPonder = { kAiStateOther, 6, -1, 0, NULL, NULL, batThinkPonder, NULL };
AISTATE batGoto = { kAiStateMove, 6, -1, 600, NULL, batMoveForward, batThinkGoto, &batFlyIdle };
AISTATE batBite = { kAiStateChase, 7, nBatBiteClient, 60, NULL, NULL, NULL, &batPonder };
AISTATE batRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &batChase };
AISTATE batSearch = { kAiStateSearch, 6, -1, 120, NULL, batMoveForward, batThinkSearch, &batFlyIdle };
AISTATE batSwoop = { kAiStateOther, 6, -1, 60, NULL, batMoveSwoop, batThinkChase, &batChase };
AISTATE batFly = { kAiStateMove, 6, -1, 0, NULL, batMoveFly, batThinkChase, &batChase };
AISTATE batTurn = { kAiStateMove, 6, -1, 60, NULL, aiMoveTurn, NULL, &batChase };
AISTATE batHide = { kAiStateOther, 6, -1, 0, NULL, batMoveToCeil, batMoveForward, NULL };
AISTATE batDodgeUp = { kAiStateMove, 6, -1, 120, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeUpRight = { kAiStateMove, 6, -1, 90, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeUpLeft = { kAiStateMove, 6, -1, 90, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeDown = { kAiStateMove, 6, -1, 120, NULL, batMoveDodgeDown, 0, &batChase };
AISTATE batDodgeDownRight = { kAiStateMove, 6, -1, 90, NULL, batMoveDodgeDown, 0, &batChase };
AISTATE batDodgeDownLeft = { kAiStateMove, 6, -1, 90, NULL, batMoveDodgeDown, 0, &batChase };
AISTATE batIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, batThinkTarget, NULL };
AISTATE batFlyIdle = { kAiStateIdle, 6, nullptr, 0, NULL, NULL, batThinkTarget, NULL };
AISTATE batChase = { kAiStateChase, 6, nullptr, 0, NULL, batMoveForward, batThinkChase, &batFlyIdle };
AISTATE batPonder = { kAiStateOther, 6, nullptr, 0, NULL, NULL, batThinkPonder, NULL };
AISTATE batGoto = { kAiStateMove, 6, nullptr, 600, NULL, batMoveForward, batThinkGoto, &batFlyIdle };
AISTATE batBite = { kAiStateChase, 7, &AF(batBiteSeqCallback), 60, NULL, NULL, NULL, &batPonder };
AISTATE batRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &batChase };
AISTATE batSearch = { kAiStateSearch, 6, nullptr, 120, NULL, batMoveForward, batThinkSearch, &batFlyIdle };
AISTATE batSwoop = { kAiStateOther, 6, nullptr, 60, NULL, batMoveSwoop, batThinkChase, &batChase };
AISTATE batFly = { kAiStateMove, 6, nullptr, 0, NULL, batMoveFly, batThinkChase, &batChase };
AISTATE batTurn = { kAiStateMove, 6, nullptr, 60, NULL, aiMoveTurn, NULL, &batChase };
AISTATE batHide = { kAiStateOther, 6, nullptr, 0, NULL, batMoveToCeil, batMoveForward, NULL };
AISTATE batDodgeUp = { kAiStateMove, 6, nullptr, 120, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeUpRight = { kAiStateMove, 6, nullptr, 90, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeUpLeft = { kAiStateMove, 6, nullptr, 90, NULL, batMoveDodgeUp, 0, &batChase };
AISTATE batDodgeDown = { kAiStateMove, 6, nullptr, 120, NULL, batMoveDodgeDown, 0, &batChase };
AISTATE batDodgeDownRight = { kAiStateMove, 6, nullptr, 90, NULL, batMoveDodgeDown, 0, &batChase };
AISTATE batDodgeDownLeft = { kAiStateMove, 6, nullptr, 90, NULL, batMoveDodgeDown, 0, &batChase };
void batBiteSeqCallback(DBloodActor* actor)
{

View file

@ -40,27 +40,27 @@ static void sub_628A0(DBloodActor*);
static void sub_62AE0(DBloodActor*);
static void sub_62D7C(DBloodActor*);
AISTATE beastIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE beastChase = { kAiStateChase, 8, -1, 0, NULL, beastMoveForward, beastThinkChase, NULL };
AISTATE beastDodge = { kAiStateMove, 8, -1, 60, NULL, aiMoveDodge, NULL, &beastChase };
AISTATE beastGoto = { kAiStateMove, 8, -1, 600, NULL, beastMoveForward, beastThinkGoto, &beastIdle };
AISTATE beastSlash = { kAiStateChase, 6, nSlashClient, 120, NULL, NULL, NULL, &beastChase };
AISTATE beastStomp = { kAiStateChase, 7, nStompClient, 120, NULL, NULL, NULL, &beastChase };
AISTATE beastSearch = { kAiStateSearch, 8, -1, 120, NULL, beastMoveForward, beastThinkSearch, &beastIdle };
AISTATE beastRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &beastDodge };
AISTATE beastTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &beastDodge };
AISTATE beastSwimIdle = { kAiStateIdle, 9, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE beastSwimChase = { kAiStateChase, 9, -1, 0, NULL, sub_628A0, beastThinkSwimChase, NULL };
AISTATE beastSwimDodge = { kAiStateMove, 9, -1, 90, NULL, aiMoveDodge, NULL, &beastSwimChase };
AISTATE beastSwimGoto = { kAiStateMove, 9, -1, 600, NULL, beastMoveForward, beastThinkSwimGoto, &beastSwimIdle };
AISTATE beastSwimSearch = { kAiStateSearch, 9, -1, 120, NULL, beastMoveForward, beastThinkSearch, &beastSwimIdle };
AISTATE beastSwimSlash = { kAiStateChase, 9, nSlashClient, 0, NULL, NULL, beastThinkSwimChase, &beastSwimChase };
AISTATE beastSwimRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &beastSwimDodge };
AISTATE beastMorphToBeast = { kAiStateOther, -1, -1, 0, MorphToBeast, NULL, NULL, &beastIdle };
AISTATE beastMorphFromCultist = { kAiStateOther, 2576, -1, 0, NULL, NULL, NULL, &beastMorphToBeast };
AISTATE beast138FB4 = { kAiStateOther, 9, -1, 120, NULL, sub_62AE0, beastThinkSwimChase, &beastSwimChase };
AISTATE beast138FD0 = { kAiStateOther, 9, -1, 0, NULL, sub_62D7C, beastThinkSwimChase, &beastSwimChase };
AISTATE beast138FEC = { kAiStateOther, 9, -1, 120, NULL, aiMoveTurn, NULL, &beastSwimChase };
AISTATE beastIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE beastChase = { kAiStateChase, 8, nullptr, 0, NULL, beastMoveForward, beastThinkChase, NULL };
AISTATE beastDodge = { kAiStateMove, 8, nullptr, 60, NULL, aiMoveDodge, NULL, &beastChase };
AISTATE beastGoto = { kAiStateMove, 8, nullptr, 600, NULL, beastMoveForward, beastThinkGoto, &beastIdle };
AISTATE beastSlash = { kAiStateChase, 6, &AF(SlashSeqCallback), 120, NULL, NULL, NULL, &beastChase };
AISTATE beastStomp = { kAiStateChase, 7, &AF(StompSeqCallback), 120, NULL, NULL, NULL, &beastChase };
AISTATE beastSearch = { kAiStateSearch, 8, nullptr, 120, NULL, beastMoveForward, beastThinkSearch, &beastIdle };
AISTATE beastRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &beastDodge };
AISTATE beastTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &beastDodge };
AISTATE beastSwimIdle = { kAiStateIdle, 9, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE beastSwimChase = { kAiStateChase, 9, nullptr, 0, NULL, sub_628A0, beastThinkSwimChase, NULL };
AISTATE beastSwimDodge = { kAiStateMove, 9, nullptr, 90, NULL, aiMoveDodge, NULL, &beastSwimChase };
AISTATE beastSwimGoto = { kAiStateMove, 9, nullptr, 600, NULL, beastMoveForward, beastThinkSwimGoto, &beastSwimIdle };
AISTATE beastSwimSearch = { kAiStateSearch, 9, nullptr, 120, NULL, beastMoveForward, beastThinkSearch, &beastSwimIdle };
AISTATE beastSwimSlash = { kAiStateChase, 9, &AF(SlashSeqCallback), 0, NULL, NULL, beastThinkSwimChase, &beastSwimChase };
AISTATE beastSwimRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &beastSwimDodge };
AISTATE beastMorphToBeast = { kAiStateOther, -1, nullptr, 0, MorphToBeast, NULL, NULL, &beastIdle };
AISTATE beastMorphFromCultist = { kAiStateOther, 2576, nullptr, 0, NULL, NULL, NULL, &beastMorphToBeast };
AISTATE beast138FB4 = { kAiStateOther, 9, nullptr, 120, NULL, sub_62AE0, beastThinkSwimChase, &beastSwimChase };
AISTATE beast138FD0 = { kAiStateOther, 9, nullptr, 0, NULL, sub_62D7C, beastThinkSwimChase, &beastSwimChase };
AISTATE beast138FEC = { kAiStateOther, 9, nullptr, 120, NULL, aiMoveTurn, NULL, &beastSwimChase };
void SlashSeqCallback(DBloodActor* actor)
{

View file

@ -42,24 +42,24 @@ static void eelMoveAscend(DBloodActor* actor);
static void eelMoveToCeil(DBloodActor*);
AISTATE eelIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, eelThinkTarget, NULL };
AISTATE eelFlyIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, eelThinkTarget, NULL };
AISTATE eelChase = { kAiStateChase, 0, -1, 0, NULL, eelMoveForward, eelThinkChase, &eelIdle };
AISTATE eelPonder = { kAiStateOther, 0, -1, 0, NULL, NULL, eelThinkPonder, NULL };
AISTATE eelGoto = { kAiStateMove, 0, -1, 600, NULL, NULL, eelThinkGoto, &eelIdle };
AISTATE eelBite = { kAiStateChase, 7, nEelBiteClient, 60, NULL, NULL, NULL, &eelChase };
AISTATE eelRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &eelChase };
AISTATE eelSearch = { kAiStateSearch, 0, -1, 120, NULL, eelMoveForward, eelThinkSearch, &eelIdle };
AISTATE eelSwoop = { kAiStateOther, 0, -1, 60, NULL, eelMoveSwoop, eelThinkChase, &eelChase };
AISTATE eelFly = { kAiStateMove, 0, -1, 0, NULL, eelMoveAscend, eelThinkChase, &eelChase };
AISTATE eelTurn = { kAiStateMove, 0, -1, 60, NULL, aiMoveTurn, NULL, &eelChase };
AISTATE eelHide = { kAiStateOther, 0, -1, 0, NULL, eelMoveToCeil, eelMoveForward, NULL };
AISTATE eelDodgeUp = { kAiStateMove, 0, -1, 120, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeUpRight = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeUpLeft = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeDown = { kAiStateMove, 0, -1, 120, NULL, eelMoveDodgeDown, NULL, &eelChase };
AISTATE eelDodgeDownRight = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeDown, NULL, &eelChase };
AISTATE eelDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, eelMoveDodgeDown, NULL, &eelChase };
AISTATE eelIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, eelThinkTarget, NULL };
AISTATE eelFlyIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, eelThinkTarget, NULL };
AISTATE eelChase = { kAiStateChase, 0, nullptr, 0, NULL, eelMoveForward, eelThinkChase, &eelIdle };
AISTATE eelPonder = { kAiStateOther, 0, nullptr, 0, NULL, NULL, eelThinkPonder, NULL };
AISTATE eelGoto = { kAiStateMove, 0, nullptr, 600, NULL, NULL, eelThinkGoto, &eelIdle };
AISTATE eelBite = { kAiStateChase, 7, &AF(eelBiteSeqCallback), 60, NULL, NULL, NULL, &eelChase };
AISTATE eelRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &eelChase };
AISTATE eelSearch = { kAiStateSearch, 0, nullptr, 120, NULL, eelMoveForward, eelThinkSearch, &eelIdle };
AISTATE eelSwoop = { kAiStateOther, 0, nullptr, 60, NULL, eelMoveSwoop, eelThinkChase, &eelChase };
AISTATE eelFly = { kAiStateMove, 0, nullptr, 0, NULL, eelMoveAscend, eelThinkChase, &eelChase };
AISTATE eelTurn = { kAiStateMove, 0, nullptr, 60, NULL, aiMoveTurn, NULL, &eelChase };
AISTATE eelHide = { kAiStateOther, 0, nullptr, 0, NULL, eelMoveToCeil, eelMoveForward, NULL };
AISTATE eelDodgeUp = { kAiStateMove, 0, nullptr, 120, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeUpRight = { kAiStateMove, 0, nullptr, 90, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeUpLeft = { kAiStateMove, 0, nullptr, 90, NULL, eelMoveDodgeUp, NULL, &eelChase };
AISTATE eelDodgeDown = { kAiStateMove, 0, nullptr, 120, NULL, eelMoveDodgeDown, NULL, &eelChase };
AISTATE eelDodgeDownRight = { kAiStateMove, 0, nullptr, 90, NULL, eelMoveDodgeDown, NULL, &eelChase };
AISTATE eelDodgeDownLeft = { kAiStateMove, 0, nullptr, 90, NULL, eelMoveDodgeDown, NULL, &eelChase };
void eelBiteSeqCallback(DBloodActor* actor)
{

View file

@ -33,42 +33,42 @@ static void burnThinkSearch(DBloodActor*);
static void burnThinkGoto(DBloodActor*);
static void burnThinkChase(DBloodActor*);
AISTATE cultistBurnIdle = { kAiStateIdle, 3, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE cultistBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &cultistBurnSearch };
AISTATE cultistBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, &cultistBurnSearch };
AISTATE cultistBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &cultistBurnChase };
AISTATE cultistBurnIdle = { kAiStateIdle, 3, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE cultistBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &cultistBurnSearch };
AISTATE cultistBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, &cultistBurnSearch };
AISTATE cultistBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &cultistBurnChase };
AISTATE zombieABurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE zombieABurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieABurnSearch };
AISTATE zombieABurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE zombieABurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &zombieABurnChase };
AISTATE zombieABurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE zombieABurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieABurnSearch };
AISTATE zombieABurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE zombieABurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &zombieABurnChase };
AISTATE zombieFBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE zombieFBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieFBurnSearch };
AISTATE zombieFBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE zombieFBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &zombieFBurnChase };
AISTATE zombieFBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE zombieFBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieFBurnSearch };
AISTATE zombieFBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE zombieFBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &zombieFBurnChase };
AISTATE innocentBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE innocentBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieFBurnSearch };
AISTATE innocentBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE innocentBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &zombieFBurnChase };
AISTATE innocentBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE innocentBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &zombieFBurnSearch };
AISTATE innocentBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, NULL };
AISTATE innocentBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &zombieFBurnChase };
AISTATE beastBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE beastBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &beastBurnSearch };
AISTATE beastBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, &beastBurnSearch };
AISTATE beastBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &beastBurnChase };
AISTATE beastBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE beastBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &beastBurnSearch };
AISTATE beastBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, &beastBurnSearch };
AISTATE beastBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &beastBurnChase };
AISTATE tinycalebBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE tinycalebBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &tinycalebBurnSearch };
AISTATE tinycalebBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, &tinycalebBurnSearch };
AISTATE tinycalebBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &tinycalebBurnChase };
AISTATE tinycalebBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE tinycalebBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &tinycalebBurnSearch };
AISTATE tinycalebBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, &tinycalebBurnSearch };
AISTATE tinycalebBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &tinycalebBurnChase };
AISTATE genDudeBurnIdle = { kAiStateIdle, 3, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE genDudeBurnChase = { kAiStateChase, 3, -1, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE genDudeBurnGoto = { kAiStateMove, 3, -1, 3600, NULL, aiMoveForward, burnThinkGoto, &genDudeBurnSearch };
AISTATE genDudeBurnSearch = { kAiStateSearch, 3, -1, 3600, NULL, aiMoveForward, burnThinkSearch, &genDudeBurnSearch };
AISTATE genDudeBurnAttack = { kAiStateChase, 3, nBurnClient, 120, NULL, NULL, NULL, &genDudeBurnChase };
AISTATE genDudeBurnIdle = { kAiStateIdle, 3, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE genDudeBurnChase = { kAiStateChase, 3, nullptr, 0, NULL, aiMoveForward, burnThinkChase, NULL };
AISTATE genDudeBurnGoto = { kAiStateMove, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkGoto, &genDudeBurnSearch };
AISTATE genDudeBurnSearch = { kAiStateSearch, 3, nullptr, 3600, NULL, aiMoveForward, burnThinkSearch, &genDudeBurnSearch };
AISTATE genDudeBurnAttack = { kAiStateChase, 3, &AF(BurnSeqCallback), 120, NULL, NULL, NULL, &genDudeBurnChase };
void BurnSeqCallback(DBloodActor*)
{

View file

@ -38,24 +38,24 @@ static void sub_65D04(DBloodActor*);
static void sub_65F44(DBloodActor*);
static void sub_661E0(DBloodActor*);
AISTATE tinycalebIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tinycalebChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveForward, calebThinkChase, NULL };
AISTATE tinycalebDodge = { kAiStateMove, 6, -1, 90, NULL, aiMoveDodge, NULL, &tinycalebChase };
AISTATE tinycalebGoto = { kAiStateMove, 6, -1, 600, NULL, aiMoveForward, calebThinkGoto, &tinycalebIdle };
AISTATE tinycalebAttack = { kAiStateChase, 0, nAttackClient, 120, NULL, NULL, NULL, &tinycalebChase };
AISTATE tinycalebSearch = { kAiStateSearch, 6, -1, 120, NULL, aiMoveForward, calebThinkSearch, &tinycalebIdle };
AISTATE tinycalebRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &tinycalebDodge };
AISTATE tinycalebTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &tinycalebDodge };
AISTATE tinycalebSwimIdle = { kAiStateIdle, 10, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tinycalebSwimChase = { kAiStateChase, 8, -1, 0, NULL, sub_65D04, calebThinkSwimChase, NULL };
AISTATE tinycalebSwimDodge = { kAiStateMove, 8, -1, 90, NULL, aiMoveDodge, NULL, &tinycalebSwimChase };
AISTATE tinycalebSwimGoto = { kAiStateMove, 8, -1, 600, NULL, aiMoveForward, calebThinkSwimGoto, &tinycalebSwimIdle };
AISTATE tinycalebSwimSearch = { kAiStateSearch, 8, -1, 120, NULL, aiMoveForward, calebThinkSearch, &tinycalebSwimIdle };
AISTATE tinycalebSwimAttack = { kAiStateChase, 10, nAttackClient, 0, NULL, NULL, NULL, &tinycalebSwimChase };
AISTATE tinycalebSwimRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &tinycalebSwimDodge };
AISTATE tinycaleb139660 = { kAiStateOther, 8, -1, 120, NULL, sub_65F44, calebThinkSwimChase, &tinycalebSwimChase };
AISTATE tinycaleb13967C = { kAiStateOther, 8, -1, 0, NULL, sub_661E0, calebThinkSwimChase, &tinycalebSwimChase };
AISTATE tinycaleb139698 = { kAiStateOther, 8, -1, 120, NULL, aiMoveTurn, NULL, &tinycalebSwimChase };
AISTATE tinycalebIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tinycalebChase = { kAiStateChase, 6, nullptr, 0, NULL, aiMoveForward, calebThinkChase, NULL };
AISTATE tinycalebDodge = { kAiStateMove, 6, nullptr, 90, NULL, aiMoveDodge, NULL, &tinycalebChase };
AISTATE tinycalebGoto = { kAiStateMove, 6, nullptr, 600, NULL, aiMoveForward, calebThinkGoto, &tinycalebIdle };
AISTATE tinycalebAttack = { kAiStateChase, 0, &AF(SeqAttackCallback), 120, NULL, NULL, NULL, &tinycalebChase };
AISTATE tinycalebSearch = { kAiStateSearch, 6, nullptr, 120, NULL, aiMoveForward, calebThinkSearch, &tinycalebIdle };
AISTATE tinycalebRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &tinycalebDodge };
AISTATE tinycalebTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &tinycalebDodge };
AISTATE tinycalebSwimIdle = { kAiStateIdle, 10, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tinycalebSwimChase = { kAiStateChase, 8, nullptr, 0, NULL, sub_65D04, calebThinkSwimChase, NULL };
AISTATE tinycalebSwimDodge = { kAiStateMove, 8, nullptr, 90, NULL, aiMoveDodge, NULL, &tinycalebSwimChase };
AISTATE tinycalebSwimGoto = { kAiStateMove, 8, nullptr, 600, NULL, aiMoveForward, calebThinkSwimGoto, &tinycalebSwimIdle };
AISTATE tinycalebSwimSearch = { kAiStateSearch, 8, nullptr, 120, NULL, aiMoveForward, calebThinkSearch, &tinycalebSwimIdle };
AISTATE tinycalebSwimAttack = { kAiStateChase, 10, &AF(SeqAttackCallback), 0, NULL, NULL, NULL, &tinycalebSwimChase };
AISTATE tinycalebSwimRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &tinycalebSwimDodge };
AISTATE tinycaleb139660 = { kAiStateOther, 8, nullptr, 120, NULL, sub_65F44, calebThinkSwimChase, &tinycalebSwimChase };
AISTATE tinycaleb13967C = { kAiStateOther, 8, nullptr, 0, NULL, sub_661E0, calebThinkSwimChase, &tinycalebSwimChase };
AISTATE tinycaleb139698 = { kAiStateOther, 8, nullptr, 120, NULL, aiMoveTurn, NULL, &tinycalebSwimChase };
void SeqAttackCallback(DBloodActor* actor)
{

View file

@ -35,25 +35,25 @@ static void cerberusThinkGoto(DBloodActor* actor);
static void cerberusThinkChase(DBloodActor* actor);
AISTATE cerberusIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, cerberusThinkTarget, NULL };
AISTATE cerberusSearch = { kAiStateSearch, 7, -1, 1800, NULL, aiMoveForward, cerberusThinkSearch, &cerberusIdle };
AISTATE cerberusChase = { kAiStateChase, 7, -1, 0, NULL, aiMoveForward, cerberusThinkChase, NULL };
AISTATE cerberusRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cerberusSearch };
AISTATE cerberusTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &cerberusSearch };
AISTATE cerberusGoto = { kAiStateMove, 7, -1, 600, NULL, aiMoveForward, cerberusThinkGoto, &cerberusIdle };
AISTATE cerberusBite = { kAiStateChase, 6, nCerberusBiteClient, 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberusBurn = { kAiStateChase, 6, nCerberusBurnClient, 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberus3Burn = { kAiStateChase, 6, nCerberusBurnClient2, 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberus2Idle = { kAiStateIdle, 0, -1, 0, NULL, NULL, cerberusThinkTarget, NULL };
AISTATE cerberus2Search = { kAiStateSearch, 7, -1, 1800, NULL, aiMoveForward, cerberusThinkSearch, &cerberus2Idle };
AISTATE cerberus2Chase = { kAiStateChase, 7, -1, 0, NULL, aiMoveForward, cerberusThinkChase, NULL };
AISTATE cerberus2Recoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cerberus2Search };
AISTATE cerberus2Goto = { kAiStateMove, 7, -1, 600, NULL, aiMoveForward, cerberusThinkGoto, &cerberus2Idle };
AISTATE cerberus2Bite = { kAiStateChase, 6, nCerberusBiteClient, 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus2Burn = { kAiStateChase, 6, nCerberusBurnClient, 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus4Burn = { kAiStateChase, 6, nCerberusBurnClient2, 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus139890 = { kAiStateOther, 7, -1, 120, NULL, aiMoveTurn, NULL, &cerberusChase };
AISTATE cerberus1398AC = { kAiStateOther, 7, -1, 120, NULL, aiMoveTurn, NULL, &cerberusChase };
AISTATE cerberusIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, cerberusThinkTarget, NULL };
AISTATE cerberusSearch = { kAiStateSearch, 7, nullptr, 1800, NULL, aiMoveForward, cerberusThinkSearch, &cerberusIdle };
AISTATE cerberusChase = { kAiStateChase, 7, nullptr, 0, NULL, aiMoveForward, cerberusThinkChase, NULL };
AISTATE cerberusRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &cerberusSearch };
AISTATE cerberusTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &cerberusSearch };
AISTATE cerberusGoto = { kAiStateMove, 7, nullptr, 600, NULL, aiMoveForward, cerberusThinkGoto, &cerberusIdle };
AISTATE cerberusBite = { kAiStateChase, 6, &AF(cerberusBiteSeqCallback), 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberusBurn = { kAiStateChase, 6, &AF(cerberusBurnSeqCallback), 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberus3Burn = { kAiStateChase, 6, &AF(cerberusBurnSeqCallback2), 60, NULL, NULL, NULL, &cerberusChase };
AISTATE cerberus2Idle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, cerberusThinkTarget, NULL };
AISTATE cerberus2Search = { kAiStateSearch, 7, nullptr, 1800, NULL, aiMoveForward, cerberusThinkSearch, &cerberus2Idle };
AISTATE cerberus2Chase = { kAiStateChase, 7, nullptr, 0, NULL, aiMoveForward, cerberusThinkChase, NULL };
AISTATE cerberus2Recoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &cerberus2Search };
AISTATE cerberus2Goto = { kAiStateMove, 7, nullptr, 600, NULL, aiMoveForward, cerberusThinkGoto, &cerberus2Idle };
AISTATE cerberus2Bite = { kAiStateChase, 6, &AF(cerberusBiteSeqCallback), 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus2Burn = { kAiStateChase, 6, &AF(cerberusBurnSeqCallback), 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus4Burn = { kAiStateChase, 6, &AF(cerberusBurnSeqCallback2), 60, NULL, NULL, NULL, &cerberus2Chase };
AISTATE cerberus139890 = { kAiStateOther, 7, nullptr, 120, NULL, aiMoveTurn, NULL, &cerberusChase };
AISTATE cerberus1398AC = { kAiStateOther, 7, nullptr, 120, NULL, aiMoveTurn, NULL, &cerberusChase };
static constexpr double Cerberus_XYOff = 350. / 16;
static constexpr double Cerberus_ZOff = 100. / 256;

View file

@ -33,45 +33,45 @@ static void cultThinkSearch(DBloodActor*);
static void cultThinkGoto(DBloodActor*);
static void cultThinkChase(DBloodActor*);
AISTATE cultistIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistProneIdle = { kAiStateIdle, 17, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE fanaticProneIdle = { kAiStateIdle, 17, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistProneIdle3 = { kAiStateIdle, 17, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistChase = { kAiStateChase, 9, -1, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE fanaticChase = { kAiStateChase, 0, -1, 0, NULL, aiMoveTurn, cultThinkChase, NULL };
AISTATE cultistDodge = { kAiStateMove, 9, -1, 90, NULL, aiMoveDodge, NULL, &cultistChase };
AISTATE cultistGoto = { kAiStateMove, 9, -1, 600, NULL, aiMoveForward, cultThinkGoto, &cultistIdle };
AISTATE cultistProneChase = { kAiStateChase, 14, -1, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE cultistProneDodge = { kAiStateMove, 14, -1, 90, NULL, aiMoveDodge, NULL, &cultistProneChase };
AISTATE cultistTThrow = { kAiStateChase, 7, nThrowClient, 120, NULL, NULL, NULL, &cultistTFire };
AISTATE cultistSThrow = { kAiStateChase, 7, nThrowClient, 120, NULL, NULL, NULL, &cultistSFire };
AISTATE cultistTsThrow = { kAiStateChase, 7, nThrowClient, 120, NULL, NULL, NULL, &cultistTsFire };
AISTATE cultistDThrow = { kAiStateChase, 7, nThrowClient, 120, NULL, NULL, NULL, &cultistChase };
AISTATE cultist139A78 = { kAiStateChase, 7, n68170Client, 120, NULL, NULL, NULL, &cultistChase };
AISTATE cultist139A94 = { kAiStateChase, 7, n68230Client, 120, NULL, NULL, NULL, &cultistIdle };
AISTATE cultist139AB0 = { kAiStateChase, 7, n68230Client, 120, NULL, NULL, cultThinkSearch, &cultist139A94 };
AISTATE cultist139ACC = { kAiStateChase, 7, n68230Client, 120, NULL, NULL, cultThinkSearch, &cultist139AB0 };
AISTATE cultist139AE8 = { kAiStateChase, 7, n68230Client, 120, NULL, NULL, cultThinkSearch, &cultist139AE8 };
AISTATE cultistSearch = { kAiStateSearch, 9, -1, 1800, NULL, aiMoveForward, cultThinkSearch, &cultistIdle };
AISTATE cultistSFire = { kAiStateChase, 6, nShotClient, 60, NULL, NULL, NULL, &cultistChase };
AISTATE cultistTFire = { kAiStateChase, 6, nTommyClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTFire };
AISTATE cultistTsFire = { kAiStateChase, 6, nTeslaClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistChase };
AISTATE cultistSProneFire = { kAiStateChase, 8, nShotClient, 60, NULL, NULL, NULL, &cultistProneChase };
AISTATE cultistTProneFire = { kAiStateChase, 8, nTommyClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTProneFire };
AISTATE cultistTsProneFire = { kAiStateChase, 8, nTeslaClient, 0, NULL, aiMoveTurn, NULL, &cultistTsProneFire }; // vanilla, broken
AISTATE cultistTsProneFireFixed = { kAiStateChase, 8, nTeslaClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTsProneFireFixed };
AISTATE cultistRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cultistDodge };
AISTATE cultistProneRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cultistProneDodge };
AISTATE cultistTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &cultistDodge };
AISTATE cultistSwimIdle = { kAiStateIdle, 13, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistSwimChase = { kAiStateChase, 13, -1, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE cultistSwimDodge = { kAiStateMove, 13, -1, 90, NULL, aiMoveDodge, NULL, &cultistSwimChase };
AISTATE cultistSwimGoto = { kAiStateMove, 13, -1, 600, NULL, aiMoveForward, cultThinkGoto, &cultistSwimIdle };
AISTATE cultistSwimSearch = { kAiStateSearch, 13, -1, 1800, NULL, aiMoveForward, cultThinkSearch, &cultistSwimIdle };
AISTATE cultistSSwimFire = { kAiStateChase, 8, nShotClient, 60, NULL, NULL, NULL, &cultistSwimChase };
AISTATE cultistTSwimFire = { kAiStateChase, 8, nTommyClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTSwimFire };
AISTATE cultistTsSwimFire = { kAiStateChase, 8, nTeslaClient, 0, NULL, aiMoveTurn, cultThinkChase, &cultistTsSwimFire };
AISTATE cultistSwimRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &cultistSwimDodge };
AISTATE cultistIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistProneIdle = { kAiStateIdle, 17, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE fanaticProneIdle = { kAiStateIdle, 17, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistProneIdle3 = { kAiStateIdle, 17, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistChase = { kAiStateChase, 9, nullptr, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE fanaticChase = { kAiStateChase, 0, nullptr, 0, NULL, aiMoveTurn, cultThinkChase, NULL };
AISTATE cultistDodge = { kAiStateMove, 9, nullptr, 90, NULL, aiMoveDodge, NULL, &cultistChase };
AISTATE cultistGoto = { kAiStateMove, 9, nullptr, 600, NULL, aiMoveForward, cultThinkGoto, &cultistIdle };
AISTATE cultistProneChase = { kAiStateChase, 14, nullptr, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE cultistProneDodge = { kAiStateMove, 14, nullptr, 90, NULL, aiMoveDodge, NULL, &cultistProneChase };
AISTATE cultistTThrow = { kAiStateChase, 7, &AF(cultThrowSeqCallback), 120, NULL, NULL, NULL, &cultistTFire };
AISTATE cultistSThrow = { kAiStateChase, 7, &AF(cultThrowSeqCallback), 120, NULL, NULL, NULL, &cultistSFire };
AISTATE cultistTsThrow = { kAiStateChase, 7, &AF(cultThrowSeqCallback), 120, NULL, NULL, NULL, &cultistTsFire };
AISTATE cultistDThrow = { kAiStateChase, 7, &AF(cultThrowSeqCallback), 120, NULL, NULL, NULL, &cultistChase };
AISTATE cultist139A78 = { kAiStateChase, 7, &AF(cultThrowSeqCallback2), 120, NULL, NULL, NULL, &cultistChase };
AISTATE cultist139A94 = { kAiStateChase, 7, &AF(cultThrowSeqCallback3), 120, NULL, NULL, NULL, &cultistIdle };
AISTATE cultist139AB0 = { kAiStateChase, 7, &AF(cultThrowSeqCallback3), 120, NULL, NULL, cultThinkSearch, &cultist139A94 };
AISTATE cultist139ACC = { kAiStateChase, 7, &AF(cultThrowSeqCallback3), 120, NULL, NULL, cultThinkSearch, &cultist139AB0 };
AISTATE cultist139AE8 = { kAiStateChase, 7, &AF(cultThrowSeqCallback3), 120, NULL, NULL, cultThinkSearch, &cultist139AE8 };
AISTATE cultistSearch = { kAiStateSearch, 9, nullptr, 1800, NULL, aiMoveForward, cultThinkSearch, &cultistIdle };
AISTATE cultistSFire = { kAiStateChase, 6, &AF(ShotSeqCallback), 60, NULL, NULL, NULL, &cultistChase };
AISTATE cultistTFire = { kAiStateChase, 6, &AF(TommySeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistTFire };
AISTATE cultistTsFire = { kAiStateChase, 6, &AF(TeslaSeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistChase };
AISTATE cultistSProneFire = { kAiStateChase, 8, &AF(ShotSeqCallback), 60, NULL, NULL, NULL, &cultistProneChase };
AISTATE cultistTProneFire = { kAiStateChase, 8, &AF(TommySeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistTProneFire };
AISTATE cultistTsProneFire = { kAiStateChase, 8, &AF(TeslaSeqCallback), 0, NULL, aiMoveTurn, NULL, &cultistTsProneFire }; // vanilla, broken
AISTATE cultistTsProneFireFixed = { kAiStateChase, 8, &AF(TeslaSeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistTsProneFireFixed };
AISTATE cultistRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &cultistDodge };
AISTATE cultistProneRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &cultistProneDodge };
AISTATE cultistTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &cultistDodge };
AISTATE cultistSwimIdle = { kAiStateIdle, 13, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE cultistSwimChase = { kAiStateChase, 13, nullptr, 0, NULL, aiMoveForward, cultThinkChase, NULL };
AISTATE cultistSwimDodge = { kAiStateMove, 13, nullptr, 90, NULL, aiMoveDodge, NULL, &cultistSwimChase };
AISTATE cultistSwimGoto = { kAiStateMove, 13, nullptr, 600, NULL, aiMoveForward, cultThinkGoto, &cultistSwimIdle };
AISTATE cultistSwimSearch = { kAiStateSearch, 13, nullptr, 1800, NULL, aiMoveForward, cultThinkSearch, &cultistSwimIdle };
AISTATE cultistSSwimFire = { kAiStateChase, 8, &AF(ShotSeqCallback), 60, NULL, NULL, NULL, &cultistSwimChase };
AISTATE cultistTSwimFire = { kAiStateChase, 8, &AF(TommySeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistTSwimFire };
AISTATE cultistTsSwimFire = { kAiStateChase, 8, &AF(TeslaSeqCallback), 0, NULL, aiMoveTurn, cultThinkChase, &cultistTsSwimFire };
AISTATE cultistSwimRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &cultistSwimDodge };
void TommySeqCallback(DBloodActor* actor)
{

View file

@ -43,32 +43,32 @@ static void gargMoveSwoop(DBloodActor*);
static void gargMoveFly(DBloodActor*);
static void playStatueBreakSnd(DBloodActor*);
AISTATE gargoyleFIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, gargThinkTarget, NULL };
AISTATE gargoyleStatueIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, NULL, NULL };
AISTATE gargoyleFChase = { kAiStateChase, 0, -1, 0, NULL, gargMoveForward, gargThinkChase, &gargoyleFIdle };
AISTATE gargoyleFGoto = { kAiStateMove, 0, -1, 600, NULL, gargMoveForward, gargThinkGoto, &gargoyleFIdle };
AISTATE gargoyleFSlash = { kAiStateChase, 6, nSlashFClient, 120, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleFThrow = { kAiStateChase, 6, nThrowFClient, 120, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleSThrow = { kAiStateChase, 6, nThrowSClient, 120, NULL, gargMoveForward, NULL, &gargoyleFChase };
AISTATE gargoyleSBlast = { kAiStateChase, 7, nBlastSClient, 60, NULL, gargMoveSlow, NULL, &gargoyleFChase };
AISTATE gargoyleFRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleFSearch = { kAiStateSearch, 0, -1, 120, NULL, gargMoveForward, gargThinkSearch, &gargoyleFIdle };
AISTATE gargoyleFMorph2 = { kAiStateOther, -1, -1, 0, entryFStatue, NULL, NULL, &gargoyleFIdle };
AISTATE gargoyleFMorph = { kAiStateOther, 6, -1, 0, NULL, NULL, NULL, &gargoyleFMorph2 };
AISTATE gargoyleSMorph2 = { kAiStateOther, -1, -1, 0, entrySStatue, NULL, NULL, &gargoyleFIdle };
AISTATE gargoyleSMorph = { kAiStateOther, 6, -1, 0, NULL, NULL, NULL, &gargoyleSMorph2 };
AISTATE gargoyleSwoop = { kAiStateOther, 0, -1, 120, NULL, gargMoveSwoop, gargThinkChase, &gargoyleFChase };
AISTATE gargoyleFly = { kAiStateMove, 0, -1, 120, NULL, gargMoveFly, gargThinkChase, &gargoyleFChase };
AISTATE gargoyleTurn = { kAiStateMove, 0, -1, 120, NULL, aiMoveTurn, NULL, &gargoyleFChase };
AISTATE gargoyleDodgeUp = { kAiStateMove, 0, -1, 60, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeUpRight = { kAiStateMove, 0, -1, 90, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeUpLeft = { kAiStateMove, 0, -1, 90, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleDodgeDown = { kAiStateMove, 0, -1, 120, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeDownRight = { kAiStateMove, 0, -1, 90, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE gargoyleFIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, gargThinkTarget, NULL };
AISTATE gargoyleStatueIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, NULL, NULL };
AISTATE gargoyleFChase = { kAiStateChase, 0, nullptr, 0, NULL, gargMoveForward, gargThinkChase, &gargoyleFIdle };
AISTATE gargoyleFGoto = { kAiStateMove, 0, nullptr, 600, NULL, gargMoveForward, gargThinkGoto, &gargoyleFIdle };
AISTATE gargoyleFSlash = { kAiStateChase, 6, &AF(SlashFSeqCallback), 120, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleFThrow = { kAiStateChase, 6, &AF(ThrowFSeqCallback), 120, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleSThrow = { kAiStateChase, 6, &AF(ThrowSSeqCallback), 120, NULL, gargMoveForward, NULL, &gargoyleFChase };
AISTATE gargoyleSBlast = { kAiStateChase, 7, &AF(BlastSSeqCallback), 60, NULL, gargMoveSlow, NULL, &gargoyleFChase };
AISTATE gargoyleFRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &gargoyleFChase };
AISTATE gargoyleFSearch = { kAiStateSearch, 0, nullptr, 120, NULL, gargMoveForward, gargThinkSearch, &gargoyleFIdle };
AISTATE gargoyleFMorph2 = { kAiStateOther, -1, nullptr, 0, entryFStatue, NULL, NULL, &gargoyleFIdle };
AISTATE gargoyleFMorph = { kAiStateOther, 6, nullptr, 0, NULL, NULL, NULL, &gargoyleFMorph2 };
AISTATE gargoyleSMorph2 = { kAiStateOther, -1, nullptr, 0, entrySStatue, NULL, NULL, &gargoyleFIdle };
AISTATE gargoyleSMorph = { kAiStateOther, 6, nullptr, 0, NULL, NULL, NULL, &gargoyleSMorph2 };
AISTATE gargoyleSwoop = { kAiStateOther, 0, nullptr, 120, NULL, gargMoveSwoop, gargThinkChase, &gargoyleFChase };
AISTATE gargoyleFly = { kAiStateMove, 0, nullptr, 120, NULL, gargMoveFly, gargThinkChase, &gargoyleFChase };
AISTATE gargoyleTurn = { kAiStateMove, 0, nullptr, 120, NULL, aiMoveTurn, NULL, &gargoyleFChase };
AISTATE gargoyleDodgeUp = { kAiStateMove, 0, nullptr, 60, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeUpRight = { kAiStateMove, 0, nullptr, 90, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeUpLeft = { kAiStateMove, 0, nullptr, 90, NULL, gargMoveDodgeUp, NULL, &gargoyleFChase };
AISTATE gargoyleDodgeDown = { kAiStateMove, 0, nullptr, 120, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeDownRight = { kAiStateMove, 0, nullptr, 90, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE gargoyleFDodgeDownLeft = { kAiStateMove, 0, nullptr, 90, NULL, gargMoveDodgeDown, NULL, &gargoyleFChase };
AISTATE statueFBreakSEQ = { kAiStateOther, 5, -1, 0, entryFStatue, NULL, playStatueBreakSnd, &gargoyleFMorph2 };
AISTATE statueSBreakSEQ = { kAiStateOther, 5, -1, 0, entrySStatue, NULL, playStatueBreakSnd, &gargoyleSMorph2 };
AISTATE statueFBreakSEQ = { kAiStateOther, 5, nullptr, 0, entryFStatue, NULL, playStatueBreakSnd, &gargoyleFMorph2 };
AISTATE statueSBreakSEQ = { kAiStateOther, 5, nullptr, 0, entrySStatue, NULL, playStatueBreakSnd, &gargoyleSMorph2 };
static void playStatueBreakSnd(DBloodActor* actor) {

View file

@ -41,24 +41,24 @@ static void ghostMoveSwoop(DBloodActor*);
static void ghostMoveFly(DBloodActor*);
AISTATE ghostIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, ghostThinkTarget, NULL };
AISTATE ghostChase = { kAiStateChase, 0, -1, 0, NULL, ghostMoveForward, ghostThinkChase, &ghostIdle };
AISTATE ghostGoto = { kAiStateMove, 0, -1, 600, NULL, ghostMoveForward, ghostThinkGoto, &ghostIdle };
AISTATE ghostSlash = { kAiStateChase, 6, nGhostSlashClient, 120, NULL, NULL, NULL, &ghostChase };
AISTATE ghostThrow = { kAiStateChase, 6, nGhostThrowClient, 120, NULL, NULL, NULL, &ghostChase };
AISTATE ghostBlast = { kAiStateChase, 6, nGhostBlastClient, 120, NULL, ghostMoveSlow, NULL, &ghostChase };
AISTATE ghostRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &ghostChase };
AISTATE ghostTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &ghostChase };
AISTATE ghostSearch = { kAiStateSearch, 0, -1, 120, NULL, ghostMoveForward, ghostThinkSearch, &ghostIdle };
AISTATE ghostSwoop = { kAiStateOther, 0, -1, 120, NULL, ghostMoveSwoop, ghostThinkChase, &ghostChase };
AISTATE ghostFly = { kAiStateMove, 0, -1, 0, NULL, ghostMoveFly, ghostThinkChase, &ghostChase };
AISTATE ghostTurn = { kAiStateMove, 0, -1, 120, NULL, aiMoveTurn, NULL, &ghostChase };
AISTATE ghostDodgeUp = { kAiStateMove, 0, -1, 60, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeUpRight = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeUpLeft = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeDown = { kAiStateMove, 0, -1, 120, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
AISTATE ghostDodgeDownRight = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
AISTATE ghostDodgeDownLeft = { kAiStateMove, 0, -1, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
AISTATE ghostIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, ghostThinkTarget, NULL };
AISTATE ghostChase = { kAiStateChase, 0, nullptr, 0, NULL, ghostMoveForward, ghostThinkChase, &ghostIdle };
AISTATE ghostGoto = { kAiStateMove, 0, nullptr, 600, NULL, ghostMoveForward, ghostThinkGoto, &ghostIdle };
AISTATE ghostSlash = { kAiStateChase, 6, &AF(ghostSlashSeqCallback), 120, NULL, NULL, NULL, &ghostChase };
AISTATE ghostThrow = { kAiStateChase, 6, &AF(ghostThrowSeqCallback), 120, NULL, NULL, NULL, &ghostChase };
AISTATE ghostBlast = { kAiStateChase, 6, &AF(ghostBlastSeqCallback), 120, NULL, ghostMoveSlow, NULL, &ghostChase };
AISTATE ghostRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &ghostChase };
AISTATE ghostTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &ghostChase };
AISTATE ghostSearch = { kAiStateSearch, 0, nullptr, 120, NULL, ghostMoveForward, ghostThinkSearch, &ghostIdle };
AISTATE ghostSwoop = { kAiStateOther, 0, nullptr, 120, NULL, ghostMoveSwoop, ghostThinkChase, &ghostChase };
AISTATE ghostFly = { kAiStateMove, 0, nullptr, 0, NULL, ghostMoveFly, ghostThinkChase, &ghostChase };
AISTATE ghostTurn = { kAiStateMove, 0, nullptr, 120, NULL, aiMoveTurn, NULL, &ghostChase };
AISTATE ghostDodgeUp = { kAiStateMove, 0, nullptr, 60, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeUpRight = { kAiStateMove, 0, nullptr, 90, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeUpLeft = { kAiStateMove, 0, nullptr, 90, NULL, ghostMoveDodgeUp, NULL, &ghostChase };
AISTATE ghostDodgeDown = { kAiStateMove, 0, nullptr, 120, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
AISTATE ghostDodgeDownRight = { kAiStateMove, 0, nullptr, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
AISTATE ghostDodgeDownLeft = { kAiStateMove, 0, nullptr, 90, NULL, ghostMoveDodgeDown, NULL, &ghostChase };
void ghostSlashSeqCallback(DBloodActor* actor)
{

View file

@ -39,23 +39,23 @@ static void sub_6CD74(DBloodActor*);
static void sub_6D03C(DBloodActor*);
AISTATE gillBeastIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE gillBeastChase = { kAiStateChase, 9, -1, 0, NULL, aiMoveForward, gillThinkChase, NULL };
AISTATE gillBeastDodge = { kAiStateMove, 9, -1, 90, NULL, aiMoveDodge, NULL, &gillBeastChase };
AISTATE gillBeastGoto = { kAiStateMove, 9, -1, 600, NULL, aiMoveForward, gillThinkGoto, &gillBeastIdle };
AISTATE gillBeastBite = { kAiStateChase, 6, nGillBiteClient, 120, NULL, NULL, NULL, &gillBeastChase };
AISTATE gillBeastSearch = { kAiStateMove, 9, -1, 120, NULL, aiMoveForward, gillThinkSearch, &gillBeastIdle };
AISTATE gillBeastRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &gillBeastDodge };
AISTATE gillBeastSwimIdle = { kAiStateIdle, 10, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE gillBeastSwimChase = { kAiStateChase, 10, -1, 0, NULL, sub_6CB00, gillThinkSwimChase, NULL };
AISTATE gillBeastSwimDodge = { kAiStateMove, 10, -1, 90, NULL, aiMoveDodge, NULL, &gillBeastSwimChase };
AISTATE gillBeastSwimGoto = { kAiStateMove, 10, -1, 600, NULL, aiMoveForward, gillThinkSwimGoto, &gillBeastSwimIdle };
AISTATE gillBeastSwimSearch = { kAiStateSearch, 10, -1, 120, NULL, aiMoveForward, gillThinkSearch, &gillBeastSwimIdle };
AISTATE gillBeastSwimBite = { kAiStateChase, 7, nGillBiteClient, 0, NULL, NULL, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeastSwimRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &gillBeastSwimDodge };
AISTATE gillBeast13A138 = { kAiStateOther, 10, -1, 120, NULL, sub_6CD74, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeast13A154 = { kAiStateOther, 10, -1, 0, NULL, sub_6D03C, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeast13A170 = { kAiStateOther, 10, -1, 120, NULL, NULL, aiMoveTurn, &gillBeastSwimChase };
AISTATE gillBeastIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE gillBeastChase = { kAiStateChase, 9, nullptr, 0, NULL, aiMoveForward, gillThinkChase, NULL };
AISTATE gillBeastDodge = { kAiStateMove, 9, nullptr, 90, NULL, aiMoveDodge, NULL, &gillBeastChase };
AISTATE gillBeastGoto = { kAiStateMove, 9, nullptr, 600, NULL, aiMoveForward, gillThinkGoto, &gillBeastIdle };
AISTATE gillBeastBite = { kAiStateChase, 6, &AF(GillBiteSeqCallback), 120, NULL, NULL, NULL, &gillBeastChase };
AISTATE gillBeastSearch = { kAiStateMove, 9, nullptr, 120, NULL, aiMoveForward, gillThinkSearch, &gillBeastIdle };
AISTATE gillBeastRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &gillBeastDodge };
AISTATE gillBeastSwimIdle = { kAiStateIdle, 10, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE gillBeastSwimChase = { kAiStateChase, 10, nullptr, 0, NULL, sub_6CB00, gillThinkSwimChase, NULL };
AISTATE gillBeastSwimDodge = { kAiStateMove, 10, nullptr, 90, NULL, aiMoveDodge, NULL, &gillBeastSwimChase };
AISTATE gillBeastSwimGoto = { kAiStateMove, 10, nullptr, 600, NULL, aiMoveForward, gillThinkSwimGoto, &gillBeastSwimIdle };
AISTATE gillBeastSwimSearch = { kAiStateSearch, 10, nullptr, 120, NULL, aiMoveForward, gillThinkSearch, &gillBeastSwimIdle };
AISTATE gillBeastSwimBite = { kAiStateChase, 7, &AF(GillBiteSeqCallback), 0, NULL, NULL, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeastSwimRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &gillBeastSwimDodge };
AISTATE gillBeast13A138 = { kAiStateOther, 10, nullptr, 120, NULL, sub_6CD74, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeast13A154 = { kAiStateOther, 10, nullptr, 0, NULL, sub_6D03C, gillThinkSwimChase, &gillBeastSwimChase };
AISTATE gillBeast13A170 = { kAiStateOther, 10, nullptr, 120, NULL, NULL, aiMoveTurn, &gillBeastSwimChase };
void GillBiteSeqCallback(DBloodActor* actor)
{

View file

@ -33,13 +33,13 @@ static void handThinkSearch(DBloodActor*);
static void handThinkGoto(DBloodActor*);
static void handThinkChase(DBloodActor*);
AISTATE handIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE hand13A3B4 = { kAiStateOther, 0, -1, 0, NULL, NULL, NULL, NULL };
AISTATE handSearch = { kAiStateMove, 6, -1, 600, NULL, aiMoveForward, handThinkSearch, &handIdle };
AISTATE handChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveForward, handThinkChase, NULL };
AISTATE handRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &handSearch };
AISTATE handGoto = { kAiStateMove, 6, -1, 1800, NULL, aiMoveForward, handThinkGoto, &handIdle };
AISTATE handJump = { kAiStateChase, 7, nJumpClient, 120, NULL, NULL, NULL, &handChase };
AISTATE handIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE hand13A3B4 = { kAiStateOther, 0, nullptr, 0, NULL, NULL, NULL, NULL };
AISTATE handSearch = { kAiStateMove, 6, nullptr, 600, NULL, aiMoveForward, handThinkSearch, &handIdle };
AISTATE handChase = { kAiStateChase, 6, nullptr, 0, NULL, aiMoveForward, handThinkChase, NULL };
AISTATE handRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &handSearch };
AISTATE handGoto = { kAiStateMove, 6, nullptr, 1800, NULL, aiMoveForward, handThinkGoto, &handIdle };
AISTATE handJump = { kAiStateChase, 7, &AF(HandJumpSeqCallback), 120, NULL, NULL, NULL, &handChase };
void HandJumpSeqCallback(DBloodActor* actor)
{

View file

@ -33,14 +33,14 @@ static void houndThinkSearch(DBloodActor*);
static void houndThinkGoto(DBloodActor*);
static void houndThinkChase(DBloodActor*);
AISTATE houndIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE houndSearch = { kAiStateMove, 8, -1, 1800, NULL, aiMoveForward, houndThinkSearch, &houndIdle };
AISTATE houndChase = { kAiStateChase, 8, -1, 0, NULL, aiMoveForward, houndThinkChase, NULL };
AISTATE houndRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &houndSearch };
AISTATE houndTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &houndSearch };
AISTATE houndGoto = { kAiStateMove, 8, -1, 600, NULL, aiMoveForward, houndThinkGoto, &houndIdle };
AISTATE houndBite = { kAiStateChase, 6, nHoundBiteClient, 60, NULL, NULL, NULL, &houndChase };
AISTATE houndBurn = { kAiStateChase, 7, nHoundBurnClient, 60, NULL, NULL, NULL, &houndChase };
AISTATE houndIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE houndSearch = { kAiStateMove, 8, nullptr, 1800, NULL, aiMoveForward, houndThinkSearch, &houndIdle };
AISTATE houndChase = { kAiStateChase, 8, nullptr, 0, NULL, aiMoveForward, houndThinkChase, NULL };
AISTATE houndRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &houndSearch };
AISTATE houndTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &houndSearch };
AISTATE houndGoto = { kAiStateMove, 8, nullptr, 600, NULL, aiMoveForward, houndThinkGoto, &houndIdle };
AISTATE houndBite = { kAiStateChase, 6, &AF(houndBiteSeqCallback), 60, NULL, NULL, NULL, &houndChase };
AISTATE houndBurn = { kAiStateChase, 7, &AF(houndBurnSeqCallback), 60, NULL, NULL, NULL, &houndChase };
void houndBiteSeqCallback(DBloodActor* actor)
{

View file

@ -33,12 +33,12 @@ static void innocThinkSearch(DBloodActor*);
static void innocThinkGoto(DBloodActor*);
static void innocThinkChase(DBloodActor*);
AISTATE innocentIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE innocentSearch = { kAiStateSearch, 6, -1, 1800, NULL, aiMoveForward, innocThinkSearch, &innocentIdle };
AISTATE innocentChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveForward, innocThinkChase, NULL };
AISTATE innocentRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &innocentChase };
AISTATE innocentTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &innocentChase };
AISTATE innocentGoto = { kAiStateMove, 6, -1, 600, NULL, aiMoveForward, innocThinkGoto, &innocentIdle };
AISTATE innocentIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE innocentSearch = { kAiStateSearch, 6, nullptr, 1800, NULL, aiMoveForward, innocThinkSearch, &innocentIdle };
AISTATE innocentChase = { kAiStateChase, 6, nullptr, 0, NULL, aiMoveForward, innocThinkChase, NULL };
AISTATE innocentRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &innocentChase };
AISTATE innocentTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &innocentChase };
AISTATE innocentGoto = { kAiStateMove, 6, nullptr, 600, NULL, aiMoveForward, innocThinkGoto, &innocentIdle };
static void innocThinkSearch(DBloodActor* actor)
{

View file

@ -33,22 +33,22 @@ static void aiPodSearch(DBloodActor* actor);
static void aiPodMove(DBloodActor* actor);
static void aiPodChase(DBloodActor* actor);
AISTATE podIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE podMove = { kAiStateMove, 7, -1, 3600, NULL, aiMoveTurn, aiPodMove, &podSearch };
AISTATE podSearch = { kAiStateSearch, 0, -1, 3600, NULL, aiMoveTurn, aiPodSearch, &podSearch };
AISTATE podStartChase = { kAiStateChase, 8, nPodStartChaseClient, 600, NULL, NULL, NULL, &podChase };
AISTATE podRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &podChase };
AISTATE podChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveTurn, aiPodChase, NULL };
AISTATE tentacleIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tentacle13A6A8 = { kAiStateOther, 7, dword_279B3C, 0, NULL, NULL, NULL, &tentacle13A6C4 };
AISTATE tentacle13A6C4 = { kAiStateOther, -1, -1, 0, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacle13A6E0 = { kAiStateOther, 8, dword_279B40, 0, NULL, NULL, NULL, &tentacle13A6FC };
AISTATE tentacle13A6FC = { kAiStateOther, -1, -1, 0, NULL, NULL, NULL, &tentacleIdle };
AISTATE tentacleMove = { kAiStateOther, 8, -1, 3600, NULL, aiMoveTurn, aiPodMove, &tentacleSearch };
AISTATE tentacleSearch = { kAiStateOther, 0, -1, 3600, NULL, aiMoveTurn, aiPodSearch, NULL };
AISTATE tentacleStartChase = { kAiStateOther, 6, nTentacleStartSearchClient, 120, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacleRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacleChase = { kAiStateChase, 6, -1, 0, NULL, aiMoveTurn, aiPodChase, NULL };
AISTATE podIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE podMove = { kAiStateMove, 7, nullptr, 3600, NULL, aiMoveTurn, aiPodMove, &podSearch };
AISTATE podSearch = { kAiStateSearch, 0, nullptr, 3600, NULL, aiMoveTurn, aiPodSearch, &podSearch };
AISTATE podStartChase = { kAiStateChase, 8, &AF(podAttack), 600, NULL, NULL, NULL, &podChase };
AISTATE podRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &podChase };
AISTATE podChase = { kAiStateChase, 6, nullptr, 0, NULL, aiMoveTurn, aiPodChase, NULL };
AISTATE tentacleIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE tentacle13A6A8 = { kAiStateOther, 7, &AF(podPlaySound1), 0, NULL, NULL, NULL, &tentacle13A6C4 };
AISTATE tentacle13A6C4 = { kAiStateOther, -1, nullptr, 0, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacle13A6E0 = { kAiStateOther, 8, &AF(podPlaySound2), 0, NULL, NULL, NULL, &tentacle13A6FC };
AISTATE tentacle13A6FC = { kAiStateOther, -1, nullptr, 0, NULL, NULL, NULL, &tentacleIdle };
AISTATE tentacleMove = { kAiStateOther, 8, nullptr, 3600, NULL, aiMoveTurn, aiPodMove, &tentacleSearch };
AISTATE tentacleSearch = { kAiStateOther, 0, nullptr, 3600, NULL, aiMoveTurn, aiPodSearch, NULL };
AISTATE tentacleStartChase = { kAiStateOther, 6, &AF(podExplode), 120, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacleRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &tentacleChase };
AISTATE tentacleChase = { kAiStateChase, 6, nullptr, 0, NULL, aiMoveTurn, aiPodChase, NULL };
void podPlaySound1(DBloodActor* actor)
{
@ -84,7 +84,7 @@ void podAttack(DBloodActor* actor)
pMissile = actFireThing(actor, 0., -500., dv.Z / 32768 - 0.22125, kThingPodGreenBall, nDist * (2048. / 64800));
}
if (pMissile)
seqSpawn(68, pMissile, -1);
seqSpawn(68, pMissile);
break;
case kDudePodFire:
dv.Z += 31.25;
@ -94,7 +94,7 @@ void podAttack(DBloodActor* actor)
pMissile = actFireThing(actor, 0., -500., dv.Z / 32768 - 0.22125, kThingPodFireBall, nDist * (2048. / 64800));
}
if (pMissile)
seqSpawn(22, pMissile, -1);
seqSpawn(22, pMissile);
break;
}
for (int i = 0; i < 4; i++)

View file

@ -33,13 +33,13 @@ static void ratThinkSearch(DBloodActor*);
static void ratThinkGoto(DBloodActor*);
static void ratThinkChase(DBloodActor*);
AISTATE ratIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE ratSearch = { kAiStateSearch, 7, -1, 1800, NULL, aiMoveForward, ratThinkSearch, &ratIdle };
AISTATE ratChase = { kAiStateChase, 7, -1, 0, NULL, aiMoveForward, ratThinkChase, NULL };
AISTATE ratDodge = { kAiStateMove, 7, -1, 0, NULL, NULL, NULL, &ratChase };
AISTATE ratRecoil = { kAiStateRecoil, 7, -1, 0, NULL, NULL, NULL, &ratDodge };
AISTATE ratGoto = { kAiStateMove, 7, -1, 600, NULL, aiMoveForward, ratThinkGoto, &ratIdle };
AISTATE ratBite = { kAiStateChase, 6, nRatBiteClient, 120, NULL, NULL, NULL, &ratChase };
AISTATE ratIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE ratSearch = { kAiStateSearch, 7, nullptr, 1800, NULL, aiMoveForward, ratThinkSearch, &ratIdle };
AISTATE ratChase = { kAiStateChase, 7, nullptr, 0, NULL, aiMoveForward, ratThinkChase, NULL };
AISTATE ratDodge = { kAiStateMove, 7, nullptr, 0, NULL, NULL, NULL, &ratChase };
AISTATE ratRecoil = { kAiStateRecoil, 7, nullptr, 0, NULL, NULL, NULL, &ratDodge };
AISTATE ratGoto = { kAiStateMove, 7, nullptr, 600, NULL, aiMoveForward, ratThinkGoto, &ratIdle };
AISTATE ratBite = { kAiStateChase, 6, &AF(ratBiteSeqCallback), 120, NULL, NULL, NULL, &ratChase };
void ratBiteSeqCallback(DBloodActor* actor)
{

View file

@ -34,14 +34,14 @@ static void spidThinkGoto(DBloodActor*);
static void spidThinkChase(DBloodActor*);
AISTATE spidIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE spidChase = { kAiStateChase, 7, -1, 0, NULL, aiMoveForward, spidThinkChase, NULL };
AISTATE spidDodge = { kAiStateMove, 7, -1, 90, NULL, aiMoveDodge, NULL, &spidChase };
AISTATE spidGoto = { kAiStateMove, 7, -1, 600, NULL, aiMoveForward, spidThinkGoto, &spidIdle };
AISTATE spidSearch = { kAiStateSearch, 7, -1, 1800, NULL, aiMoveForward, spidThinkSearch, &spidIdle };
AISTATE spidBite = { kAiStateChase, 6, nSpidBiteClient, 60, NULL, NULL, NULL, &spidChase };
AISTATE spidJump = { kAiStateChase, 8, nSpidJumpClient, 60, NULL, aiMoveForward, NULL, &spidChase };
AISTATE spidBirth = { kAiStateOther, 0, nSpidBirthClient, 60, NULL, NULL, NULL, &spidIdle };
AISTATE spidIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE spidChase = { kAiStateChase, 7, nullptr, 0, NULL, aiMoveForward, spidThinkChase, NULL };
AISTATE spidDodge = { kAiStateMove, 7, nullptr, 90, NULL, aiMoveDodge, NULL, &spidChase };
AISTATE spidGoto = { kAiStateMove, 7, nullptr, 600, NULL, aiMoveForward, spidThinkGoto, &spidIdle };
AISTATE spidSearch = { kAiStateSearch, 7, nullptr, 1800, NULL, aiMoveForward, spidThinkSearch, &spidIdle };
AISTATE spidBite = { kAiStateChase, 6, &AF(SpidBiteSeqCallback), 60, NULL, NULL, NULL, &spidChase };
AISTATE spidJump = { kAiStateChase, 8, &AF(SpidJumpSeqCallback), 60, NULL, aiMoveForward, NULL, &spidChase };
AISTATE spidBirth = { kAiStateOther, 0, &AF(SpidBirthSeqCallback), 60, NULL, NULL, NULL, &spidIdle };
static void spidBlindEffect(DBloodActor* actor, int nBlind, int max)
{

View file

@ -35,15 +35,15 @@ static void sub_72850(DBloodActor*);
static void tchernobogThinkChase(DBloodActor*);
AISTATE tchernobogIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, sub_725A4, NULL };
AISTATE tchernobogSearch = { kAiStateSearch, 8, -1, 1800, NULL, aiMoveForward, sub_72580, &tchernobogIdle };
AISTATE tchernobogChase = { kAiStateChase, 8, -1, 0, NULL, aiMoveForward, tchernobogThinkChase, NULL };
AISTATE tchernobogRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &tchernobogSearch };
AISTATE tcherno13A9B8 = { kAiStateMove, 8, -1, 600, NULL, aiMoveForward, sub_72850, &tchernobogIdle };
AISTATE tcherno13A9D4 = { kAiStateMove, 6, dword_279B54, 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13A9F0 = { kAiStateChase, 6, dword_279B58, 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13AA0C = { kAiStateChase, 7, dword_279B5C, 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13AA28 = { kAiStateChase, 8, -1, 60, NULL, aiMoveTurn, NULL, &tchernobogChase };
AISTATE tchernobogIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, sub_725A4, NULL };
AISTATE tchernobogSearch = { kAiStateSearch, 8, nullptr, 1800, NULL, aiMoveForward, sub_72580, &tchernobogIdle };
AISTATE tchernobogChase = { kAiStateChase, 8, nullptr, 0, NULL, aiMoveForward, tchernobogThinkChase, NULL };
AISTATE tchernobogRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &tchernobogSearch };
AISTATE tcherno13A9B8 = { kAiStateMove, 8, nullptr, 600, NULL, aiMoveForward, sub_72850, &tchernobogIdle };
AISTATE tcherno13A9D4 = { kAiStateMove, 6, &AF(tchernobogBurnSeqCallback), 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13A9F0 = { kAiStateChase, 6, &AF(tchernobogBurnSeqCallback2), 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13AA0C = { kAiStateChase, 7, &AF(tchernobogFire), 60, NULL, NULL, NULL, &tchernobogChase };
AISTATE tcherno13AA28 = { kAiStateChase, 8, nullptr, 60, NULL, aiMoveTurn, NULL, &tchernobogChase };
static constexpr double Tchernnobog_XYOff = 350. / 16;

View file

@ -39,54 +39,54 @@ static void unicultThinkGoto(DBloodActor*);
static void unicultThinkChase(DBloodActor*);
static void forcePunch(DBloodActor*);
AISTATE genDudeIdleL = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE genDudeIdleW = { kAiStateIdle, 13, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE genDudeIdleL = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE genDudeIdleW = { kAiStateIdle, 13, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
// ---------------------
AISTATE genDudeSearchL = { kAiStateSearch, 9, -1, 600, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchW = { kAiStateSearch, 13, -1, 600, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleW };
AISTATE genDudeSearchL = { kAiStateSearch, 9, nullptr, 600, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchW = { kAiStateSearch, 13, nullptr, 600, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleW };
// ---------------------
AISTATE genDudeSearchShortL = { kAiStateSearch, 9, -1, 200, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchShortW = { kAiStateSearch, 13, -1, 200, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleW };
AISTATE genDudeSearchShortL = { kAiStateSearch, 9, nullptr, 200, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchShortW = { kAiStateSearch, 13, nullptr, 200, NULL, aiGenDudeMoveForward, unicultThinkSearch, &genDudeIdleW };
// ---------------------
AISTATE genDudeSearchNoWalkL = { kAiStateSearch, 0, -1, 600, NULL, aiMoveTurn, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchNoWalkW = { kAiStateSearch, 13, -1, 600, NULL, aiMoveTurn, unicultThinkSearch, &genDudeIdleW };
AISTATE genDudeSearchNoWalkL = { kAiStateSearch, 0, nullptr, 600, NULL, aiMoveTurn, unicultThinkSearch, &genDudeIdleL };
AISTATE genDudeSearchNoWalkW = { kAiStateSearch, 13, nullptr, 600, NULL, aiMoveTurn, unicultThinkSearch, &genDudeIdleW };
// ---------------------
AISTATE genDudeGotoL = { kAiStateMove, 9, -1, 600, NULL, aiGenDudeMoveForward, unicultThinkGoto, &genDudeIdleL };
AISTATE genDudeGotoW = { kAiStateMove, 13, -1, 600, NULL, aiGenDudeMoveForward, unicultThinkGoto, &genDudeIdleW };
AISTATE genDudeGotoL = { kAiStateMove, 9, nullptr, 600, NULL, aiGenDudeMoveForward, unicultThinkGoto, &genDudeIdleL };
AISTATE genDudeGotoW = { kAiStateMove, 13, nullptr, 600, NULL, aiGenDudeMoveForward, unicultThinkGoto, &genDudeIdleW };
// ---------------------
AISTATE genDudeDodgeL = { kAiStateMove, 9, -1, 90, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeD = { kAiStateMove, 14, -1, 90, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeW = { kAiStateMove, 13, -1, 90, NULL, aiMoveDodge, NULL, &genDudeChaseW };
AISTATE genDudeDodgeL = { kAiStateMove, 9, nullptr, 90, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeD = { kAiStateMove, 14, nullptr, 90, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeW = { kAiStateMove, 13, nullptr, 90, NULL, aiMoveDodge, NULL, &genDudeChaseW };
// ---------------------
AISTATE genDudeDodgeShortL = { kAiStateMove, 9, -1, 60, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeShortD = { kAiStateMove, 14, -1, 60, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeShortW = { kAiStateMove, 13, -1, 60, NULL, aiMoveDodge, NULL, &genDudeChaseW };
AISTATE genDudeDodgeShortL = { kAiStateMove, 9, nullptr, 60, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeShortD = { kAiStateMove, 14, nullptr, 60, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeShortW = { kAiStateMove, 13, nullptr, 60, NULL, aiMoveDodge, NULL, &genDudeChaseW };
// ---------------------
AISTATE genDudeDodgeShorterL = { kAiStateMove, 9, -1, 20, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeShorterD = { kAiStateMove, 14, -1, 20, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeShorterW = { kAiStateMove, 13, -1, 20, NULL, aiMoveDodge, NULL, &genDudeChaseW };
AISTATE genDudeDodgeShorterL = { kAiStateMove, 9, nullptr, 20, NULL, aiMoveDodge, NULL, &genDudeChaseL };
AISTATE genDudeDodgeShorterD = { kAiStateMove, 14, nullptr, 20, NULL, aiMoveDodge, NULL, &genDudeChaseD };
AISTATE genDudeDodgeShorterW = { kAiStateMove, 13, nullptr, 20, NULL, aiMoveDodge, NULL, &genDudeChaseW };
// ---------------------
AISTATE genDudeChaseL = { kAiStateChase, 9, -1, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
AISTATE genDudeChaseD = { kAiStateChase, 14, -1, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
AISTATE genDudeChaseW = { kAiStateChase, 13, -1, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
AISTATE genDudeChaseL = { kAiStateChase, 9, nullptr, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
AISTATE genDudeChaseD = { kAiStateChase, 14, nullptr, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
AISTATE genDudeChaseW = { kAiStateChase, 13, nullptr, 0, NULL, aiGenDudeMoveForward, unicultThinkChase, NULL };
// ---------------------
AISTATE genDudeChaseNoWalkL = { kAiStateChase, 0, -1, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
AISTATE genDudeChaseNoWalkD = { kAiStateChase, 14, -1, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
AISTATE genDudeChaseNoWalkW = { kAiStateChase, 13, -1, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
AISTATE genDudeChaseNoWalkL = { kAiStateChase, 0, nullptr, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
AISTATE genDudeChaseNoWalkD = { kAiStateChase, 14, nullptr, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
AISTATE genDudeChaseNoWalkW = { kAiStateChase, 13, nullptr, 0, NULL, aiMoveTurn, unicultThinkChase, NULL };
// ---------------------
AISTATE genDudeFireL = { kAiStateChase, 6, nGenDudeAttack1, 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireL };
AISTATE genDudeFireD = { kAiStateChase, 8, nGenDudeAttack1, 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireD };
AISTATE genDudeFireW = { kAiStateChase, 8, nGenDudeAttack1, 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireW };
AISTATE genDudeFireL = { kAiStateChase, 6, &AF(genDudeAttack1), 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireL };
AISTATE genDudeFireD = { kAiStateChase, 8, &AF(genDudeAttack1), 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireD };
AISTATE genDudeFireW = { kAiStateChase, 8, &AF(genDudeAttack1), 0, NULL, aiMoveTurn, unicultThinkChase, &genDudeFireW };
// ---------------------z
AISTATE genDudeRecoilL = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &genDudeChaseL };
AISTATE genDudeRecoilD = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &genDudeChaseD };
AISTATE genDudeRecoilW = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &genDudeChaseW };
AISTATE genDudeRecoilTesla = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &genDudeDodgeShortL };
AISTATE genDudeRecoilL = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &genDudeChaseL };
AISTATE genDudeRecoilD = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &genDudeChaseD };
AISTATE genDudeRecoilW = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &genDudeChaseW };
AISTATE genDudeRecoilTesla = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &genDudeDodgeShortL };
// ---------------------
AISTATE genDudeThrow = { kAiStateChase, 7, nGenDudeThrow1, 0, NULL, NULL, NULL, &genDudeChaseL };
AISTATE genDudeThrow2 = { kAiStateChase, 7, nGenDudeThrow2, 0, NULL, NULL, NULL, &genDudeChaseL };
AISTATE genDudeThrow = { kAiStateChase, 7, &AF(ThrowCallback1), 0, NULL, NULL, NULL, &genDudeChaseL };
AISTATE genDudeThrow2 = { kAiStateChase, 7, &AF(ThrowCallback2), 0, NULL, NULL, NULL, &genDudeChaseL };
// ---------------------
AISTATE genDudePunch = { kAiStateChase,10, nGenDudePunch, 0, NULL, NULL, forcePunch, &genDudeChaseL };
AISTATE genDudePunch = { kAiStateChase,10, &AF(punchCallback), 0, NULL, NULL, forcePunch, &genDudeChaseL };
// ---------------------
const GENDUDESND gCustomDudeSnd[] = {
@ -1259,7 +1259,7 @@ void aiGenDudeNewState(DBloodActor* actor, AISTATE* pAIState)
int stateSeq = actor->xspr.data2 + pAIState->seqId;
if (pAIState->seqId >= 0 && getSequence(stateSeq))
{
seqSpawn(stateSeq, actor, pAIState->funcId);
seqSpawn(stateSeq, actor, *pAIState->funcId);
}
if (pAIState->enterFunc)
@ -1832,7 +1832,7 @@ bool doExplosion(DBloodActor* actor, int nType)
else if (nType <= 6) { nSeq = 4; nSnd = 303; }
else if (nType == 7) { nSeq = 4; nSnd = 303; }
seqSpawn(nSeq, actExplosion, -1);
seqSpawn(nSeq, actExplosion);
sfxPlay3DSound(actExplosion, nSnd, -1, 0);
return true;
@ -1869,7 +1869,7 @@ DBloodActor* genDudeSpawn(DBloodActor* source, DBloodActor* actor, double nDist)
spawned->xspr.data3 = 0;
// spawn seq
seqSpawn(genDudeSeqStartId(spawned), spawned, -1);
seqSpawn(genDudeSeqStartId(spawned), spawned);
// inherit movement speed.
spawned->xspr.busyTime = source->xspr.busyTime;
@ -2012,7 +2012,7 @@ void genDudeTransform(DBloodActor* actor)
genDudePrepare(actor, kGenDudePropertyMass);
[[fallthrough]]; // go below
default:
seqSpawn(seqId, actor, -1);
seqSpawn(seqId, actor);
// save target
auto target = actor->GetTarget();
@ -2446,7 +2446,7 @@ bool genDudePrepare(DBloodActor* actor, int propId)
}
case kGenDudePropertySpriteSize: {
if (seqGetStatus(actor) == -1)
seqSpawn(actor->xspr.data2 + actor->xspr.aiState->seqId, actor, -1);
seqSpawn(actor->xspr.data2 + actor->xspr.aiState->seqId, actor);
// make sure dudes aren't in the floor or ceiling
double zTop, zBot;
@ -2577,7 +2577,7 @@ bool actKillModernDude(DBloodActor* actor, DAMAGE_TYPE damageType)
playGenDudeSound(actor, kGenDudeSndTransforming);
int seqId = actor->xspr.data2 + kGenDudeSeqTransform;
if (getSequence(seqId)) seqSpawn(seqId, actor, -1);
if (getSequence(seqId)) seqSpawn(seqId, actor);
else
{
seqKill(actor);
@ -2619,7 +2619,7 @@ bool actKillModernDude(DBloodActor* actor, DAMAGE_TYPE damageType)
void modernCustomDudeDeath(DBloodActor* actor, int nSeq, int damageType)
{
playGenDudeSound(actor, kGenDudeSndDeathNormal);
int dudeToGib = (actCheckRespawn(actor)) ? -1 : ((nSeq == 3) ? nDudeToGibClient2 : nDudeToGibClient1);
auto dudeToGib = (actCheckRespawn(actor)) ? nullptr : ((nSeq == 3) ? AF(DudeToGibCallback2) : AF(DudeToGibCallback1));
if (nSeq == 3)
{
GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
@ -2645,7 +2645,7 @@ void modernCustomDudeDeath(DBloodActor* actor, int nSeq, int damageType)
void modernCustomDudeBurningDeath(DBloodActor* actor, int nSeq)
{
playGenDudeSound(actor, kGenDudeSndDeathExplode);
int dudeToGib = (actCheckRespawn(actor)) ? -1 : nDudeToGibClient1;
auto dudeToGib = (actCheckRespawn(actor)) ? nullptr : AF(DudeToGibCallback1);
if (Chance(0x4000)) spawnGibs(actor, GIBTYPE_27, -0xccccc);

View file

@ -40,23 +40,23 @@ static void entryAIdle(DBloodActor*);
static void entryEStand(DBloodActor*);
AISTATE zombieAIdle = { kAiStateIdle, 0, -1, 0, entryAIdle, NULL, aiThinkTarget, NULL };
AISTATE zombieAChase = { kAiStateChase, 8, -1, 0, NULL, aiMoveForward, zombaThinkChase, NULL };
AISTATE zombieAPonder = { kAiStateOther, 0, -1, 0, NULL, aiMoveTurn, zombaThinkPonder, NULL };
AISTATE zombieAGoto = { kAiStateMove, 8, -1, 1800, NULL, aiMoveForward, zombaThinkGoto, &zombieAIdle };
AISTATE zombieAHack = { kAiStateChase, 6, nHackClient, 80, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieASearch = { kAiStateSearch, 8, -1, 1800, NULL, aiMoveForward, zombaThinkSearch, &zombieAIdle };
AISTATE zombieARecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieATeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieARecoil2 = { kAiStateRecoil, 1, -1, 360, NULL, NULL, NULL, &zombieAStand };
AISTATE zombieAStand = { kAiStateMove, 11, nStandClient, 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieEIdle = { kAiStateIdle, 12, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombieEUp2 = { kAiStateMove, 0, -1, 1, entryEZombie, NULL, NULL, &zombieASearch };
AISTATE zombieEUp = { kAiStateMove, 9, -1, 180, entryEStand, NULL, NULL, &zombieEUp2 };
AISTATE zombie2Idle = { kAiStateIdle, 0, -1, 0, entryAIdle, NULL, myThinkTarget, NULL };
AISTATE zombie2Search = { kAiStateSearch, 8, -1, 1800, NULL, NULL, myThinkSearch, &zombie2Idle };
AISTATE zombieSIdle = { kAiStateIdle, 10, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombie13AC2C = { kAiStateOther, 11, nStandClient, 0, entryEZombie, NULL, NULL, &zombieAPonder };
AISTATE zombieAIdle = { kAiStateIdle, 0, nullptr, 0, entryAIdle, NULL, aiThinkTarget, NULL };
AISTATE zombieAChase = { kAiStateChase, 8, nullptr, 0, NULL, aiMoveForward, zombaThinkChase, NULL };
AISTATE zombieAPonder = { kAiStateOther, 0, nullptr, 0, NULL, aiMoveTurn, zombaThinkPonder, NULL };
AISTATE zombieAGoto = { kAiStateMove, 8, nullptr, 1800, NULL, aiMoveForward, zombaThinkGoto, &zombieAIdle };
AISTATE zombieAHack = { kAiStateChase, 6, &AF(HackSeqCallback), 80, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieASearch = { kAiStateSearch, 8, nullptr, 1800, NULL, aiMoveForward, zombaThinkSearch, &zombieAIdle };
AISTATE zombieARecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieATeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieARecoil2 = { kAiStateRecoil, 1, nullptr, 360, NULL, NULL, NULL, &zombieAStand };
AISTATE zombieAStand = { kAiStateMove, 11, &AF(StandSeqCallback), 0, NULL, NULL, NULL, &zombieAPonder };
AISTATE zombieEIdle = { kAiStateIdle, 12, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombieEUp2 = { kAiStateMove, 0, nullptr, 1, entryEZombie, NULL, NULL, &zombieASearch };
AISTATE zombieEUp = { kAiStateMove, 9, nullptr, 180, entryEStand, NULL, NULL, &zombieEUp2 };
AISTATE zombie2Idle = { kAiStateIdle, 0, nullptr, 0, entryAIdle, NULL, myThinkTarget, NULL };
AISTATE zombie2Search = { kAiStateSearch, 8, nullptr, 1800, NULL, NULL, myThinkSearch, &zombie2Idle };
AISTATE zombieSIdle = { kAiStateIdle, 10, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombie13AC2C = { kAiStateOther, 11, &AF(StandSeqCallback), 0, entryEZombie, NULL, NULL, &zombieAPonder };
void HackSeqCallback(DBloodActor* actor)
{

View file

@ -34,16 +34,16 @@ static void zombfThinkGoto(DBloodActor* actor);
static void zombfThinkChase(DBloodActor* actor);
AISTATE zombieFIdle = { kAiStateIdle, 0, -1, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombieFChase = { kAiStateChase, 8, -1, 0, NULL, aiMoveForward, zombfThinkChase, NULL };
AISTATE zombieFGoto = { kAiStateMove, 8, -1, 600, NULL, aiMoveForward, zombfThinkGoto, &zombieFIdle };
AISTATE zombieFDodge = { kAiStateMove, 8, -1, 0, NULL, aiMoveDodge, zombfThinkChase, &zombieFChase };
AISTATE zombieFHack = { kAiStateChase, 6, nZombfHackClient, 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFPuke = { kAiStateChase, 9, nZombfPukeClient, 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFThrow = { kAiStateChase, 6, nZombfThrowClient, 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFSearch = { kAiStateSearch, 8, -1, 1800, NULL, aiMoveForward, zombfThinkSearch, &zombieFIdle };
AISTATE zombieFRecoil = { kAiStateRecoil, 5, -1, 0, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFTeslaRecoil = { kAiStateRecoil, 4, -1, 0, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFIdle = { kAiStateIdle, 0, nullptr, 0, NULL, NULL, aiThinkTarget, NULL };
AISTATE zombieFChase = { kAiStateChase, 8, nullptr, 0, NULL, aiMoveForward, zombfThinkChase, NULL };
AISTATE zombieFGoto = { kAiStateMove, 8, nullptr, 600, NULL, aiMoveForward, zombfThinkGoto, &zombieFIdle };
AISTATE zombieFDodge = { kAiStateMove, 8, nullptr, 0, NULL, aiMoveDodge, zombfThinkChase, &zombieFChase };
AISTATE zombieFHack = { kAiStateChase, 6, &AF(zombfHackSeqCallback), 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFPuke = { kAiStateChase, 9, &AF(PukeSeqCallback), 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFThrow = { kAiStateChase, 6, &AF(ThrowSeqCallback), 120, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFSearch = { kAiStateSearch, 8, nullptr, 1800, NULL, aiMoveForward, zombfThinkSearch, &zombieFIdle };
AISTATE zombieFRecoil = { kAiStateRecoil, 5, nullptr, 0, NULL, NULL, NULL, &zombieFChase };
AISTATE zombieFTeslaRecoil = { kAiStateRecoil, 4, nullptr, 0, NULL, NULL, NULL, &zombieFChase };
void zombfHackSeqCallback(DBloodActor* actor)
{

View file

@ -230,10 +230,6 @@ DEF_ANIMATOR(SpidBirthSeqCallback)
DEF_ANIMATOR(tchernobogFire)
DEF_ANIMATOR(tchernobogBurnSeqCallback)
DEF_ANIMATOR(tchernobogBurnSeqCallback2)
DEF_ANIMATOR(genDudeAttack1)
DEF_ANIMATOR(punchCallback)
DEF_ANIMATOR(ThrowCallback1)
DEF_ANIMATOR(ThrowCallback2)
DEF_ANIMATOR(HackSeqCallback)
DEF_ANIMATOR(StandSeqCallback)
DEF_ANIMATOR(zombfHackSeqCallback)
@ -244,6 +240,13 @@ DEF_ANIMATOR(PlayerKneelsOver)
DEF_ANIMATOR(FireballTrapSeqCallback)
DEF_ANIMATOR(MGunFireSeqCallback)
DEF_ANIMATOR(MGunOpenSeqCallback)
// nnext
DEF_ANIMATOR(genDudeAttack1)
DEF_ANIMATOR(punchCallback)
DEF_ANIMATOR(ThrowCallback1)
DEF_ANIMATOR(ThrowCallback2)
// event callbacks
DEF_ANIMATOR(fxFlameLick) // 0
DEF_ANIMATOR(Remove) // 1

View file

@ -293,10 +293,10 @@ void Respawn(DBloodActor* actor) // 9
default:
actor->clipdist = getDudeInfo(nType + kDudeBase)->fClipdist();
if (getSequence(getDudeInfo(nType + kDudeBase)->seqStartID))
seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor, -1);
seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor);
break;
case kDudeModernCustom:
seqSpawn(genDudeSeqStartId(actor), actor, -1);
seqSpawn(genDudeSeqStartId(actor), actor);
break;
}
@ -309,7 +309,7 @@ void Respawn(DBloodActor* actor) // 9
actor->clipdist = getDudeInfo(nType + kDudeBase)->fClipdist();
actor->xspr.health = getDudeInfo(nType + kDudeBase)->startHealth << 4;
if (getSequence(getDudeInfo(nType + kDudeBase)->seqStartID))
seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor, -1);
seqSpawn(getDudeInfo(nType + kDudeBase)->seqStartID, actor);
#endif
aiInitSprite(actor);
actor->xspr.key = 0;

View file

@ -184,7 +184,7 @@ DBloodActor* CFX::fxSpawnActor(FX_ID nFx, sectortype* pSector, const DVector3& p
if (pFX->seq)
{
actor->addX();
seqSpawn(pFX->seq, actor, -1);
seqSpawn(pFX->seq, actor);
}
if (angle == nullAngle)
angle = mapangle(pFX->defangle);

View file

@ -172,60 +172,60 @@ AISTATE genPatrolStates[] = {
//-------------------------------------------------------------------------------
{ kAiStatePatrolWaitL, 0, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitL, 7, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitL, 0, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitL, 7, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 9, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 8, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 0, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 6, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 7, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 9, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 8, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 0, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 6, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveL, 7, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 9, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 8, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 0, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 6, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 7, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 9, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 8, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 0, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 6, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnL, 7, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
//-------------------------------------------------------------------------------
{ kAiStatePatrolWaitW, 0, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 10, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 13, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 17, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 8, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 9, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 0, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 10, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 13, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 17, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 8, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitW, 9, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 0, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 10, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 13, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 8, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 9, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 7, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 6, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 0, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 10, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 13, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 8, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 9, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 7, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveW, 6, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 0, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 10, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 13, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 8, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 9, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 7, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 6, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 0, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 10, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 13, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 8, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 9, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 7, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnW, 6, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
//-------------------------------------------------------------------------------
{ kAiStatePatrolWaitC, 17, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 11, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 10, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 14, -1, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 17, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 11, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 10, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolWaitC, 14, nullptr, 0, NULL, NULL, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 14, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 10, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 9, -1, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 14, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 10, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolMoveC, 9, nullptr, 0, NULL, aiPatrolMove, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 14, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 10, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 9, -1, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 14, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 10, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
{ kAiStatePatrolTurnC, 9, nullptr, 0, aiPatrolRandGoalAng, aiPatrolTurn, aiPatrolThink, NULL },
//-------------------------------------------------------------------------------
@ -283,7 +283,7 @@ static DBloodActor* nnExtSpawnDude(DBloodActor* sourceactor, DBloodActor* origin
pDudeActor->xspr.health = getDudeInfo(nType)->startHealth << 4;
if (fileSystem.FindResource(getDudeInfo(nType)->seqStartID, "SEQ"))
seqSpawn(getDudeInfo(nType)->seqStartID, pDudeActor, -1);
seqSpawn(getDudeInfo(nType)->seqStartID, pDudeActor);
// add a way to inherit some values of spawner by dude.
if (sourceactor->spr.flags & kModernTypeFlag1) {
@ -3686,9 +3686,9 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
else
{
if (sourceactor->xspr.data3 == 3 || sourceactor->xspr.data3 == 1)
seqSpawn(sourceactor->xspr.data2, SS_FLOOR, pSector, -1);
seqSpawn(sourceactor->xspr.data2, SS_FLOOR, pSector);
if (sourceactor->xspr.data3 == 3 || sourceactor->xspr.data3 == 2)
seqSpawn(sourceactor->xspr.data2, SS_CEILING, pSector, -1);
seqSpawn(sourceactor->xspr.data2, SS_CEILING, pSector);
}
return;
}
@ -3704,20 +3704,20 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
else
{
if (sourceactor->xspr.data3 == 3 || sourceactor->xspr.data3 == 1)
seqSpawn(sourceactor->xspr.data2, SS_WALL, pWall, -1);
seqSpawn(sourceactor->xspr.data2, SS_WALL, pWall);
if (sourceactor->xspr.data3 == 3 || sourceactor->xspr.data3 == 2) {
if (!pWall->twoSided()) {
if (sourceactor->xspr.data3 == 3)
seqSpawn(sourceactor->xspr.data2, SS_WALL, pWall, -1);
seqSpawn(sourceactor->xspr.data2, SS_WALL, pWall);
}
else {
if (!(pWall->cstat & CSTAT_WALL_MASKED))
pWall->cstat |= CSTAT_WALL_MASKED;
seqSpawn(sourceactor->xspr.data2, SS_MASKED, pWall, -1);
seqSpawn(sourceactor->xspr.data2, SS_MASKED, pWall);
}
}
@ -3783,7 +3783,7 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
spawned->spr.pos = pos;
spawned->addX();
seqSpawn(sourceactor->xspr.data2, spawned, -1);
seqSpawn(sourceactor->xspr.data2, spawned);
if (sourceactor->spr.flags & kModernTypeFlag1)
{
spawned->spr.pal = sourceactor->spr.pal;
@ -3809,7 +3809,7 @@ void useSeqSpawnerGen(DBloodActor* sourceactor, int objType, sectortype* pSector
}
else
{
seqSpawn(sourceactor->xspr.data2, iactor, -1);
seqSpawn(sourceactor->xspr.data2, iactor);
}
if (sourceactor->xspr.data4 > 0)

View file

@ -806,7 +806,7 @@ void playerStart(int nPlayer, int bNewLevel)
pPlayer->pDudeInfo = pDudeInfo;
playerSetRace(pPlayer, kModeHuman);
playerResetPosture(pPlayer);
seqSpawn(pDudeInfo->seqStartID, actor, -1);
seqSpawn(pDudeInfo->seqStartID, actor);
if (nPlayer == myconnectindex)
actor->spr.cstat2 |= CSTAT2_SPRITE_MAPPED;
double top, bottom;
@ -1541,14 +1541,14 @@ void ProcessInput(DBloodPlayer* pPlayer)
if (bSeqStat)
{
if (pPlayer->deathTime > 360)
seqSpawn(pPlayer->pDudeInfo->seqStartID + 14, pPlayer->GetActor(), nPlayerSurviveClient);
seqSpawn(pPlayer->pDudeInfo->seqStartID + 14, pPlayer->GetActor(), AF(PlayerSurvive));
}
else if (seqGetStatus(pPlayer->GetActor()) < 0)
{
if (pPlayer->GetActor())
pPlayer->GetActor()->ChangeType(kThingBloodChunks);
actPostSprite(pPlayer->GetActor(), kStatThing);
seqSpawn(pPlayer->pDudeInfo->seqStartID + 15, pPlayer->GetActor(), -1);
seqSpawn(pPlayer->pDudeInfo->seqStartID + 15, pPlayer->GetActor());
playerReset(pPlayer);
if (gGameOptions.nGameType == 0 && numplayers == 1)
{
@ -1860,16 +1860,16 @@ void playerProcess(DBloodPlayer* pPlayer)
switch (pPlayer->posture)
{
case 1:
seqSpawn(dudeInfo[nType].seqStartID + 9, actor, -1);
seqSpawn(dudeInfo[nType].seqStartID + 9, actor);
break;
case 2:
seqSpawn(dudeInfo[nType].seqStartID + 10, actor, -1);
seqSpawn(dudeInfo[nType].seqStartID + 10, actor);
break;
default:
if (!nSpeed)
seqSpawn(dudeInfo[nType].seqStartID, actor, -1);
seqSpawn(dudeInfo[nType].seqStartID, actor);
else
seqSpawn(dudeInfo[nType].seqStartID + 8, actor, -1);
seqSpawn(dudeInfo[nType].seqStartID + 8, actor);
break;
}
}
@ -2065,7 +2065,7 @@ int playerDamageSprite(DBloodActor* source, DBloodPlayer* pPlayer, DAMAGE_TYPE n
DBloodActor* pActor = pPlayer->GetActor();
DUDEINFO* pDudeInfo = getDudeInfo(pActor->GetType());
int nDeathSeqID = -1;
int nKneelingPlayer = -1;
VMFunction* nKneelingPlayer = nullptr;
bool va = playerSeqPlaying(pPlayer, 16);
if (!pActor->xspr.health)
{
@ -2156,7 +2156,7 @@ int playerDamageSprite(DBloodActor* source, DBloodPlayer* pPlayer, DAMAGE_TYPE n
DAMAGEINFO* pDamageInfo = &damageInfo[nDamageType];
sfxPlay3DSound(pPlayer->GetActor(), pDamageInfo->at10[0], 0, 2);
nDeathSeqID = 16;
nKneelingPlayer = nPlayerKneelClient;
nKneelingPlayer = AF(PlayerKneelsOver);
powerupActivate(pPlayer, kPwUpDeliriumShroom);
pActor->SetTarget(source);
evPostActor(pPlayer->GetActor(), 15, AF(FinishHim));

View file

@ -36,68 +36,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_BLD_NS
static void (*seqClientCallback[])(DBloodActor*) = {
FireballSeqCallback,
Fx33Callback,
NapalmSeqCallback,
Fx32Callback,
TreeToGibCallback,
DudeToGibCallback1,
DudeToGibCallback2,
batBiteSeqCallback,
SlashSeqCallback,
StompSeqCallback,
eelBiteSeqCallback,
BurnSeqCallback,
SeqAttackCallback,
cerberusBiteSeqCallback,
cerberusBurnSeqCallback,
cerberusBurnSeqCallback2,
TommySeqCallback,
TeslaSeqCallback,
ShotSeqCallback,
cultThrowSeqCallback,
cultThrowSeqCallback2,
cultThrowSeqCallback3,
SlashFSeqCallback,
ThrowFSeqCallback,
ThrowSSeqCallback,
BlastSSeqCallback,
ghostSlashSeqCallback,
ghostThrowSeqCallback,
ghostBlastSeqCallback,
GillBiteSeqCallback,
HandJumpSeqCallback,
houndBiteSeqCallback,
houndBurnSeqCallback,
podAttack,
podExplode,
podPlaySound1,
podPlaySound2,
ratBiteSeqCallback,
SpidBiteSeqCallback,
SpidJumpSeqCallback,
SpidBirthSeqCallback,
tchernobogBurnSeqCallback,
tchernobogBurnSeqCallback2,
tchernobogFire,
genDudeAttack1,
punchCallback,
ThrowCallback1,
ThrowCallback2,
HackSeqCallback,
StandSeqCallback,
zombfHackSeqCallback,
PukeSeqCallback,
ThrowSeqCallback,
PlayerSurvive,
PlayerKneelsOver,
FireballTrapSeqCallback,
MGunFireSeqCallback,
MGunOpenSeqCallback,
};
//---------------------------------------------------------------------------
//
//
@ -399,10 +337,10 @@ void SEQINST::Update()
}
// all seq callbacks are for sprites, but there's no sanity checks here that what gets passed is meant to be for a sprite...
if (pSequence->frames[frameIndex].trigger && callback != -1)
if (pSequence->frames[frameIndex].trigger && callback != nullptr)
{
assert(type == SS_SPRITE);
if (target.isActor()) seqClientCallback[callback](target.actor());
if (target.isActor()) callActorFunction(callback, target.actor());
}
}
@ -593,7 +531,7 @@ Seq* getSequence(int res_id)
//
//---------------------------------------------------------------------------
void seqSpawn_(int nSeqID, int type, const EventObject& eob, int callback)
void seqSpawn_(int nSeqID, int type, const EventObject& eob, VMFunction* callback)
{
Seq* pSequence = getSequence(nSeqID);
@ -621,18 +559,18 @@ void seqSpawn_(int nSeqID, int type, const EventObject& eob, int callback)
pInst->Update();
}
void seqSpawn(int nSeqID, DBloodActor* actor, int callback)
void seqSpawn(int nSeqID, DBloodActor* actor, VMFunction* callback)
{
seqSpawn_(nSeqID, SS_SPRITE, EventObject(actor), callback);
}
void seqSpawn(int nSeqID, int type, sectortype* sect, int callback)
void seqSpawn(int nSeqID, int type, sectortype* sect, VMFunction* callback)
{
assert(type == SS_FLOOR || type == SS_CEILING);
seqSpawn_(nSeqID, type, EventObject(sect), callback);
}
void seqSpawn(int nSeqID, int type, walltype* wal, int callback)
void seqSpawn(int nSeqID, int type, walltype* wal, VMFunction* callback)
{
assert(type == SS_WALL || type == SS_MASKED);
seqSpawn_(nSeqID, type, EventObject(wal), callback);

View file

@ -80,7 +80,7 @@ struct SEQINST
int type;
int nSeqID;
int callback;
VMFunction* callback;
int16_t timeCounter;
uint8_t frameIndex;
void Update();
@ -101,9 +101,9 @@ void seqPrecacheId(int id, int palette);
SEQINST* GetInstance(int a1, EventObject& a2);
SEQINST* GetInstance(DBloodActor* actor);
void UnlockInstance(SEQINST* pInst);
void seqSpawn(int a1, int ty, walltype* a2, int a4 = -1);
void seqSpawn(int a1, int ty, sectortype* a2, int a4 = -1);
void seqSpawn(int a1, DBloodActor* actor, int a4 = -1);
void seqSpawn(int a1, int ty, walltype* a2, VMFunction* a4 = nullptr);
void seqSpawn(int a1, int ty, sectortype* a2, VMFunction* a4 = nullptr);
void seqSpawn(int a1, DBloodActor* actor, VMFunction* a4 = nullptr);
void seqKill(int a1, walltype* a2);
void seqKill(int a1, sectortype* a2);

View file

@ -2,127 +2,5 @@
BEGIN_BLD_NS
class DBloodActor;
void FireballSeqCallback(DBloodActor*);
void Fx33Callback(DBloodActor*);
void NapalmSeqCallback(DBloodActor*);
void Fx32Callback(DBloodActor*);
void TreeToGibCallback(DBloodActor*);
void DudeToGibCallback1(DBloodActor*);
void DudeToGibCallback2(DBloodActor*);
void batBiteSeqCallback(DBloodActor*);
void SlashSeqCallback(DBloodActor*);
void StompSeqCallback(DBloodActor*);
void eelBiteSeqCallback(DBloodActor*);
void BurnSeqCallback(DBloodActor*);
void SeqAttackCallback(DBloodActor*);
void cerberusBiteSeqCallback(DBloodActor*);
void cerberusBurnSeqCallback(DBloodActor*);
void cerberusBurnSeqCallback2(DBloodActor*);
void TommySeqCallback(DBloodActor*);
void TeslaSeqCallback(DBloodActor*);
void ShotSeqCallback(DBloodActor*);
void cultThrowSeqCallback(DBloodActor*);
void cultThrowSeqCallback2(DBloodActor*);
void cultThrowSeqCallback3(DBloodActor*);
void SlashFSeqCallback(DBloodActor*);
void ThrowFSeqCallback(DBloodActor*);
void BlastSSeqCallback(DBloodActor*);
void ThrowSSeqCallback(DBloodActor*);
void ghostSlashSeqCallback(DBloodActor*);
void ghostThrowSeqCallback(DBloodActor*);
void ghostBlastSeqCallback(DBloodActor*);
void GillBiteSeqCallback(DBloodActor*);
void HandJumpSeqCallback(DBloodActor*);
void houndBiteSeqCallback(DBloodActor*);
void houndBurnSeqCallback(DBloodActor*);
void podPlaySound1(DBloodActor*);
void podPlaySound2(DBloodActor*);
void podAttack(DBloodActor*);
void podExplode(DBloodActor*);
void ratBiteSeqCallback(DBloodActor*);
void SpidBiteSeqCallback(DBloodActor*);
void SpidJumpSeqCallback(DBloodActor*);
void SpidBirthSeqCallback(DBloodActor*);
void tchernobogFire(DBloodActor*);
void tchernobogBurnSeqCallback(DBloodActor*);
void tchernobogBurnSeqCallback2(DBloodActor*);
void genDudeAttack1(DBloodActor*);
void punchCallback(DBloodActor*);
void ThrowCallback1(DBloodActor*);
void ThrowCallback2(DBloodActor*);
void HackSeqCallback(DBloodActor*);
void StandSeqCallback(DBloodActor*);
void zombfHackSeqCallback(DBloodActor*);
void PukeSeqCallback(DBloodActor*);
void ThrowSeqCallback(DBloodActor*);
void PlayerSurvive(DBloodActor*);
void PlayerKneelsOver(DBloodActor*);
void FireballTrapSeqCallback(DBloodActor*);
void MGunFireSeqCallback(DBloodActor*);
void MGunOpenSeqCallback(DBloodActor*);
enum
{
nFireballClient,
dword_2192D8,
nNapalmClient,
dword_2192E0,
nTreeToGibClient,
nDudeToGibClient1,
nDudeToGibClient2,
nBatBiteClient,
nSlashClient,
nStompClient,
nEelBiteClient,
nBurnClient,
nAttackClient,
nCerberusBiteClient,
nCerberusBurnClient,
nCerberusBurnClient2,
nTommyClient,
nTeslaClient,
nShotClient,
nThrowClient,
n68170Client,
n68230Client,
nSlashFClient,
nThrowFClient,
nThrowSClient,
nBlastSClient,
nGhostSlashClient,
nGhostThrowClient,
nGhostBlastClient,
nGillBiteClient,
nJumpClient,
nHoundBiteClient,
nHoundBurnClient,
nPodStartChaseClient,
nTentacleStartSearchClient,
dword_279B3C,
dword_279B40,
nRatBiteClient,
nSpidBiteClient,
nSpidJumpClient,
nSpidBirthClient,
dword_279B54,
dword_279B58,
dword_279B5C,
nGenDudeAttack1,
nGenDudePunch,
nGenDudeThrow1,
nGenDudeThrow2,
nHackClient,
nStandClient,
nZombfHackClient,
nZombfPukeClient,
nZombfThrowClient,
nPlayerSurviveClient,
nPlayerKneelClient,
nFireballTrapClient,
nMGunFireClient,
nMGunOpenClient,
};
END_BLD_NS

View file

@ -351,11 +351,11 @@ void OperateSprite(DBloodActor* actor, EVENT event)
switch (event.cmd) {
case kCmdOff:
if (!SetSpriteState(actor, 0, initiator)) break;
seqSpawn(40, actor, -1);
seqSpawn(40, actor);
break;
case kCmdOn:
if (!SetSpriteState(actor, 1, initiator)) break;
seqSpawn(38, actor, nMGunOpenClient);
seqSpawn(38, actor, AF(MGunOpenSeqCallback));
if (actor->xspr.data1 > 0)
actor->xspr.data2 = actor->xspr.data1;
break;
@ -396,12 +396,12 @@ void OperateSprite(DBloodActor* actor, EVENT event)
switch (event.cmd) {
case kCmdOff:
if (!SetSpriteState(actor, 0, initiator)) break;
seqSpawn(40, actor, -1);
seqSpawn(40, actor);
sfxKill3DSound(actor, 0, -1);
break;
case kCmdOn:
if (!SetSpriteState(actor, 1, initiator)) break;
seqSpawn(38, actor, -1);
seqSpawn(38, actor);
sfxPlay3DSound(actor, 441, 0, 0);
break;
}
@ -413,11 +413,11 @@ void OperateSprite(DBloodActor* actor, EVENT event)
break;
case kCmdOn:
if (!SetSpriteState(actor, 1, initiator)) break;
seqSpawn(37, actor, -1);
seqSpawn(37, actor);
break;
default:
SetSpriteState(actor, actor->xspr.state ^ 1, initiator);
if (actor->xspr.state) seqSpawn(37, actor, -1);
if (actor->xspr.state) seqSpawn(37, actor);
break;
}
break;
@ -2485,10 +2485,10 @@ void ActivateGenerator(DBloodActor* actor)
FireballTrapSeqCallback(actor);
break;
case 1:
seqSpawn(35, actor, nFireballTrapClient);
seqSpawn(35, actor, AF(FireballTrapSeqCallback));
break;
case 2:
seqSpawn(36, actor, nFireballTrapClient);
seqSpawn(36, actor, AF(FireballTrapSeqCallback));
break;
}
break;
@ -2547,7 +2547,7 @@ void MGunFireSeqCallback(DBloodActor* actor)
void MGunOpenSeqCallback(DBloodActor* actor)
{
seqSpawn(39, actor, nMGunFireClient);
seqSpawn(39, actor, AF(MGunFireSeqCallback));
}

View file

@ -341,7 +341,7 @@ DEFINE_ACTION_FUNCTION(DBloodActor, seqSpawnID) // will be changed later.
{
PARAM_SELF_PROLOGUE(DBloodActor);
PARAM_INT(seqid);
PARAM_INT(cbid);
PARAM_POINTER(cbid, VMFunction);
seqSpawn(seqid, self, cbid);
return 0;
}
@ -414,6 +414,11 @@ DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVect
return nullptr;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void callActorFunction(VMFunction* funcID, DBloodActor* actor)
{
if (funcID)

View file

@ -1949,7 +1949,7 @@ void AltFireNapalm(int, DBloodPlayer* pPlayer)
{
missile->xspr.data4 = ClipHigh(pPlayer->ammoCount[4], 12);
UseAmmo(pPlayer, 4, missile->xspr.data4);
seqSpawn(22, missile, -1);
seqSpawn(22, missile);
actBurnSprite(pPlayer->GetActor(), missile, 600);
evPostActor(missile, 0, AF(fxFlameLick));
sfxPlay3DSound(missile, 480, 2, 0);

View file

@ -10,7 +10,7 @@ class BloodMissileBase : BloodActor
meta double randomVel;
meta int seqID;
meta name seqName;
meta int seqCallbackID; // make this a function name later
meta VMFunction seqCallbackID;
property prefix: none;
property speed: speed;
@ -29,7 +29,6 @@ class BloodMissileBase : BloodActor
{
seqID -1;
spawnsoundID -1;
seqCallbackID -1;
}
virtual void initMissile(BloodActor spawner)
@ -143,7 +142,7 @@ class BloodMissileFlameSpray : BloodMissileBase
{
super.InitMissile(spawner);
int index = Blood.Chance(0x8000)? 1 : 0;
self.seqSpawnID(index, -1);
self.seqSpawnID(index, nullptr);
}
}
@ -157,7 +156,7 @@ class BloodMissileFireball : BloodMissileBase
clipdist 8.000000;
spawnsoundID 441;
seqID 22;
seqCallbackID nFireballClient;
seqCallbackID "BloodActor.FireballSeqCallback";
}
}
class BloodMissileTeslaRegular : BloodMissileBase
@ -239,7 +238,7 @@ class BloodMissileFireballNapalm : BloodMissileBase
clipdist 6.000000;
spawnsoundID 441;
seqID 61;
seqCallbackID nNapalmClient;
seqCallbackID "BloodActor.NapalmSeqCallback";
}
}
class BloodMissileFireballCerberus : BloodMissileBase
@ -251,7 +250,7 @@ class BloodMissileFireballCerberus : BloodMissileBase
shade -128;
clipdist 6.000000;
seqID 61;
seqCallbackID dword_2192E0;
seqCallbackID "BloodActor.Fx32Callback";
}
}
class BloodMissileFireballTchernobog : BloodMissileBase
@ -263,7 +262,7 @@ class BloodMissileFireballTchernobog : BloodMissileBase
shade -128;
clipdist 4.000000;
seqID 23;
seqCallbackID dword_2192D8;
seqCallbackID "BloodActor.Fx33Callback";
movementAdd 0.5;
RandomVel 0x11111;
}

View file

@ -118,69 +118,6 @@ class BloodActor : CoreActor native
};
enum SEQ_CALLBACK_ID
{
nFireballClient,
dword_2192D8,
nNapalmClient,
dword_2192E0,
nTreeToGibClient,
nDudeToGibClient1,
nDudeToGibClient2,
nBatBiteClient,
nSlashClient,
nStompClient,
nEelBiteClient,
nBurnClient,
nAttackClient,
nCerberusBiteClient,
nCerberusBurnClient,
nCerberusBurnClient2,
nTommyClient,
nTeslaClient,
nShotClient,
nThrowClient,
n68170Client,
n68230Client,
nSlashFClient,
nThrowFClient,
nThrowSClient,
nBlastSClient,
nGhostSlashClient,
nGhostThrowClient,
nGhostBlastClient,
nGillBiteClient,
nJumpClient,
nHoundBiteClient,
nHoundBurnClient,
nPodStartChaseClient,
nTentacleStartSearchClient,
dword_279B3C,
dword_279B40,
nRatBiteClient,
nSpidBiteClient,
nSpidJumpClient,
nSpidBirthClient,
dword_279B54,
dword_279B58,
dword_279B5C,
nGenDudeAttack1,
nGenDudePunch,
nGenDudeThrow1,
nGenDudeThrow2,
nHackClient,
nStandClient,
nZombfHackClient,
nZombfPukeClient,
nZombfThrowClient,
nPlayerSurviveClient,
nPlayerKneelClient,
nFireballTrapClient,
nMGunFireClient,
nMGunOpenClient,
};
// all callbacks, this is to allow using VM functions for all of them
native void aiGenDudeMoveForward();
native void aiMoveDodge();
@ -415,7 +352,7 @@ native void DropVoodooCb(); // unused
native void impactMissile(int hitcode);
native void play3DSoundID(int soundId, int a3 = -1, int a4 = 0);
native void seqSpawnID(int seqID, int seqCallbackID); // temporary. Callback will be turned into a function
native void seqSpawnID(int seqID, VMFunction seqCallbackID);
virtual int getRespawnTime()