Hi everyone!
I finished my exam on Wednesday this week. So now I am available to dedicate more time to the Dark Souls 2 seamless co-op project.
In this post I'm just going to discuss a few more development points in the mod.
I've spent the past few hours today working bonfires into seamless co-op.
As I expected, whereas enabling bonfire use in the other games was easy and required only 2 patches to the game's code, this game had to be a little bit different (and more interesting)...
Similar to the other seamless co-op projects, resting at a bonfire to cause a world reset (i.e respawning enemies and objects) is host based and works two ways depending on who has touched the bonfire:
If the host sits at a bonfire: They will send a message to other clients that the world will be reset
If a non-host sits at a bonfire: They will then confirm with the host whether the world can be reset or not, and depending on the world state the host will inform the session whether the world reset has been successful
Dark Souls II handles the "EventBonfireManager" and "EventWindowManager" separately, and both of these classes have their own conditions for whether or not they can be accessed. Once I'd enabled bonfire use online, I had to then activate event window manager - acting as the bonfire menu - as well. In addition to this, several background checks run to see if your session status changes which will kick you out of the menu.
Rather than deal with this fully, I rewrote a large chunk of the bonfire interactions with online activity in mind. The hours I'd spent reverse engineering these two classes made it relatively straightforward to implement and now I'm happy to say that it's working as intended.
I'm still undecided on how to handle separated players - I'm torn between allowing bonfire resting but kicking player's out of any boss fog, or just disabling bonfires when someone is in a boss fight.
I'm happy to mention that bonfires are basically fully working now in multiplayer, and as with all of the previous seamless co-op mods you will receive the items necessary for multiplayer when you sit at a bonfire.
Co-operative play in the Souls games centers heavily around the primary objective being to help a host out to a boss fight, defeat the boss, and then return to your world with some kind of reward.
As seamless re-designs a lot of multiplayer elements and mechanics, you can of course join any player at any point in the game whether they have cleared the boss or not.
Defeating a boss will usually send a player home. In seamless co-op, I ran into a small issue of a timer being set once a boss was defeated (around 60 seconds or so), and then disconnecting all phantoms regardless of join type once that timer was complete.
Finding where that timer was and disabling it was a bit annoying, but in doing so I've found a large switch statement which I've attached a lot of network debugging to.
This part is also complete, you should be able to clear and progress through the game past bosses with no issues.
Dark Souls II has no method by which a player can naturally respawn inside a session without disconnecting and rejoining.
In the other seamless mods, I was able to make use of utility functions designed for the "brawl" game mode in the arena. There is built-in methods by which players can die and respawn without disconnecting and have their network player instances preserved and flags reset.
In seamless co-op for other games, I have a method named "Rapid Re-Entry Helper" by which players who have died can stay in an online session and can still observe events that have happened between their death and respawn (i.e. killing an enemy whilst a dead player is in a loading screen).
I've already made significant progress is respawning players and world objects, but now I just have to put it into practice. I'll have to rework this helper so that it works with Dark Souls II (whereas I could literally just copy-paste it from Elden Ring -> Dark Souls III -> Dark Souls: Remastered).
I've still got a bit of work to go on getting this fully working, but I'm fairly confident I'll have it working by the end of the week.
I'll post another update relatively soon now that progress is speeding up on the mod
As always, thank you for your kind words and support <3
~ Yui
Игорь Ротарь
2025-10-04 10:19:48 +0000 UTCErroneous
2025-10-03 17:44:49 +0000 UTCJerry Lee Kitt
2025-09-24 00:04:38 +0000 UTCRorb
2025-09-23 17:43:18 +0000 UTC