- the remaining bits in aigilbst.cpp

This commit is contained in:
Christoph Oelckers 2022-09-28 09:14:02 +02:00
parent bb6e12a2b1
commit 0a2274a41d

View file

@ -61,14 +61,12 @@ void GillBiteSeqCallback(int, DBloodActor* actor)
{
if (!actor->ValidateTarget(__FUNCTION__)) return;
auto target = actor->GetTarget();
int dx = bcos(actor->int_ang());
int dy = bsin(actor->int_ang());
int dz = actor->int_pos().Z - target->int_pos().Z;
dx += Random3(2000);
dy += Random3(2000);
actFireVector(actor, 0, 0, dx, dy, dz, kVectorGillBite);
actFireVector(actor, 0, 0, dx, dy, dz, kVectorGillBite);
actFireVector(actor, 0, 0, dx, dy, dz, kVectorGillBite);
DVector3 vec(actor->spr.angle.ToVector() * 64, actor->spr.pos.Z - target->spr.pos.Z);
vec.X += Random3F(2000, 8);
vec.Y += Random3F(2000, 8);
actFireVector(actor, 0, 0, vec, kVectorGillBite);
actFireVector(actor, 0, 0, vec, kVectorGillBite);
actFireVector(actor, 0, 0, vec, kVectorGillBite);
}
static void gillThinkSearch(DBloodActor* actor)
@ -293,8 +291,7 @@ static void sub_6CD74(DBloodActor* actor)
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
if (!actor->ValidateTarget(__FUNCTION__)) return;
auto target = actor->GetTarget();
int z = actor->int_pos().Z + getDudeInfo(actor->spr.type)->eyeHeight;
int z2 = target->int_pos().Z + getDudeInfo(target->spr.type)->eyeHeight;
auto nAng = deltaangle(actor->spr.angle, actor->xspr.goalAng);
auto nTurnRange = pDudeInfo->TurnRange();
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
@ -306,14 +303,13 @@ static void sub_6CD74(DBloodActor* actor)
}
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
double nDist = dvec.Length();
int dz = z2 - z;
if (Chance(0x600) && nDist <= 0x40)
return;
AdjustVelocity(actor, ADJUSTER{
t1 += nAccel;
});
actor->set_int_bvel_z(-dz);
actor->vel.Z -= target->spr.pos.Z - actor->spr.pos.Z / 256.;
}
static void sub_6D03C(DBloodActor* actor)
@ -322,8 +318,7 @@ static void sub_6D03C(DBloodActor* actor)
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
if (!actor->ValidateTarget(__FUNCTION__)) return;
auto target = actor->GetTarget();
int z = actor->int_pos().Z + getDudeInfo(actor->spr.type)->eyeHeight;
int z2 = target->int_pos().Z + getDudeInfo(target->spr.type)->eyeHeight;
auto nAng = deltaangle(actor->spr.angle, actor->xspr.goalAng);
auto nTurnRange = pDudeInfo->TurnRange();
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
@ -335,14 +330,13 @@ static void sub_6D03C(DBloodActor* actor)
}
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
double nDist = dvec.Length();
int dz = (z2 - z) << 3;
if (Chance(0x4000) && nDist <= 0x40)
return;
AdjustVelocity(actor, ADJUSTER{
t1 += nAccel * 0.5;
});
actor->set_int_bvel_z(dz);
actor->vel.Z += target->spr.pos.Z - actor->spr.pos.Z / 32.;
}
END_BLD_NS