diff --git a/source/games/exhumed/src/aistuff.h b/source/games/exhumed/src/aistuff.h index c338b275b..75386a1c3 100644 --- a/source/games/exhumed/src/aistuff.h +++ b/source/games/exhumed/src/aistuff.h @@ -224,7 +224,7 @@ DExhumedActor* FindPlayer(DExhumedActor* nSprite, int nDistance, bool dontengage DExhumedActor* BuildCreatureChunk(DExhumedActor* pSrc, int nPic, bool bSpecial = false); int PlotCourseToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2); void CheckSectorFloor(sectortype* pSector, double z, DVector2& xy); -int GetAngleToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2); +DAngle GetAngleToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2); DAngle GetWallNormal(walltype* nWall); void MoveSector(sectortype* pSector, DAngle nAngle, DVector2& vel); Collision AngleChase(DExhumedActor* nSprite, DExhumedActor* nSprite2, int ebx, int ecx, DAngle push1); diff --git a/source/games/exhumed/src/fish.cpp b/source/games/exhumed/src/fish.cpp index c1385a0d5..2a3a90731 100644 --- a/source/games/exhumed/src/fish.cpp +++ b/source/games/exhumed/src/fish.cpp @@ -338,8 +338,8 @@ void AIFish::Tick(RunListEvent* ev) pActor->nAction = 2; pActor->nFrame = 0; - int nAngle = getangle(pTargetActor->spr.pos - pActor->spr.pos); - pActor->set_int_zvel(bsin(nAngle, -5)); + DAngle nAngle = VecToAngle(pTargetActor->spr.pos - pActor->spr.pos); + pActor->vel.Z = nAngle.Sin() * 2; pActor->nCount = RandomSize(6) + 90; } diff --git a/source/games/exhumed/src/move.cpp b/source/games/exhumed/src/move.cpp index 09158bfb0..446e5da25 100644 --- a/source/games/exhumed/src/move.cpp +++ b/source/games/exhumed/src/move.cpp @@ -545,12 +545,12 @@ Collision MoveCreatureWithCaution(DExhumedActor* pActor) return result; } -int GetAngleToSprite(DExhumedActor* a1, DExhumedActor* a2) +DAngle GetAngleToSprite(DExhumedActor* a1, DExhumedActor* a2) { if (!a1 || !a2) - return -1; + return -minAngle; - return getangle(a2->spr.pos - a1->spr.pos); + return VecToAngle(a2->spr.pos - a1->spr.pos); } int PlotCourseToSprite(DExhumedActor* pActor1, DExhumedActor* pActor2) diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 1c0ce604e..e620835d9 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -964,9 +964,9 @@ void AIPlayer::Tick(RunListEvent* ev) { if (nTotalPlayers <= 1) { - auto ang = GetAngleToSprite(pPlayerActor, pSpiritSprite) & kAngleMask; - PlayerList[nPlayer].angle.settarget(DAngle::fromBuild(ang), true); - pPlayerActor->set_int_ang(ang); + auto ang = GetAngleToSprite(pPlayerActor, pSpiritSprite); + PlayerList[nPlayer].angle.settarget(ang, true); + pPlayerActor->spr.angle = ang; PlayerList[nPlayer].horizon.settarget(buildhoriz(0), true); diff --git a/source/games/exhumed/src/snake.cpp b/source/games/exhumed/src/snake.cpp index 3f77390d6..f4fcd5488 100644 --- a/source/games/exhumed/src/snake.cpp +++ b/source/games/exhumed/src/snake.cpp @@ -244,10 +244,10 @@ DExhumedActor* FindSnakeEnemy(int nSnake) DExhumedActor* pActor = SnakeList[nSnake].pSprites[0]; // CHECKME if (!pActor) return nullptr; - int nAngle = pActor->int_ang(); + DAngle nAngle = pActor->spr.angle; auto pSector =pActor->sector(); - int esi = 2048; + DAngle maxangle = DAngle360; DExhumedActor* pEnemy = nullptr; @@ -258,11 +258,11 @@ DExhumedActor* FindSnakeEnemy(int nSnake) { if (pAct2 != pPlayerActor && !(pAct2->spr.cstat & CSTAT_SPRITE_INVISIBLE)) { - int nAngle2 = (nAngle - GetAngleToSprite(pActor, pAct2)) & kAngleMask; - if (nAngle2 < esi) + DAngle nAngle2 = absangle(nAngle, GetAngleToSprite(pActor, pAct2)); + if (nAngle2 < maxangle) { pEnemy = pAct2; - esi = nAngle2; + maxangle = nAngle2; } } }