Анатомия игры: обратный инжиниринг на службе мододелов или как замодить игру на примере Elden Ring и не только. Часть 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


В прошлый раз я уже рассказывала о том, как могут быть устроены игры. Теперь же настало время поведать вам, как это строение узнали и зачем вообще людям изучать организацию файлов той или иной игры. 
Примечание:

Пост рассчитан на тех, кто еще только знакомится с тонкостями 3D-моделирования и игровой инженерии, и в некоторых случаях понятия подаются несколько утрировано для понимания сути процесса.

В тексте будет много упоминаний программ, сайтов и сервисов, а также игр и разработчиков игр. Не сочтите это за рекламу.

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

Автор статьи настоятельно не рекомендует как-либо вмешиваться в структуру и работу файлов той или иной игры. Это может привести к сбоям в работе самой игры, срабатыванию систем типа античит и потере лицензии на использование и обслуживание игры.


Мод, заменяющий модельку Волка из Sekiro на драконида-альбиноса. Мой

▎Начнём с того, что такое реверсивная инженерия.

 
Реверсивная инженерия (reverse engineering) — различные способы вскрытия скрытых программных и непрограммных внутренностей зашифрованных файлов, включая закодированные библиотеки всевозможных редакторов (фото, видео, аудио-редакторов), расшифровку запароленных архивов со сложной архитектурой и, конечно, содержимое графических движков и игровые файлы. 

▎Зачем вскрывать игровые архивы? 


Рядовой пользователь, скорее всего, подумает о поиске способов нелегального получения выгоды (читах или пиратстве, продаже элементов кода или моделек). 
Дизайнер или художник скажет, что неплохо было бы поближе изучить отдельные детали — подробности строения монстров, одежду или украшения героев (а то и лица в играх, где они детализированы, но на скриншотах не видны), устройство и архитектуру уровней и локаций и т.п.

Начинающий геймдизайнер тоже захочет поближе познакомиться с архитектурой, но уже не только локаций, но и с архитектурой файлов в целом и организацией скриптов. 
Но есть и ещё одна, особая категория продвинутых юзеров, которым также необходимо знать, как устроены файлы игры. Это энтузиасты, которые могут не спать ночами, не получая ни копейки прибыли за свои мучения (как правило). Люди, которые одинаково ревностно хранят свои секреты и делятся ими на открытых форумах. Безумцы, способные пересобрать игру в нечто настолько отличное от оригинала, что рядовой юзер и не поймёт, что играет в переделку. Имя им — легион… Ой, то есть мододелы. 

▎Моды и их классификация


Моды или фанатские модификации (mod, mods) — всевозможные преобразования и изменения, вносимые в игру не разработчиком, а фанатской аудиторией. Далеко не всегда это улучшения или какие-то заметные правки, зачастую это мелкие коррекции баланса (урона, перезарядки умений, подзагрузок и т.п.), иногда замена частей интерфейса или текстур, а порой просто форменное безумие, представляющее собой винегрет из авторского бреда и вырвиглазных моделей с корявой анимацией. 
Мододелы по большей части люди непрофессиональные. Обычно в мододелы перерастает самый обычный игрок, которому не понравилась какая-то одна незначительная деталь, намозолившая глаза за десяток-другой прохождения любимой игры. Но в процессе поисков исправления этой детали он узнал о своей любимой игре столько, что просто не мог не попробовать разнообразить свое прохождение чем-то ещё. 
Кстати, ретекстуры появились не в 3D-играх. Первые моды-перекраски делали еще для первых видеоигр, заменяя спрайты (пиксельные изображения) либо кодом, либо путем перерисовки игровых атласов. Но для этого требовался немалый труд, ведь заменять приходилось не одну картинку с цветом, а несколько десятков или сотен кадров на каждое движение и действие персонажа. К слову, моды-ретекстуры на «плоские» игры существуют и сейчас.

Вот, например, оригинал и ретекстур главного героя из игры Hollow Knight в мододеланьи которой я тоже поучаствовала:

     
Внизу вы видите два атласа (набора текстур для спрайтов героя). Аналогично, слева оригинал, справа ретекстур. Работа была проделана колоссальная. Автор ретекстура LOATR, название Sapphire knight.
Чтобы нам в дальнейшем было проще ориентироваться, я приведу примитивную классификации модов, которой так или иначе придерживаются на многих русскоязычных сайтах и форумах с модами и модостроением. Эта классификация основана на том, какие изменения мод вносит в игру.
«Ванильная» игра — жаргонное название базовой игры без модификаций (в некоторых случаях и без DLC). Наибольшее распространение получило среди мододелов Скайрима, причём как русско-, так и англоязычных. 


В некоторых случаях ванильными могут назвать и моды или сборки модов, не нарушающие атмосферу и лор (историю мира), а также не вносящие серьёзные изменения в геймплей и внешний вид игры (lore-friendly моды).

Фикс (fix) — небольшая правка, изменяющая одну или несколько функциональных точек игры. Обычно представлена в виде исправления непосредственно кода игры, либо в виде добавления небольших текстовых файлов (dll- и dxl-библиотек, крохотных по весу системных файлов и т.п.). 


Иногда фиксы содержат и изменения текстур. Например, сильно облегчивший жизнь игрокам из 2011-го — 12-го DSfix — маленькая модификация, изменяющая настройки разрешения игры, клавиши и подписи в меню и интерфейсе игры Dark Souls PDTE на пк. В «ванильной» версии игры эти подписи были сделаны под кнопки джойстика, и пк-боярин поначалу очень сильно терялся.

Очень близко к фиксам стоят графические модификации без замены текстур и моделей. Обычно это такой же dll-файл, а то и вообще изменения в текстовом файле с базовой графической информацией или файл настроек игры в папке «Документы». По сути своей такие моды всего лишь изменяют настройки рендера (визуализации) игры, добавляя настройки камеры, света, силу и глубину теней и размытие. 


Сюда, например, можно отнести ENB-пресеты для Скайрима и серии Соулс, а также некоторые SFX-моды. Но предупреждаем — ресурсы слабых копмпухтеров эти модификации жрут очень сильно.

Геймплейные моды — изменения игрового процесса. Хотя многие геймплейные моды содержат в себе и фиксы, и реплейсеры, в базовом своём варианте это изменения, в первую очередь, программные — различные скрипты, плагины и надстройки, вносящие правки в код игры. 

Реплейсер (replacer) — обширная категория модов-заменителей чего бы то ни было. Большая часть реплейсеров содержит только и непосредственно заменяющий файл (текстуру, модель, анимацию и т.п.). 

Реплейсер текстур или ретекстур — самый распространённый тип модов. Как называется, так и выглядит — простая замена одной картинки на другую. Рамки очень широки — от изменения внешнего вида HUD до полной переработки текстур окружения на Full HD, что уже значительно меняет качество картинки на экране.  Хотя основная масса реплейсеров, конечно, перекраска шмоток и оружия для героев. 


                                   Оригинал VS ретекстур

Примечание
Простыми перекрасками ради увеличения разнообразия грешат и сами разработчики, добавляя дубликаты моделек внутри игры с разными текстурами. 






Скины-ретекстуры и скин-ремодел для драконов Фантома в игре Century: age of Ashes
Кстати, последний вдохновлен Адской виверной з Dark Souls PTDE


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

Реплейсер моделей — замена ванильной модельки и её текстур на другую. Как и с текстурами, диапазон и масштаб замен очень велик. Наиболее популярны реплейсеры моделек брони и оружия, но реплейсеры врагов, монстров и архитектуры тоже достойны внимания. В редких случаях маньяки-мододелы полностью заменяют и пересобирают целые локации. 


Замена ГГ одной игры на ключевого босса другой. Не мое, ориг

Переработки и сборки (overhaul моды) — комплексные изменения, содержащие как программные геймплейные правки, так и реплейсеры, и ENB. Это не то чтобы совсем другая игра, однако значительные улучшения графики вкупе с небольшими исправлениями геймплея могут неплохо развеять вас как игрока или помогут освежить приятные воспоминания от первого прохождения игры. Ведь наш мозг устроен так, что любая понравившаяся нам вещь в воспоминаниях выглядит намного лучше, чем была в жизни, а посему при перепрохождении годы спустя мы часто испытываем разочарование. 

Моды с новыми фичами: компаньоны, заклинания, расширения. 
Не всегда, но часто такие моды добавляют новые модели и текстуры, но в отличие от реплейсеров, они не заменяют уже существующие части игры, а добавляют новые. 
Это значительная часть модов на Скайрим и незначительная — на соулс-серию. 
Тут тоже можно делить на подкатегории: новые компаньоны, новые заклинания и навыки, новые квесты, новые сюжетные линии, новые локации и т.п. Некоторые из них использую не изменённые или незначительно изменённые ванильные функции и модели, некоторые используют вырезанные разработчиками части игры, некоторые добавляют целые пакеты новых моделей, текстур, плагинов и скриптов, нагружая ваш компьютер и его оперативную память до состояния воспламенения. 

И отдельной категорией идут реворки — полные переделки оригинала. Причём изменения и дополнения порой настолько сильные, что результат правильнее будет назвать «игрой на движке ХХХ» (вставить вместо ХХХ название оригинала). Это тяжёлая и сложная работа, которую мододелы редко выполняют в одиночку (несмотря на то, что самое сложное — движок — используется уже полностью готовый и отлаженный). Некоторые из подобных проектов до сих пор находятся в разработке. Например, приснопамятный Skywind — ремейк Morrowind на движке Skyrim. Или знакомый отечественным игрокам как отдельная игра Диккурик — новая игра на базе небезызвестной Gothic. А уж широко известный в узких кругах Darkmod, поддержка которого осуществляется до сих пор… 


геймплейные особенности и квесты игры Thief. За годы существования проекта, командами из разных стран к этой базе были созданы сотни модификаций, от коротких приключений до полновесных игр с собственным сюжетом, озвучкой и кат сценами (роликами) на движке игры.

▎Купи Скайрим и сделай игру сам


The Elder Scrolls V: Skyrim — самая простая в моддинге игра из числа тех, которые я лично модифицировала или пыталась модифицировать. Заметьте, не самая простая в мире, а самая простая лично на мой вкус и цвет. Наверное, это потому, что Bethesda softworks к моменту создания «скурима» окончательно обленилась и стала выпускать песочницу или базу для доработки фанатами вместо полноценных игр. 
Где-то плачет один фанат Fallout

Хотя на момент выхода Скайрима лично я была им довольна. Конечно, некоторых моментов драматизма и деталей мира, как в Морровинд, мне не хватало, как и цветности Обливиона, но в целом было хорошо. До тех пор, пока я не узнала, что в игре, где основой сюжета (и геймплея) были драконы, самих драконов было всего четыре вида, один из которых в двух цветах, плюс ещё три именных с уникальными моделями и один костяк на всех после смерти. Да и зубов в пастях огромных альфа-хищников как-то маловато. 

Обычный (в файлах игры именуемый земляным), кровавый (болотный), ледяной, старейший (тундровый) и древний:


Последние два отличаются только текстурой и цифрами урона (тонкости магии опустим). Уникальные драконы — Алдуин (босс), его братишка Партурнакс и предатель Одавиинг.

Позднее разработчики добавили ещё пару видов драконов — благородного перепончатого любимца игроков, легендарного и змеевидного, а также именного дракона Дюрневира c собственным квестом. Но это все ещё преступно мало: 



Это стало одной из причин для меня изучать моддинг в этой игре (и моддинг вообще) — разнообразить драконов. Второй причиной было желание изучить моделлинг для игр более подробно, так как на тот момент сам моделлинг на базовом уровне я освоила, но как перенести это в игру и функционально адаптировать, я не знала. 


Обычный дракон vs моя первая переделка. С этого ракурса разница не очень заметна, но для начала работа была немаленькая.

Впрочем, не одна я этим занялась. Сайты с модами на Скайрим содержат множество модов на усиление и разнообразие драконов. 


Одни моды добавляют только текстуры и настройки для драконов в игре (Bellyache New dragon species). Другие приносят пару десятков драконов с новыми моделями, способностями и квестами, как Chaos dragons.

В дальнейшем на каждом этапе моддинга я буду упоминать аналогичный этап для Скайрима, чтобы лучше показывать как процесс моддинга, так и отличия в моддинге разных игр. 
Я уделяю этому так много внимания сейчас, потому что моддинг других игр далеко не такой дружелюбный, как модификация Скайрима. И внесение правок в игры серии Dark Souls, равно как и в другие игры From Software, например, Sekiro и Elden Ring, по сложности сравнимо с прохождением этих игр. 

▎Что мод грядущий нам готовит


К чему была подводка про реверсивный инжиниринг в самом начале? К тому, что без знания о строении игр и способах упаковки файлов вам будет весьма трудно делать моды. Заметьте, не невозможно, просто трудно. Те же ENB-пресеты можно делать наобум, просто меняя значения в файле конфигурации графики. Рано или поздно вы создадите графический мод, пускай и после нескольких вылетов игры. Однако для создания хоть чего-то вразумительного вам понадобятся знания и инструменты. О каждом из них я расскажу подробнее в процессе. 

Кроме того, создание модов напрямую связано с нормальной и реверсивной инженерией игровых архивов. Даже самый простой реплейсер текстуры какого-нибудь завалящего меча невозможен без распаковки архива оригинальной игры. А многие игры после редактирования требуют еще и запаковывания этих архивов обратно с сохранением структур подпапок и порядка вложения архивов. Таким образом, для моддинга вам понадобится правильно распаковать и запаковать игру обратно. Благо для самых популярных игр энтузиасты из числа талантливых программистов уже сделали для вас соответствующие инструменты. Хотя и с ними не все так гладко.
Источник: https://habr.com/ru/company/first/blog/710634/


Интересные статьи

Интересные статьи

В прошлой статье я рассмотрел базовый сценарий UAC клиента, но зачастую в процессе обучение или тестирование необходимо смоделировать ситуацию в которой sipp будет выступать в качестве вызываемого або...
В статье речь идет о Ebiten 1.10.Ebiten — это хорошо продуманная библиотека для создания 2D-игр, написанная Хадзиме Хошем на языке Go. С ее помощью созданы движки ряда мобильных и десктопных игр, как ...
Я действующий разработчик приложений под платформу Android. Хочу поделиться крутой библиотекой, облегчающей разработку адаптеров для RecyclerView, и описать ее использование. RecyclerView – это View э...
Генераторы - это новый вид функций, который появился в ES6. О них написано немало статей и приведено множество теоретических примеров. Представим, что генератор (функция ...
Мы продолжаем публиковать доклады, прозвучавшие на RAIF 2019 (Russian Artificial Intelligence Forum). На этот раз своим опытом делится Вадим Аббакумов, кандидат физико-математических наук, гл...