diff --git a/Generals/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp b/Generals/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp index 2fe1fcf969..958683a0a6 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp @@ -6135,7 +6135,12 @@ StateReturnType AIEnterState::update() StateReturnType code = AIInternalMoveToState::update(); // if it's airborne, wait for it to land +#if RETAIL_COMPATIBLE_CRC if (code == STATE_SUCCESS && goal->isAboveTerrain() && !obj->isAboveTerrain()) +#else + if (code == STATE_SUCCESS && (goal->getPosition()->z + goal->getGeometryInfo().getMaxHeightAbovePosition() < obj->getPosition()->z || + goal->getPosition()->z > obj->getPosition()->z + obj->getGeometryInfo().getMaxHeightAbovePosition())) +#endif { code = STATE_CONTINUE; } diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp index 0f21f3c358..916c11aa62 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp @@ -6347,7 +6347,12 @@ StateReturnType AIEnterState::update() StateReturnType code = AIInternalMoveToState::update(); // if it's airborne, wait for it to land +#if RETAIL_COMPATIBLE_CRC if (code == STATE_SUCCESS && goal->isAboveTerrain() && !obj->isAboveTerrain()) +#else + if (code == STATE_SUCCESS && (goal->getPosition()->z + goal->getGeometryInfo().getMaxHeightAbovePosition() < obj->getPosition()->z || + goal->getPosition()->z > obj->getPosition()->z + obj->getGeometryInfo().getMaxHeightAbovePosition())) +#endif { code = STATE_CONTINUE; }