А что если взять участок карты, скажем, размеров 100Х100, запустить цикл из 10000 итераций с проверкой каждого тайла с помощью IsTilePassable( nX, nY, nFloorID = GROUND ), и если тайл проходимый - добавлять его в массив. Потом для телепортации существа использовать элемент массива? Я правда сам ещё не знаю, как именно это сделать и сильно ли такое ударит по игровому процессу