mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-01 05:20:43 +00:00
- deal with int positions in approxdist calls
This commit is contained in:
parent
c53a2ac93a
commit
f80b228a83
8 changed files with 32 additions and 31 deletions
|
@ -6701,7 +6701,7 @@ void actFireVector(DBloodActor* shooter, int a2, int a3, int a4, int a5, int a6,
|
|||
int z = gHitInfo.int_hitpos().Z - MulScale(a6, 256, 14);
|
||||
auto pSector = gHitInfo.hitSector;
|
||||
uint8_t nSurf = kSurfNone;
|
||||
if (nRange == 0 || approxDist(gHitInfo.int_hitpos().X - shooter->int_pos().X, gHitInfo.int_hitpos().Y - shooter->int_pos().Y) < nRange)
|
||||
if (nRange == 0 || approxDist(gHitInfo.hitpos.XY() - shooter->spr.pos.XY()) < nRange)
|
||||
{
|
||||
switch (hit)
|
||||
{
|
||||
|
@ -6821,7 +6821,7 @@ void actFireVector(DBloodActor* shooter, int a2, int a3, int a4, int a5, int a6,
|
|||
a6 += Random3(4000);
|
||||
if (HitScan(actor, gHitInfo.int_hitpos().Z, a4, a5, a6, CLIPMASK1, tt) == 0)
|
||||
{
|
||||
if (approxDist(gHitInfo.int_hitpos().X - actor->int_pos().X, gHitInfo.int_hitpos().Y - actor->int_pos().Y) <= tt)
|
||||
if (approxDist(gHitInfo.hitpos.XY() - actor->spr.pos.XY()) <= tt)
|
||||
{
|
||||
auto pWall = gHitInfo.hitWall;
|
||||
auto pSector1 = gHitInfo.hitSector;
|
||||
|
|
|
@ -135,7 +135,7 @@ bool CanMove(DBloodActor* actor, DBloodActor* target, int nAngle, int nRange)
|
|||
int y = actor->int_pos().Y;
|
||||
int z = actor->int_pos().Z;
|
||||
HitScan(actor, z, bcos(nAngle), bsin(nAngle), 0, CLIPMASK0, nRange);
|
||||
int nDist = approxDist(x - gHitInfo.int_hitpos().X, y - gHitInfo.int_hitpos().Y);
|
||||
int nDist = approxDist(actor->spr.pos.XY() - gHitInfo.hitpos.XY());
|
||||
if (nDist - (actor->spr.clipdist << 2) < nRange)
|
||||
{
|
||||
if (gHitInfo.actor() == nullptr || target == nullptr || target != gHitInfo.actor())
|
||||
|
|
|
@ -751,7 +751,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
if (hit >= 0)
|
||||
{
|
||||
targetDist = dist - (target->spr.clipdist << 2);
|
||||
objDist = approxDist(gHitInfo.int_hitpos().X - actor->int_pos().X, gHitInfo.int_hitpos().Y - actor->int_pos().Y);
|
||||
objDist = approxDist(gHitInfo.hitpos.XY() - actor->spr.pos.XY());
|
||||
}
|
||||
|
||||
if (actor != gHitInfo.actor() && targetDist > objDist)
|
||||
|
@ -940,8 +940,8 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
case kMissileFireballTchernobog:
|
||||
{
|
||||
// allow attack if dude is far from object, but target is close to it
|
||||
int dudeDist = approxDist(gHitInfo.int_hitpos().X - actor->int_pos().X, gHitInfo.int_hitpos().Y - actor->int_pos().Y);
|
||||
int targetDist1 = approxDist(gHitInfo.int_hitpos().X - target->int_pos().X, gHitInfo.int_hitpos().Y - target->int_pos().Y);
|
||||
int dudeDist = approxDist(gHitInfo.hitpos.XY() - actor->spr.pos.XY());
|
||||
int targetDist1 = approxDist(gHitInfo.hitpos.XY() - target->spr.pos.XY());
|
||||
if (dudeDist < mdist)
|
||||
{
|
||||
//viewSetSystemMessage("DUDE CLOSE TO OBJ: %d, MDIST: %d", dudeDist, mdist);
|
||||
|
@ -1791,16 +1791,17 @@ void dudeLeechOperate(DBloodActor* actor, const EVENT& event)
|
|||
int nType = actTarget->spr.type - kDudeBase;
|
||||
DUDEINFO* pDudeInfo = &dudeInfo[nType];
|
||||
int z1 = (top - actor->int_pos().Z) - 256;
|
||||
auto atpos = actTarget->spr.pos;
|
||||
int x = actTarget->int_pos().X; int y = actTarget->int_pos().Y; int z = actTarget->int_pos().Z;
|
||||
int nDist = approxDist(x - actor->int_pos().X, y - actor->int_pos().Y);
|
||||
int nDist = approxDist(atpos.XY() - actor->spr.pos.XY());
|
||||
|
||||
if (nDist != 0 && cansee(actor->int_pos().X, actor->int_pos().Y, top, actor->sector(), x, y, z, actTarget->sector()))
|
||||
{
|
||||
int t = DivScale(nDist, 0x1aaaaa, 12);
|
||||
x += (actTarget->vel.X * t) >> 12;
|
||||
y += (actTarget->vel.Y * t) >> 12;
|
||||
int angBak = actor->int_ang();
|
||||
actor->set_int_ang(getangle(x - actor->int_pos().X, y - actor->int_pos().Y));
|
||||
auto angBak = actor->spr.angle;
|
||||
actor->spr.angle = VecToAngle(atpos - actor->spr.pos.XY());
|
||||
int dx = bcos(actor->int_ang());
|
||||
int dy = bsin(actor->int_ang());
|
||||
int tz = actTarget->int_pos().Z - (actTarget->spr.yrepeat * pDudeInfo->aimHeight) * 4;
|
||||
|
@ -1819,7 +1820,7 @@ void dudeLeechOperate(DBloodActor* actor, const EVENT& event)
|
|||
evPostActor(actor, t2, kCallbackLeechStateTimer);
|
||||
actor->xspr.data3 = ClipLow(actor->xspr.data3 - 1, 0);
|
||||
}
|
||||
actor->set_int_ang(angBak);
|
||||
actor->spr.angle = angBak;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -373,7 +373,7 @@ int VectorScan(DBloodActor* actor, int nOffset, int nZOffset, int dx, int dy, in
|
|||
actor->spr.cstat = bakCstat;
|
||||
while (nNum--)
|
||||
{
|
||||
if (nRange && approxDist(gHitInfo.int_hitpos().X - actor->int_pos().X, gHitInfo.int_hitpos().Y - actor->int_pos().Y) > nRange)
|
||||
if (nRange && approxDist(gHitInfo.hitpos.XY() - actor->spr.pos.XY()) > nRange)
|
||||
return -1;
|
||||
auto other = gHitInfo.actor();
|
||||
if (other != nullptr)
|
||||
|
@ -456,12 +456,12 @@ int VectorScan(DBloodActor* actor, int nOffset, int nZOffset, int dx, int dy, in
|
|||
|
||||
nOfs = (nOfs * pWall->yrepeat) / 8;
|
||||
nOfs += int((nSizY * pWall->ypan_) / 256);
|
||||
int nLength = approxDist(pWall->wall_int_pos().X - pWall->point2Wall()->wall_int_pos().X, pWall->wall_int_pos().Y - pWall->point2Wall()->wall_int_pos().Y);
|
||||
int nLength = approxDist(pWall->pos - pWall->point2Wall()->pos);
|
||||
int nHOffset;
|
||||
if (pWall->cstat & CSTAT_WALL_XFLIP)
|
||||
nHOffset = approxDist(gHitInfo.int_hitpos().X - pWall->point2Wall()->wall_int_pos().X, gHitInfo.int_hitpos().Y - pWall->point2Wall()->wall_int_pos().Y);
|
||||
nHOffset = approxDist(gHitInfo.hitpos.XY() - pWall->point2Wall()->pos);
|
||||
else
|
||||
nHOffset = approxDist(gHitInfo.int_hitpos().X - pWall->wall_int_pos().X, gHitInfo.int_hitpos().Y - pWall->wall_int_pos().Y);
|
||||
nHOffset = approxDist(gHitInfo.hitpos.XY() - pWall->pos);
|
||||
|
||||
nHOffset = pWall->xpan() + ((nHOffset * pWall->xrepeat) << 3) / nLength;
|
||||
nHOffset %= nSizX;
|
||||
|
|
|
@ -7694,7 +7694,7 @@ bool nnExtCanMove(DBloodActor* actor, DBloodActor* target, int nAngle, int nRang
|
|||
int x = actor->int_pos().X, y = actor->int_pos().Y, z = actor->int_pos().Z;
|
||||
auto pSector = actor->sector();
|
||||
HitScan(actor, z, Cos(nAngle) >> 16, Sin(nAngle) >> 16, 0, CLIPMASK0, nRange);
|
||||
int nDist = approxDist(x - gHitInfo.int_hitpos().X, y - gHitInfo.int_hitpos().Y);
|
||||
int nDist = approxDist(actor->spr.pos.XY() - gHitInfo.hitpos.XY());
|
||||
if (target != nullptr && nDist - (actor->spr.clipdist << 2) < nRange)
|
||||
return (target == gHitInfo.actor());
|
||||
|
||||
|
@ -7982,7 +7982,7 @@ void aiPatrolSetMarker(DBloodActor* actor)
|
|||
{
|
||||
if (!nextactor->hasX()) continue;
|
||||
|
||||
if (nextactor->xspr.locked || nextactor->xspr.isTriggered || nextactor->xspr.DudeLockout || (dist = approxDist(nextactor->int_pos().X - actor->int_pos().X, nextactor->int_pos().Y - actor->int_pos().Y)) > closest)
|
||||
if (nextactor->xspr.locked || nextactor->xspr.isTriggered || nextactor->xspr.DudeLockout || (dist = approxDist(nextactor->spr.pos.XY() - actor->spr.pos.XY())) > closest)
|
||||
continue;
|
||||
|
||||
GetActorExtents(nextactor, &zt1, &zb1);
|
||||
|
@ -8261,10 +8261,10 @@ void aiPatrolAlarmLite(DBloodActor* actor, DBloodActor* targetactor)
|
|||
continue;
|
||||
|
||||
double eaz2 = (getDudeInfo(targetactor->spr.type)->eyeHeight * targetactor->spr.yrepeat) * REPEAT_SCALE;
|
||||
int nDist = approxDist(dudeactor->int_pos().X - actor->int_pos().X, dudeactor->int_pos().Y - actor->int_pos().Y);
|
||||
int nDist = approxDist(dudeactor->spr.pos.XY() - actor->spr.pos.XY());
|
||||
if (nDist >= kPatrolAlarmSeeDist || !cansee(DVector3(actor->spr.pos, zt1), actor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector()))
|
||||
{
|
||||
nDist = approxDist(dudeactor->int_pos().X - targetactor->int_pos().X, dudeactor->int_pos().Y - targetactor->int_pos().Y);
|
||||
nDist = approxDist(dudeactor->spr.pos.XY() - targetactor->spr.pos.XY());
|
||||
if (nDist >= kPatrolAlarmSeeDist || !cansee(DVector3(targetactor->spr.pos, zt2), targetactor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector()))
|
||||
continue;
|
||||
}
|
||||
|
@ -8388,13 +8388,11 @@ bool readyForCrit(DBloodActor* hunter, DBloodActor* victim)
|
|||
if (!(hunter->spr.type >= kDudeBase && hunter->spr.type < kDudeMax) || !(victim->spr.type >= kDudeBase && victim->spr.type < kDudeMax))
|
||||
return false;
|
||||
|
||||
int dx, dy;
|
||||
dx = victim->int_pos().X - hunter->int_pos().X;
|
||||
dy = victim->int_pos().Y - hunter->int_pos().Y;
|
||||
if (approxDist(dx, dy) >= (7000 / ClipLow(gGameOptions.nDifficulty >> 1, 1)))
|
||||
auto dvect = victim->spr.pos.XY() - hunter->spr.pos.XY();
|
||||
if (approxDist(dvect) >= (7000 / ClipLow(gGameOptions.nDifficulty >> 1, 1)))
|
||||
return false;
|
||||
|
||||
return (abs(((getangle(dx, dy) + 1024 - victim->int_ang()) & 2047) - 1024) <= kAng45);
|
||||
return (abs(((getangle(dvect) + 1024 - victim->int_ang()) & 2047) - 1024) <= kAng45);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -8435,7 +8433,9 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
newtarget = nullptr;
|
||||
seeChance = hearChance = 0x0000;
|
||||
x = plActor->int_pos().X, y = plActor->int_pos().Y, z = plActor->int_pos().Z, dx = x - actor->int_pos().X, dy = y - actor->int_pos().Y; nDist = approxDist(dx, dy);
|
||||
x = plActor->int_pos().X, y = plActor->int_pos().Y, z = plActor->int_pos().Z,
|
||||
dx = x - actor->int_pos().X, dy = y - actor->int_pos().Y;
|
||||
nDist = approxDist(dx, dy);
|
||||
seeDist = (stealth) ? pDudeInfo->seeDist / 3 : pDudeInfo->seeDist >> 1;
|
||||
hearDist = pDudeInfo->hearDist; feelDist = hearDist >> 1;
|
||||
|
||||
|
@ -8626,7 +8626,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
if (steal->xspr.data1 > 0)
|
||||
{
|
||||
if (approxDist(abs(steal->int_pos().X - plActor->int_pos().X) >> 4, abs(steal->int_pos().Y - plActor->int_pos().Y) >> 4) >= steal->xspr.data1)
|
||||
if ((steal->spr.pos.XY() - plActor->spr.pos.XY()).Length() >= steal->xspr.data1)
|
||||
continue;
|
||||
|
||||
}
|
||||
|
@ -8641,7 +8641,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
{
|
||||
if (steal->xspr.data1 > 0)
|
||||
{
|
||||
if (approxDist(abs(steal->int_pos().X - actor->int_pos().X) >> 4, abs(steal->int_pos().Y - actor->int_pos().Y) >> 4) >= steal->xspr.data1)
|
||||
if ((steal->spr.pos.XY() - plActor->spr.pos.XY()).Length() >= steal->xspr.data1)
|
||||
continue;
|
||||
|
||||
}
|
||||
|
|
|
@ -1423,7 +1423,7 @@ int ActionScan(PLAYER* pPlayer, HitInfo* out)
|
|||
int y = bsin(plActor->int_ang());
|
||||
int z = pPlayer->slope;
|
||||
int hit = HitScan(pPlayer->actor, pPlayer->zView, x, y, z, 0x10000040, 128);
|
||||
int hitDist = approxDist(plActor->int_pos().X - gHitInfo.int_hitpos().X, plActor->int_pos().Y - gHitInfo.int_hitpos().Y) >> 4;
|
||||
int hitDist = (int)(plActor->spr.pos.XY() - gHitInfo.hitpos.XY()).Length();
|
||||
if (hitDist < 64)
|
||||
{
|
||||
switch (hit)
|
||||
|
|
|
@ -276,7 +276,7 @@ void LifeLeechOperate(DBloodActor* actor, EVENT event)
|
|||
int t = DivScale(nDist, 0x1aaaaa, 12);
|
||||
x += (target->vel.X * t) >> 12;
|
||||
y += (target->vel.Y * t) >> 12;
|
||||
int angBak = actor->int_ang();
|
||||
auto angBak = actor->spr.angle;
|
||||
actor->set_int_ang(getangle(x - actor->int_pos().X, y - actor->int_pos().Y));
|
||||
int dx = bcos(actor->int_ang());
|
||||
int dy = bsin(actor->int_ang());
|
||||
|
@ -298,7 +298,7 @@ void LifeLeechOperate(DBloodActor* actor, EVENT event)
|
|||
if (!VanillaMode()) // disable collisions so lifeleech doesn't do that weird bobbing
|
||||
missile->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
|
||||
}
|
||||
actor->set_int_ang(angBak);
|
||||
actor->spr.angle = angBak;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1738,7 +1738,7 @@ void AltFireVoodoo(int nTrigger, PLAYER* pPlayer)
|
|||
if (!targetactor) continue;
|
||||
if (!gGameOptions.bFriendlyFire && IsTargetTeammate(pPlayer, targetactor))
|
||||
continue;
|
||||
int nDist = approxDist(targetactor->int_pos().X - pPlayer->actor->int_pos().X, targetactor->int_pos().Y - pPlayer->actor->int_pos().Y);
|
||||
int nDist = approxDist(targetactor->spr.pos.XY() - pPlayer->actor->spr.pos.XY());
|
||||
if (nDist > 0 && nDist < 51200)
|
||||
{
|
||||
int vc = pPlayer->ammoCount[9] >> 3;
|
||||
|
@ -1776,7 +1776,7 @@ void AltFireVoodoo(int nTrigger, PLAYER* pPlayer)
|
|||
continue;
|
||||
if (v4 > 0)
|
||||
v4--;
|
||||
int nDist = approxDist(targetactor->int_pos().X - pPlayer->actor->int_pos().X, targetactor->int_pos().Y - pPlayer->actor->int_pos().Y);
|
||||
int nDist = approxDist(targetactor->spr.pos.XY() - pPlayer->actor->spr.pos.XY());
|
||||
if (nDist > 0 && nDist < 51200)
|
||||
{
|
||||
int vc = pPlayer->ammoCount[9] >> 3;
|
||||
|
|
Loading…
Reference in a new issue