программы для создания модов для игр
Программы для создания модов для игр
Желание привнести в игру новые механики, окружение или, говоря проще, изменить что-то на свой лад идет с незапамятных времен. Модифицировать игру куда проще, чем создавать ее с нуля. Уже есть заданные механики, окружение и анимации. Остается только добавлять новый или отрезать уже существующий контент, меняя таким образом изначальный билд. Нередко бывает и так, что сообщество создает специальный софт, который упрощает ряд задач, включая импорт исходников и экспорт новых или измененных файлов в игру. К примеру, еще в 1994 году, благодаря Брендону Уайберу и наличию открытого в DOOM кода, модостроение стало популярно в таких масштабах. Используя DEU (DOOM Editor Utility), написанную Уайбером, игроки получили возможность делать собственные уровни и модификации к игре. На программе “Менеджмент игровых проектов” в Высшей школе бизнес информатики НИУ ВШЭ многие наши слушатели тоже имеют опыт использования программ для создания модов для игр или же интересуются этой темой.
Та же Dota – изначально была модификацией для Warcraft III. Карта была создана с помощью редактора уровней World Editor для Warcraft III: Reign of Chaos, а с выходом расширения Warcraft III: The Frozen Throne была улучшена. Сейчас же, Абдул Измаил (IceFrog), один из её создателей, продолжает работать над Dota 2 в Valve. Точно так же было и Counter-Strike. Первая бета Counter-Strike вышла в 1999 году и изначально являлась модификацией Half-Life. Сменив пять версий, игра остается актуальной до сих пор, давно отделившись от Half-Life и перейдя на новый движок Source, а в последствии на Source 2. Огромная работа проделана над S.T.A.L.K.E.R.: Lost Alpha – по сути это огромный аддон, вносящий в игру все, что было вырезано разработчиками из GSC Game World ранее, чтобы воссоздать ранний облик игры из анонсов периода 2003-2004 года. Как и в случае с Dota или с CS, будучи модом к Half-Life 2, Stanley Parable смогла в итоге стать полноценной отдельной игрой и завоевать множество наград.
Под каждую игру, как и в случае с DEU, обычно пишется свой инструментарий, который специально под нее заточен и облегчает работу с дистрибутивом. Но по некоторым играм все же можно выделить самые популярные программы для моддинга.
OpenIV
Универсальный редактор и файл-менеджер для PC-версий Grand Theft Auto V, Grand Theft Auto IV/EFLC и Max Payne 3. OpenIV позволяет редактировать скрытые архивы игры, добавлять и изменять в них файлы нужные файлы, в два клика интегрировать в игру новую текстуру. В режиме редактирования программа автоматически сохраняет все внесенные изменения, но занимаясь созданием модов, лучше вообще всегда не забывать делать бекапы.
Valve Hammer Editor
Редактор уровней, разработанный компанией Valve Software для работы с игровыми движками GoldSrc и Source входит в комплект Source SDK — набора программ для создания модификаций к играм, построенным на технологии Source.
Редактор был разработан Беном Моррисом для создания уровней в Quake 1 и размещен в свободном доступе. Начиная с версии 4.0 программа стала работать с Source, на котором написана Half-Life 2, изначально Dota 2 и еще ряд игр от Valve. Редактор поставляется в комплекте Source SDK и доступен к свободной загрузке через сервис Steam для обладателя любой игры, созданной на движке Source. Все обновления программы загружаются с помощью Steam. В Hammer можно создавать уровни для всех современных игр от Valve.
S.T.A.L.K E.R.
По S.T.A.L.K E.R.: Зов Припяти и S.T.A.L.K E.R.: Тень Чернобыля вышло уже столько программ, что их объединяют в целые паки.
Сборка для модостроительства ТЧ и ЗП v1.2 объединяет в себе свыше 25 программ и такое количество контента, что игру можно изменить практически до неузнаваемости. В пак входят 165 учебников по модостроению, конвертер для X-ray sdk, набор текстур, 4.XRspawner, Генератор однотипных квестов, DDSPacker v0.1, CharEd v0.2b, статьи по моддингу и еще столько всего, что проще увидеть.
Помимо понимания устройства игры, модификации могут дать небывалый простор для экспериментов и нововведений. Garry’s mod, разработанный Гарри Ньюманом, является физической “песочницей”, где игрок может создавать окружение и проводить любые манипуляции с объектами из игр, созданных на движке Source (CS:S, CS:GO, TF2, HL2 и других игр от Valve). Спустя два года после появления первой версии, 29 ноября 2006 года Garry’s Mod стал платной игрой и до сих пор распространяется через Steam.
В 2012 году Valve сделала огромный шаг навстречу модостроению и запустила Steam Workshop. Сервис позволил всем желающим заниматься созданием собственных модификаций к уже существующим играм, которые его поддерживали. Это дало пользователям возможность не просто делать модификации, но еще и зарабатывать, а также получать фидбек от сообщества прямо в Steam.
Наличие модификаций в портфолио вполне может стать преимуществом при устройстве на работу в геймдев-студию. Умение создать мод может показать, насколько претендент на должность разбирается в левел-дизане, 3D-моделлинге, геймдизайне или каком-либо другом направлении в разработке. Особенно полезно это будет при входе в игровую индустрию, когда выпущенных проектов еще нет, но при этом есть моды, которые ставят себе игроки и пишут хорошие отзывы или которые соответствуют выбранному направлению специальности.
Если вам интересно больше узнать про игровую индустрию, создать и запустить свою игру, или пойти на работу в игровую компанию, то приглашаем на нашу образовательную программу “Менеджмент игровых проектов”. У нас часто проходят и однодневные открытые мероприятия, узнать о которых можно на странице анонсов.
Как разрабатываются моды для Unity-игр: внедряемся в код игры
У большинства игр нет официальной поддержки модов, но при этом постоянно появляются новости о том, как моддеры добавляют в игры новый контент. Часто речь идет о замене моделей, текстур или музыки, но бывают и полноценные новые игровые механики, т.е. моддеры внедряются в код игры и изменяют ее внутреннюю логику.
В этой статье мы рассмотрим, какие методы используется для того, чтобы игра, написанная на Unity, могла запускать сторонние моды: модификации библиотек игры и самого движка, подмена адресов в таблице импорта dll, вмешательство в загрузку Mono Runtime и другие.
О Beat Saber
В качестве примера я буду использовать Beat Saber — одну из самых популярных игр для VR-шлемов. Если у вас есть такой шлем, то, скорее всего, вы уже знаете, что такое Beat Saber. Если нет, то, возможно, вы видели хотя бы одно видео из игры в рекомендациях Youtube.
Единственное, что Beat Saber поддерживает из модов — это пользовательские уровни. В игре есть официальный редактор, но нет никакого сервиса, чтобы как-либо распространять свои творения, и, по моему мнению, вряд ли появится. В основе практически любого уровня лежит какая-то песня. Разрешить выкладывать такие файлы в своем официальном сервисе — значит привлечь к себе внимание правообладателей с их постоянными запросами что-то удалить или вообще с требованиями закрыть весь сервис.
Поэтому не удивительно, что вокруг Beat Saber сформировалось огромное сообщество: Beat Saber Modding Group (BSMG). Именно сообщество ответственно за большую часть того, что есть в игре.
Все это поддерживается сообществом. Большинство модов и даже сами сайты — это проекты с открытым исходным кодом, их можно найти на GitHub, чем я и воспользовался при подготовке к этой статье.
Общая информация о Unity
Mono — это одна из реализаций спецификации общеязыковой инфраструктуры (Common Language Infrastructure, CLI). Mono работает на Windows, Linux, macOS, мобильных устройствах и игровых консолях. Разрабатывается с 2001 года компанией Ximian, которую в 2003 купила компания Novell, которую в 2011 купила Attachmate. Attachmate сократила почти всех, но разработчики Mono хотели и дальше разрабатывать Mono, поэтому организовали в том же году отдельную компанию Xamarin, которую в 2016 купили Microsoft. Код Mono открыт и хранится на GitHub.
Это стандартная практика в разработке игр, когда высокопроизводительная часть движка написана на C или C++, а игровая логика пишется на скриптовом языке, например Lua. Преимущество C# в качестве скриптового языка в том, что он достаточно “высокоуровневый”, чтобы упростить и ускорить разработку игры, но при этом позволяет использовать JIT-компиляцию в нативный код.
Подробнее об этом можно прочитать в документации Mono.
BSIPA
BSIPA (Beat Saber Illusion Plugin Architecture) — это набор библиотек, которые модифицируют файлы Beat Saber так, чтобы игра могла загружать сторонние моды. Иногда такие библиотеки называют менеджерами плагинов.
BSIPA написана на C# (исходный код) и является форком IPA. Т.е. моддеры взяли уже существующий менеджер плагинов для Unity и улучшили его специально под нужды Beat Saber. В исходном коде BSIPA можно выделить три основных модуля: IPA, IPA.Loader и IPA.Injector.
IPA.exe
Обычно игроки используют ModAssistant и его аналоги, чтобы устанавливать моды, но мы рассмотрим, как это делается вручную. Для этого нужно скачать последний релиз BSIPA, распаковать все файлы в папку с игрой и запустить IPA.exe. Это исполняемый файл, который копирует файлы из только что распакованного архива в те папки, где они должны находиться. И это, в общем-то, все, что он делает: просто копирует файлы, и если какой-то из файлов уже существует в игре, то он делает его резервную копию. Вот список копируемых файлов:
Мы видим здесь еще два модуля BSIPA, которые я упомянул ранее: IPA.Loader.dll и IPA.Injector.dll. Остальные библиотеки нужны, чтобы работали эти две. Некоторые из них мы еще рассмотрим подробнее в этой статье и во второй части.
IPA.Loader.dll
Как и следует из названия этого модуля, он отвечает за загрузку и управление плагинами. Здесь определены классы PluginLoader, PluginManager и PluginComponent. PluginLoader — это класс, в котором определена логика загрузки плагинов из папки Plugins. В оригинальной IPA плагины загружаются в алфавитном порядке, что иногда приводит к проблемам. В BSIPA логика загрузки была переписана: Loader сначала загружает метаданные плагинов, анализирует зависимости, находит конфликты и строит порядок загрузки на основе этой информации.
Класс PluginManager отвечает за управление плагинами: поиск, активацию и деактивацию с учетом их зависимостей.
Класс PluginComponent — это компонент Unity, отвечающий за старт загрузки модов, их хранение и передачу им событий из игры. Например, если в основной игре сменилась активная сцена (мы запустили какой-то уровень или, наоборот, вернулись в главное меню), то PluginComponent итерирует по всем модам и сообщает им об этом. Подробнее об этом будет во второй части.
IPA.Injector.dll
Название Injector намекает, что этот модуль отвечает за внедрение в оригинальную игру. Начнем с забавного факта: BSIPA добавляет в игру антипиратскую защиту.
Защита примитивная, она просто проверяет, есть ли в папке с игрой файлы, которые явно указывают на взлом: SmartSteamEmu.ini, BSteam crack.dll, HUHUVR_steam_api64.dll и другие.
Скорее всего, BSIPA это нужно из практических интересов. Если игра пиратская, то это значит, что она была взломана и часть ее файлов изменены. BSIPA тоже изменяет файлы игры, а значит, совместимость с пиратскими библиотеками не гарантируется.
IPA.Injector использует Mono.Cecil, чтобы модифицировать библиотеку UnityEngine.CoreModule.dll. Она написана на C# (иначе бы мы не смогли ее редактировать) и содержит базовые сущности Unity. Например, там определены классы GameObject (все объекты в игре, которые располагаются на игровых сценах, являются объектами этого класса) и класс MonoBehaviour (базовый класс для компонентов с игровой логикой, в том числе PluginComponent). IPA.Injector находит в библиотеке UnityEngine.CoreModule.dll класс UnityEngine.Application и модифицирует его статический конструктор (или создает, если его нет), добавляя туда создание бутстраппера:
По крайней мере, в Unity 2019.3.0f3 у Application нет статического конструктора, а значит, эта модификация не удаляет существующий важный код и относительно безопасна. Если статический конструктор уже существует и Injector заменяет его, то это только в том случае, если мы повторно модифицируем библиотеку.
После модификации в классе Application появляется новый статический конструктор (код получен с помощью декомпиляции модифицированной UnityEngine.CoreModule.dll):
Метод CreateBootstrapper создает новый объект и добавляет в него компонент Bootstrapper:
Бутстраппер представляет собой интересное техническое решение:
Метод Start похож на метод Awake, но Awake вызывается в первый кадр, когда создается компонент, а Start вызывается в первый кадр после активации компонента (компоненты могут создаваться неактивными). Каждый из методов вызывается ровно один раз за жизненный цикл компонента и может использоваться для разных этапов инициализации компонента. Компонент Bootstrapper в своем методе Start вызывает уничтожение объекта, к которому он прикреплен. В методе OnDestroy вызывается колбэк, установленный в CreateBootstrapper:
Колбэк дожидается асинхронной загрузки плагинов и создает компонент PluginComponent. Если честно, я не знаю, зачем нужен этот механизм с самоуничтожением бутстраппера и созданием PluginComponent в OnDestroy. Мое предположение: это нужно для того, чтобы сделать загрузку отложенной — метод Start вызывается, когда компонент становится активным, а он не может стать активным, пока не загрузится игровая сцена. Буду рад, если более опытные Unity-разработчики поправят меня в комментариях.
Помимо этого IPA.Injector редактирует еще один файл — MainAssembly.dll. Эта библиотека содержит код Beat Saber. С помощью все того же Mono.Cecil IPA.Injector убирает у всех классов sealed и делает все методы публичными и виртуальными. Теперь любой класс в любом плагине может наследоваться от любого класса в оригинальной игре и переопределять поведение его методов. Эта модификация уже не относится к загрузке плагинов, но она очень упрощает разработку модов.
Если бы у нас использовалась не BSIPA, а оригинальная IPA, то на этом можно было бы остановиться. В оригинальной версии IPA.exe запускает Injector, модифицирует UnityEngine.CoreModule.dll, и в игре появляются моды. У такого подхода есть один минус — каждый раз, когда оригинальная игра обновляется, нужно заново запускать IPA.exe и патчить игру. BSIPA решает эту проблему, но, как я уже писал выше, IPA.exe в BSIPA просто копирует файлы и не делает больше ничего. За запуск Injector в этом случае отвечает другая библиотека.
Unity Doorstop
За внедрение в код Unity отвечает библиотека UnityDoorstop-BSIPA. Она лежит среди файлов BSIPA и написана на чистом C. UnityDoorstop-BSIPA (исходный код) — это тоже форк, оригинальный проект можно найти здесь. Далее для простоты буду вместо UnityDoorstop-BSIPA писать Doorstop. Лозунгом Doorstop является фраза “Run managed code before Unity does!”, что в примерном переводе звучит как “Запускай управляемый код до того, как Unity сможет это сделать”. Напомню, что “управляемый код” — это в нашем случае код C#. Выше мы уже выяснили, что ядро движка Unity написано на C++, а пользовательские скрипты для игровой логики и некоторые части самого Unity — на C#. Значит, Doorstop каким-то образом позволяет нам вмешаться в логику, когда ядро Unity уже загрузилось, а C#-скрипты — еще нет.
Когда мы запускаем игру на Unity (например, Beat Saber.exe), то в память одной из первых загружается библиотека UnityPlayer.dll. Она прилагается ко всем Unity-играм и отвечает за запуск и выполнение самой игры. У этой библиотеки есть таблица импорта, в которой говорится, что UnityPlayer использует функцию GetProcAddress из библиотеки kernel32.dll. GetProcAddress — это функция WinAPI, которая возвращает адрес функции из определенной библиотеки по ее названию. Я не видел исходного кода Unity, но судя по тому, что я видел в BSIPA и Doorstop, в UnityPlayer должно быть что-то вроде такого:
mono_jit_init_version — это функция, которая отвечает за инициализацию и запуск Mono. Подробнее можно прочитать здесь. Doorstop вмешивается в этот процесс. Делается это в два шага.
Шаг 1. Проксируем GetProcAddress
Этот код находит в памяти уже загруженную библиотеку UnityPlayer.dll, берет ее таблицу импорта (Import Address Table, IAT), находит в ней GetProcAddress из kernel32.dll и заменяет ее на нашу функцию hookGetProcAddress из Doorstop.dll. hookGetProcAddress в упрощенном виде выглядит так:
Подробнее про IAT Hooking можно прочитать здесь. Получается, что hookGetProcAddress проксирует все вызовы GetProcAddress. Прокси-функция смотрит название функции, которую у нее запрашивают. Если это НЕ mono_jit_init_version, то hookGetProcAddress просто вызывает настоящую GetProcAddress и возвращает то, что у нее попросили, тем самым не мешая нормальной работе. Если у нее запрашивают mono_jit_init_version, то тогда она возвращает переопределенную функцию ownMonoJitInitVersion. Пользуясь случаем, прокси-функция получает указатель на библиотеку, в котором ищется mono_jit_init_version, и берет из нее настоящие функции Mono с помощью GetProcAddress (внутри init(module); ):
Шаг 2. Переопределеяем mono_jit_init_version
ownMonoJitInitVersion сначала вызывает настоящую mono_jit_init_version, чтобы создать Mono. Затем она с помощью Mono загружает сборку IPA.Injector.dll и запускает из нее статический метод Main. В (очень) упрощенном виде код ownMonoJitInitVersion выглядит так:
Мы уже рассмотрели выше, что IPA.Injector содержит код, который внедряет плагины в Beat Saber. После того, как IPA.Injector завершает свою работу, ownMonoJitInitVersion отдает Mono в Unity. Unity даже не в состоянии понять, что что-то было не так. Если б он вызвал настоящую mono_jit_init_version, то он бы получил Mono и начал бы дальше с ним работать. Если Unity запускает переопределенную ownMonoJitInitVersion, то он тоже получает Mono — он просто не в курсе, что этим Mono успели воспользоваться для чего-то еще.
winhttp.dll
Остался один нерешенный вопрос. Во-первых, в описании Doorstop я писал про библиотеку Doorstop.dll. Давайте опять взглянем на файлы, которые IPA.exe устанавливает в игру:
Как вы можете видеть, Doorstop.dll здесь нет. Во-вторых, даже если бы Doorstop.dll здесь бы, то почему Beat Saber или Unity должны его загружать в память, если его нет в таблице импорта? Решение: выдать Doorstop.dll за другую библиотеку, которую загружает Unity, и сделать так, чтобы она загрузилась раньше настоящей. Такой библиотекой в нашем случае является winhttp.dll — это системная библиотека Windows для http-запросов (хранится в C:/Windows/System32). У Unity в одной из библиотек в таблице импорта указано, что ей нужна библиотека winhttp.dll, поэтому во время загрузки Unity Windows сначала загружает winhttp.dll в память, и только после этого Unity начинает работать.
Doorstop собирается в библиотеку под тем же названием: winhttp.dll. Там содержится код Doorstop, отвечающий за все манипуляции с GetProcAddress и mono_jit_init_version, а также туда добавляется таблица экспорта (Export Address Table) со всеми теми же функциями, что в оригинальной winhttp.dll. Загрузка библиотек в Windows устроена так, что Windows сначала проверяет, есть ли нужные библиотеки в папке с программой, и только потом, если ничего не нашел, идет в System32. Поэтому при запуске игры Windows в первую очередь находит наш файл. Поддельная библиотека загружает настоящую winhttp динамически (с помощью LoadLibrary) и просто перенаправляет все вызовы из своей таблицы экспорта на адреса настоящих функций (с помощью GetProcAddress). Можно сравнить размеры: поддельная библиотека весит 16кб, а настоящая — 960кб.
В репозиториях IPA и BSIPA есть скрипты для генерации файла proxy.c, который содержит таблицу экспорта, совпадающую с оригинальной библиотекой, и загружает все методы через GetProcAddress. В IPA такой скрипт написан на PowerShell, а в BSIPA — на Python. Сгенерированный файл выглядит так: proxy.c.
Подробнее про DLL Search Order Hijacking можно прочитать тут.
Перечисление действий в хронологическом порядке
Повторяем все шаги в хронологическом порядке.
Про часть 2
На этом первая часть завершена. Мы разобрались, как с помощью манипуляций с библиотеками Windows и Unity можно добавить моды в Beat Saber. Несмотря на то, что BSIPA — это форк, сделанный специально для этой игры, мы в этой статье нигде не делали предположений о внутренней структуре игры и не использовали ее код, а значит можно сказать, что эти методы применимы ко всем Unity-играм.
В следующей части мы напишем свой собственный мод для Beat Saber: посмотрим, как моды обмениваются информацией с игрой, как модифицировать поведение оригинальной игры, а также воспользуемся Harmony — библиотекой для модификации C#-кода, которая используется моддерами в RimWorld, BATTLETECH, Cities: Skylines, Kerbal Space Program, Oxygen Not Included, Stardew Valley, Subnautica и многих других.
Игровые модификации: виды и базовый инструментарий для создания модов
А также пять сайтов, где можно отыскать лучшие моды для популярных игр.
Это вторая часть нашего цикла об игровых модификациях. Первую часть, посвящённую их истории и влиянию на индустрию, уже можно прочитать в Skillbox Media. В этом материале мы расскажем о разновидностях пользовательского контента в играх, а также о том, что необходимо знать начинающему моддеру и куда загружать свои творения.
Классификация сквозь призму научного подхода
У всех модификаций есть своя специфика, поэтому их принято делить на несколько категорий. Мы проиллюстрируем одну из таких классификаций, взяв за основу исследование, представленное в работе «Моддеры Skyrim: мотивации и модификации» (Modders of Skyrim: Motivations and Modifications). Его авторы — шведские специалисты из Университета Сёдертёрна, Элеонора Хакман и Ульфрик Бьорквист.
Хакман и Бьорквист выделяют восемь основных направлений, связанных с игровыми модами:
Нельзя забывать, что моды нередко бывают гибридными. Чем больше в них сочетаний, тем больше шансов, что мод станет масштабным аддоном или самостоятельной игрой.
Существуют и другие классификации. Например, Уолт Скаччи — кандидат наук в области информатики и технологий в Калифорнийском университете — в своём исследовании «Моддинг как open-source-подход к расширению систем в компьютерных играх» (Modding as an Open Source Approach to Extending Computer Game Systems) разделил моды на четыре вида: настройки UI и замена объектов, переделка содержимого игры, машинимы и взлом игр с закрытым исходным кодом.
Правда, для нашего ознакомительного материала такая классификация слишком обширна, и в ней много взаимосвязанных опций (например, взломав игру, можно заменить некоторые детали). Подход Хакман и Бьорквиста проще для понимания, поэтому мы разберём именно его, при необходимости разбив направления на подкатегории с конкретными примерами. Кроме того, последний пункт этой классификации, связанный с помощью в создании модов (custom help), мы заменим на модификации для улучшения интерфейса — изменение UI в контексте нашего материала гораздо важнее.
Считает игры произведением искусства и старается донести эту идею до широких масс. В свободное время стримит, рисует и часами зависает в фоторежимах.
Персонажи
Самый распространённый вид модов. Включает манипуляции с игровыми персонажами, противниками, NPC и анимированными объектами, которые входят в окружение (животные, насекомые и так далее). Такой вариант модификаций используется в первую очередь для визуальных улучшений или для изменения общей эстетики. Ниже — конкретные примеры.
Улучшение оригинальных моделей
Если в оригинальной игре персонажи не отличаются детализацией и разнообразием, модификации могут исправить этот недостаток. В сборке Total Character Makeover для The Elder Scrolls 5: Skyrim представлены обновлённые ассеты, делающие персонажей более реалистичными. Модели персонажей разных рас наделили дополнительными полигонами и высокодетализированными текстурами. Но всё же оставили прежние черты, чтобы сохранить стиль оригинальной игры.
Согласно данным сайта Nexus Mods, модификацию Total Character Makeover скачали более 1,3 млн раз. А число просмотров страницы с модом достигло почти 6,5 млн.
Замена моделей
Игроки любят уникальные аватары. Именно поэтому существует немало модификаций и дополнений, заменяющих оригинальные модели на известных героев из других видеоигр или придающих игровым персонажам внешность реальных людей. Так, на сайтах, посвящённых модификациям для The Sims 4, встречается немало контента со знаменитостями, известными личностями и даже политиками. Ничто не мешает игрокам прожить жизнь в роли Мистера Бина или Мэрилин Монро. Аналогичные замены моделей регулярно встречаются в играх других жанров.
(NSFW) Nude mod
К этому подвиду модов можно относиться по-разному, но нельзя отрицать тот факт, что практически на каждую игру найдётся умелец, который разденет героиню (или героя) до нижнего белья, а то и вовсе догола. В основе этих модификаций лежат оригинальные текстуры как минимум лица персонажа. Остальные манипуляции, в том числе доработка модели без одежды, зависят от фантазии и навыков самого моддера. Несмотря на сомнительную ценность таких модов с точки зрения морали и игровых канонов, они остаются актуальными и пользуются спросом среди определённого круга геймеров. Например, мод, «раздевающий» женских персонажей в The Witcher 3: Wild Hunt, скачали более 90 тысяч раз.
Одним из первых Nude-модов в трёхмерных играх был патч Nude Raider, оголяющий модель Лары Крофт. Разработчики Core Design были крайне возмущены распространением такого контента, так как, по их мнению, он дискредитировал персонажа как личность. К тому же этот патч могли установить несовершеннолетние игроки. В 1999 году разработчики потребовали авторов прекратить распространение патча и даже угрожали судебными исками. Вскоре сайт с Nude Raider был закрыт, но от стремлений умельцев раздеть главную героиню это не спасло. В Сети до сих пор можно найти достаточно Nude-модов для любой игры из серии Tomb Raider.
Замена на сторонние модели
Сюда входит умышленная замена оригинальных персонажей моделями — для создания комической ситуации в игре. Чем сюрреалистичнее изменённая модель, тем больший эффект модификация произведёт. В своё время стал популярным мод для Resident Evil 2 Remake, где вместо Мистера X героев преследует Паровозик Томас — и всё это действо сопровождается музыкой из одноимённого шоу.
«Свайп» оригинальных персонажей
Вариант похож на стандартную замену модели и популярен в сообществах игр, сфокусированных на сюжете. Игроки нередко хотят отыграть роль от лица понравившегося второстепенного героя или злодея: подмены персонажей мотивируют игроков вернуться в пройденную игру, чтобы посмотреть на скриптовые сцены под другим углом. Как, например, в моде Model Swapper от camtino, созданном для Cyberpunk 2077. Иногда такой вариант модификаций используется для достижения вышеупомянутого эффекта — превращения игры в театр абсурда. Подобное регулярно практикуется в сообществе Resident Evil в целом и недавней Resident Evil: Village в частности.
Снаряжение
Согласно данным портала Nexus Mods, модификацию Immersive Armors для TES 5: Skyrim, созданную hothtrooper44, скачали почти 3,5 млн раз. Также мод «засветился» в изданиях TIME, Kotaku, PC Gamer и Gamespot.
Изменение параметров
Этот тип модов требует более углублённого знакомства с «внутренностями» игры. Сюда входит изменение баланса и свойств предметов, характеристик, рейтинга дропа, а также ограничений, связанных с уровнем, профессией или крафтом. Такие модификации можно расценить как читерство, однако при должной балансировке модификацию вполне можно сделать полезной, заметно улучшающей геймплей.
Например, модификация Better Generators для Fallout 4, созданная expired6978, изменяет свойства оригинальных генераторов внутри игры, позволяя им вырабатывать больше электричества (10 000 единиц мощности вместо 500 единиц). С обновлённой мощностью игрок сократит количество генераторов и сосредоточится на освещении и защите своего поселения, сэкономив при этом на пространстве для будущего строительства.
Перестановка предметов
В таких модификациях авторы изменяют расположение новых (или существующих) объектов на уровне, чтобы создать более реалистичную картинку. Сюда также относится улучшенная интерактивность окружения. Например, мод Placeable Statics — Move Anything для TES 5: Skyrim — Special Edition даёт игроку больше возможностей во взаимодействии с предметами — чтобы кастомизировать интерьер дома на свой вкус или, наоборот, устроить кавардак.
Графика
Комплексная работа по улучшению внешнего вида игры. Достигается за счёт преобразования уже имеющихся в игре 3D-моделей и текстур — или же путём создания новых ассетов. До того как волна официальных ремастеров и ремейков захлестнула рынок видеоигр, были популярны модификации, в которых оригинальный игровой контент переделывали сами игроки. В последние годы для этих целей моддеры всё чаще прибегают к использованию нейросетей и машинному обучению: новые технологии успешно справляются с апскейлом текстур и задников, поэтому время на разработку сокращается.
Так, группа энтузиастов из четырёх человек сделала коллекцию любительских ремастеров трёх первых частей Resident Evil. Благодаря Resident Evil Seamless HD Project игры запускаются на PC с помощью эмулятора Dolphin: классические хорроры могут похвастаться новыми фонами с высокой детализацией, улучшенными текстурами моделей персонажей и даже обновлёнными FMV-роликами.
Для апскейла текстур из старых игр также используются нейросети Gigapixel AI (Red Faction, Sonic Adventure 2, Half-Life, Final Fantasy VII), ESRGAN (TES 3:Morrowind, Max Payne, Turok 2), NVIDIA NGX Technology (DOOM) и другие.
Локации
Пользовательские карты с грамотной расстановкой объектов и продуманными миссиями всегда ценились сообществом. Такой контент удерживает интерес игроков и даёт самим моддерам возможность получить новый опыт в разработке, а некоторые модификации могут даже похвастаться уникальной атмосферой и погрузить игрока в новый мир.
Иммерсивность
Комплексные модификации, нацеленные на повышение иммерсивности. Помимо всех вариаций, описанных выше, в эту категорию попадают изменения или дополнения, связанные с нарративом: сюжетные линии, уникальные персонажи, новое развитие лора и квесты. Такие моды нередко эволюционируют в самостоятельные игры, которые при должной поддержке даже превосходят оригинал.
В сообществе поклонников S.T.A.L.K.E.R. модификация S.T.A.L.K.E.R. Anomaly считается одним из лучших любительских дополнений. Помимо исправления багов и улучшения визуала, мод добавляет несколько режимов: сюжетный (с дополнительными кампаниями), «песочницу» и «войну фракций». Он также вводит в игру множество NPC, улучшает интерфейс и искусственный интеллект противников, изменяет внешний вид представителей некоторых фракций и выдаёт главному герою трёхмерный КПК. После версии 1.5.1 мод больше не зависит от оригинальных файлов игры и запускается самостоятельно.
Кастомизация интерфейса
Пользовательские модификации интерфейса значительно улучшают игровой опыт. Одни могут быть «косметическими», добавляющими в игру стильные фреймы, иконки или панели. Другие способны сделать весь UI гораздо удобнее, изменив HUD и сделав его более функциональным.
Ещё один вариант UI-модов технически может быть связан с браузером и непосредственно с клиентом игры, если речь идёт об MMO-проектах. Данные, полученные с сервера, улучшают геймплей, но при этом не дают какого-либо преимущества по отношению к другим игрокам. Самый яркий пример таких пользовательских модификаций — аддоны для World of Warcraft. Для этой MMORPG существует почти девять тысяч аддонов с разными задачами — от реализации встроенной навигации по квестам и добавления улучшенной карты до отображения подсказок по тактикам в данжах.
Однако у таких модификаций есть и обратная сторона. Хотя они никоим образом не влияют на игровой процесс в целом, в некоторых играх обладатель таких аддонов получает значительное преимущество в PvP.
Несколько лет назад с такой проблемой столкнулось сообщество World of Tanks. Игра не запрещала устанавливать различные аддоны, и вскоре появились модификации, легальность которых с этической точки зрения была под большим вопросом: анализ брони в бою, отображение цели противника для удачного уклонения, прозрачность объектов на карте и тому подобное. Из-за многочисленных жалоб в 2017 году Wargaming официально запретила подобные аддоны. При этом разработчики World of Tanks не против модов в целом: на сайте игры есть раздел одобренных компанией модификаций.
Лучшие друзья моддера, или с чего начать
В предыдущем материале цикла мы уже упоминали, что технические сложности в процессе создания модов часто отпугивают тех, кто хочет сделать что-то своё. Но если желание улучшить игру достаточно сильно, стоит ознакомиться с базовыми навыками, которые нужны начинающему моддеру.
Профессиональные навыки
Понимание принципов Software Development Kit (SDK)
Требования к техническим навыкам зависят в первую очередь от того, какой вид модификации задумал пользователь. В любом случае потребуется знание SDK того движка, на котором написана игра. Речь идёт обо всём необходимом инструментарии для манипуляций с исходным кодом: это и скрипты, и утилиты импорта-экспорта моделей и текстур, и редактор уровней. Но такую творческую свободу игрокам готов предоставить не каждый разработчик. Если Source SDK от Valve с подробнейшей документацией доступен для скачивания всем желающим, то к играм, сделанным, например, на Decima Engine, уже не подступиться без помощи хакеров и написания собственных программ.
Желание знакомиться с дополнительными программами для базового моддинга
К такому виду софта относятся звуковые и графические редакторы, с помощью которых пользователь создаёт контент для «косметических» изменений.
Не исключено, что для создания мода понадобится и звуковой редактор. Их существует довольно много (Sound Forge, Adobe Audition, Audacity). Здесь всё зависит от личных навыков, бюджета и наличия плагинов для экспорта.
Знание кода
Если пользователь захочет копнуть глубже и сделать масштабный мод, то без навыков программирования ему не обойтись, так как предстоит работа с внутриигровыми скриптами. Некоторые игры используют несколько языков программирования, но большинство работает на С++.
При этом для моддинга необходимо в первую очередь знание общих концепций кода, а не знание синтаксиса конкретного языка. Код связывает воедино все аспекты игры: уровни и модели, анимацию, искусственный интеллект и так далее. Чтобы не нарушить эту связь при создании масштабного дополнения, моддеру следует понимать все аспекты создания игры.
Личные навыки
Знания базовых программ и технических навыков недостаточно для создания качественного пользовательского контента. Софт-скиллы играют не последнюю роль. И начинающий моддер не должен о них забывать.
Усидчивость. Перед тем как начать что-то создавать, необходимо изучить информацию о функциональности необходимого SDK или сторонних программ, которые используются для создания контента в той или иной игре. Чем хуже игра поддерживает модификации, тем больше придётся гуглить информацию и находить нужных людей для консультаций. Всё это может занять немало времени.
Коммуникация. В создании масштабных модификаций нередко задействованы большие команды, и за каждым разработчиком в ней закреплена отдельная задача, как и в игровых студиях. В сообществе всегда можно найти единомышленников-энтузиастов, которые согласятся сотрудничать. Это ускорит срок создания модификации и поможет восполнить пробелы в тех областях, которые сложно освоить пользователю.
Этика. У многих студий есть документы, в которых чётко прописаны правила создания модификаций. Помимо того, что создавать контент с расистским, ксенофобским, сексистским, клеветническим и оскорбительным содержанием просто запрещено, могут также возникнуть проблемы с нарушением авторских прав. Например, сотрудники CD Projekt Red убедительно просят не создавать контент с нарушением прав третьих сторон (авторов книг, комиксов и так далее), реальных людей и брендов. Для разработки такого контента нужно просить разрешение у всех затронутых лиц, в том числе и самих разработчиков.
И, наконец, любовь к игре. Пожалуй, главный фактор, который движет сообществом при создании модов.
Полезные ресурсы
Где же можно опубликовать свою модификацию? Как поделиться модом с другими игроками? Ниже — подборка самых популярных ресурсов, где фанаты обычно ищут пользовательские моды для любимых игр.
Steam Workshop
Мастерская пользовательского контента, встроенная в клиент Steam. Загрузка модов доступна игроку сразу, без дополнительных манипуляций с установками. Для моддеров существует две опции загрузки контента: открытая и модерируемая. Если в открытой мастерской можно загрузить любой вид модификации, то в модерируемой создаются платные моды, при этом качество контента тщательно отслеживается, а цену устанавливает сам разработчик. При всём удобстве в Steam Workshop есть один минус — модификации есть только для тех игр, разработчики которых сами завели страницу в «Мастерской».
Nexus Mods
Один из ведущих сайтов с модами. Варианты премиум-подписок (месяц/полгода/год/пожизненно) не только отключают рекламные блоки, но и ускоряют загрузку и улучшают поиск. Ресурс уникален тем, что можно найти модификации даже к играм, которые по умолчанию их не поддерживают.
По данным сайта, на портале зарегистрировано более 27 млн пользователей и представлено более 310 тысяч файлов для 1323 игр. Общее количество скачиваний за всё время существования достигло более 4,7 млрд.
CurseForge
Крупнейший ресурс модификаций для World of Warcraft, в прошлом известный в игровом сообществе как Curse. В 2016 году сервис выкупила Twitch, а с середины 2020 года права на портал принадлежат компании Overwolf — разработчику сервиса дополнительных приложений для мультиплеерных игр (League of Legends, Hearthstone, CS:GO, Fortnite, PUBG) Все аддоны, загружаемые на CurseForge, проходят строгую модерацию, при этом авторы модификаций зарабатывают на своих творениях путём набора очков, которые можно обменивать на реальные деньги. На сегодняшний день CurseForge поддерживает 13 игр, среди них Minecraft, WoW, TES: Online и Rift.
Mod DB
Один из самых старых порталов, посвящённых модам, основанный ещё в 2002 году. Примечателен тем, что помимо загруженного пользователями контента на сайте собрано немало материалов, посвящённых моддингу и нюансам разработки модификаций. Главная цель портала — объединить разработчиков, игроков, а также их идеи, предоставив им возможность вместе улучшать игры с помощью модов.
Согласно текущей статистике, на Mod DB загружено более 24 тысяч модификаций, которые просмотрели почти 1,5 млрд пользователей.
Mod.io
Австралийский портал для моддинга, созданный в 2018 году основателями Mod DB. Сервис привлекает как авторов пользовательского контента, так и самих разработчиков. Моддерам доступны API и SDK игр, которые есть на сайте, в том числе специальные плагины для игр на Unity, Unreal Engine, GameMaker Studio, Lumberyard и прочих движков. Главное отличие от Steam Workshop в том, что Mod.io — кроссплатформенный сервис, поэтому разработчики могут с его помощью анализировать метрики и статистику по запросам пользовательского контента.
В следующей части мы подробно рассмотрим ещё одну разновидность модификаций, которая не вписывается ни в одну из категорий модов и требует максимальных творческих навыков. Имя ей — машинима.
обложка: Абрикос Абрикосовый для Skillbox Media




















