OpenTTD (Да, та самая игра TTD, о которой я говорю)

Грэг Дункан

Сегодня мы поговорим об игре, которой я уделил годы. Вы помните старую игру Transport Tycoon Deluxe, созданную Крисом Сойером (Chris Sawyer) и компанией MicroProse? Не знаю, как вы, а я провел много часов (много-много часов), играя в нее. Там надо было строить сети автомобильных и железных дорог, что у меня никак не получалось.

Теперь давайте перенесемся в настоящее. Ведь было бы неплохо, если бы мы смогли не только сыграть в улучшенную версию игры, но и совершить путешествие по ее коду?

Хорошо, я дам вам…

OpenTTD

clip_image002

Об OpenTTD

OpenTTD – это игра-симуляция с открытым исходным кодом, основанная на известной игре фирмы Microprose "Transport Tycoon Deluxe", написанной Крисом Сойером. Она воспроизводит оригинал настолько точно, насколько это возможно, хотя и добавляет некоторые функции.

OpenTTD лицензируется на условиях GNU General Public License 2.0. Подробности можно найти в файле COPYING, включенном в каждый выпуск и список исходников к игре.

Возможности

OpenTTD сконструирована по первоначальной игре Transport Tycoon, написанной Крисом Сойером и существенно улучшает игровые возможности. Многие из них были вдохновлены TTDPatch, а другие являются оригинальными.

Список улучшений по сравнению с исходной игрой включает в себя следующие пункты:

  • увеличенные карты (в 64 раза по размеру)
  • стабильный многопользовательский режим вплоть до 255 игроков в 15 компаниях или наблюдателей
  • режим выделенного сервера и внутриигровая консоль администратора
  • поддержка протоколов IPv6 и IPv4 для всех соединений клиентов и сервера
  • внутриигровая загрузка искусственного интеллекта, файлов NewGRF, сценариев и карт высот
  • новый алгоритм поиска пути, обеспечивающей следование транспотртных средств туда, куда вы пожелаете
  • инструмент автопостройки железных и автомобильных дорог, улучшенно конструирование окружающей среды
  • каналы, шлюзы, акведуки
  • большие, неоднородные станции и возможность объединять их
  • гигантские многоголовые поезда
  • различные настраиваемые модели ускорения транспортных средств
  • клонирование, автозамена и автообновление транспортных средств
  • возможность строительства на склонах и побережье
  • улучшенные/условные команды, разделение и копирование команд
  • более длинные и высокие мосты, в том числе с новых конструкций, плюс совершенно гибкие тропинки/дороги под мостами
  • переработанная система аэропортов со множеством аэро- и веролетопортов (т. е. международных и столичных)
  • предварительные сигналы, семафоры, путевые сигналы
  • поддержка TTDPatch NewGRF, предлагающая множество возможностей для графики настройку/модификацию поведения
  • дорожные остановки для сочлененных автопоездов и трамваев, не требующие выхода из машины
  • множество деревьев на каждом фрагменте
  • подкуп городских властей
  • множество настроек для придания игре того вида, который требуется
  • сохранение игры без ее прерывания с помощью файлов, сжатых по алгоритму zlib
  • поддержка интернализации. OpenTTD переведена более чем на 50 языков
  • динамически создаваемые имена городов на 18 языках, плюс поддержа NewGRF для дополнительных языков
  • свободно распространяемая графика, звуки и музыка
  • платформа для написанных пользователем программ искусственного интеллекта
  • изменение масштаба представления картинки

Много усилий было приложено для упрощения использования OpenTTD. Оно включают:

  • инструмент преобразования железных дорого (в электрофицированные ж/д, монорельсы, и дороги с магнитной левитацией)
  • поддержка механизма drag&drop почти для всех инструментов (снос, построение и удаление дорог, станций, редактор сценариев, и т. д.)
  • сортировка списков по разным критериям (транспортные средства, станции, города, отрасли промышленности, и т. д.)
  • поддержка колесика мыши (меню прокрутки, увеличение/уменьшение)
  • автопрокрутка, когда указатель мыши попадает в область у края окна/экрана
  • избавление от целого поезда при перетаскивании его в динамитную корзину
  • оценка стоимости с помощью клавиши «shift»
  • окно настройки сложных параметров, изменение настроек, не выходя из игры

Возможности графики/интерфейса:

  • создание снимков экрана в форматах BMP, PNG или PCX (выбирается в меню настоек игры)
  • большее количество валют (включая введение евро в 2002)
  • дополнительные точки наблюдения, чтобы видеть несколько частей игрового мира в одно время
  • выбор разрешения и частоты обновления экрана для полноэкранного режима
  • цветная газета после определенной даты
  • обозначаемая цветом прибыль от транспортного средства
  • увеличение скорости игры (нажимая кнопку ускорения или клавишу Tab)
  • постоянно возникающие окна, которые всегда располагаются поверх других окон и точно выравниваются относительно них
  • больше горячих клавиш и меньше щелканья мышкой
  • поддержка 32-разрядной графики
  • поддержка языков с порядком письма справа-налево
  • поддержка шрифтов других размеров, когда интерфейс пользователя масштабируется, исходя из шрифта и перевода

Приведение полного списка возможностей бесполезно, так как потребует почти ежедневного его обновления, и даже в этом случае можно что-то забыть. Поиграйте в эту игру, чтобы самостоятельно познакомиться с ее возможностями, или взгляните на статью в википедии, для более точного списка и объяснения возможностей.

Поддерживаемыеоперационныесистемы

OpenTTD официально поддерживает следующие операционные системы:

  • *BSD, особенно FreeBSD, NetBSD и OpenBSD
  • Linux
  • Solaris
  • Windows 95/98/ME/2000/XP/Vista/7

Так это блог Coding4Fun (и, следовательно, я подразумеваю легкий спуск в глубины исходного кода, который прекрасно документирован), вы получите исходники, которые можно скомпилировать, запустить и отладить в Visual Studio 2008/2010 (даже в свободных редакциях Express, хотя надо отметить, что нельзя создать 64-разрядную версию).

Страница wiki.openttd.org Microsoft Visual C++ 2008 Express Editions проведет вас через весь процесс, начиная с загрузки VS Express editions и других SDK Microsoft, библиотек, получение исходного кода, настройку путей Include/Library и компиляции проекта. Прямо сегодня я проследовал по этому маршруту и скомпилировал и запустил проект на моей системе. На это у меня ушло менее 30 минут (большую часть этого времени заняла первая компиляция и компоновка).

clip_image004

Посмотрим на решение:

clip_image006

clip_image008

Как видно, это полный и сложный проект игры.

Так выглядит игра, запущенная на моем ноутбуке:

clip_image010

Как отмечено в документации (и как вы могли бы ожидать) есть большая разница в производительности режимов отладки и выпуска (Debug и Release). Если можно, используйте режим релиза.

Замечательной чертой OpenTTD является ее расширяемость. Игру легко расширить, добавляя любые модули – от искусственного интеллекта, до грузовиков и фрагментов поверхности. При этом не нужно лезть в исходники.

Разработка

Разработка расширений NewGRF

OpenTTD позволяет использовать NewGRF и другие базовые наборы графики, звуков и музыки.

Эти файлы требуют специальных расширений и можно использовать следующие вспомогательные программы для помощи при создании дополнений:

  • nml – высокоуровневый язык и компилятор для написания файлов NewGRF. Подробнее см. спецификацию и руководство.
  • grfcodec – компилирует исходники NewGRF на низкоуровневом языке программирования NFO в GRF-файл. Использует вложенную программу nforenum для проверки кода на разумность. Подробнее см. спецификацию и руководство.
  • pngcodec – компилирует PNG-файлы с 32 битной глубиной цвета и их выравнивающие файлы в замещающий файл с 32 разрядами на пиксел. Замечание. Это также можно сделать с помощью NML.
  • catcodec – компилирует файл описания звукового набора (sfo) и сами звуки в звуковой набор.

Дополнительную помощь можно найти на wiki, DevZone или посетив форумы.

NewGRF можно сделать доступным для других игроков через механизм онлайнового контента.

Разработка модулей искусственного интеллекта (ИИ)

OpenTTD позволяет использовать несколько модулей искусственного интеллекта.

Модули и библиотеки искусственного интеллекта написаны на языке Squirrel и для их использования OpenTTD API для искусственного интеллекта. Полезные ресурсы:

  • NoAI API API для модулей искусственного интеллекта OpenTTD.
  • DevZone – сайт DevZone является домашней страницей для ряда модулей и библиотек искусственного интеллекта с открытым исходным кодом.
  • Wiki – секция Wiki, посвященная разработке искусственного интеллекта.
  • Forum посвящен разработке ИИ для OpenTTD.

Модули ИИ можно сделать доступным для других игроков через механизм онлайнового контента.

Если вы хотите увидеть очень сложную, полную, занимательную и просто клёвую игру, покопаться в ее исходниках, написать расширения для нее, помочь проекту с переводом на другие языки или просто получить удовольствие, OpenTTD всегда для вас…