Документы для источника OpenTTD: http://docs.openttd.org/ , они будут полезны.
Также вики для разработчиков: http://wiki.openttd.org/Development .
Как познакомиться?
Сначала попробуйте скомпилировать. Скомпилируйте его для своей платформы и убедитесь, что он работает правильно.
Затем выберите ошибку или что-нибудь из списка дел и попробуйте реализовать ее, или просто поиграйте в игру и подумайте о добавлении / изменении чего-то простого. Конечно, вы можете потерпеть неудачу и захотите изменить свою задачу, но каждая попытка будет шагом к пониманию структуры проекта.
Меня больше всего раздражает компилирующая часть. Я думаю, это потому, что я работаю в Windows :-) Мне почти никогда не удавалось скомпилировать что-то с нуля, не думая, не спамируя людей и т. Д. Но я быстро привыкаю ко многим проектам, которые не нужно компилировать, например как написано на PHP, Python или JavaScript.
Я только что что-то сделал с кодом. Изменены некоторые важные константы :-) Написание плагинов. Что бы ни. И однажды я понял, что теперь, если я выберу практически любую задачу из трекера проблем, я смогу выяснить, по крайней мере, где находится проблема.
Если вы просто читаете код, вы не узнаете его хорошо! Даже (хорошие) художественные книги нельзя полностью понять, только читая их снова и снова.
Загрузите код.
Настройте его в своей любимой IDE так, чтобы он собирался и запускался.
Установите точку останова в начале main()
Проведите некоторое время в отладчике :)
Получите хорошее представление о том, как вещи собираются вместе, где находятся зависимости и что происходит, когда вы делаете что-то в приложении.
Другая хорошая стратегия - начать с некоторого программного обеспечения, которое вы используете, даже с того, на которое вы полагаетесь. Затем найдите самую раздражающую ошибку и исправьте ее.
Во многих случаях это помогает иметь много скрэтч-бумагу или какой-нибудь инструмент для быстрого нанесения диаграмм - по мере того, как вы сталкиваетесь с вещами, зарисовываете, как они соотносятся друг с другом. Со временем Вы получите представление о том, как все укладывается и что с чем взаимодействует, что-то вроде специальной диаграммы класса (но гораздо более свободной формы).
Выберите начальную точку, которую можно где-нибудь идентифицировать: может быть, это пользовательская обработка входных данных, может быть, это последовательность инициализации программы - и отследите оттуда поток выполнения, чтобы получить представление о том, как все происходит.
Надеюсь, в исходном коде были полезные комментарии - может быть, даже, в случае OpenTTD, комментарии в стиле doxygen, так что вы можете получить для него хороший набор docs.