RE:NODE

Módy pro RimWorld Multiplayer: kompatibilita a pořadí načítání

Text: Tým RE:NODE
16 min čtení


Většina módů pro RimWorld funguje s módem Multiplayer a ty, které ne, selhávají předvídatelným způsobem. Módy, které jen přidávají data - nové předměty, zvířata, oblečení, budovy nebo frakce napsané v XML - jsou kompatibilní vždy, protože v nich není nic, co by mohlo způsobit desync. Potíže dělají módy s kódem v C#: cokoli, co přidává tlačítko, gizmo nebo nabídku měnící hru, musí být synchronizované, a cokoli, co si generuje vlastní náhodná čísla nebo drží vlastní časovače, musí být opatchované. Mód Multiplayer u každého módu v tvém seznamu ukáže skóre od komunity, mód Multiplayer Compatibility patchuje dlouhý seznam oblíbených módů a začátek pořadí načítání je pevně daný: Prepatcher, Harmony, Core, tvoje DLC, pak Multiplayer. Zbytek tohoto návodu popisuje, jak skóre číst, jak sestavit seznam, který může sdílet čtyři lidé, a jak ověřit, že funguje, než do kolonie vrazíš šedesát hodin.

Pokud ses ještě nerozhodl mezi módem Multiplayer a RimWorld Together, přečti si nejdřív návod na multiplayerový server pro RimWorld. Tento článek se týká jen módu Multiplayer - jedné sdílené kolonie, deterministického lockstepu, kdy každý počítač spouští stejnou simulaci - protože právě tam kompatibilita módů rozhoduje o tom, jestli se vůbec dá hrát.

Proč některé módy multiplayer rozbijí a jiné ne#

Mód Multiplayer neposílá po síti stav hry. Posílá příkazy. Když hráč odveleje pawna, změní zakázku nebo označí strom ke kácení, ta akce se zabalí, označí tickem a provede na každém počítači ve stejný okamžik. Každá kopie kolonie pak spočítá stejný výsledek, protože mód dělá simulaci RimWorldu deterministickou: náhodná čísla se inicializují stejně a cokoli, co by se mezi počítači lišilo, se buď synchronizuje, nebo drží mimo simulaci.

Mód to může rozbít třemi způsoby.

  1. Mění hru z uživatelského rozhraní, aniž by šel přes synchronizaci. Nové gizmo, volba v pravém kliku, okno s nastavením, které upravuje budovu. Klik se stane jen na jednom počítači, ostatní o něm nevědí a kolonie se rozejdou. Je to nejčastější problém a právě ten řeší kompatibilitní patche - říkají Multiplayeru, které metody má synchronizovat.
  2. Používá náhodu nebo stav, který mód nevidí. Kód, který volá generátor náhodných čísel mimo ten vlastní z RimWorldu, čte systémové hodiny, ukládá do cache výsledky podle toho, na co se místní hráč dívá, nebo pracuje na vedlejším vlákně. Dva počítače dostanou dvě různé odpovědi.
  3. Mění způsob, jak fungují ticky. Výkonnostní módy, které přeskakují, shlukují nebo omezují ticky věcí mimo obrazovku, jsou zvlášť riskantní, protože to, co je na obrazovce, se u každého hráče liší. Některé z nich už kompatibilní jsou; než to předpokládáš, ověř si to.

Módy čistě v XML se všem třem problémům vyhnou, proto okno kompatibility přímo říká, že jsou vždy kompatibilní. Má to ale háček, který zmiňuje také: XML mód může záviset na frameworku s kódem v C# a ten pak musí být kompatibilní taky.

Kontrola módu: skóre a kde je najít#

Mód Multiplayer přidá do obrazovky Mods přímo v RimWorldu tlačítko Multiplayer compatibility. Otevře okno se seznamem tvých aktivních, nainstalovaných a zastaralých módů, u každého se skóre stavu a poznámkami. Data pocházejí od komunity, stahují se ze serveru týmu Multiplayeru, lokálně se ukládají do složky MpCache a dají se vypnout volbou „Show crowd-sourced compat info“, pokud je stahovat nechceš.

SkóreVýznam
4Všechno funguje
3Většinou funguje, některé drobné funkce ne
2Funguje částečně, hlavní funkce ne
1Nefunguje
UnknownZatím to nikdo nenahlásil

Stejná stupnice (s 0 pro neotestováno) se používá v komunitní tabulce, na kterou odkazuje stránka módu ve Workshopu, a v kanálu pro hlášení módů na Discordu, odkud skóre pocházejí. Ber je jako výchozí bod, ne jako záruku. Čtyřka znamená, že někdo s tím módem hrál a žádný problém neviděl; neříká nic o tom, jak se chová vedle dalších 150 módů na tvém seznamu. FAQ týmu Multiplayeru to říká přímo: dva módy, které jsou každý zvlášť uvedené jako plně kompatibilní, mohou spolu stejně způsobit desync.

Jak naložit s jednotlivými skóre:

  • 4: zahrň ho.
  • 3: přečti si poznámky. „Minor“ je obvykle jedno tlačítko nebo jedno okno, které se nesynchronizuje. Pokud tu funkci vaše parta nebude používat, je to prakticky čtyřka.
  • 2: jen pokud je rozbitá část něco, čemu se dokážeš úplně vyhnout, a otestuj to cíleně.
  • 1: vynech ho. Žádné přehazování pořadí načítání skóre 1 nespraví.
  • Unknown: otestuj to sám a nahlas, co jsi zjistil, aby to další parta nemusela dělat znovu.

Skóre jsou svázaná s verzemi. Mód ohodnocený čtyřkou před dvěma verzemi RimWorldu mohl od té doby přepsat půlku kódu a sekce „Outdated“ v okně existuje přesně z toho důvodu.

Mód Multiplayer Compatibility#

Multiplayer Compatibility (package id rwmt.MultiplayerCompatibility, od stejného týmu RimWorld Multiplayer Team) je jeden mód plný patchů pro cizí módy. Sám žádný obsah nemá. Pro každý podporovaný mód registruje metody, které je potřeba synchronizovat, označuje ty, které mají běžet jen lokálně, a opravuje náhodu - tedy práci, kterou by udělal autor původního módu, kdyby psal pro multiplayer.

Seznam podporovaných módů je dlouhý a neustále se mění. V době psaní zahrnuje framework Vanilla Expanded a velkou část série Vanilla Expanded, Common Sense, Simple Sidearms, Pick Up And Haul, RimFridge, LWM's Deep Storage, Prison Labor, Alpha Animals a Alpha Biomes a mnoho dalších. Směrodatný seznam je popis samotného módu a jeho README na GitHubu, ne příspěvek z fóra z minulého roku.

Tři pravidla:

  • Nainstaluj ho vždy, když používáš jakékoli módy s kódem v C#. U módů, které nepatchuje, nedělá nic, takže ho mít nic nestojí.
  • Potřebuje aktuální Multiplayer. Multiplayer deklaruje jako závislost a aktualizuje se spolu s ním. Stará kopie jednoho s novou kopií druhého je nesoulad verzí čekající na to, až se projeví.
  • To, že je mód na jeho seznamu, z něj neudělá čtyřku. Patch může pokrývat hlavní funkce a zbytek nechat být. Číst je pořád potřeba skóre v okně kompatibility.

Některé módy ho nepotřebují vůbec, protože jejich autoři multiplayer podporují nativně - volají API Multiplayeru sami. Typickým příkladem je Achtung!. Ty se ukážou jako kompatibilní i bez patche.

Pořadí načítání pro multiplayerový seznam módů#

Pořadí načítání v RimWorldu je seznam activeMods v souboru ModsConfig.xml a pozdější módy přepisují dřívější. Obecná pravidla - závislosti, přepisování, konflikty v kódu - najdeš v článku vysvětlení pořadí načítání módů. U Multiplayeru je začátek seznamu pevně daný metadaty samotných módů a špatné pořadí způsobí chyby při startu, ne nenápadné problémy.

  • Prepatcher jde první, nad Harmony i nad Core. Současná vydání Multiplayeru ho uvádějí jako tvrdou závislost (v řadě 0.11 nahradil starou závislost na Harmony) a zároveň díky němu fungují rituály v multiplayeru.
  • Harmony hned za ním. Prepatcher obsahuje vlastní kopii Harmony, ale většina ostatních módů s kódem pořád deklaruje brrainz.harmony jako závislost, takže ho nech.
  • Core a DLC v obvyklém pořadí: Royalty, Ideology, Biotech, Anomaly, Odyssey.
  • Multiplayer přímo pod posledním DLC. Popis módu to říká tučně a jeho metadata deklarují, že se načítá před HugsLib a frameworkem Vanilla Expanded.
  • Multiplayer Compatibility ihned za Multiplayerem.
  • Potom frameworky (HugsLib, framework Vanilla Expanded a podobně), obsahové módy a úplně nakonec patch módy.
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>

Soubor leží ve složce Config v uložených datech RimWorldu: %USERPROFILE%\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios\Config ve Windows, ~/.config/unity3d/Ludeon Studios/RimWorld by Ludeon Studios/Config v Linuxu. Ručně ho upravovat potřebuješ jen zřídka - obrazovka Mods ve hře a třídicí nástroje jako RimSort ho zapíšou za tebe a přitom čtou u každého módu loadAfter, loadBefore a modDependencies - ale je to jediné místo, kam se podívat, když chceš vědět, co hra doopravdy načetla.

V multiplayeru záleží na pořadí víc než v singleplayeru z prostého důvodu: kontrola při připojení ho porovnává. Pokud mají všichni stejné módy v jiném pořadí, připojující se hráč se dozví, že seznamy sedí, ale pořadí ne, a musí hru restartovat.

DLC a verze: všechno se musí shodovat#

Odpověď týmu Multiplayeru na otázku „potřebujeme stejná DLC“ zní, že všechno musí být stejné. Hráč bez Biotechu se nemůže připojit do hry, kde má host Biotech zapnutý, protože svět hosta obsahuje definice Biotechu, které klient nemůže načíst. Prakticky z toho plyne, že sada DLC ve skupině je průnik toho, co vlastní každý. Pokud má jeden kamarád jen základní hru, buď si DLC koupí, nebo je pro tuto kolonii všichni vypnou.

Podpora jednotlivých DLC také přicházela v různou dobu. Royalty a Ideology jsou podporované už roky. Podpora Anomaly přicházela po částech během vydání 1.5, rituály a některé mechaniky byly opraveny později než zbytek a FAQ týmu před desyncy s ním dlouho varovalo. Odyssey a gravships jsou podporované ve vydáních 1.6, která se pořád aktivně opravují. Pokud plánuješ dlouhou kolonii kolem nejnovějšího DLC, přečti si nejdřív poslední poznámky k vydání na stránce releases Multiplayeru na GitHubu a cíleně otestuj hlavní mechaniky toho DLC (viz testovací plán níže).

Verze se musí shodovat na třech úrovních:

Musí se shodovatCo se stane, když ne
Build RimWorlduOdmítnutí při připojení, nebo se mód nenačte
Verze Multiplayeru„Wrong protocol version“ při připojení
Soubory každého móduVypsané na kartě Files na obrazovce připojení

Multiplayer sleduje aktuální verzi RimWorldu a minimální build uvádí v popisu; tým netestuje nové verze módů proti starým verzím hry. Měj všechny na nejnovějším veřejném buildu RimWorldu a nepřecházej na betu, pokud to neudělá celá skupina společně.

Co kontroluje obrazovka připojení a Sync configs#

Když se hráč připojí, Multiplayer porovná jeho hru s hrou hosta a pokud se cokoli liší, ukáže obrazovku Data mismatch. Má čtyři karty a každá říká něco jiného.

  • General: verze RimWorldu a verze Multiplayeru. Dokud se tyhle neshodují, nic jiného opravit nejde.
  • Mod list: módy hosta oproti tvým, u všeho, co chybí, stojí „Not installed“. „Subscribe to missing“ tě přihlásí k odběru všech chybějících módů, které jsou ve Workshopu, a stáhne je na pozadí. „Apply server's mod list“ nahradí tvůj aktivní seznam seznamem hosta - tvůj vlastní seznam se přepíše, takže si ho předtím ulož, pokud na něm záleží.
  • Files: módy se stejným názvem, ale s jinými soubory. Obvykle má jeden hráč starší verzi, nebo po aktualizaci zůstaly staré soubory. Řešením je mód aktualizovat nebo znovu přihlásit k odběru; u rozdílů v Core a DLC ti obrazovka řekne, ať smažeš jejich složky a ověříš soubory hry ve Steamu.
  • Configs: nastavení módů, která se liší.

Po jakékoli změně se hra restartuje a po načtení tě automaticky znovu připojí.

Část s configy řídí volba hosta Sync configs při hostování. Když je zapnutá, připojující se hráči dočasně používají konfigurační soubory módů hosta: na disku se nic nepřepíše a po restartu se vrátí tvoje vlastní. Popis, který k ní má samotný mód, je přesný - snižuje počet desynců. Varuje také, že některé módy mají v configu citlivé věci, například tokeny Twitche používané streamerskými módy, takže host, který takový mód používá, by si to měl rozmyslet.

Nech Sync configs zapnuté, pokud nemáš tenhle důvod. Rozdílné nastavení módu - posuvník v módu o skladování, přepínač v bojovém módu - není vidět až do chvíle, kdy vyvolá jiný výsledek, a pak je to desync bez zjevné příčiny.

Jak sestavit sdílený seznam módů, který zůstane sdílený#

Mód Multiplayer ti rád zkopíruje seznam módů od hosta ke klientovi. Nezabrání ale tomu, aby se seznam v následujících týdnech rozjel. Tyhle návyky ano.

  1. Seznam vlastní jeden člověk. Obvykle host. Ostatní navrhují, jeden přidává, hodnotí a testuje.
  2. Začni od okna kompatibility, ne od Workshop kolekce, kterou někdo udělal pro singleplayer. Projdi aktivní seznam, odstraň každou jedničku, přečti si poznámky u každé dvojky a trojky a neznámé si označ k testování.
  3. Drž ho menší než tvůj singleplayerový seznam. Každý mód s kódem v C# je další šance na desync a každý desync stojí celou skupinu reload. Obsahové módy čistě v XML jsou levné; u quality-of-life módů s novými tlačítky je potřeba být vybíravý.
  4. Zveřejni ho jako kolekci ve Steamu. Všichni se přihlásí k odběru kolekce a ničeho jiného, takže aktualizace přicházejí všem najednou. „Subscribe to missing“ na obrazovce připojení pak nemá skoro nic na práci.
  5. Pořadí pošli jako soubor. Obrazovka Mods v RimWorldu umí uložit aktivní seznam do souboru .rml ve složce ModLists v uložených datech a zase ho načíst. Pošli ten soubor, ne snímek obrazovky.
  6. Zmraz aktualizace během hry. Steam aktualizuje módy z Workshopu, kdy se mu zachce. Mód, který se v úterý aktualizuje na jednom počítači, je ve středu nesoulad na kartě Files, nebo ještě hůř, verze, která si nenápadně ztratila podporu multiplayeru. Pokud aktualizace módu rozbije seznam uprostřed kolonie, postup obnovy najdeš v článku co dělat, když aktualizace módu něco rozbije a obecná mechanika synchronizace Workshopu je v článku módy ze Steam Workshopu na dedikovaných serverech.

Hráči, kteří nejsou na Steamu, musí každý mód nainstalovat ručně, přesně ve verzích, které má host. Funguje to a je to nejčastější zdroj nesouladů na kartě Files. Pokud je jeden hráč na jiném obchodě, dej celý seznam do zipu ve stejný den a nech ho instalovat z něj.

Testování před dlouhou kolonií#

Seznam módů, který se načte, není seznam módů, který funguje. Desyncy se objeví, když se spustí konkrétní cesta v kódu, a některé cesty - nájezd, karavana, rituál - se prvních deset herních dní nemusí spustit vůbec. Stráv jeden večer na zkušební kolonii. Je to nejlevnější hodina celé hry.

Hostuj test se zapnutým arbiterem. Arbiter je záložní kopie hry, kterou host spouští vedle té skutečné a která slouží jen k odhalování a zjišťování desynců; stojí počítač hosta reálnou paměť a CPU, takže ho pro skutečnou kolonii zase vypni, pokud host nemá silný počítač. Volba „Desync traces“ loguje navíc stack trace, které desync report výrazně zpřesní, ale nefunguje na 32bitových procesorech ani na ARM, například na Apple Silicon.

Potom s alespoň dvěma připojenými hráči záměrně udělejte každou z těchto věcí:

  • Pomocí dev módu vyvolej nájezd a odraz ho s odveleným pawny od obou hráčů.
  • Sestav karavanu, vyraž, vrať se. Navštiv osadu a obchoduj.
  • Použij každé nové gizmo a tlačítko, které módy přidávají, z počítačů obou hráčů, ne jen hosta.
  • Změň nastavení módu uprostřed hry, pokud čekáš, že to někdo bude při skutečné hře dělat (nebo se domluvte, že nikdo nebude).
  • Proveď rituál a, pokud je používáš, hlavní mechaniky nejnovějšího DLC - gravships u Odyssey, události specifické pro Anomaly.
  • Ulož, ukonči hru, načti a nech všechny znovu se připojit.
  • Hrej hodinu na nejvyšší rychlosti, jakou bude skupina používat, a host ať sleduje svůj počet snímků za sekundu.

Pokud dojde k desyncu, hra to oznámí a zapíše report do složky MpDesyncs v uložených datech. Odeber naposledy přidaný mód s kódem v C#, nebo ten, jehož funkci jsi zrovna používal, když se to stalo, a tu akci zopakuj. Když viníka najdeš, znovu zkontroluj jeho skóre a poznámky, a pokud byl uvedený jako kompatibilní, desync report je přesně to, co tým Multiplayeru potřebuje.

Dvě nastavení se musí rozhodnout před začátkem, protože jejich pozdější změna mění chování módů. Async time dává každé mapě a planetě vlastní ovládání času, takže jeden hráč může svou mapu pozastavit, zatímco druhý hraje dál; většina módů si s tím poradí, ale cokoli, co předpokládá jedny globální hodiny, stojí za test se zapnutým Async time. Multifaction umožňuje hráčům vést ve stejné hře oddělené kolonie a tým ji pořád označuje za rozpracovanou - čekej tam víc problémů s módy než u jedné sdílené kolonie.

Když to uprostřed hry způsobí desync#

Desyncy v dlouhé kolonii málokdy vznikají náhodou. Zhruba podle pravděpodobnosti:

  1. Někomu se aktualizovaly módy. Při opětovném připojení porovnej kartu Files; znovu se přihlas k odběru, nebo se vrať ke starší verzi.
  2. Změnilo se nastavení. Ujisti se, že je zapnuté Sync configs a že nikdo nemá lokálně upravený config.
  3. Funkce módu, která nebyla otestovaná. Poznamenej si, co hráč dělal, když se spustila.
  4. Počítač hosta zaostal. Host, jehož snímková frekvence klesne pod tickrate hry, vytáhne všechny z kroku. Není to problém módů, i když těžký seznam módů ho způsobuje; CPU vs RAM u herních serverů vysvětluje, proč jedno pomalé jádro znamená víc než celková paměť.
  5. Špatné připojení. FAQ týmu uvádí špatnou linku mezi hostem a hráčem jako nejčastější příčinu. Latence, jitter a ztráta paketů popisuje, jak poznat, který z těch tří problémů máš.

Nech interval automatického ukládání krátký a počet slotů štědrý - obojí nastavuješ v herním nastavení hosta - a kopii složky s uloženými hrami drž někde jinde než na počítači hosta. Desync se řeší načtením posledního dobrého uložení a poškozené uložení bez kopie je konec kolonie. Zálohy, které opravdu obnovíš je delší verze tohoto argumentu.

Co hostingový plán tady dokáže a co ne#

Mód Multiplayer běží uvnitř kopie hry každého hráče a relace žije na počítači hosta. Poslední vydání začala pracovat na samostatném serverovém režimu, ale je nový a většina skupin takhle zatím nehraje; než s ním začneš počítat, podívej se do poznámek k vydání projektu. Nic z práce na kompatibilitě v tomto návodu se neděje na serveru - děje se na čtyřech stolních počítačích, které se musí shodnout.

Pokud vaše parta ve skutečnosti chce svět, který běží dál, i když je host offline, to je RimWorld Together, který má opravdový serverový program. Plány RimWorld u RE:NODE začínají na 1 GB paměti s jedním přiděleným portem, což jeho server potřebuje, a seznam módů i configy se upravují v prohlížečovém správci souborů nebo přes SFTP. Nastavení je v návodu na multiplayerový server pro RimWorld.

FAQ#

Jsou všechny módy pro RimWorld kompatibilní s Multiplayerem?

Ne, ale víc, než většina lidí čeká. Módy čistě v XML fungují vždy. Módy s kódem fungují, pokud synchronizují své akce, ať už nativně, nebo přes mód Multiplayer Compatibility. U každého módu zkontroluj skóre v okně Multiplayer compatibility na obrazovce Mods.

Potřebuju mód Multiplayer Compatibility?

Pokud je v tvém seznamu jakýkoli mód s kódem, ano. Patchuje dlouhý seznam oblíbených módů, aby se jejich tlačítka a funkce synchronizovaly, a u módů, které nepokrývá, nedělá nic, takže ho mít nic nestojí. Načítej ho hned za Multiplayerem.

Musí mít všichni stejná DLC?

Ano. Každý hráč musí mít zapnutá stejná DLC jako host. Pokud jednomu hráči nějaké DLC chybí, skupina buď hraje bez něj, nebo si ho ten hráč koupí.

Kam v pořadí načítání patří Multiplayer?

Prepatcher úplně nahoře, pak Harmony, potom Core a DLC, pak Multiplayer přímo pod posledním DLC, následuje Multiplayer Compatibility. Za ním frameworky, obsah a patche.

Můžou mít hráči různá nastavení módů?

Bezpečně ne. Rozdílná nastavení způsobují desyncy. Při hostování zapni Sync configs a připojující se hráči budou dočasně používat configy hosta, aniž by se na disku cokoli přepsalo.

Můžeme přidávat módy do kolonie, která už běží?

Obsahové módy v XML jde obvykle přidat uložením, novým načtením a tím, že všichni znovu synchronizují svůj seznam. Odebírání módů nebo přidávání módů s kódem uprostřed hry riskuje kromě desyncu i rozbitá uložení. Nejdřív si zálohuj uloženou hru a změnu otestuj na kopii.

Pomohlo vám to?