мне вот интересно откуда там ошибка могла вылезти.
Перво-наперво хорошо бы иметь всякие try-catch'и везде в коде -- где бы что не вылезло, можно обработать и корректно завершить скрипт (хотя бы изменить условия победы на автоматические).
Я не понимаю из скрипта, куда Вы этих гидр призываете... Скрипт, выходит, сам определяет ближайшее свободное пространство возле главной гидры? Как-то я не уверен, что в 100% случаев это будет происходить корректно.
Ну а так вроде нормально выглядит...