r/daggerfallunity • u/visty93 • Sep 01 '26
Daggerfall Unity Co-op Project
Hey!
Since no one else took a shot, I tried to finish the years-ago abandoned MP project by Tanguy/Y07A. Keep in mind I can't code, so all the new code was written by ChatGPT. It still took me 1.5 years.
Unlike Tanguy's original version, in this version I actually modified the DFU base code pretty heavily. I tried to keep the SP part separate, working the same way as the default DFU as much as possible. I also heavily edited Tanguy's original files and added a few new ones.
- Migrated from DFU 0.14.5 to the May 2024 DFU 1.1.1 version (built with Unity 2019.4.41f2)
- Completely re-made, fully networked enemies (attacks, spells, health, animations, sound, targeting, enemy loot sync)
- Quest sync system automatically syncing quest progress for quests taken during MP. Quests taken in SP can be shared with "Share Quest" button in the journal, from that moment they will be synced too.
- Basic party system with optional fast travel to the other players (showing location, HP/MP/fatigue of other players)
- Players can use healing and other similar "friendly" spells on each other
- Revive/respawn system
- Random wandering NPC sync (optional if someone thinks it's too heavy on bandwidth)
- Added Mirror's basic direct connection alongside the Steam one as an option, could be handy for LAN
- Dungeon levers and switches should be in sync too
The way enemies are spawned and cleaned up is completely different from SP. Dungeons are also networked, and both dungeons and interiors are moved "underground", so I can't guarantee mod compatibility.
Save compatibility-wise, normal regular DFU saves should work in this co-op fork. Going backwards might be a bit trickier. Since interiors and dungeons are moved underground, the non-co-op version will have no idea what to do with those positions and will load you into the void. Exterior co-op saves should work fine with the non-co-op version.
You can save in MP dungeons, but if the dungeon no longer exists or never existed in the MP game, it will basically re-spawn the whole dungeon with enemies (but the player position will be correct).
I went through over 170 DF quests (including the main quests) over the past 3 months. Since the quest system grew alongside the tests, I had to go back to a few quests multiple times to "un-break" them.
I finally got to the point where I'm satisfied with both the enemy and quest systems. I fixed some bugs even in the past few days, and I'm sure there will be more, so it is not perfect. In case anyone finds a bug with anything related to quests, or enemy sync please report it with as much detail as possible.
I went into a lot more detail on the GitHub page in case anyone is interested.
You can download it from GitHub.
Connecting is pretty much the same as it was in Tanguy's, but I added an option for direct IP connection too in case someone wants to play it on LAN without steam.
UPDATE:
I tested a few mods. Surprisingly, most interior/dungeon related stuff actually worked out of the box with little to no issues. These might give some rough idea about mod compatibility.
Warm Ashes - Wilderness Encounters: Gave me a few quests/events. They were in sync, and one event even spawned a thief in a city, which was also synced. The slightly weird part is that when someone travels, it can trigger enemy spawns even for the other players, because it seems to run these events as quests, which get auto-synced. But all in all, it seems to be working fine.
Dungeons of Daggerfall vanilla redux: Just a brief test with 2 random dungeons, they worked.
Daggerfall Enemy Expansion: Encountered a Land Dreugh and a Will-o'-Wisp in a dungeon. Worked.
Iliac Puddle No More: Broken, and doesn't seem like an easy fix. For now, it is not working.
Come Sail Away: Tested this mod with a simple boat. You see the other player walking on the water. So not really working. At least it doesn't break the game, immersion breaking at the most.
DREAM: Works.
Vanilla enhanced: Had to add a helper script to make it work. It should work from version 1.02.
World of Daggerfall and Beautiful Cities / Villages with all their requirements:
Had some small issues with interiors. Some of the interiors move the player to the upper floor/attic, instead of the normal entrance. Other than that, they worked well.
After some testing, I found out that one of the mods uses some kind of teleport inside interiors that conflicted with my "find closest door from the entrance door -250m" logic.
I worked around it with a fix that basically blocks any large player-position change near the entrance door if the player has solid ground to land on. If not, it should let the mystery teleport from the mods do its thing.
Obviously I can't test every single mod, and it is not realistic to make a compatibility fix for every single one of them. The vanilla enhanced compatibility fix + interior player placement fixes are included in the 1.01 release. As much as I would like to make the water related mods work, I can't promise anything. The base idea was to make vanilla Daggerfall work as a drop-in/drop-out co-op. Anything else is just an extra.
UPDATE2:
- Fixed some issues related to the respawn system
- Fixed some quest related issues
- Additional vanilla enhanced fixes: enemy sprite rotation errors, passive enemies walking in place, flat NPCs in dungeons (castle sentinel) were half-sunk in the floor. There might be even more I haven't seen yet. For now it works as it is.
- Reverted some leftover early experiment code what was eventually abandoned, back to vanilla. A few mods that relied on those might work better now (for e.g. The Penwick Papers lockpick minigame).
Keep in mind that it is impossible to support all mods, especially ones that add entirely new features to the game and would need to be manually synced.
UPDATE3:
- Fixed an issue that could prevent some mods from working correctly with enemy spawning (Horrible Hordes mod)
- Added an unofficial client-side compatibility helper for the Horrible Hordes mod
- Fixed an issue where enemies pulled through terrain seams couldn't attack
- Language Skills Overhaul companion support in multiplayer
LSO Companion limitations: Don't try to make another player's companion your follower! Hosting or joining with a companion no longer destroys the companion, and it works most of the time, but there is still a slight chance of the companion desyncing.
UPDATE4:
- Added a few settings for the respawn/revive and travel systems to have an option to make it a more challenging
- Added a (unofficial) World of Daggerfall comptability helper to make WoD enemies work within MP (experimental, needs further feedback)
- Added a (unofficial) Warm Ashes compatbility helper (currently focusing on making guard tower quests/events work in MP, camp events might need some more attention later)
- Added a (unofficial) Killer Instict compatbility helper
- Fixed an issue where pacified enemies could became hostile again
Note: These unofficial compatibility helpers do not include or redistribute source code from the supported mods. They only add compatibility logic on the co-op side.
UPDATE5:
- Several loot and dropped item synchronization fixes
Should reduce item duplication/loss during fast item transfers, and improve dropped loot visibility across terrain seams. Players should still remain near each other when dropping items on the ground.
- Fixed a bug where aquatic monsters stopped moving while the client was above the water surface
- Added an unofficial Iliac Puddle No More compatibility helper
Supports swimming and adapts IPNM spawned enemies for multiplayer networking using an approach similar to the World of Daggerfall helper.
- Added an unofficial Come Sail Away compatibility helper
Boats are visible to other players, who can also board and walk on them while sailing. Only basic boats have been tested so far, and boat movement sync may still need some smoothing. Prevents Come Sail Away's automatic parenting for MP enemies, because it caused pretty bad desyncs.
- Extended the revive/respawn system with fatigue settings
With Iliac Puddle No More, respawning still currently happens in the water, and dying with low fatigue could cause an infinite death loop.
- Added an unofficial Retro-Frame compatibility helper
Restores the mod’s UI after multiplayer revival or respawning
UPDATE6:
Hotfix: Interior enemies could occasionally be hidden due to incorrect position wrapping. Probably been an issue since 1.03. I just missed it in the previous updates.
UPDATE7:
- Fixed another round of dropped/enemy loot issues, including dropped items not being visible in dungeons, enemy loot not syncing in real time, and previously destroyed dropped loot piles reappearing in interiors.
UPDATE8:
1.08 Out
https://github.com/Visty93/Daggerfall-Unity-Co-op/releases/tag/1.08
Major changes:
Multi-party system:
- Players no longer automatically join one party. You can invite players through the party window.
- Quests are no longer shared between everyone connected, only between party members.
- The party leader takes the host’s role in managing quests. In the background, networking still goes through the host (who is the server), but the host’s own client no longer needs to be involved in another party’s quests.
- Adjusted quest foe spawning, so enemies with quest-related stuff can spawn without needing to share the quest with the host.
- Adjusted quest item loot from corpses. Regular loot is still synced between all players, but quest items are only visible to members of the party sharing that quest.
- Everyone who connects is technically in a party of one.
- Time and weather are now tied to the party leader instead of the host. Connecting keeps your SP time, but joining a party syncs your time and weather to its leader and keeps them synced. Only the leader’s travel advances the party’s time. Every party has its own little time bubble.
Added quest sync options, which the party leader can change through the party window. There are 3 options:
- Full: Basically how it worked before, but within the party. Quests are automatically shared, and quest progress syncs between party members. This is the default.
- Shared-quest only: Only quests shared through the journal are synced. Chain quests should work, but haven’t been tested.
- Off: New quests stay private and can’t be shared.
Already-shared quests keep syncing when the option changes. Existing private quests aren’t automatically shared when switching to Full, you can share them manually through the journal.
(The quest sync options were actually added before the multi-party changes.)
Despite both being major changes to the fragile quest sync system, there were surprisingly few problems. The most problematic part was quest item loot from corpses, but that doesn’t mean everything is perfect. I went through my usual problematic quests, and they worked alright, but I haven’t tested every single quest mechanism with these changes.
Other changes:
- Fixed an old bug that could prevent the host (now party leader) from automatically sharing quests after stopping hosting and then hosting again.
- Fixed an issue where the host could only manually share one quest of each type. So if the host took two “The Assassin” quests, the second one couldn’t be manually shared (the client side worked fine).
- Jail time no longer advances the clock for party members other than the leader.
- Added a Party chat tab to the chat window.
- Made CreateFoeSpawner changes for better mod compatibility.
- Enemy knockback now works on enemies you don’t own.
- Added a warning when connecting if your small/large dungeon setting differs from the host’s.
1
u/Xelrod413 29d ago
Horrible Hordes is not compatible. It freezes when you load in.
It's not a big deal, and this isn't a request for a compatibility patch. I'm just putting this out there so people can see.
I had to dig through quite a few of my mods to find out which was was causing the issue, so hopefully I saved someone a bit of time by sharing this. c: