Большинство модов RimWorld работают с модом Multiplayer, а те, что не работают, ломаются предсказуемо. Моды, которые добавляют только данные - новые предметы, животных, одежду, постройки, фракции, написанные на XML, - совместимы всегда, потому что в них нечему рассинхронизироваться. Проблемы начинаются с модами на C#: всё, что добавляет кнопку, гизмо или меню, меняющее игру, нужно синхронизировать, а всё, что использует собственные генераторы случайных чисел или свои таймеры, нужно патчить. Мод Multiplayer показывает краудсорсинговую оценку для каждого мода в вашем списке, мод Multiplayer Compatibility патчит длинный список популярных модов, а верх списка загрузки фиксирован: Prepatcher, Harmony, Core, ваши DLC, затем Multiplayer. Остальная часть руководства - о том, как читать оценки, собрать список, которым смогут пользоваться четыре человека, и убедиться, что он работает, прежде чем вкладывать шестьдесят часов в колонию.
Если вы ещё не выбрали между модом Multiplayer и RimWorld Together, сначала прочитайте руководство по серверу RimWorld для мультиплеера. Эта статья только про мод Multiplayer - одна общая колония, детерминированная пошаговая синхронизация (lockstep), на каждой машине одна и та же симуляция, - потому что именно здесь совместимость модов решает, сможете ли вы играть вообще.
Почему одни моды ломают мультиплеер, а другие нет#
Мод Multiplayer не передаёт по сети состояние игры. Он передаёт команды. Когда игрок призывает пешку к бою, меняет заказ или назначает дерево на вырубку, это действие упаковывается, получает отметку тика и выполняется на каждой машине в один и тот же момент. После этого каждая копия колонии вычисляет один и тот же результат, потому что мод делает симуляцию RimWorld детерминированной: случайные числа инициализируются одинаково, а всё, что могло бы отличаться между машинами, либо синхронизируется, либо выводится из симуляции.
Мод может нарушить это тремя способами.
- Он меняет игру из пользовательского интерфейса в обход синхронизации. Новый гизмо, пункт контекстного меню, окно настроек, которое редактирует постройку. Клик происходит только на одной машине, остальные о нём не узнают, и колонии расходятся. Это самая частая проблема, и именно её исправляют патчи совместимости: они сообщают Multiplayer, какие методы нужно синхронизировать.
- Он использует случайность или состояние, которых мод не видит. Код, который вызывает генератор случайных чисел не из RimWorld, читает системные часы, кэширует результаты в зависимости от того, на что смотрит локальный игрок, или работает в фоновом потоке. Две машины получают два разных ответа.
- Он меняет работу тиков. Моды производительности, которые пропускают, группируют или замедляют тики для объектов вне экрана, - особый риск, потому что у каждого игрока на экране своё. Некоторые из них сделали совместимыми; проверяйте, а не предполагайте.
Моды только на 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 и так далее), контентные моды, а патчи - в самом конце.
<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 охотно скопирует список модов с хоста на клиент. Но он не помешает списку расходиться в последующие недели. Помогают такие привычки.
- Один человек отвечает за список. Обычно это хост. Остальные предлагают; добавляет, оценивает и тестирует один человек.
- Начинайте с окна совместимости, а не с коллекции Workshop, которую кто-то собрал для одиночной игры. Пройдитесь по активному списку и уберите все моды с оценкой 1, прочитайте заметки к 2 и 3, а неизвестные отметьте для тестирования.
- Делайте его меньше вашего списка для одиночной игры. Каждый мод на C# - ещё один шанс рассинхрона, а каждый рассинхрон стоит всей группе перезагрузки. Чисто XML-контентные моды обходятся дёшево; выбирать нужно осторожно среди модов для удобства с новыми кнопками.
- Опубликуйте его как коллекцию Steam. Все подписываются на коллекцию и ни на что больше, и обновления приходят всем одновременно. Тогда "Subscribe to missing" на экране подключения почти нечего делать.
- Отправляйте порядок файлом. Экран модов RimWorld может сохранить активный список в файл
.rmlв папкеModListsданных сохранений и загрузить его обратно. Отправляйте этот файл, а не скриншот. - Заморозьте обновления на время прохождения. 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 позволяет игрокам вести отдельные колонии в одной игре, и команда по-прежнему называет это работой в процессе - ожидайте там больше шероховатостей с модами, чем в единой общей колонии.
Когда рассинхрон случается посреди прохождения#
Рассинхроны в долгой колонии редко случайны. В порядке убывания вероятности:
- У кого-то обновились моды. Сравните вкладку Files, когда он подключится заново; подпишитесь заново или откатите версию.
- Изменилась настройка. Убедитесь, что Sync configs включён и ни у кого нет локально отредактированного конфига.
- Функция мода, которую так и не протестировали. Отметьте, что делал игрок, когда она сработала.
- Машина хоста отстала. Если частота кадров у хоста падает ниже частоты тиков игры, он тянет всех из синхронизации. Это не проблема модов, хотя тяжёлый список модов её вызывает; CPU или RAM для игровых серверов объясняет, почему одно медленное ядро важнее общего объёма памяти.
- Плохое соединение. 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-контентные моды обычно можно добавить через сохранение, перезагрузку и повторную синхронизацию списка у всех. Удаление модов или добавление модов с кодом посреди прохождения грозит не только рассинхронами, но и сломанными сохранениями. Сначала сделайте бэкап сохранения и проверьте изменение на копии.


