I think the AI drives backwards, when the position they have to move towards is very nearby. If you want to move a tank for example to a position behind him, and the position is like 500 meters away, the tank won't drive in reverse the 500 meters to the position. Instead, it turns and then moves forward, like anyone would do. But if the position is only one meter away instead of 500, it's no use to turn around first and then drive one silly meter.
A script for this could look like this:
;; Script to drive a vehicle in reverse over a certain distance in a straight line
;; Use only with driving over straight areas, hills may cause the vehicle to deviate from its path
;; [Car,300] exec "thisscript.sqs"
_veh = _this select 0
_s = _this select 1
_dir = getDir _veh
_pos = getPos _veh
;; A distance delta s
_d_s = 0.1
;; Find the ratio between x-axis and y-axis negative movement
_d_x = _d_s * -1 * (sin _dir)
_d_y = _d_s * -1 * (cos _dir)
;; Scalars
_m = 1
_d_m = 1
;; Distance already passed
_s_covered = 0
;; Old positions
_x_old = _pos select 0
_y_old = _pos select 1
#loop
@(unitReady _veh)
;; If the distance covered exceeds or is equal to the distance to be covered, stop the vehicle and exit
? _s_covered >= _s : _veh doMove getPos _veh; exit
;; Set a new position for the vehicle to move to
_x_new = _x_old + (_m * _d_x)
_y_new = _y_old + (_m * _d_y)
;; Put those new position coordinates in an array
_pos_new = [_x_new,_y_new,0]
;; Make the vehicle move to the new position
_veh doMove _pos_new
~0.1
@(speed _veh > 0 Or unitReady _veh Or not canMove _veh)
;; If the vehicle broke down, exit
? not canMove _veh : exit
;; If the vehicle actually moved over such a small distance, then leave the scalar _m at it's current value and continue the process till the end
? speed _veh > 0 : _x_old = _x_new; _y_old = _y_new; _s_covered = _s_covered + sqrt ((_x_old)^2 + (_y_old)^2); goto "loop"
;; If the vehicle didn't move at all, because it considered the distance to be not important, increase the _m scalar with a _d_m scalar and then
;; repeat the move
? unitReady _veh : _m = _m + _d_m; goto "loop"
I don't know if this code will work. If it's bugless, as in, it is run properly without errors, the result should be positive.
Edit: found a small error in my script. Corrected it.