Обнаружился один баг, или недочёт.
Вопросом, как будут работать функции поиска, если заданная область будет выходить за пределы экрана я интересовался давно. Тогда же провёл эксперименты и выяснил, что никакого негативного влияния это не оказывает на функцию IF_PICTURE_IN и ей подобные.
Это было нужно, когда мы ищем различные картинки, отталкиваясь от уже существующих. Например герой передвигается по экрану и на определённом расстоянии от него нужно искать предметы/мобов.
Ситуация довольно распространённая. И каждый раз проверять не вышла ли область за экран и не нужно ли её корректировать не очень улыбалась. К счастью это и не понадобилось, всё работало по умолчанию нормально.
Правда, это ещё было на версии, наверно, 4.5, когда не было области ни у GETSCREEN ни у COLORMODE.
Недавно столкнулся с ситуацией где долго не мог найти проблему, оказывается если область COLORMODE выходит за экран (по крайней мере в отрицательную сторону) цветокоррекция не срабатывает совсем.
Понятное дело что можно её проверить и скорректить парой доп. условий, но это такое фи.
Вот тест демонстрирующий проблему.
GETSCREEN
COLORMODE(7)
SCREENSHOT
GETSCREEN(-100,0, 100,250)
COLORMODE(7)
SCREENSHOT
GETSCREEN(-100,0, 100,250)
COLORMODE(7, -100,0, 100,250)
SCREENSHOT
HALT
Столкнулся и решал в таком месте
GETSCREEN
COLORMODE(7)
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "hero.bmp", 65280, 90)
$vX1 = $_return1 - 350
$vY1 = $_return2 - 200 + 64
$vX2 = $_return1 + 350
$vY2 = $_return2 + 200 + 64
IF($vX1 < 0)
$vX1 = 0
END_IF
IF($vY1 < 0)
$vX1 = 0
END_IF
IF($vX2 > $_xmax)
$vX2 = $_xmax
END_IF
IF($vY2 > $_ymax)
$vX2 = $_ymax
END_IF
END_IF
// ну и дальше шла куча поисков типа
GETSCREEN($vX1,$vY1,$vX2,$vY2)
COLORMODE(6,$vX1,$vY1,$vX2,$vY2)
SCANPICTURE($arr, $vX1,$vY1,$vX2,$vY2, STRCONCAT($mob, $n, "_", $i, ".bmp"), -1, 90)
...
...
Но часто такие последовательности идут потоком и каждый раз вставлять проверки... код засоряется. Тем более, что GETSCREEN-у и другим на это плевать.