[Update] Dark Souls 2: Seamless Co-op - v0.0.6
Hi everyone
This post covers a detailed bugfix report for 0.0.6.
As a quick disclaimer, I am typing this entire Patreon post using speech-to-text software. My arm is recovering slowly, but it's still taking quite a while, and it's still quite difficult to type for long periods of time.
Fixed a bug which could cause the game to panic when invading or joining a session.
Dark Souls 2 has a fixed map load limit of 3. This means that, at maximum, the game can load 3 of the 42 available maps.
In Seamless Co-op, I had to increase this limit in order to allow players to explore in different directions. I have increased it to 7. However, as the game was not meant for this amount of maps to be loaded concurrently, there are some issues with certain components of the map.
In this case, there was a class known as MapChameleonManager which has a fixed inline array of size 3 to store information about the available objects that can be mimicked when using the Silver Talisman or Chameleon spell.
When this array was exceeded, if a fourth map was loaded, then this would crash the game.
To remedy this, I have rewritten Map Chameleon Manager to store up to 42 elements.
This has now been fixed.
Fixed a bug that caused invaders to get stuck leveling up upon returning to their own world.
This was an issue because sometimes the Emerald Herald could still be under network control using the NetworkAIController despite being alone in their world. This meant that the Emerald Herald never did the animation to complete the leveling up process, and therefore you got stuck in the kneeling animation.
This has been partially fixed.
Fixed an issue where friendly fire / PvP modes gives souls on friendly player death.
In the character dead manager, I forgot to check whether or not souls should be awarded to a player if they killed another player in friendly fire or PvP modes. I have turned off soul rewards for players killed in teamfight modes.
This has now been fixed.
Fixed a bug which caused the Undead Hunter charm to not work
In order to allow players to drink Estus flasks when they normally couldn't, for example, in the case of an invader being present in the world whilst you are a phantom, I had to write my own logic for the enabling and disabling of Estus flasks.
Unfortunately, I forgot that the Undead Hunter charms existed.
This has now been fixed.
Fixed a bug that allowed players to drink Estus in the arena.
It's the same issue as above, but I forgot about the arena as well.
This has now been fixed.
Fixed a bug that caused the host of the duel in the duel arena to be not the correct character type.
Another oversight with the arena on my end. Unfortunately, where I check the player's character type, I only hooked the necessary function in NetSummonJoinMultiplayCtrl, however this is not active in duels, so I have done the same patch to the dueling counterpart (NetDuelJoinMultiplayControl).
This has now been fixed.
Fixed a bug that caused the victor of the matches in the duel arena to become stuck.
This was related to the bug above. If the phantom that you killed did not have the correct character type, for example, a dueling phantom, then killing them would not count as a match victory, and therefore the match would go on forever.
This has now been fixed.
Fixed a bug that allowed more than two people to be paired in the duel arena.
I made a mistake when programming dueling arenas, and instead of using the two player limit for duels, I unfortunately used the six player limit, which could cause some players to get stuck in limbo if they joined an oversubscribed lobby.
This has now been fixed.
Fixed a bug that allowed people to cancel their duels at the last minute and leave the other player stuck.
When players disengage with a multiplayer statue, they disconnect from the duel. I have now made it so that if the match has already started and then they try and disconnect from the duel, then they join the match anyway.
Fixed a bug that caused some special effects to be invisible for cooperators.
There was an issue with the way that I was processing player SpEffect packets. This has now been resolved, and you should be able to see visual effects such as buffs and chameleon on other players as normal.
Fixed a bug that could cause players to inherit the host world state.
This was a typo - Instead of using host world data for the cached enemy generator area character status info (i.e. enemy position, flags, health, etc) when you were ONLINE. I made it work only when OFFLINE. Essentially, this made it so that you would only use the host's world data when you returned to your own world, which would then save over your current map status.
This has now been fixed.
Fixed a bug that could cause significant enemy desynchronisation when reloading an area.
This is the other side of the coin to the above bug. It meant that no matter what the host's world state was in terms of enemy position, it would not initialize with the same values as the host because it would be using your offline data when you were online and your online data when you were offline.
I'd like to highlight that there are still some issues with AI synchronization and enemies appearing in different areas and different people's screens, especially when passing through a loading screen. However, these are being worked on for a future update.
This has now been fixed.
Fixed a bug that could occasionally cause friendly NPCs to appear as ghosts if an NPC summon was present.
There are several different variables for determining who is the world owner. The two I will describe are as following, and can get a little confusing.
There is a guest status for the network manager and also a guest status for the game manager, and the two are not directly linked.
In Seamless Co-op, I keep the network manager guest status for everybody who is not an invader. This allows them to do certain things that normally only the host would be allowed to do, one of these being interacting with NPCs and being able to see them as normal NPCs and not ghosts.
That being said, there are certain cases where the NetworkManager guest status is overridden by the GameManager guest status. And one of these is when an NPC, phantom (friendly or hostile) is present. The result of this is that NPCs would appear as ghosts when NPC phantoms were present, otherwise, they would appear as tangible, normal NPCs.
This has now been fixed.
Fixed a bug that made some NPCs invulnerable for guest players.
In seamless co op, some enemies have their AI control fixed to the host only. These are usually friendly NPCs and bosses. When another player tries to hit a protected type of enemy, which the host has control over, then there are certain safeguards in place to prevent, for example, invaders from killing critical NPCs like in the first Dark Souls.
This had the side effect of making it so that friendly NPCs, even when they became hostile, were not able to be hit by any non host players.
This has now been fixed.
Fixed a bug that could cause bosses to have unscaled health if the guest entered first.
As mentioned above, bosses have their AI controlled fixed to the host only. This means that the host controls everything from the enemy's behavior, health, position, to its death state. If a player enters a fog wall who is not the host, then their game will attempt to scale the enemy's HP.
This change will immediately be reverted by the host's game client who has not yet entered the fog wall and therefore reverts the HP back to its unscaled value.
This has now been fixed.
Restored the "blow up acceleration" on heavy running attacks to original Dark Souls 2 levels.
A running R1 with a colossal greatsword in Dark Souls 2 sends enemies flying. In Dark Souls 2, before the DLCs came out, the acceleration by which you would hit a player upwards was 8 units.
This was reduced to 4 units when the DLCs came out to avoid players hitting entities over guard railings. It was met with quite a lot of sadness from the community as there were some gimmick PvP builds and strategies that could make use of this before, which now no longer worked.
I have restored it to 8 units In Seamless Co op, as some people have requested it. If it becomes a problem again, then I will reduce it back to 4, but for now I will see how this change goes and whether people like it or not.
Significant network AI control synchronization changes.
I'm pleased to announce that I have completely reverse engineered the way that network AI control is allocated in Dark Souls 2. Unfortunately, it doesn't quite work the way that I have planned for Dark Souls 2 Seamless Co op to work.
I've laid down the groundwork to completely overhaul this system, make it more responsive, and allow friendly phantoms to control otherwise host only NPCs and bosses.
Right now, it's a work in process.
Added new feature in the INI file "no_hollowing_visual_effect". This will remove the hollowing visual effect for your own character and other players (if set to 1). Default is 0.
In Dark Souls 2, when you die, you become progressively more hollowed. This has the following limits.
50% reduced hp - Default
30% reduced hp - Ring of Binding
90% reduced hp - Maximum sin + Full hollowing
Some people confused these reductions in HP with something Seamless Coop was doing, however, it is a base game mechanic.
In addition to the hp limits being reduced, the player's character will also appear more zombified. Some players don't like this, so I simply added a toggle to just disable the visual effect. The visual effect is client sided, so if you want to disable the zombification of your players, then just set this to 1 in the INI file.
The HP reduction still applies, as do the other drawbacks of being hollow.
Final note
I fell into a bit of a trap this update of trying to fix too many things at once and taking a bit longer, so I apologise for that. But hopefully, this resolves a lot of the issues the community has had with the mod. Thank you for your continued feedback.
As always - thank you for your patience and a huge thank you to all of my supporters <3
Take care,
Yui
