Ну я использовал вот такую часть кода: 
 Код
if argument5=1{ 
 steps=global.SP[target.O]+1 
 if steps>2{ 
 for (i=0 ;i<=path_get_number(tile_path);i+=1){ 
 if place_meeting(path_get_point_x(tile_path,i),path_get_point_y(tile_path,i),difficult_terrain_1){ 
 steps-=0.5 
 } 
 if place_meeting(path_get_point_x(tile_path,i),path_get_point_y(tile_path,i),difficult_terrain_2){ 
 steps-=1 
 }} 
 if path_get_number(tile_path)>round(steps){instance_destroy()} 
 }}}}}
 И сразу же заметил один неприятный косяк=( 
 Раньше я не придавал значения этому , потому что такой способ перемещения не планировался , но теперь это стало очень важным... 
 На скриншоте синими цифрами показано , насколько уменьшился путь до ячеек из-за местности , а красными линиями выделены пути. 
 Из-за такого поиска пути , некоторые ячейки удалились , когда они могли быть достигнуты... 
 Что можно с этим сделать? 
 Я смотрел волновой алгоритм , но там ,кажется , тоже самое... 
 Смотрел А стар , но там вылетают какие-то непонятные ошибки... 
 Добавлено (08.11.2013, 03:04)
---------------------------------------------
Опять я сам решил свою проблему... 
 Подошел волновой алгоритм , но не тот , что я нашел до этого! 
 Тот вообще был нисколько не ясным , поэтому я использовал другую основу и довел до того , что мне нужно. 
 Пример