У вас много условий, я бы предожил сделать стейтмашину, в которой будет определены все состояния и переходы из одного состояния в другое, что-то вроде:
Create

state = "start";
searchDistance = 100;
chaseSpeed = 3;
Step

switch(state)
{
case "start":
path_start(Path1, 3, path_action_reverse, 0);
state = "search";
break;
case "search":
if (distance_to_object(ob_pers) <= searchDistance)
{
path_end();
state = "chase";
}
break;
case "chase":
if (distance_to_object(ob_pers) <= searchDistance)
{
mp_potential_step(ob_pers.x, ob_pers.y, chaseSpeed, false);
}
else
{
state = "start";
}
break;
}
По поводу сгибания препятствий – вбейте в Поиск "обход препятствий", "обход объектов", "поиск пути", "путь пути по сетке".