diff --git a/source/games/blood/src/ai.cpp b/source/games/blood/src/ai.cpp index a037a46f8..997d89b80 100644 --- a/source/games/blood/src/ai.cpp +++ b/source/games/blood/src/ai.cpp @@ -1505,6 +1505,7 @@ void aiThinkTarget(DBloodActor* actor) PLAYER* pPlayer = &gPlayer[p]; if (actor->GetOwner() == pPlayer->actor || pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0) continue; + auto ppos = pPlayer->actor->spr.pos; int x = pPlayer->actor->int_pos().X; int y = pPlayer->actor->int_pos().Y; int z = pPlayer->actor->int_pos().Z; @@ -1514,7 +1515,8 @@ void aiThinkTarget(DBloodActor* actor) int nDist = approxDist(dx, dy); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (!cansee(ppos, pSector, actor->spr.pos.plusZ(-height), actor->sector())) continue; int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; @@ -1551,6 +1553,7 @@ void aiLookForTarget(DBloodActor* actor) PLAYER* pPlayer = &gPlayer[p]; if (actor->GetOwner() == pPlayer->actor || pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0) continue; + auto ppos = pPlayer->actor->spr.pos; int x = pPlayer->actor->int_pos().X; int y = pPlayer->actor->int_pos().Y; int z = pPlayer->actor->int_pos().Z; @@ -1560,7 +1563,8 @@ void aiLookForTarget(DBloodActor* actor) int nDist = approxDist(dx, dy); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (!cansee(ppos, pSector, actor->spr.pos.plusZ(-height), actor->sector())) continue; int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) diff --git a/source/games/blood/src/aibat.cpp b/source/games/blood/src/aibat.cpp index 5611436b9..41b29a8df 100644 --- a/source/games/blood/src/aibat.cpp +++ b/source/games/blood/src/aibat.cpp @@ -97,6 +97,7 @@ static void batThinkTarget(DBloodActor* actor) PLAYER* pPlayer = &gPlayer[p]; if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0) continue; + auto ppos = pPlayer->actor->spr.pos; int x = pPlayer->actor->int_pos().X; int y = pPlayer->actor->int_pos().Y; int z = pPlayer->actor->int_pos().Z; @@ -106,7 +107,8 @@ static void batThinkTarget(DBloodActor* actor) int nDist = approxDist(dx, dy); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (!cansee(ppos, pSector, actor->spr.pos.plusZ(-height), actor->sector())) continue; int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) @@ -173,7 +175,7 @@ static void batThinkPonder(DBloodActor* actor) int height2 = (getDudeInfo(pTarget->spr.type)->eyeHeight * pTarget->spr.yrepeat) << 2; int top, bottom; GetActorExtents(actor, &top, &bottom); - if (cansee(pTarget->int_pos().X, pTarget->int_pos().Y, pTarget->int_pos().Z, pTarget->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) + if (cansee(pTarget->spr.pos, pTarget->sector(), actor->spr.pos.plusZ(-height * zinttoworld), actor->sector())) { aiSetTarget(actor, actor->GetTarget()); if (height2 - height < 0x3000 && nDist < 0x1800 && nDist > 0xc00 && abs(nDeltaAngle) < 85) @@ -280,7 +282,7 @@ static void batThinkChase(DBloodActor* actor) int height2 = (pDudeInfo->eyeHeight * pTarget->spr.yrepeat) << 2; int top, bottom; GetActorExtents(actor, &top, &bottom); - if (cansee(pTarget->int_pos().X, pTarget->int_pos().Y, pTarget->int_pos().Z, pTarget->sector(), actor->int_pos().X, actor->int_pos().Y, actor->int_pos().Z - height, actor->sector())) + if (cansee(pTarget->spr.pos, pTarget->sector(), actor->spr.pos.plusZ(-height * zinttoworld), actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/aibeast.cpp b/source/games/blood/src/aibeast.cpp index 8d422d7c5..b1de27c84 100644 --- a/source/games/blood/src/aibeast.cpp +++ b/source/games/blood/src/aibeast.cpp @@ -234,8 +234,8 @@ static void beastThinkChase(DBloodActor* actor) if (nDist <= pDudeInfo->seeDist) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; - int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (cansee(target->spr.pos, target->sector(), actor->spr.pos.plusZ(-height), actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { @@ -364,10 +364,10 @@ static void beastThinkSwimChase(DBloodActor* actor) if (nDist <= pDudeInfo->seeDist) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; - int height = pDudeInfo->eyeHeight + actor->int_pos().Z; + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; int top, bottom; GetActorExtents(actor, &top, &bottom); - 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 (cansee(target->spr.pos, target->sector(), actor->spr.pos.plusZ(-height), actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/aiboneel.cpp b/source/games/blood/src/aiboneel.cpp index ffacc4879..41d1b347d 100644 --- a/source/games/blood/src/aiboneel.cpp +++ b/source/games/blood/src/aiboneel.cpp @@ -109,6 +109,7 @@ static void eelThinkTarget(DBloodActor* actor) PLAYER* pPlayer = &gPlayer[p]; if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0) continue; + auto ppos = pPlayer->actor->spr.pos; int x = pPlayer->actor->int_pos().X; int y = pPlayer->actor->int_pos().Y; int z = pPlayer->actor->int_pos().Z; @@ -118,7 +119,8 @@ static void eelThinkTarget(DBloodActor* actor) int nDist = approxDist(dx, dy); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (!cansee(ppos, pSector, actor->spr.pos.plusZ(-height), actor->sector())) continue; int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) @@ -187,7 +189,7 @@ static void eelThinkPonder(DBloodActor* actor) int height2 = (getDudeInfo(target->spr.type)->eyeHeight * target->spr.yrepeat) << 2; int top, bottom; GetActorExtents(actor, &top, &bottom); - 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 (cansee(target->spr.pos, target->sector(), actor->spr.pos.plusZ(-height * zinttoworld), actor->sector())) { aiSetTarget(actor, actor->GetTarget()); if (height2 - height < -0x2000 && nDist < 0x1800 && nDist > 0xc00 && abs(nDeltaAngle) < 85) @@ -289,12 +291,12 @@ static void eelThinkChase(DBloodActor* actor) if (nDist <= pDudeInfo->seeDist) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; - int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; int top, bottom; GetActorExtents(actor, &top, &bottom); int top2, bottom2; GetActorExtents(target, &top2, &bottom2); - 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 (cansee(target->spr.pos, target->sector(), actor->spr.pos.plusZ(-height), actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { diff --git a/source/games/blood/src/aiburn.cpp b/source/games/blood/src/aiburn.cpp index 352d4f60e..1c788e22c 100644 --- a/source/games/blood/src/aiburn.cpp +++ b/source/games/blood/src/aiburn.cpp @@ -194,8 +194,8 @@ static void burnThinkChase(DBloodActor* actor) if (nDist <= pDudeInfo->seeDist) { int nDeltaAngle = ((getangle(dx, dy) + 1024 - actor->int_ang()) & 2047) - 1024; - int height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) << 2; - 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())) + double height = (pDudeInfo->eyeHeight * actor->spr.yrepeat) * REPEAT_SCALE; + if (cansee(target->spr.pos, target->sector(), actor->spr.pos.plusZ(-height), actor->sector())) { if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) {