[1.0] Zetrith's Multiplayer

Started by Zetrith, December 16, 2018, 11:11:50 AM

Previous topic - Next topic

Zetrith

Thread locked by Ramsis due to dev going MIA. Please contact Ramsis#6666 in Discord or in a PM here to have unlocked should you come back and continue updating! :) we miss you!

For now updated version here: https://ludeon.com/forums/index.php?topic=49142.0



Multiplayer mod for RimWorld

The mod is still in testing phase so bugs might be present. Issues can be reported on Github or Discord.

Discord server: https://discord.gg/S4bxXpv
You can also find me on the RimWorld Discord.

Features

  • Cooperative multiplayer with (mostly) full vanilla gameplay support
  • Currently all players are playing the same game, in the same faction
  • Hot joining (no lobby)
  • Basic replay functionality
  • Hosting from an existing save
  • LAN games
  • Connecting to Steam friends
  • Automatic desync detection
  • Chat

Video showcasing some of the current functionality: https://www.youtube.com/watch?v=ZOaf524Z7P4

More info
The most up-to-date information on hosting and many other topics is available on the wiki:
https://github.com/Zetrith/Multiplayer/wiki

FAQ: https://github.com/Zetrith/Multiplayer/wiki/FAQ

Download
Currently only available on Github:
https://github.com/Zetrith/Multiplayer/releases

How to install
- Download Multiplayer.zip and unpack it into the Mods folder
- You need to order the mod right below Core (above any other mod).
Here's a guide if you are unfamiliar: https://ludeon.com/forums/index.php?topic=6223.0

This project is unrelated to RimTogether and RimAlong.

Gabler

I'll be looking closely at this mod, I hope it doesn't collapse.

Good luck!

notfood

#2
Crashes under Linux/Mac with FunLockFile as soon as you land on single player, so I can't even make a new save file.
Receiving unhandled NULL exception
#0  0x007ffeca881480 in funlockfile
#1  0x007ffeca881b08 in (Unknown)
#2  0x007ffeca881b18 in (Unknown)
#3  0x007ffeca881b28 in (Unknown)
#4  0x007ffeca881b38 in (Unknown)
#5  0x007ffeca881b48 in (Unknown)
#6  0x007ffeca881b58 in (Unknown)
#7  0x007ffeca881b68 in (Unknown)
#8  0x007ffeca881b78 in (Unknown)
#9  0x007ffeca881b88 in (Unknown)
#10 0x007ffeca881b98 in (Unknown)
#11 0x007ffeca881ba8 in (Unknown)
#12 0x007ffeca881bb8 in (Unknown)
#13 0x007ffeca881bc8 in (Unknown)
#14 0x007ffeca881bd8 in mono_set_defaults
#15 0x007ffeca8827d0 in mono_runtime_invoke
#16 0x007ffeca882800 in std::vector<core::basic_string<char, core::StringStorageDefault<char> >, std::allocator<core::basic_string<char, core::StringStorageDefault<char> > > >::~vector()
#17 0x007ffeca882830 in std::vector<core::basic_string<char, core::StringStorageDefault<char> >, std::allocator<core::basic_string<char, core::StringStorageDefault<char> > > >::~vector()
#18 0x007ffeca882850 in std::vector<core::basic_string<char, core::StringStorageDefault<char> >, std::allocator<core::basic_string<char, core::StringStorageDefault<char> > > >::~vector()
#19 0x007ffeca8829d0 in operator new(unsigned long)
#20 0x007ffeca882a10 in std::vector<core::basic_string<char, core::StringStorageDefault<char> >, std::allocator<core::basic_string<char, core::StringStorageDefault<char> > > >::~vector()
#21 0x007ffeca882a30 in zcfree
#22 0x007ffeca883830 in __libc_start_main
#23 0x007ffeca8838f0 in zcfree


It means, you used Harmony into an empty virtual method (that's a nono). My guess, any of the spawn methods.

notfood

I did some further testing:

Linux/Mac compatibility report:
JobDriver_Wait.DecorateWaitToil: post: Multiplayer.Client.TradingWaitJobToil.Postfix


This is the offending Harmony patch.

Bluntflame

RimWorld 1.0.2059 rev1005
Verse.Log:Message(String, Boolean)
RimWorld.VersionControl:LogVersionNumber()
Verse.Root:CheckGlobalInit()
Verse.Root:Start()
Verse.Root_Entry:Start()

Player's username: CODEX
Verse.Log:Message(String, Boolean)
Multiplayer.Client.Multiplayer:.cctor()
System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor(IntPtr)
System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor(RuntimeTypeHandle)
Verse.StaticConstructorOnStartupUtility:CallAll()
Verse.PlayDataLoader:<DoPlayLoad>m__2()
Verse.LongEventHandler:ExecuteToExecuteWhenFinished()
Verse.LongEventHandler:UpdateCurrentAsynchronousEvent()
Verse.LongEventHandler:LongEventsUpdate(Boolean&)
Verse.Root:Update_Patch1(Object)
Verse.Root_Entry:Update()

Processor: Intel(R) Celeron(R) CPU N3450 @ 1.10GHz
Verse.Log:Message(String, Boolean)
Multiplayer.Client.Multiplayer:.cctor()
System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor(IntPtr)
System.Runtime.CompilerServices.RuntimeHelpers:RunClassConstructor(RuntimeTypeHandle)
Verse.StaticConstructorOnStartupUtility:CallAll()
Verse.PlayDataLoader:<DoPlayLoad>m__2()
Verse.LongEventHandler:ExecuteToExecuteWhenFinished()
Verse.LongEventHandler:UpdateCurrentAsynchronousEvent()
Verse.LongEventHandler:LongEventsUpdate(Boolean&)
Verse.Root:Update_Patch1(Object)
Verse.Root_Entry:Update()

Multiplayer session stopped.
Verse.Log:Message(String, Boolean)
Multiplayer.Client.MultiplayerSession:Stop()
Multiplayer.Client.OnMainThread:StopMultiplayer()
Multiplayer.Client.<>c:<TryConnect>b__0_1(NetPeer, DisconnectInfo)
LiteNetLib.EventBasedNetListener:LiteNetLib.INetEventListener.OnPeerDisconnected(NetPeer, DisconnectInfo)
LiteNetLib.NetManager:ProcessEvent(NetEvent)
LiteNetLib.NetManager:PollEvents()
Multiplayer.Client.OnMainThread:Update()

CODEX 0 Client disconnected
Verse.Log:Message(String, Boolean)
Multiplayer.Client.<>c:<.cctor>b__47_0(String)
Multiplayer.Common.MpLog:Log(String)
Multiplayer.Client.<>c:<TryConnect>b__0_1(NetPeer, DisconnectInfo)
LiteNetLib.EventBasedNetListener:LiteNetLib.INetEventListener.OnPeerDisconnected(NetPeer, DisconnectInfo)
LiteNetLib.NetManager:ProcessEvent(NetEvent)
LiteNetLib.NetManager:PollEvents()
Multiplayer.Client.OnMainThread:Update()

Multiplayer session stopped.
Verse.Log:Message(String, Boolean)
Multiplayer.Client.MultiplayerSession:Stop()
Multiplayer.Client.OnMainThread:StopMultiplayer()
Multiplayer.Client.<>c:<TryConnect>b__0_1(NetPeer, DisconnectInfo)
LiteNetLib.EventBasedNetListener:LiteNetLib.INetEventListener.OnPeerDisconnected(NetPeer, DisconnectInfo)
LiteNetLib.NetManager:ProcessEvent(NetEvent)
LiteNetLib.NetManager:PollEvents()
Multiplayer.Client.OnMainThread:Update()

CODEX 0 Client disconnected
Verse.Log:Message(String, Boolean)
Multiplayer.Client.<>c:<.cctor>b__47_0(String)
Multiplayer.Common.MpLog:Log(String)
Multiplayer.Client.<>c:<TryConnect>b__0_1(NetPeer, DisconnectInfo)
LiteNetLib.EventBasedNetListener:LiteNetLib.INetEventListener.OnPeerDisconnected(NetPeer, DisconnectInfo)
LiteNetLib.NetManager:ProcessEvent(NetEvent)
LiteNetLib.NetManager:PollEvents()
Multiplayer.Client.OnMainThread:Update()

Does not connect

Zetrith

#5
Quote from: notfood on December 16, 2018, 03:22:17 PM
I did some further testing:

Linux/Mac compatibility report:
JobDriver_Wait.DecorateWaitToil: post: Multiplayer.Client.TradingWaitJobToil.Postfix


This is the offending Harmony patch.
Thanks, fixed in the latest version.
Btw, starting the game with the 32bit executable seems to also fix the issue

Quote from: Bluntflame on December 16, 2018, 04:55:20 PM
...

Does not connect
Please be more specific. What's your OS and what server were you trying to connect to?

cbuie1

Maybe start a discord for those lonely people like me who don't have anyone in lan to play with?

Telefonmast

This looks amazing so far, good job!

Can't wait to see this fully developed!
Telefonmast - Ready to give you good phone connection!
- My mod project

AlanerPolska

You got my attention. For now, how does it look? Two people(or more I guess?) playing on two separate maps, but what about interaction between them?

Zetrith

Quote from: AlanerPolska on December 17, 2018, 11:14:41 AM
You got my attention. For now, how does it look? Two people(or more I guess?) playing on two separate maps, but what about interaction between them?
It's currently co-op only, so everybody plays the same game, same faction. Multiple maps are possible as all vanilla features are supported.

Quote from: cbuie1 on December 16, 2018, 06:39:46 PM
Maybe start a discord for those lonely people like me who don't have anyone in lan to play with?
Here you go: https://discord.gg/UMZzxEM

riverrin2002

Hey guys nice mod just to ask how do we change storage propreties ? because i want make a fridge Ty

Zetrith

Quote from: riverrin2002 on December 17, 2018, 03:27:04 PM
Hey guys nice mod just to ask how do we change storage propreties ? because i want make a fridge Ty
Thank you! The zones are fixed in the latest version.

Arek_PL

whats the difference between that mod and WIP rimalong mod?

Zetrith

Quote from: Arek_PL on December 17, 2018, 05:20:57 PM
whats the difference between that mod and WIP rimalong mod?
This is a different project. I'm not too familiar with RimAlong, but it seems my approach is a bit different. This mod also supports more content and has Steam integration.

foodmaster

great work! playing some hours today. thanks for that nice present, have a nice christmas.