RE:NODE

Моды RimWorld Multiplayer: совместимость и порядок загрузки

Автор Команда RE:NODE
16 мин чтения


Большинство модов RimWorld работают с модом Multiplayer, а те, что не работают, ломаются предсказуемо. Моды, которые добавляют только данные - новые предметы, животных, одежду, постройки, фракции, написанные на XML, - совместимы всегда, потому что в них нечему рассинхронизироваться. Проблемы начинаются с модами на C#: всё, что добавляет кнопку, гизмо или меню, меняющее игру, нужно синхронизировать, а всё, что использует собственные генераторы случайных чисел или свои таймеры, нужно патчить. Мод Multiplayer показывает краудсорсинговую оценку для каждого мода в вашем списке, мод Multiplayer Compatibility патчит длинный список популярных модов, а верх списка загрузки фиксирован: Prepatcher, Harmony, Core, ваши DLC, затем Multiplayer. Остальная часть руководства - о том, как читать оценки, собрать список, которым смогут пользоваться четыре человека, и убедиться, что он работает, прежде чем вкладывать шестьдесят часов в колонию.

Если вы ещё не выбрали между модом Multiplayer и RimWorld Together, сначала прочитайте руководство по серверу RimWorld для мультиплеера. Эта статья только про мод Multiplayer - одна общая колония, детерминированная пошаговая синхронизация (lockstep), на каждой машине одна и та же симуляция, - потому что именно здесь совместимость модов решает, сможете ли вы играть вообще.

Почему одни моды ломают мультиплеер, а другие нет#

Мод Multiplayer не передаёт по сети состояние игры. Он передаёт команды. Когда игрок призывает пешку к бою, меняет заказ или назначает дерево на вырубку, это действие упаковывается, получает отметку тика и выполняется на каждой машине в один и тот же момент. После этого каждая копия колонии вычисляет один и тот же результат, потому что мод делает симуляцию RimWorld детерминированной: случайные числа инициализируются одинаково, а всё, что могло бы отличаться между машинами, либо синхронизируется, либо выводится из симуляции.

Мод может нарушить это тремя способами.

  1. Он меняет игру из пользовательского интерфейса в обход синхронизации. Новый гизмо, пункт контекстного меню, окно настроек, которое редактирует постройку. Клик происходит только на одной машине, остальные о нём не узнают, и колонии расходятся. Это самая частая проблема, и именно её исправляют патчи совместимости: они сообщают Multiplayer, какие методы нужно синхронизировать.
  2. Он использует случайность или состояние, которых мод не видит. Код, который вызывает генератор случайных чисел не из RimWorld, читает системные часы, кэширует результаты в зависимости от того, на что смотрит локальный игрок, или работает в фоновом потоке. Две машины получают два разных ответа.
  3. Он меняет работу тиков. Моды производительности, которые пропускают, группируют или замедляют тики для объектов вне экрана, - особый риск, потому что у каждого игрока на экране своё. Некоторые из них сделали совместимыми; проверяйте, а не предполагайте.

Моды только на XML избегают всех трёх проблем, поэтому окно совместимости в игре прямо говорит, что они всегда совместимы. Но есть оговорка, которую оно тоже называет: XML-мод может зависеть от фреймворка с кодом на C#, и тогда этот фреймворк тоже должен быть совместим.

Проверка мода: оценки и где их найти#

Мод Multiplayer добавляет кнопку Multiplayer compatibility на стандартный экран модов RimWorld. Она открывает окно со списком активных, установленных и устаревших модов, у каждого - оценка статуса и заметки. Данные собираются краудсорсингом и скачиваются с сервера команды Multiplayer, кэшируются локально в папке MpCache, а если вы не хотите их загружать, отключите настройку "Show crowd-sourced compat info".

ОценкаЗначение
4Всё работает
3В основном работает, некоторые мелкие функции нет
2Работает частично, основные функции нет
1Не работает
UnknownПока никто не сообщал

Та же шкала (с 0 для непротестированных) используется в общей таблице сообщества, ссылка на которую есть на странице мода в Workshop, и в канале Discord для отчётов о модах, откуда эти оценки и берутся. Считайте их отправной точкой, а не гарантией. Оценка 4 означает, что кто-то играл с этим модом и не заметил проблем; она ничего не говорит о том, как мод ведёт себя рядом с остальными 150 модами из вашего списка. В собственном FAQ команды Multiplayer это сказано прямо: два мода, каждый из которых указан как полностью совместимый, всё равно могут рассинхронизироваться вместе.

Как действовать при каждой оценке:

  • 4: включайте.
  • 3: прочитайте заметки. "Minor" - обычно это одна кнопка или одно окно, которое не синхронизируется. Если ваша группа не будет пользоваться этой функцией, это фактически 4.
  • 2: только если сломанную часть можно полностью обойти, и протестируйте мод специально.
  • 1: не включайте. Никакая перестановка порядка загрузки не исправит оценку 1.
  • Unknown: протестируйте сами и сообщите о результате, чтобы следующей группе не пришлось делать это заново.

Оценки привязаны к версиям. Мод с оценкой 4 две версии RimWorld назад мог переписать половину кода, и раздел "Outdated" в окне существует именно поэтому.

Мод Multiplayer Compatibility#

Multiplayer Compatibility (идентификатор пакета rwmt.MultiplayerCompatibility, от той же команды RimWorld Multiplayer Team) - это один мод, полный патчей для чужих модов. Собственного контента в нём нет. Для каждого поддерживаемого мода он регистрирует методы, которые нужно синхронизировать, помечает те, что должны выполняться только локально, и исправляет случайность - то есть делает работу, которую сделал бы автор исходного мода, если бы писал его с расчётом на мультиплеер.

Список поддерживаемых модов длинный и постоянно меняется. На момент написания он включает фреймворк Vanilla Expanded и большую часть серии Vanilla Expanded, Common Sense, Simple Sidearms, Pick Up And Haul, RimFridge, LWM's Deep Storage, Prison Labor, Alpha Animals и Alpha Biomes, и многое другое. Авторитетный список - это описание самого мода и его README на GitHub, а не форумный пост прошлогодней давности.

Три правила:

  • Устанавливайте его всегда, когда используете любые моды на C#. Для модов, которые он не патчит, он ничего не делает, так что держать его ничего не стоит.
  • Ему нужна актуальная версия Multiplayer. Он объявляет Multiplayer зависимостью и обновляется вместе с ним. Старая копия одного с новой копией другого - это несовпадение версий, которое только ждёт своего часа.
  • Присутствие мода в его списке не делает мод четвёркой. Патч может покрывать основные функции и оставлять остальное. Оценку в окне совместимости всё равно нужно читать.

Некоторым модам он вообще не нужен, потому что их авторы поддерживают мультиплеер напрямую - сами вызывают API Multiplayer. Обычный пример - Achtung!. Такие моды отображаются как совместимые без всяких патчей.

Порядок загрузки для мультиплеерного списка модов#

Порядок загрузки RimWorld - это список activeMods в файле ModsConfig.xml, и более поздние моды переопределяют более ранние. Общие правила - зависимости, переопределения, конфликты кода - описаны в статье порядок загрузки модов простыми словами. Для Multiplayer верх списка задаётся метаданными самих модов, а ошибка в нём даёт ошибки при запуске, а не тонкие баги.

  • Prepatcher идёт первым, выше Harmony и выше Core. Текущие релизы Multiplayer указывают его как жёсткую зависимость (в линейке 0.11 он заменил прежнюю зависимость от Harmony), и именно он заставляет работать ритуалы в мультиплеере.
  • Harmony следующим. Prepatcher включает собственную копию Harmony, но большинство других модов с кодом по-прежнему объявляют brrainz.harmony зависимостью, так что оставьте его.
  • Core и DLC в обычном порядке: Royalty, Ideology, Biotech, Anomaly, Odyssey.
  • Multiplayer сразу под последним DLC. Описание мода говорит об этом жирным шрифтом, а его метаданные указывают, что он загружается раньше HugsLib и фреймворка Vanilla Expanded.
  • Multiplayer Compatibility сразу после Multiplayer.
  • Затем фреймворки (HugsLib, фреймворк Vanilla Expanded и так далее), контентные моды, а патчи - в самом конце.
ModsConfig.xml (activeMods, trimmed)
<activeMods>  <li>zetrith.prepatcher</li>  <li>brrainz.harmony</li>  <li>ludeon.rimworld</li>  <li>ludeon.rimworld.royalty</li>  <li>ludeon.rimworld.ideology</li>  <li>ludeon.rimworld.biotech</li>  <li>ludeon.rimworld.anomaly</li>  <li>ludeon.rimworld.odyssey</li>  <li>rwmt.multiplayer</li>  <li>rwmt.multiplayercompatibility</li>  <li>unlimitedhugs.hugslib</li>  <li>oskarpotocki.vanillafactionsexpanded.core</li>  <!-- content mods, then patches --></activeMods>

Файл находится в папке Config данных сохранений RimWorld: %USERPROFILE%\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios\Config в Windows, ~/.config/unity3d/Ludeon Studios/RimWorld by Ludeon Studios/Config в Linux. Редактировать его вручную приходится редко - его записывают за вас игровой экран модов и сортировщики вроде RimSort, считывая loadAfter, loadBefore и modDependencies каждого мода, - но это единственное место, куда стоит заглянуть, когда нужно узнать, что игра на самом деле загрузила.

В мультиплеере порядок важнее, чем в одиночной игре, по простой причине: проверка при подключении сравнивает и его. Если у всех одни и те же моды, но в другом порядке, подключающемуся игроку сообщают, что списки совпадают, а порядок нет, и ему приходится перезапускать игру.

DLC и версии: всё должно совпадать#

Ответ команды Multiplayer на вопрос "нужны ли нам одинаковые DLC" - всё должно быть одинаковым. Игрок без Biotech не может подключиться к игре, где у хоста включён Biotech, потому что мир хоста содержит определения Biotech, которые клиент не может загрузить. На практике набор DLC в группе - это пересечение того, чем владеют все. Если у одного друга только базовая игра, либо он покупает DLC, либо все отключают свои для этой колонии.

Поддержка каждого DLC тоже появлялась в разное время. Royalty и Ideology поддерживаются уже много лет. Поддержка Anomaly появлялась поэтапно в релизах 1.5, причём ритуалы и некоторые механики исправили позже остального, а FAQ команды долго предупреждал о рассинхронах с ним. Odyssey и гравикорабли поддерживаются в релизах 1.6, которые всё ещё активно исправляются. Если вы планируете долгую колонию с новейшим DLC, сначала прочитайте последние заметки к релизу на странице релизов Multiplayer на GitHub и отдельно протестируйте ключевые механики этого DLC (см. план проверки ниже).

Версии должны совпадать на трёх уровнях:

Должно совпадатьЧто будет, если нет
Сборка RimWorldОтказ при подключении или мод не загружается
Версия Multiplayer"Wrong protocol version" при подключении
Файлы каждого модаПеречислены на вкладке Files экрана подключения

Multiplayer следует за текущей версией RimWorld и указывает минимальную сборку в описании; команда не тестирует новые версии модов на старых версиях игры. Держите у всех последнюю публичную сборку RimWorld и не переходите на бета-ветку, если это не делает вся группа сразу.

Что проверяет экран подключения и Sync configs#

Когда игрок подключается, Multiplayer сравнивает его игру с игрой хоста и показывает экран Data mismatch, если что-то отличается. На нём четыре вкладки, и каждая говорит о своём.

  • General: версия RimWorld и версия Multiplayer. Пока они не совпадут, ничего другого исправить нельзя.
  • Mod list: моды хоста в сравнении с вашими, а напротив всего недостающего написано "Not installed". "Subscribe to missing" подписывает вас на все недостающие моды из Workshop и скачивает их в фоне. "Apply server's mod list" заменяет ваш активный список списком хоста - ваш собственный список перезаписывается, так что сохраните его заранее, если он вам дорог.
  • Files: моды с одинаковым названием, но разными файлами. Обычно у одного из игроков более старая версия или после обновления остались старые файлы. Решение - обновить мод или подписаться на него заново; при различиях в Core и DLC экран предлагает удалить их папки и проверить файлы игры в Steam.
  • Configs: настройки модов, которые отличаются.

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

Часть с конфигами управляется параметром хоста Sync configs при создании игры. Когда он включён, подключающиеся игроки временно используют файлы конфигурации модов хоста: на диске ничего не перезаписывается, а после перезапуска возвращаются ваши собственные конфиги. Описание самого мода точно: это уменьшает число рассинхронов. Но оно же предупреждает, что некоторые моды хранят в конфигах чувствительные данные, например токены Twitch для модов стримеров, так что хосту с таким модом стоит подумать, прежде чем делиться конфигами.

Оставляйте Sync configs включённым, если у вас нет такой причины. Отличающаяся настройка мода - ползунок в моде хранения, переключатель в боевом моде - остаётся незаметной до момента, когда она даёт другой результат, и тогда это рассинхрон без очевидной причины.

Как собрать общий список модов, который остаётся общим#

Мод Multiplayer охотно скопирует список модов с хоста на клиент. Но он не помешает списку расходиться в последующие недели. Помогают такие привычки.

  1. Один человек отвечает за список. Обычно это хост. Остальные предлагают; добавляет, оценивает и тестирует один человек.
  2. Начинайте с окна совместимости, а не с коллекции Workshop, которую кто-то собрал для одиночной игры. Пройдитесь по активному списку и уберите все моды с оценкой 1, прочитайте заметки к 2 и 3, а неизвестные отметьте для тестирования.
  3. Делайте его меньше вашего списка для одиночной игры. Каждый мод на C# - ещё один шанс рассинхрона, а каждый рассинхрон стоит всей группе перезагрузки. Чисто XML-контентные моды обходятся дёшево; выбирать нужно осторожно среди модов для удобства с новыми кнопками.
  4. Опубликуйте его как коллекцию Steam. Все подписываются на коллекцию и ни на что больше, и обновления приходят всем одновременно. Тогда "Subscribe to missing" на экране подключения почти нечего делать.
  5. Отправляйте порядок файлом. Экран модов RimWorld может сохранить активный список в файл .rml в папке ModLists данных сохранений и загрузить его обратно. Отправляйте этот файл, а не скриншот.
  6. Заморозьте обновления на время прохождения. Steam обновляет моды Workshop, когда ему вздумается. Мод, обновившийся у одного игрока во вторник, в среду превращается в несовпадение на вкладке Files или, что хуже, в версию, которая незаметно потеряла поддержку мультиплеера. Если обновление мода ломает список посреди колонии, шаги восстановления есть в статье что делать, если обновление мода всё сломало, а общая механика синхронизации Workshop описана в модах Steam Workshop на выделенных серверах.

Игрокам не из Steam приходится устанавливать каждый мод вручную, в точно тех же версиях, что у хоста. Это работает, и это самый частый источник несовпадений на вкладке Files. Если один игрок сидит на другой платформе, положите весь список в zip-архив в тот же день и пусть он ставит моды оттуда.

Проверка перед долгой колонией#

Список модов, который загружается, - не обязательно работающий список. Рассинхроны проявляются, когда выполняется конкретный путь кода, а некоторые пути - набег, караван, ритуал - могут не выполняться первые десять игровых дней. Потратьте вечер на пробную колонию. Это самый дешёвый час за всё прохождение.

Запускайте проверку с включённым арбитром (arbiter). Арбитр - это фоновая копия игры, которую хост запускает рядом с основной, и она нужна только для обнаружения и локализации рассинхронов; она отнимает у машины хоста реальную память и CPU, так что для настоящей колонии отключите её обратно, если ПК хоста не очень мощный. Опция "Desync traces" записывает дополнительные трассировки стека, которые делают отчёт о рассинхроне гораздо полезнее, но она не работает на 32-разрядных и ARM-процессорах, например Apple Silicon.

Затем, при подключённых хотя бы двух игроках, намеренно выполните каждое из этого:

  • Через режим разработчика вызовите набег и отбейте его призванными пешками обоих игроков.
  • Соберите караван, отправьтесь в путь и вернитесь. Посетите поселение и поторгуйте.
  • Используйте каждый новый гизмо и кнопку, которые добавляют моды, с машин обоих игроков, а не только хоста.
  • Измените настройки мода посреди игры, если ожидаете, что кто-то будет делать это в настоящем прохождении (или договоритесь, что никто не будет).
  • Проведите ритуал и, если вы их используете, ключевые механики вашего новейшего DLC - гравикорабли в Odyssey, специфичные события Anomaly.
  • Сохраните игру, выйдите, загрузитесь заново, и пусть все подключатся снова.
  • Поиграйте час на самой высокой скорости, которую будет использовать группа, пока хост следит за частотой кадров.

Если случается рассинхрон, игра сообщает об этом и записывает отчёт в папку MpDesyncs данных сохранений. Уберите последний добавленный мод на C# или тот, чьей функцией вы пользовались в этот момент, и повторите то же действие. Когда найдёте виновника, ещё раз проверьте его оценку и заметки, а если он был указан как совместимый, отчёт о рассинхроне - это именно то, что нужно команде Multiplayer.

Две настройки нужно решить до начала, потому что их изменение позже меняет поведение модов. Async time даёт каждой карте и планете собственное управление временем, так что один игрок может поставить свою карту на паузу, пока другой играет; большинство модов с этим справляется, но всё, что предполагает одни глобальные часы, стоит протестировать с ней включённой. Multifaction позволяет игрокам вести отдельные колонии в одной игре, и команда по-прежнему называет это работой в процессе - ожидайте там больше шероховатостей с модами, чем в единой общей колонии.

Когда рассинхрон случается посреди прохождения#

Рассинхроны в долгой колонии редко случайны. В порядке убывания вероятности:

  1. У кого-то обновились моды. Сравните вкладку Files, когда он подключится заново; подпишитесь заново или откатите версию.
  2. Изменилась настройка. Убедитесь, что Sync configs включён и ни у кого нет локально отредактированного конфига.
  3. Функция мода, которую так и не протестировали. Отметьте, что делал игрок, когда она сработала.
  4. Машина хоста отстала. Если частота кадров у хоста падает ниже частоты тиков игры, он тянет всех из синхронизации. Это не проблема модов, хотя тяжёлый список модов её вызывает; CPU или RAM для игровых серверов объясняет, почему одно медленное ядро важнее общего объёма памяти.
  5. Плохое соединение. FAQ команды называет плохую связь между хостом и игроком самой частой причиной. Задержка, джиттер и потеря пакетов объясняет, как понять, что из этих трёх у вас.

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

Что может и чего не может хостинг-тариф#

Мод Multiplayer работает внутри копии игры у каждого игрока, а сессия живёт на ПК хоста. В недавних релизах начали работу над режимом отдельного сервера, но он новый и пока не то, как играет большинство групп; прежде чем строить на нём планы, прочитайте заметки к релизу проекта. Вся работа по совместимости, описанная в этом руководстве, происходит не на сервере, а на четырёх настольных компьютерах, которые должны договориться между собой.

Если вашей группе на самом деле нужен мир, который продолжает жить, когда хост не в сети, это RimWorld Together, у которого есть полноценная серверная программа. Тарифы RE:NODE для RimWorld начинаются с 1 ГБ памяти и одного выделенного порта, а этого серверу достаточно; список модов и конфиги редактируются в браузерном файловом менеджере или по SFTP. Настройка описана в руководстве по серверу RimWorld для мультиплеера.

FAQ#

Все ли моды RimWorld совместимы с Multiplayer?

Нет, но совместимых больше, чем думает большинство. Моды только на XML работают всегда. Моды с кодом работают, если синхронизируют свои действия - либо сами, либо через мод Multiplayer Compatibility. Проверьте оценку каждого в окне Multiplayer compatibility на экране модов.

Нужен ли мне мод Multiplayer Compatibility?

Если в вашем списке есть моды с кодом, да. Он патчит длинный список популярных модов, чтобы их кнопки и функции синхронизировались, и ничего не делает для тех, что не покрывает, так что держать его ничего не стоит. Загружайте его сразу после Multiplayer.

Нужны ли всем одинаковые DLC?

Да. У каждого игрока должны быть включены те же DLC, что и у хоста. Если у одного игрока нет DLC, группа либо играет без него, либо этот игрок его покупает.

Где Multiplayer стоит в порядке загрузки?

Prepatcher в самом верху, затем Harmony, затем Core и DLC, затем Multiplayer сразу под последним DLC, затем Multiplayer Compatibility. Дальше идут фреймворки, контент и патчи.

Могут ли у игроков быть разные настройки модов?

Безопасно - нет. Разные настройки вызывают рассинхроны. Включите Sync configs при создании игры, и подключающиеся игроки временно используют конфиги хоста, а на диске ничего не перезаписывается.

Можно ли добавлять моды в уже идущую колонию?

XML-контентные моды обычно можно добавить через сохранение, перезагрузку и повторную синхронизацию списка у всех. Удаление модов или добавление модов с кодом посреди прохождения грозит не только рассинхронами, но и сломанными сохранениями. Сначала сделайте бэкап сохранения и проверьте изменение на копии.