Как-то в своём профиле в Instagram я рассказывал тебе о модификации, которую разрабатываю для компьютерной игры Factorio. Той, которая позволяет сделать игровой мир чуть лучше путём очистки воздуха. Осенью я наконец-то взял себя в руки и довёл этот мод до стадии альфа-тестирования, так что теперь он доступен для скачивания на официальном портале игры.
В процессе я неплохо поднял уровень своих навыков в Cinema 4D, в которую, кстати, влюбился (за исключением карт развёртки). Припомнил невероятно обаятельный язык Lua. С любовью и ненавистью покопался в чужом коде и документации (весьма туманной местами). А также написал пару удобных утилит, которые позволили упростить работу со спрайтами. Но давай обо всём по порядку.
Идея пришла ко мне после многочасовых игровых сессий с @softkitty___warmkitty, в ходе которых нам периодически приходилось устраивать рейды на местную фауну и её гнездилища. Весьма агрессивную, надо сказать. Но её можно понять: сидишь себе спокойно, растишь кровожадных ядовитых деток, а тут налетает туча сернистых облаков и портит всю малину (или что у них там на завтрак?). Естественно, надо этих владельцев заводов (газет, пароходов) покусать. А заодно погромить эти самые заводы. Что, в свою очередь, не могло понравиться нам, строителям светлого будущего. Вот я и решил сделать игровой мир ещё чуть светлее. В прямом смысле. Убрать те самые облака с тяжёлыми металлами и прочей химией и обрести, наконец, вселенскую гармонию.
Прежде всего мне хотелось, чтобы процесс улавливания и фильтрации был максимально приближен к реальности. Ведь пусть игра и происходит в некоем инопланетном сеттинге, вещества, материалы и предметы там приходится использовать вполне земные. Поэтому первым делом я пошёл бродить по промышленным сайтам и читать про методы очистки воздуха в нашем с вами вполне реальном (спорно!) мире. Как оказалось, их придумано немало, и мне пришлось сосредоточиться на основных: абсорбции (растворение в жидкости) и адсорбции (поглощение другим веществом). Для каждого я накидал небольшую схему, которая описывает техпроцесс от начала и до конца, начиная с «сырьевых» материалов и заканчивая побочными продуктами фильтрации. Так я смог понять, какие механизмы мне нужно будет реализовать и какие цепочки преобразований описать. А также определить те места, в которых игрок сможет позднее сделать улучшения.
После этого процесс разделился на две основных ветви: собственно программирование механизмов и создание их прототипов (описание и графика). Если в части первого разработчики предоставили весьма исчерпывающую документацию (к тому же мне пригодился код из других пользовательских модов), то в плане прототипов официальный портал игры весьма немногословен. Да, он описывает всё. Но без каких бы то ни было деталей и примеров. Так что в этом вопросе я бы сразу порекомендовал смотреть на моды других игроков, благо там даже ничего декомпилировать не надо.
По кодингу сложностей у меня не возникло. Разве что пришлось немного поразбираться в игровых событиях, сохранении/загрузке и мультиплеерной совместимости. В этом плане все проблемы возникали только в тех местах, где я неправильно или не в тот момент обращался к глобальной игровой таблице. В остальном могу сказать, что авторы предоставили весьма исчерпывающий функционал, который позволяет добавлять в игру практически любые механики. Если вы не пользуетесь каким-нибудь сторонним инструментом для отладки (я находил плагины для Visual Studio Code), то game.print() станет одним из ваших любимых методов.
С графикой мне предстояло решить куда больше вопросов: создание 3D моделей, конвертирование их в игровые спрайты (двумерные внутриигровые изображения, представляют собой один или несколько кадров анимации), создание описаний того, как эти спрайты должны отображаться. Могу сказать, что на это ушло процентов 80 всего времени, которое я потратил на мод. По ходу я создал предустановленню сцену для Cinema 4D, которая имитирует игровое освещение и атмосферу и позволяет сосредоточиться на создании модели, а также упрощает последующий экспорт в 2D изображения. После чего они подхватываются моей же утилитой, комбинирующей их вместе и выдающей в результате упакованные и готовые к использованию атласы.
В моделировании мне помогли не столько видео-инструкции от зарубежных мододелов, сколько уроки по Cinema 4D, ведь каждый из них рисовал графику и организовывал экспорт по-своему. Так что я рекомендую вам сначала разобраться в деталях программы, это позволит организовать свой собственный рабочий процесс. О своём я, пожалуй, напишу отдельную статью.
Описание рецептов, самих сущностей и их графического представления – рутинная задача. Большую часть времени я просто копировал существующие описания, внося в них небольшие изменения, главное, нужно быть максимально внимательным при указании величин и ссылок. Сейчас я уже и не припомню, сколько раз во время загрузки игра показывала мне кукиш и говорила, что такая-то картинка не найдена или такой-то размер не соответствует реальности. Думаю, этот этап я тоже автоматизирую и напишу ещё одну утилиту. После чего можно будет говорить о готовом полноценном рабочем процессе, знай только придумывай механики и рисуй сущности.
Пока что для меня осталось не до конца понятным, каким образом в игре отображаются трубы и применяется окрашивание (tint), но, надеюсь, в сообществе мне помогут с этим вопросом. Кстати, если вы знакомы с английским, форум – отличное место для решения возникающих задач.
Ух, как много получилось. А ведь это я буквально пробежал по верхам, описав в двух словах весь свой путь от идеи до рабочей альфа-версии. Понимаю, пост получился весьма техническим, такова уж природа моей деятельности. Но, возможно, кого-то он вдохновит поиграть в Factorio, а кого-то – придумать и реализовать свою собственную модификацию. Потому что для себя я усвоил главное – если ты можешь поставить себе задачу, то ты можешь и решить её. Чуть не забыл, а вот и сама ссылка для загрузки: играйте, наслаждайтесь и делайте мир лучше.
Эй друг, ты ведь не думал, что я про тебя забыл? Вижу коммент ты потер, а значит и прочитал. Ответа на почте нет. Решения проблемы тоже. Что делаем дальше? Забивать уже на твой мод или стоит ждать?
Привет. Возможно, он потерялся, когда я восстанавливал сайт из бэкапа. К тому же каждый день строчат спаммеры, мог случайно потереть. К сожалению, нет времени работать с модом. Я видел, что кто-то его форкнул на гитхабе, можно проверить, продолжает ли он разработку дальше.