From 5296051fefea17774be24012c1bd3854ecaf9256 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 30 Jan 2022 18:09:26 +0100 Subject: [PATCH] - Blood: replaced the remaining spr.pos with int_pos() --- source/games/blood/src/aipod.cpp | 18 ++--- source/games/blood/src/airat.cpp | 12 ++-- source/games/blood/src/aispid.cpp | 20 +++--- source/games/blood/src/aitchern.cpp | 46 ++++++------- source/games/blood/src/aiunicult.cpp | 98 ++++++++++++++-------------- 5 files changed, 97 insertions(+), 97 deletions(-) diff --git a/source/games/blood/src/aipod.cpp b/source/games/blood/src/aipod.cpp index 67f5b6177..e879b69b3 100644 --- a/source/games/blood/src/aipod.cpp +++ b/source/games/blood/src/aipod.cpp @@ -66,9 +66,9 @@ void podAttack(int, DBloodActor* actor) auto target = actor->GetTarget(); DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); - int x = target->spr.pos.X - actor->spr.pos.X; - int y = target->spr.pos.Y - actor->spr.pos.Y; - int dz = target->spr.pos.Z - actor->spr.pos.Z; + int x = target->int_pos().X - actor->int_pos().X; + int y = target->int_pos().Y - actor->int_pos().Y; + int dz = target->int_pos().Z - actor->int_pos().Z; x += Random2(1000); y += Random2(1000); int nDist = approxDist(x, y); @@ -122,7 +122,7 @@ void sub_70284(int, DBloodActor* actor) nDist = 75; break; } - actRadiusDamage(actor, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, actor->sector(), nDist, 1, 5 * (1 + gGameOptions.nDifficulty), dmgType, 2, nBurn); + actRadiusDamage(actor, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, actor->sector(), nDist, 1, 5 * (1 + gGameOptions.nDifficulty), dmgType, 2, nBurn); } static void aiPodSearch(DBloodActor* actor) @@ -139,8 +139,8 @@ static void aiPodMove(DBloodActor* actor) } DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); int nDist = approxDist(dx, dy); aiChooseDirection(actor, nAngle); @@ -181,8 +181,8 @@ static void aiPodChase(DBloodActor* actor) DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); auto target = actor->GetTarget(); - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; aiChooseDirection(actor, getangle(dx, dy)); if (target->xspr.health == 0) { @@ -203,7 +203,7 @@ static void aiPodChase(DBloodActor* actor) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - if (cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - height, actor->sector())) + if (cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/airat.cpp b/source/games/blood/src/airat.cpp index 6c0faa70f..b808acfb5 100644 --- a/source/games/blood/src/airat.cpp +++ b/source/games/blood/src/airat.cpp @@ -49,7 +49,7 @@ void ratBiteSeqCallback(int, DBloodActor* actor) if (!actor->ValidateTarget(__FUNCTION__)) return; auto target = actor->GetTarget(); if (target->IsPlayerActor()) - actFireVector(actor, 0, 0, dx, dy, target->spr.pos.Z - actor->spr.pos.Z, kVectorRatBite); + actFireVector(actor, 0, 0, dx, dy, target->int_pos().Z - actor->int_pos().Z, kVectorRatBite); } static void ratThinkSearch(DBloodActor* actor) @@ -62,8 +62,8 @@ static void ratThinkGoto(DBloodActor* actor) { assert(actor->spr.type >= kDudeBase && actor->spr.type < kDudeMax); DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); int nDist = approxDist(dx, dy); aiChooseDirection(actor, nAngle); @@ -83,8 +83,8 @@ static void ratThinkChase(DBloodActor* actor) DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); auto target = actor->GetTarget(); - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; aiChooseDirection(actor, getangle(dx, dy)); if (target->xspr.health == 0) { @@ -101,7 +101,7 @@ static void ratThinkChase(DBloodActor* actor) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - if (cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - height, actor->sector())) + if (cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/aispid.cpp b/source/games/blood/src/aispid.cpp index 6315b52e8..2177f095d 100644 --- a/source/games/blood/src/aispid.cpp +++ b/source/games/blood/src/aispid.cpp @@ -70,10 +70,10 @@ void SpidBiteSeqCallback(int, DBloodActor* actor) auto const target = actor->GetTarget(); if (target->IsPlayerActor()) { - int hit = HitScan(actor, actor->spr.pos.Z, dx, dy, 0, CLIPMASK1, 0); + int hit = HitScan(actor, actor->int_pos().Z, dx, dy, 0, CLIPMASK1, 0); if (hit == 3 && gHitInfo.actor()->IsPlayerActor()) { - dz += target->spr.pos.Z - actor->spr.pos.Z; + dz += target->int_pos().Z - actor->int_pos().Z; PLAYER* pPlayer = &gPlayer[target->spr.type - kDudePlayer1]; switch (actor->spr.type) { @@ -116,7 +116,7 @@ void SpidJumpSeqCallback(int, DBloodActor* actor) if (!actor->ValidateTarget(__FUNCTION__)) return; auto target = actor->GetTarget(); if (target->IsPlayerActor()) { - dz += target->spr.pos.Z - actor->spr.pos.Z; + dz += target->int_pos().Z - actor->int_pos().Z; switch (actor->spr.type) { case kDudeSpiderBrown: case kDudeSpiderRed: @@ -136,8 +136,8 @@ void SpidBirthSeqCallback(int, DBloodActor* actor) if (!actor->ValidateTarget(__FUNCTION__)) return; auto target = actor->GetTarget(); DUDEEXTRA_STATS* pDudeExtraE = &actor->dudeExtra.stats; - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); int nDist = approxDist(dx, dy); @@ -171,8 +171,8 @@ static void spidThinkGoto(DBloodActor* actor) { assert(actor->spr.type >= kDudeBase && actor->spr.type < kDudeMax); DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); int nDist = approxDist(dx, dy); aiChooseDirection(actor, nAngle); @@ -192,8 +192,8 @@ static void spidThinkChase(DBloodActor* actor) DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); auto target = actor->GetTarget(); - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; aiChooseDirection(actor, getangle(dx, dy)); if (target->xspr.health == 0) { @@ -210,7 +210,7 @@ static void spidThinkChase(DBloodActor* actor) int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - if (cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - height, actor->sector())) { + if (cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { aiSetTarget(actor, actor->GetTarget()); diff --git a/source/games/blood/src/aitchern.cpp b/source/games/blood/src/aitchern.cpp index 6e4fdff51..c1f444b41 100644 --- a/source/games/blood/src/aitchern.cpp +++ b/source/games/blood/src/aitchern.cpp @@ -61,8 +61,8 @@ void sub_71BD4(int, DBloodActor* actor) DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); int height = actor->spr.yrepeat * pDudeInfo->eyeHeight; if (!actor->ValidateTarget(__FUNCTION__)) return; - int x = actor->spr.pos.X; - int y = actor->spr.pos.Y; + int x = actor->int_pos().X; + int y = actor->int_pos().Y; int z = height; TARGETTRACK tt = { 0x10000, 0x10000, 0x100, 0x55, 0x100000 }; Aim aim; @@ -75,9 +75,9 @@ void sub_71BD4(int, DBloodActor* actor) { if (actor == actor2 || !(actor2->spr.flags & 8)) continue; - int x2 = actor2->spr.pos.X; - int y2 = actor2->spr.pos.Y; - int z2 = actor2->spr.pos.Z; + int x2 = actor2->int_pos().X; + int y2 = actor2->int_pos().Y; + int z2 = actor2->int_pos().Z; int nDist = approxDist(x2 - x, y2 - y); if (nDist == 0 || nDist > 0x2800) continue; @@ -106,7 +106,7 @@ void sub_71BD4(int, DBloodActor* actor) int nDeltaAngle = ((nAngle - actor->spr.ang + 1024) & 2047) - 1024; if (abs(nDeltaAngle) <= tt.at8) { - int tz1 = actor2->spr.pos.Z - actor->spr.pos.Z; + int tz1 = actor2->int_pos().Z - actor->int_pos().Z; if (cansee(x, y, z, actor->sector(), x2, y2, z2, actor2->sector())) { nClosest = nDist2; @@ -132,8 +132,8 @@ void sub_720AC(int, DBloodActor* actor) int ax, ay, az; ax = bcos(actor->spr.ang); ay = bsin(actor->spr.ang); - int x = actor->spr.pos.X; - int y = actor->spr.pos.Y; + int x = actor->int_pos().X; + int y = actor->int_pos().Y; int z = height; TARGETTRACK tt = { 0x10000, 0x10000, 0x100, 0x55, 0x100000 }; Aim aim; @@ -147,9 +147,9 @@ void sub_720AC(int, DBloodActor* actor) { if (actor == actor2 || !(actor2->spr.flags & 8)) continue; - int x2 = actor2->spr.pos.X; - int y2 = actor2->spr.pos.Y; - int z2 = actor2->spr.pos.Z; + int x2 = actor2->int_pos().X; + int y2 = actor2->int_pos().Y; + int z2 = actor2->int_pos().Z; int nDist = approxDist(x2 - x, y2 - y); if (nDist == 0 || nDist > 0x2800) continue; @@ -178,7 +178,7 @@ void sub_720AC(int, DBloodActor* actor) int nDeltaAngle = ((nAngle - actor->spr.ang + 1024) & 2047) - 1024; if (abs(nDeltaAngle) <= tt.at8) { - int tz1 = actor2->spr.pos.Z - actor->spr.pos.Z; + int tz1 = actor2->int_pos().Z - actor->int_pos().Z; if (cansee(x, y, z, actor->sector(), x2, y2, z2, actor2->sector())) { nClosest = nDist2; @@ -226,16 +226,16 @@ static void sub_725A4(DBloodActor* actor) PLAYER* pPlayer = &gPlayer[p]; if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0) continue; - int x = pPlayer->actor->spr.pos.X; - int y = pPlayer->actor->spr.pos.Y; - int z = pPlayer->actor->spr.pos.Z; + int x = pPlayer->actor->int_pos().X; + int y = pPlayer->actor->int_pos().Y; + int z = pPlayer->actor->int_pos().Z; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->spr.pos.X; - int dy = y - actor->spr.pos.Y; + int dx = x - actor->int_pos().X; + int dy = y - actor->int_pos().Y; int nDist = approxDist(dx, dy); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; - if (!cansee(x, y, z, pSector, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - ((pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2), actor->sector())) + if (!cansee(x, y, z, pSector, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - ((pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2), actor->sector())) continue; int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) @@ -264,8 +264,8 @@ static void sub_72850(DBloodActor* actor) return; } DUDEINFO* pDudeInfo = getDudeInfo(actor->spr.type); - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); int nDist = approxDist(dx, dy); aiChooseDirection(actor, nAngle); @@ -289,8 +289,8 @@ static void sub_72934(DBloodActor* actor) if (!actor->ValidateTarget(__FUNCTION__)) return; auto target = actor->GetTarget(); - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; aiChooseDirection(actor, getangle(dx, dy)); if (target->xspr.health == 0) { @@ -307,7 +307,7 @@ static void sub_72934(DBloodActor* actor) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - if (cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - height, actor->sector())) + if (cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/aiunicult.cpp b/source/games/blood/src/aiunicult.cpp index 8533fe2aa..2c425cdc3 100644 --- a/source/games/blood/src/aiunicult.cpp +++ b/source/games/blood/src/aiunicult.cpp @@ -139,7 +139,7 @@ static bool genDudeAdjustSlope(DBloodActor* actor, int dist, int weaponType, int for (int i = -8191; i < 8192; i += by) { - HitScan(actor, actor->spr.pos.Z, bcos(actor->spr.ang), bsin(actor->spr.ang), i, clipMask, dist); + HitScan(actor, actor->int_pos().Z, bcos(actor->spr.ang), bsin(actor->spr.ang), i, clipMask, dist); if (!fStart && actor->GetTarget() == gHitInfo.actor()) fStart = i; else if (fStart && actor->GetTarget() != gHitInfo.actor()) { @@ -313,9 +313,9 @@ static void ThrowThing(DBloodActor* actor, bool impact) sfxPlay3DSound(actor, 455, -1, 0); int zThrow = 14500; - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; - int dz = target->spr.pos.Z - actor->spr.pos.Z; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; + int dz = target->int_pos().Z - actor->int_pos().Z; int dist = approxDist(dx, dy); auto actLeech = leechIsDropped(actor); @@ -419,8 +419,8 @@ static void unicultThinkGoto(DBloodActor* actor) return; } - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nAngle = getangle(dx, dy); aiChooseDirection(actor, nAngle); @@ -480,8 +480,8 @@ static void unicultThinkChase(DBloodActor* actor) } // check target - int dx = target->spr.pos.X - actor->spr.pos.X; - int dy = target->spr.pos.Y - actor->spr.pos.Y; + int dx = target->int_pos().X - actor->int_pos().X; + int dy = target->int_pos().Y - actor->int_pos().Y; int dist = ClipLow((int)approxDist(dx, dy), 1); // quick hack to prevent spinning around or changing attacker's sprite angle on high movement speeds @@ -519,8 +519,8 @@ static void unicultThinkChase(DBloodActor* actor) int losAngle = ((getangle(dx, dy) + 1024 - actor->spr.ang) & 2047) - 1024; int eyeAboveZ = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - if (dist > pDudeInfo->seeDist || !cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), - actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z - eyeAboveZ, actor->sector())) + if (dist > pDudeInfo->seeDist || !cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), + actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - eyeAboveZ, actor->sector())) { if (spriteIsUnderwater(actor, false)) aiGenDudeNewState(actor, &genDudeSearchW); else aiGenDudeNewState(actor, &genDudeSearchL); @@ -534,7 +534,7 @@ static void unicultThinkChase(DBloodActor* actor) if ((PlayClock & 64) == 0 && Chance(0x3000) && !spriteIsUnderwater(actor, false)) playGenDudeSound(actor, kGenDudeSndChasing); - actor->dudeSlope = dist == 0 ? 0 : DivScale(target->spr.pos.Z - actor->spr.pos.Z, dist, 10); + actor->dudeSlope = dist == 0 ? 0 : DivScale(target->int_pos().Z - actor->int_pos().Z, dist, 10); int curWeapon = actor->genDudeExtra.curWeapon; int weaponType = actor->genDudeExtra.weaponType; @@ -555,7 +555,7 @@ static void unicultThinkChase(DBloodActor* actor) } else if (dist < 12264 && dist > 7680 && !spriteIsUnderwater(actor, false) && curWeapon != kModernThingEnemyLifeLeech) { - int pHit = HitScan(actor, actor->spr.pos.Z, dx, dy, 0, 16777280, 0); + int pHit = HitScan(actor, actor->int_pos().Z, dx, dy, 0, 16777280, 0); switch (pHit) { case 0: case 4: @@ -580,8 +580,8 @@ static void unicultThinkChase(DBloodActor* actor) } int ldist = aiFightGetTargetDist(target, pDudeInfo, actLeech); - if (ldist > 3 || !cansee(target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), - actLeech->spr.pos.X, actLeech->spr.pos.Y, actLeech->spr.pos.Z, actLeech->sector()) || actLeech->GetTarget() == nullptr) + if (ldist > 3 || !cansee(target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), + actLeech->int_pos().X, actLeech->int_pos().Y, actLeech->int_pos().Z, actLeech->sector()) || actLeech->GetTarget() == nullptr) { aiGenDudeNewState(actor, &genDudeThrow2); genDudeThrow2.nextState = &genDudeDodgeShortL; @@ -655,7 +655,7 @@ static void unicultThinkChase(DBloodActor* actor) // don't attack slaves if (actor->GetTarget() != nullptr && actor->GetTarget()->GetOwner() == actor) { - aiSetTarget(actor, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z); + aiSetTarget(actor, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z); return; } else if (actor->genDudeExtra.slaveCount > gGameOptions.nDifficulty || dist < meleeVector->maxDist) @@ -726,7 +726,7 @@ static void unicultThinkChase(DBloodActor* actor) { int nType = curWeapon - kTrapExploder; const EXPLOSION* pExpl = &explodeInfo[nType]; - if (CheckProximity(actor, target->spr.pos.X, target->spr.pos.Y, target->spr.pos.Z, target->sector(), pExpl->radius >> 1)) + if (CheckProximity(actor, target->int_pos().X, target->int_pos().Y, target->int_pos().Z, target->sector(), pExpl->radius >> 1)) { actor->vel.X = actor->vel.Y = actor->vel.Z = 0; if (doExplosion(actor, nType) && actor->xspr.health > 0) @@ -744,14 +744,14 @@ static void unicultThinkChase(DBloodActor* actor) { int objDist = -1; int targetDist = -1; int hit = -1; if (weaponType == kGenDudeWeaponHitscan) - hit = HitScan(actor, actor->spr.pos.Z, bcos(actor->spr.ang), bsin(actor->spr.ang), actor->dudeSlope, CLIPMASK1, dist); + hit = HitScan(actor, actor->int_pos().Z, bcos(actor->spr.ang), bsin(actor->spr.ang), actor->dudeSlope, CLIPMASK1, dist); else if (weaponType == kGenDudeWeaponMissile) - hit = HitScan(actor, actor->spr.pos.Z, bcos(actor->spr.ang), bsin(actor->spr.ang), actor->dudeSlope, CLIPMASK0, dist); + hit = HitScan(actor, actor->int_pos().Z, bcos(actor->spr.ang), bsin(actor->spr.ang), actor->dudeSlope, CLIPMASK0, dist); if (hit >= 0) { targetDist = dist - (target->spr.clipdist << 2); - objDist = approxDist(gHitInfo.hitpos.X - actor->spr.pos.X, gHitInfo.hitpos.Y - actor->spr.pos.Y); + objDist = approxDist(gHitInfo.hitpos.X - actor->int_pos().X, gHitInfo.hitpos.Y - actor->int_pos().Y); } if (actor != gHitInfo.actor() && targetDist > objDist) @@ -827,27 +827,27 @@ static void unicultThinkChase(DBloodActor* actor) } break; } - if (actor->spr.pos.X < hitactor->spr.pos.X) + if (actor->int_pos().X < hitactor->int_pos().X) { - if (Chance(0x9000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = -1; + if (Chance(0x9000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = -1; else actor->xspr.dodgeDir = 1; } else { - if (Chance(0x9000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = 1; + if (Chance(0x9000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = 1; else actor->xspr.dodgeDir = -1; } } break; default: - if (actor->spr.pos.X < hitactor->spr.pos.X) + if (actor->int_pos().X < hitactor->int_pos().X) { - if (Chance(0x9000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = -1; + if (Chance(0x9000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = -1; else actor->xspr.dodgeDir = 1; } else { - if (Chance(0x9000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = 1; + if (Chance(0x9000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = 1; else actor->xspr.dodgeDir = -1; } break; @@ -865,7 +865,7 @@ static void unicultThinkChase(DBloodActor* actor) bool immune = nnExtIsImmune(hitactor, gVectorData[curWeapon].dmgType); if (!(hitactor->hasX() && (!immune || (immune && hitactor->spr.statnum == kStatThing && hitactor->xspr.Vector)) && !hitactor->xspr.locked)) { - if ((approxDist(gHitInfo.hitpos.X - actor->spr.pos.X, gHitInfo.hitpos.Y - actor->spr.pos.Y) <= 1500 && !blck) + if ((approxDist(gHitInfo.hitpos.X - actor->int_pos().X, gHitInfo.hitpos.Y - actor->int_pos().Y) <= 1500 && !blck) || (dist <= (int)(pExtra->fireDist / ClipLow(Random(4), 1)))) { //viewSetSystemMessage("GO CHASE"); @@ -884,14 +884,14 @@ static void unicultThinkChase(DBloodActor* actor) else if (inDuck(actor->xspr.aiState)) aiGenDudeNewState(actor, &genDudeDodgeShorterD); else aiGenDudeNewState(actor, &genDudeDodgeShorterL); - if (actor->spr.pos.X < hitactor->spr.pos.X) + if (actor->int_pos().X < hitactor->int_pos().X) { - if (Chance(0x3000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = -1; + if (Chance(0x3000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = -1; else actor->xspr.dodgeDir = 1; } else { - if (Chance(0x3000) && target->spr.pos.X > hitactor->spr.pos.X) actor->xspr.dodgeDir = 1; + if (Chance(0x3000) && target->int_pos().X > hitactor->int_pos().X) actor->xspr.dodgeDir = 1; else actor->xspr.dodgeDir = -1; } @@ -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.hitpos.X - actor->spr.pos.X, gHitInfo.hitpos.Y - actor->spr.pos.Y); - int targetDist1 = approxDist(gHitInfo.hitpos.X - target->spr.pos.X, gHitInfo.hitpos.Y - target->spr.pos.Y); + int dudeDist = approxDist(gHitInfo.hitpos.X - actor->int_pos().X, gHitInfo.hitpos.Y - actor->int_pos().Y); + int targetDist1 = approxDist(gHitInfo.hitpos.X - target->int_pos().X, gHitInfo.hitpos.Y - target->int_pos().Y); if (dudeDist < mdist) { //viewSetSystemMessage("DUDE CLOSE TO OBJ: %d, MDIST: %d", dudeDist, mdist); @@ -1122,8 +1122,8 @@ void aiGenDudeMoveForward(DBloodActor* actor) return; if (actor->GetTarget() == nullptr) actor->spr.ang = (actor->spr.ang + 256) & 2047; - int dx = actor->xspr.TargetPos.X - actor->spr.pos.X; - int dy = actor->xspr.TargetPos.Y - actor->spr.pos.Y; + int dx = actor->xspr.TargetPos.X - actor->int_pos().X; + int dy = actor->xspr.TargetPos.Y - actor->int_pos().Y; int nDist = approxDist(dx, dy); if ((unsigned int)Random(64) < 32 && nDist <= 0x400) return; @@ -1404,7 +1404,7 @@ void removeLeech(DBloodActor* actLeech, bool delSprite) { if (actLeech != nullptr) { - auto effectactor = gFX.fxSpawnActor((FX_ID)52, actLeech->sector(), actLeech->spr.pos.X, actLeech->spr.pos.Y, actLeech->spr.pos.Z, actLeech->spr.ang); + auto effectactor = gFX.fxSpawnActor((FX_ID)52, actLeech->sector(), actLeech->int_pos().X, actLeech->int_pos().Y, actLeech->int_pos().Z, actLeech->spr.ang); if (effectactor != nullptr) { effectactor->spr.cstat = CSTAT_SPRITE_ALIGNMENT_FACING; @@ -1791,20 +1791,20 @@ void dudeLeechOperate(DBloodActor* actor, const EVENT& event) GetActorExtents(actor, &top, &bottom); int nType = actTarget->spr.type - kDudeBase; DUDEINFO* pDudeInfo = &dudeInfo[nType]; - int z1 = (top - actor->spr.pos.Z) - 256; - int x = actTarget->spr.pos.X; int y = actTarget->spr.pos.Y; int z = actTarget->spr.pos.Z; - int nDist = approxDist(x - actor->spr.pos.X, y - actor->spr.pos.Y); + int z1 = (top - actor->int_pos().Z) - 256; + 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); - if (nDist != 0 && cansee(actor->spr.pos.X, actor->spr.pos.Y, top, actor->sector(), x, y, z, actTarget->sector())) + 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->spr.ang; - actor->spr.ang = getangle(x - actor->spr.pos.X, y - actor->spr.pos.Y); + actor->spr.ang = getangle(x - actor->int_pos().X, y - actor->int_pos().Y); int dx = bcos(actor->spr.ang); int dy = bsin(actor->spr.ang); - int tz = actTarget->spr.pos.Z - (actTarget->spr.yrepeat * pDudeInfo->aimHeight) * 4; + int tz = actTarget->int_pos().Z - (actTarget->spr.yrepeat * pDudeInfo->aimHeight) * 4; int dz = DivScale(tz - top - 256, nDist, 10); int nMissileType = kMissileLifeLeechAltNormal + (actor->xspr.data3 ? 1 : 0); int t2; @@ -1835,7 +1835,7 @@ void dudeLeechOperate(DBloodActor* actor, const EVENT& event) bool doExplosion(DBloodActor* actor, int nType) { - auto actExplosion = actSpawnSprite(actor->sector(), actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z, kStatExplosion, true); + auto actExplosion = actSpawnSprite(actor->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z, kStatExplosion, true); if (!actExplosion->hasX()) return false; @@ -1875,19 +1875,19 @@ bool doExplosion(DBloodActor* actor, int nType) DBloodActor* genDudeSpawn(DBloodActor* source, DBloodActor* actor, int nDist) { auto spawned = actSpawnSprite(actor, kStatDude); - int x, y, z = actor->spr.pos.Z, nAngle = actor->spr.ang, nType = kDudeModernCustom; + int x, y, z = actor->int_pos().Z, nAngle = actor->spr.ang, nType = kDudeModernCustom; if (nDist > 0) { - x = actor->spr.pos.X + mulscale30r(Cos(nAngle), nDist); - y = actor->spr.pos.Y + mulscale30r(Sin(nAngle), nDist); + x = actor->int_pos().X + mulscale30r(Cos(nAngle), nDist); + y = actor->int_pos().Y + mulscale30r(Sin(nAngle), nDist); } else { - x = actor->spr.pos.X; - y = actor->spr.pos.Y; + x = actor->int_pos().X; + y = actor->int_pos().Y; } @@ -2057,7 +2057,7 @@ void genDudeTransform(DBloodActor* actor) aiInitSprite(actor); // try to restore target - if (target == nullptr) aiSetTarget(actor, actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z); + if (target == nullptr) aiSetTarget(actor, actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z); else aiSetTarget(actor, target); // finally activate it @@ -2140,11 +2140,11 @@ void updateTargetOfSlaves(DBloodActor* actor) if (actTarget != slave[i]->GetTarget()) aiSetTarget(slave[i], actTarget); // check if slave have proper target if (slave[i]->GetTarget() == nullptr || slave[i]->GetTarget()->GetOwner() == actor) - aiSetTarget(slave[i], actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z); + aiSetTarget(slave[i], actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z); } else { - aiSetTarget(slave[i], actor->spr.pos.X, actor->spr.pos.Y, actor->spr.pos.Z); // try return to master + aiSetTarget(slave[i], actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z); // try return to master } } }