diff --git a/source/games/blood/src/aigilbst.cpp b/source/games/blood/src/aigilbst.cpp index e74490ac9..94b2c5f89 100644 --- a/source/games/blood/src/aigilbst.cpp +++ b/source/games/blood/src/aigilbst.cpp @@ -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