Ничего не зависает. Просто у тебя картинки не находит и скрипт ищет по кругу.
Плюс загрузка процессора ~25% т.к. задержки нет после поиска.
А не находит, скорее всего, потому что картинка рендерится со сглаживанием.
Вариантов решения полно.
Можно и картинку искать, но с применением COLORMODE 7 или 8 и задавая процент совпадения.
GETSCREEN(921,770, 996,842)
COLORMODE(8, 921,770, 996,842)
IF_PICTURE_IN(921,770, 996,842, "Left.bmp", -1, 85)
KEYPRESS(#LEFT)
WAITMS(100)
END_IF
Картинки заготовить УЖЕ с применением выбранного режима COLORMODE.
Картинки лучше обрезать примерно так... (во вложении). Минимум пустого пространства вокруг. По возможности левый верхний угол не фон.
Если твои стрелки всегда строго в одном месте, можно найти центр и определять количество чёрных пикселов левее/правее/выше/ниже. Где больше, туда и стрелка
// координаты центра задать точно!
$cx = 958
$cy = 806
GETSCREEN(921,770, 996,842)
COLORMODE(8, 921,770, 996,842)
// считаем кол-во чёрных пикселов левее/правее/выше/ниже центра
$left = PXLCOUNT($cx-12, $cy-6, $cx, $cy+6, 0)
$right = PXLCOUNT($cx, $cy-6, $cx+12, $cy+6, 0)
$up = PXLCOUNT($cx-6, $cy-12, $cx+6, $cy, 0)
$down = PXLCOUNT($cx-6, $cy_y, $cx+6, $cy+12, 0)
IF(($left > $right) & ($left > $up) & ($left > $down))
KEYPRESS(#LEFT)
ELSE
IF(($right > $left) & ($right > $up) & ($right > $down))
KEYPRESS(#RIGHT)
ELSE
IF(($up > $left) & ($up > $right) & ($up > $down))
KEYPRESS(#UP)
ELSE
IF(($down > $left) &($down > $right) & ($down > $up))
KEYPRESS(#DOWN)
ELSE
LOGWRITE("Не нашли")
END_IF
END_IF
END_IF
END_IF
WAITMS(100)
И если всегда совсем всё одинаково, можно определять цвет всего 4 пикселов. На скрине примерно пиксел для "Лево". Но для верности я бы прикрутил всё равно COLORMODE(8 )