Hi everyone
Development and testing continues on seamless co-op for Dark Souls II. In this post I'll discuss what I've been working on this past week.
In a previous post I briefly detailed the work and functionality of respawning players in the mod.
In other seamless co-op mods, connected players remains persistent throughout the game play session - When remote players and "respawn" they usually just get teleported back to the bonfire and have their character death flags reset and health regenerated.
Dark Souls II is, of course, special and there is no intrinsic function for respawning a dead character that I could find. Enemies that do come back to life infinitely usually do so through the EnemyGeneratorCtrl class which can freely create and delete enemy character instances without too much overhead.
As a result of this I had to make a workaround where a new character is created every time a remote player dies. This worked.. kind of - however in the event of a full session, one or more players dying could cause issues where the old character instance was still lingering afterwards for a few seconds, causing the newly generated character instance to get ignored.
I have rewritten the network player character manager of seamless co-op to instead queue requests for respawning players, flag the death or warping instance to be unloaded and then once certain conditions are met (e.g. fully loaded, no obstructions, old instance deleted, etc.) the new character instance will be created. This appears to have fixed the occasional freeze and crash which was also happening every so often during play testing.
Players still do the summon in animation when they respawn (will be removed)A difficult part of any seamless mod development is preservation of enemy states upon a player reloading.
In Dark Souls II specifically, you might notice that save & quitting the game preserves all enemies exactly where they were - in contrast to the other games where you can often get out of a difficult situation by quitting to the title menu to reset their position.
This is a functionality provided by MapSnapDataManager which is a game class which, as it's name suggests, takes a snapshot of the map you're in (and some adjacent maps depending on where you are). 52 bytes of data regarding each enemy in the area is taken, and upon reloading this information will be used to place the enemies back where they were when you quit to the menu.
When you join a host world, basic information about enemies are sent to the connecting player including:
Whether the enemy is dead or not
Where the enemy is
What the enemy is doing (e.g. attack animation, casting a spell, etc.)
Various flags regarding to AI functionality
Your own game's MapSnapDataManager is disabled as a guest player, and you rely solely on the information provided by the host. Where this gets difficult is when either you die in a different map to the host or the host themselves dies.
To fix this, I have entirely disabled resetting of MapSnapDataManager upon dying, meaning that if you die the enemies will remain in their exact position / dead state as if nothing had happened.
This is necessary for seamless development however it will undoubtably make the game much easier as it's possible to just throw yourself carelessly at the enemies over and over again without any worry of them coming back if you die -- This is why I originally added rot and afflictions on death in the other seamless mods to encourage players to use the bonfire and reset the world or accumulate debuffs.
The initial play testing continues. Both minor and severe bugs are being identified and fixed along the way.
Testing is going about as well as expectedAs always - thank you for your patience and a huge thank you to all of my supporters <3
Let me know if there are any suggestions for the debuffs / rot acquired on death. This will be a toggle similar to the other mods.
Take care
~ Yui
Enki
2025-10-29 05:54:16 +0000 UTCLiza Wagner
2025-10-28 22:12:12 +0000 UTCAnthony
2025-10-25 16:53:04 +0000 UTCThatGuyCole
2025-10-25 09:27:36 +0000 UTC