mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-21 19:11:06 +00:00
- two more functions in aibeast.cpp.
Note that the eyeHeight adjustment was removed because it was applied incorrectly and essentially non-functional. eyeHeight is in world coordinates but was used as if it was Q24.8, resulting in a value too small to be significant.
This commit is contained in:
parent
e9fc0d09a9
commit
1255fda4c1
1 changed files with 10 additions and 8 deletions
|
@ -435,12 +435,12 @@ static void sub_62AE0(DBloodActor* actor)
|
||||||
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
|
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
|
||||||
if (!actor->ValidateTarget(__FUNCTION__)) return;
|
if (!actor->ValidateTarget(__FUNCTION__)) return;
|
||||||
auto target = actor->GetTarget();
|
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 nAng = deltaangle(actor->spr.angle, actor->xspr.goalAng);
|
||||||
auto nTurnRange = pDudeInfo->TurnRange();
|
auto nTurnRange = pDudeInfo->TurnRange();
|
||||||
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
|
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
|
||||||
double nAccel = pDudeInfo->FrontSpeed() * 4;
|
double nAccel = pDudeInfo->FrontSpeed() * 4;
|
||||||
|
|
||||||
if (abs(nAng) > DAngle60)
|
if (abs(nAng) > DAngle60)
|
||||||
{
|
{
|
||||||
actor->xspr.goalAng += DAngle90;
|
actor->xspr.goalAng += DAngle90;
|
||||||
|
@ -448,14 +448,15 @@ static void sub_62AE0(DBloodActor* actor)
|
||||||
}
|
}
|
||||||
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
|
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
|
||||||
double nDist = dvec.Length();
|
double nDist = dvec.Length();
|
||||||
int dz = z2 - z;
|
|
||||||
if (Chance(0x600) && nDist <= 0x40)
|
if (Chance(0x600) && nDist <= 0x40)
|
||||||
return;
|
return;
|
||||||
AdjustVelocity(actor, ADJUSTER{
|
AdjustVelocity(actor, ADJUSTER{
|
||||||
t1 += nAccel;
|
t1 += nAccel;
|
||||||
});
|
});
|
||||||
|
|
||||||
actor->set_int_bvel_z(-dz);
|
double dz = target->spr.pos.Z - actor->spr.pos.Z;
|
||||||
|
actor->vel.Z -= dz / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sub_62D7C(DBloodActor* actor)
|
static void sub_62D7C(DBloodActor* actor)
|
||||||
|
@ -464,12 +465,12 @@ static void sub_62D7C(DBloodActor* actor)
|
||||||
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
|
DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type);
|
||||||
if (!actor->ValidateTarget(__FUNCTION__)) return;
|
if (!actor->ValidateTarget(__FUNCTION__)) return;
|
||||||
auto target = actor->GetTarget();
|
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 nAng = deltaangle(actor->spr.angle, actor->xspr.goalAng);
|
||||||
auto nTurnRange = pDudeInfo->TurnRange();
|
auto nTurnRange = pDudeInfo->TurnRange();
|
||||||
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
|
actor->spr.angle += clamp(nAng, -nTurnRange, nTurnRange);
|
||||||
double nAccel = pDudeInfo->FrontSpeed() * 4;
|
double nAccel = pDudeInfo->FrontSpeed() * 4;
|
||||||
|
|
||||||
if (abs(nAng) > DAngle60)
|
if (abs(nAng) > DAngle60)
|
||||||
{
|
{
|
||||||
actor->spr.angle += DAngle90;
|
actor->spr.angle += DAngle90;
|
||||||
|
@ -477,14 +478,15 @@ static void sub_62D7C(DBloodActor* actor)
|
||||||
}
|
}
|
||||||
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
|
auto dvec = actor->xspr.TargetPos.XY() - actor->spr.pos.XY();
|
||||||
double nDist = dvec.Length();
|
double nDist = dvec.Length();
|
||||||
int dz = (z2 - z) << 3;
|
|
||||||
if (Chance(0x4000) && nDist <= 0x40)
|
if (Chance(0x4000) && nDist <= 0x40)
|
||||||
return;
|
return;
|
||||||
AdjustVelocity(actor, ADJUSTER{
|
AdjustVelocity(actor, ADJUSTER{
|
||||||
t1 += nAccel * 0.5;
|
t1 += nAccel * 0.5;
|
||||||
});
|
});
|
||||||
|
|
||||||
actor->set_int_bvel_z(dz);
|
double dz = target->spr.pos.Z - actor->spr.pos.Z;
|
||||||
|
actor->vel.Z += dz / 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
Loading…
Reference in a new issue