если переменную не обьявлять глобальной то она на каждый цикл будет обнулятся
если oldX=EntityX(cubes(1)) прописать в функции после If flag=1 то oldX будет постоянно присваивать измененное значение, т.е. его нужно определить один раз во время нажатия кнопки
еще можно упростить оператор if с помщью else
global flag=0
global oldX
........
repeat
.....
If KeyHit(205) flag=1 :oldX=EntityX(cubes(1))
TurnTopCubes()
.....
until keyhit(1)
Function TurnTopCubes()
If flag=1 Then ;
If EntityX(cubes(1))<oldX+20 Then
TranslateEntity cubes(1), .5 , 0, 0
else
flag=0
EndIf
EndIf
End Function