diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 59b084df4..24306e84e 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -4771,16 +4771,19 @@ void ResetMovementForNonPlayerGroup( GROUP *pGroup ) MoveSAIGroupToSector( &pGroup, (UINT8)SECTOR( pOtherGroup->ubNextX, pOtherGroup->ubNextY ), DIRECT, PURSUIT ); // the group has to be delayed - otherwise they could arrive at the same time as the player, resulting in odd behaviour during insertion - DeleteStrategicEvent( EVENT_GROUP_ARRIVAL, pGroup->ubGroupID ); - - // NOTE: This can cause the arrival time to be > GetWorldTotalMin() + TraverseTime, so keep that in mind - // if you have any code that uses these 3 values to figure out how far along its route a group is! - SetGroupArrivalTime( pGroup, pOtherGroup->uiArrivalTime + 5 ); - - if ( !AddStrategicEvent( EVENT_GROUP_ARRIVAL, pGroup->uiArrivalTime, pGroup->ubGroupID ) ) + if ( pGroup->uiArrivalTime < min( pGroup->uiArrivalTime, pOtherGroup->uiArrivalTime ) + 5 ) { - AssertMsg( 0, "Failed to add movement event." ); - break; + DeleteStrategicEvent( EVENT_GROUP_ARRIVAL, pGroup->ubGroupID ); + + // NOTE: This can cause the arrival time to be > GetWorldTotalMin() + TraverseTime, so keep that in mind + // if you have any code that uses these 3 values to figure out how far along its route a group is! + SetGroupArrivalTime( pGroup, pOtherGroup->uiArrivalTime + 5 ); + + if ( !AddStrategicEvent( EVENT_GROUP_ARRIVAL, pGroup->uiArrivalTime, pGroup->ubGroupID ) ) + { + AssertMsg( 0, "Failed to add movement event." ); + break; + } } sucess = TRUE;