sivirbooz (sivirbooz) wrote,
sivirbooz
sivirbooz

Category:

Делаем бильярд лучше. Несколько улучшений для foobillard.

Один знакомый как-то попросил меня найти для него компьютерный бильярд. Желательно, чтоб кроссплатформенный. Чтоб и под окнами и под Linux работал. И чтоб физика получше, и графика. Порывшись в сети, я нашёл foobillard. В принципе, бильярд другу понравился, вот только было несколько маленьких недостатков, которые было бы хорошо исправить. К счастью, foobillard имеет открытые коды, так что я вооружился компилятором и сел "доделывать" игру.
В качестве исходников использовались последние на тот момент доступные foobillard-3.0a. Сборку и компиляцию я проводил с помощью gcc в дистрибутиве Mandriva 2007 Spring.

Первое, чего не хватает foobillard – большой дальности обзора камеры. Действительно, с одной стороны в игре есть возможность отодвинуть камеру подальше от мяча, что позволяет разглядеть стол целиком. Однако на практике получается, что при отдалении камеры стол «уходит в небытие», отрезаясь камерой. Ясное дело, что дело в матрице проекций. Ищем в исходниках, где используется константа GL_PROJECTION. Рядом с этой константой в модуле billard3d.c видим переменную zfar, которая как раз отвечает за дальнюю границу отсечения инициализируется в нескольких местах значениями 3.0 и 10.0. Заменяем эти значения на 15.0 и 30.0 соответственно. Компилируем и – вуаля: теперь камеру можно отодвигать действительно далеко не опасаясь, что стол уйдёт в неизвестность.
Второе, чего явно не хватает – возможности избавится от необходимости вручную отодвигать камеру во время хода противника и возвращать в исходное положение перед собственным ходом. Действительно, каждый раз двигать мыша туда-сюда, зажимая правую кнопку очень скоро надоедает. При этом надо сказать, что в игре на самом деле есть хороший вид сверху, с высоты птичьего полёта, позволяющий удобно наблюдать за происходящем на столе. В оригинале этот вид активируется/деактивируется кнопкой F2, которую тоже очень скоро надоедает нажимать при каждом ходе противника. К тому же, было бы неплохо и результат собственного хода наблюдать в этом режиме, а в оригинале это не получится: просто не успеешь нажать на кнопку F2 перед завершением хода. В общем, решено! Сделаем так, чтобы вид сверху активировался автоматически при совершении хода противником и при собственном ходе. Для начала находим в модуле текст F2. Видим, что при нажатии на F2 вызывается функция birdview() - собственно «птичий вид». Далее ищем текст «AI» и находим функцию do_computer_move(bool), которая отвечает за ход противника, вставляем в вызываемую этой функцией функцию shoot() вызов birdview(). Кроме того, для того чтобы при нашем ходе также отображался кий некоторое время вместо вызова queue_shot(), совершающего удар мгновенно, присвоим queue_anim значение 10, что приведёт к недолгому отображению кия (queue_shot при этом надо закоментировать). И ещё добавляем вызов toggle_queue_view() в случае, когда ходит игрок, чтобы вид возвращался в такой, какой был до вызова birdview(). В довесок ко всему, я добавил возможность переключения в вид сверху и обратно во время обдумывания хода: для этого я использую комбинацию нажатия кнопок мыши одновременно в порядке левая-правая. Раньше комбинация использовалась для бестолковой возможности играть кием.
В результате препарирования, получился куда более удобный бильярд. diff-файл можно найти на моём сайте по адресу http://www.apl-soft.com/foobillard.diff. Откомпилированная версия бинарника foobillard для linux: http://www.apl-soft.com/foobillard
Subscribe

  • Завершая тему про ВНИИС и МСВС

    Пока шли дебаты о соблюдении лицензии, "супер защищенная" система МСВС перестала быть сертифицированной: истёк срок действия старой лицензии, а новую…

  • Из почты

    Приехал из Питера. Разгребал комменты и почту. И вот что нарыл в комментах ЖЖ: Subject: относительно ВНИИНС Ребята, неужели вы всерьез думаете…

  • Санкт - Петербург

    Всё. Завтра еду в Питер. Тем более интересно, что ни разу не был. Знакомые поопытнее подсказали куда надо сходить, что посмотреть. Но, надеюсь, что…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments