From ee4539d652c5997e0040fbd258f08a1411192df3 Mon Sep 17 00:00:00 2001 From: Stubbjax Date: Wed, 5 Nov 2025 01:42:31 +1100 Subject: [PATCH] bugfix: Units located above the terrain can no longer teleport into airborne transports --- Generals/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp | 5 +++++ GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIStates.cpp | 5 +++++ 2 files changed, 10 insertions(+) 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; }