- aiPatrolStop cleaned up.

This commit is contained in:
Christoph Oelckers 2021-09-05 19:18:29 +02:00
parent 5c1b2bee37
commit 7175439496

View file

@ -7863,9 +7863,11 @@ void aiPatrolSetMarker(spritetype* pSprite, XSPRITE* pXSprite) {
void aiPatrolStop(spritetype* pSprite, int target, bool alarm) void aiPatrolStop(spritetype* pSprite, int target, bool alarm)
{ {
auto actor = &bloodActors[pSprite->index]; auto actor = &bloodActors[pSprite->index];
if (xspriRangeIsFine(pSprite->extra)) auto targetactor = &bloodActors[target];
if (actor->hasX())
{ {
XSPRITE* pXSprite = &xsprite[pSprite->extra]; XSPRITE* pXSprite = &actor->x();
pXSprite->data3 = 0; // reset spot progress pXSprite->data3 = 0; // reset spot progress
pXSprite->unused1 &= ~kDudeFlagCrouch; // reset the crouch status pXSprite->unused1 &= ~kDudeFlagCrouch; // reset the crouch status
pXSprite->unused2 = kPatrolMoveForward; // reset path direction pXSprite->unused2 = kPatrolMoveForward; // reset path direction
@ -7873,28 +7875,32 @@ void aiPatrolStop(spritetype* pSprite, int target, bool alarm)
if (pXSprite->health <= 0) if (pXSprite->health <= 0)
return; return;
if (pXSprite->target_i >= 0 && sprite[pXSprite->target_i].type == kMarkerPath) { auto mytarget = actor->GetTarget();
if (target < 0) pSprite->ang = sprite[pXSprite->target_i].ang & 2047;
if (mytarget && mytarget->s().type == kMarkerPath)
{
if (targetactor == nullptr) pSprite->ang = mytarget->s().ang & 2047;
actor->SetTarget(nullptr); actor->SetTarget(nullptr);
} }
bool patrol = pXSprite->dudeFlag4; pXSprite->dudeFlag4 = 0; bool patrol = pXSprite->dudeFlag4;
if (spriRangeIsFine(target) && IsDudeSprite(&sprite[target]) && xspriRangeIsFine(sprite[target].extra)) { pXSprite->dudeFlag4 = 0;
if (targetactor && targetactor->hasX() && targetactor->IsDudeActor())
aiSetTarget_(pXSprite, target); {
aiActivateDude(&bloodActors[pXSprite->reference]); aiSetTarget(actor, targetactor);
aiActivateDude(actor);
// alarm only when in non-recoil state? // alarm only when in non-recoil state?
//if (((pXSprite->unused1 & kDudeFlagStealth) && stype != kAiStateRecoil) || !(pXSprite->unused1 & kDudeFlagStealth)) { //if (((pXSprite->unused1 & kDudeFlagStealth) && stype != kAiStateRecoil) || !(pXSprite->unused1 & kDudeFlagStealth)) {
if (alarm) aiPatrolAlarmFull(pSprite, &xsprite[sprite[target].extra], Chance(0x0100)); if (alarm) aiPatrolAlarmFull(pSprite, &targetactor->x(), Chance(0x0100));
else aiPatrolAlarmLite(pSprite, &xsprite[sprite[target].extra]); else aiPatrolAlarmLite(pSprite, &targetactor->x());
//} //}
} }
else else
{ {
aiInitSprite(actor); aiInitSprite(actor);
aiSetTarget_(pXSprite, pXSprite->targetX, pXSprite->targetY, pXSprite->targetZ); aiSetTarget(actor, pXSprite->targetX, pXSprite->targetY, pXSprite->targetZ);
} }
pXSprite->dudeFlag4 = patrol; // this must be kept so enemy can patrol after respawn again pXSprite->dudeFlag4 = patrol; // this must be kept so enemy can patrol after respawn again