From c53a2ac93afa5a2ee8b7bf12701c10c645c03148 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 23 Aug 2022 22:31:50 +0200 Subject: [PATCH] - one final batch of AI stuff --- source/games/blood/src/aiboneel.cpp | 10 +++------- source/games/blood/src/aicerber.cpp | 12 ++++-------- source/games/blood/src/aigarg.cpp | 12 ++++-------- source/games/blood/src/aighost.cpp | 12 ++++-------- source/games/blood/src/aitchern.cpp | 12 ++++-------- source/games/blood/src/aizomba.cpp | 12 ++++-------- 6 files changed, 23 insertions(+), 47 deletions(-) diff --git a/source/games/blood/src/aiboneel.cpp b/source/games/blood/src/aiboneel.cpp index 8fdd6ff8f..3da096dde 100644 --- a/source/games/blood/src/aiboneel.cpp +++ b/source/games/blood/src/aiboneel.cpp @@ -110,19 +110,15 @@ static void eelThinkTarget(DBloodActor* actor) 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { pDudeExtraE->thinkTime = 0; diff --git a/source/games/blood/src/aicerber.cpp b/source/games/blood/src/aicerber.cpp index f23af0e09..25f83a587 100644 --- a/source/games/blood/src/aicerber.cpp +++ b/source/games/blood/src/aicerber.cpp @@ -259,19 +259,15 @@ static void cerberusThinkTarget(DBloodActor* actor) 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { pDudeExtraE->thinkTime = 0; @@ -281,7 +277,7 @@ static void cerberusThinkTarget(DBloodActor* actor) else if (nDist < pDudeInfo->hearDist) { pDudeExtraE->thinkTime = 0; - aiSetTarget(actor, x, y, z); + aiSetTarget(actor, ppos); aiActivateDude(actor); } else diff --git a/source/games/blood/src/aigarg.cpp b/source/games/blood/src/aigarg.cpp index c0bfcc72c..be2e94223 100644 --- a/source/games/blood/src/aigarg.cpp +++ b/source/games/blood/src/aigarg.cpp @@ -219,19 +219,15 @@ static void gargThinkTarget(DBloodActor* actor) 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { pDudeExtraE->thinkTime = 0; @@ -241,7 +237,7 @@ static void gargThinkTarget(DBloodActor* actor) else if (nDist < pDudeInfo->hearDist) { pDudeExtraE->thinkTime = 0; - aiSetTarget(actor, x, y, z); + aiSetTarget(actor, ppos); aiActivateDude(actor); } else diff --git a/source/games/blood/src/aighost.cpp b/source/games/blood/src/aighost.cpp index adc2ba4a6..1c07a7642 100644 --- a/source/games/blood/src/aighost.cpp +++ b/source/games/blood/src/aighost.cpp @@ -199,19 +199,15 @@ static void ghostThinkTarget(DBloodActor* actor) 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { pDudeExtraE->thinkTime = 0; @@ -222,7 +218,7 @@ static void ghostThinkTarget(DBloodActor* actor) else if (nDist < pDudeInfo->hearDist) { pDudeExtraE->thinkTime = 0; - aiSetTarget(actor, x, y, z); + aiSetTarget(actor, ppos); aiActivateDude(actor); return; } diff --git a/source/games/blood/src/aitchern.cpp b/source/games/blood/src/aitchern.cpp index 5ec4ca9f2..f3cb9dedc 100644 --- a/source/games/blood/src/aitchern.cpp +++ b/source/games/blood/src/aitchern.cpp @@ -226,19 +226,15 @@ static void sub_725A4(DBloodActor* actor) 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { pDudeExtraE->thinkTime = 0; @@ -248,7 +244,7 @@ static void sub_725A4(DBloodActor* actor) else if (nDist < pDudeInfo->hearDist) { pDudeExtraE->thinkTime = 0; - aiSetTarget(actor, x, y, z); + aiSetTarget(actor, ppos); aiActivateDude(actor); } else diff --git a/source/games/blood/src/aizomba.cpp b/source/games/blood/src/aizomba.cpp index e8edf3995..ed861693f 100644 --- a/source/games/blood/src/aizomba.cpp +++ b/source/games/blood/src/aizomba.cpp @@ -215,19 +215,15 @@ static void myThinkTarget(DBloodActor* actor) if (owneractor == nullptr || owneractor == 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; + auto dvect = ppos.XY() - actor->spr.pos; auto pSector = pPlayer->actor->sector(); - int dx = x - actor->int_pos().X; - int dy = y - actor->int_pos().Y; - int nDist = approxDist(dx, dy); + int nDist = approxDist(dvect); if (nDist > pDudeInfo->seeDist && nDist > pDudeInfo->hearDist) continue; 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; + int nDeltaAngle = ((getangle(dvect) + 1024 - actor->int_ang()) & 2047) - 1024; if (nDist < pDudeInfo->seeDist && abs(nDeltaAngle) <= pDudeInfo->periphery) { aiSetTarget(actor, pPlayer->actor); @@ -235,7 +231,7 @@ static void myThinkTarget(DBloodActor* actor) } else if (nDist < pDudeInfo->hearDist) { - aiSetTarget(actor, x, y, z); + aiSetTarget(actor, ppos); aiActivateDude(actor); } else