Как начать читать чужой игровой код — и зачем вообще это делать. Часть 1
Не так давно Valve открыли исходный код Team Fortress 2 в составе Source SDK 2013. Такой доступ к реальному коду — ценный ресурс для тех, кто хочет учиться делать игры не по туториалам, а по реальным продуктам. А еще для тех, кто хочет создавать моды.
В нескольких частях расскажем, как читать чужой игровой код, даже если у вас нет опыта работы с крупными проектами. В этом материале — основа: зачем оно нам (и вам) надо, какие сайты открывать и что делать в первую очередь. Наш проводник — Андрей Штанов, исследователь факультета компьютерных наук Вышки, участник проектной группы «Программная инженерия компьютерных игр».
Зачем учиться на чужом коде
- Изучать реальный код: учишься приёмам разработчиков, видишь, как устроены графика, физика, ИИ и другие механики игр.
- Создавать моды: открытый код даёт свободу изменений: можно дописывать функционал, менять логику или создавать полные конверсии.
- Вдохновляться: работа с готовыми проектами ускоряет обучение. На реальном примере легче понять устройство игры и придумать своё.
- Лёгкий (относительно) вход в геймдев: это практический опыт программирования: ты сразу видишь результаты своих изменений и обогащаешь свои навыки.
Где искать исходники и что с ними делать
Чтобы начать разбираться в чужом проекте, нужно — сюрприз — найти открытый код. Куда идти?
- GitHub — основной источник. Ищем по названию игры + «source», «open source», «engine».
- Wikipedia — List of commercial video games with available source code — список игр с открытым исходным кодом.
- Internet Archive — архив исходников и документации по старым играм.
- retroreversing.com — сайт с гайдами по реверс-инжинирингу и воссозданным кодом игр.
Читать код «вслепую» не получится
Вы будете видеть набор команд — что это даст? Ничего, правильно. Поэтому для начала игру надо «собрать».
Сборка — это процесс превращения исходного кода в исполняемый файл.
Системы сборки вроде Gradle, CMake, Make определяют, какие файлы и зависимости нужно использовать. После сборки мы сможем:
- запускать игру
- отслеживать, как код ведёт себя во времени
- запускать отладку
- модифицировать код и видеть результат
А если исходников нет? Реверс-инжиниринг
Даже когда код официально недоступен, фанаты часто восстанавливают его сами. КСообщества могут «воссоздавать» исходники из скомпилированных файлов, но это трудоёмкий обратный анализ.
Например, код Another World никогда не публиковался, но энтузиасты тщательным разбором DOS-версии восстановили игровые механики.
С каких проектов начать
- Unciv — бесплатный open-source ремейк Civilization V. Игра сделана на Java (LibGDX) и полностью модифицируема: её исходники доступны на GitHub. Изучив код Unciv, можно понять, как реализованы основные механики 4X-игры (города, юниты, экономическая модель и т.д.).
- Quake II — шутер 1997 года от id Software. Разбор этого кода познакомит с основами 3D-движка и сетевой игры.
- Pioneer — открытый космический сим под лицензией GPL. Его механика вдохновлена Elite: здесь есть торговля, сражения и исследование галактики. Код Pioneer тоже открыт, так что можно поэкспериментировать с космической физикой или расширить игровые фракции.
Блоги и сообщества в помощь
Изучать чужой код помогают блоги и статьи. Например, разработчик Фабиен Саньяр подробно разбирает движки классических игр. В его «Code Review» Another World показано, как фанаты восстановили виртуальную машину этой игры. Такие материалы дают глубокое понимание устройства игр и делают изучение кода более доступным.
В следующей части поговорим про моды: как чтение кода помогает с их созданием, как моды игры перерастали в самостоятельные проекты. А еще ближе посмотрим на содержание документов.