Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post here if you need help getting started with Daggerfall Unity or just want to clarify a potential bug. Questions about playing or modding classic Daggerfall should be posted to Community.
User avatar
pango
Posts: 3347
Joined: Wed Jul 18, 2018 6:14 pm
Location: France
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by pango »

We should not need a validator, that's the beauty of mathematics (more specifically, algebra).

[Sorry for the long post!]

Let's imagine we have several pieces, that all have some common properties, and rules to assemble those pieces(1).
Then if you can prove a property of the result based solely on those common properties of pieces and the assembly rules, then that property will be verified by any assembly you can create from the available pieces: it will just be applying the general proof to each specific case.

That's, I believe, how Daggerfall dungeons were created with proved connectivity, because abstract reasoning is an extremely efficient way to ensure properties in a modular system.
And it works most of the time in classic Daggerfall, because it seems some of the dungeon modules do not have all the common properties they should have. If we fix those, it should fix all the broken dungeons of your first case at once.

I think in last resort the second case is similar. I suspect another rule for dungeon modules is that when there's some secret mechanism blocking a way, it should be possible to open it from two locations reachable from each side of the mechanism(2).
It's usually the case, for example the famous sliding cage that blocks the access to/from a door, or the secret corridor used to hide say the Great Unicorn. But they forgot some cases, like when you're below some trapdoor, or teleport past the "labyrinth" in the Direnni Tower, or simply Daggerfall Castle magically locked door.

I imagine at some point they figured out they didn't need to ensure there was a way to open secret mechanisms from each side if one side was a closed space, so you couldn't come from that side. And then at some other point somebody though it would be cool if quests could teleport you to dungeons, and quest locations were okay candidates for teleporting spots. Except the two decisions don't mix well.
So if we keep the quests that can teleport you to dungeons, we should ensure mechanisms can always be opened from both sides; Say, add opening buttons in the rooms below trapdoors, or make trapdoors open if you click them from below... Or blacklist some quest locations as teleporting spots.


1. It can become more complex than that if you introduce several types of pieces that each verify their own common properties, and assembly rules that depend on those types.
For example in Daggerfall dungeons they're "inner" and "border" modules, that must have each their own set of common properties (for example in border modules there should never be a path between doors of different sides; obviously that's not a property that inner modules have), and assembly rules that say that inner modules should have 4 neighbor modules of either type; and all inner modules should be connected together.
Maybe Daggerfall uses more module types than that, but I suspect it does not, because proofs become much harder as the number of types increases, and assembly rules become more complicated.

2. Teleportations is certainly another interesting topic, and it's probably no coincidence that teleports are always arranged in cycles, so they never create "one ways" between two spaces. In effect, you're always teleporting to the same space you started from.
Mastodon: @pango@fosstodon.org
When a measure becomes a target, it ceases to be a good measure.
-- Charles Goodhart

User avatar
BadLuckBurt
Posts: 948
Joined: Sun Nov 05, 2017 8:30 pm

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by BadLuckBurt »

Sorry, it took me a bit longer to get around to this but I've had a good look at W0000018.RMB. The top connection on the east side of this block leads to the large room at the top. This area can be reached in The Roost of Grumerus by going up the elevator shaft and appears to work as intended.

The lower connection on the east side of this block leads to a small room at the bottom of the block which holds a quest item marker. When Wx18 is put west of Wx20 however, Wx20 connects to Wx18 at the lower connection but in Wx20, the path is a dead-end and can not be accessed from the Wx20 itself so it effectively blocks off access to the quest item marker room in Wx18:

Image

I hope the screenshot is clear enough, it's hard to get a good shot :) I'm not sure which block to blame yet but I still have the other 3 dungeons to look at.
DFU on UESP: https://en.uesp.net/w/index.php?title=T ... fall_Unity
DFU Nexus Mods: https://www.nexusmods.com/daggerfallunity
My github repositories with mostly DFU related stuff: https://github.com/BadLuckBurt

.

User avatar
jayhova
Posts: 924
Joined: Wed Jul 19, 2017 7:54 pm
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by jayhova »

pango wrote: Thu Nov 21, 2019 12:34 pm We should not need a validator, that's the beauty of mathematics (more specifically, algebra).

...
Strangely enough, the case you make as much supports creating a validator as it doesn't. You can look at what you just said as boiling down to as long as all the parts follow all the rules everything will work. Doesn't that make a validator super simple? Since all it needs to do is verify that all the blocks follow the rules it's dead simple. Bear in mind that right now we have only the original dungeon blocks to look at but the future might be a different story. Also, bear in mind that a validator might eventually look for things like geometry problems, doorway problems, etc. It's possible that dungeons could have issues that we are currently not aware of. Call me the "trust but verify" type but it certainly could not hurt to test the thousands of dungeons with a thing that could do that systematically.
Remember always 'What would Julian Do?'.

User avatar
pango
Posts: 3347
Joined: Wed Jul 18, 2018 6:14 pm
Location: France
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by pango »

Well, you got a point that a validator could help check dungeon blocks, old or new.
However I suspect writing a validator will be a lot of work. You see, to check for connectivity, the right level of abstraction would be rooms and corridors, but from what I understand dungeon blocks definitions only contain wall polygons, so you'd have to deduce rooms and corridors from those, which I suspect is not that simple, specially with geometry that is, as you mention, full of cracks and approximations; so that would probably need to be detected and corrected first...
Mastodon: @pango@fosstodon.org
When a measure becomes a target, it ceases to be a good measure.
-- Charles Goodhart

User avatar
BadLuckBurt
Posts: 948
Joined: Sun Nov 05, 2017 8:30 pm

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by BadLuckBurt »

Had a look at The Hold of Ashford. The problem seems similar to The Roost of Grumerus but there's a few differences:

The Roost's core layout is W18 - W20 with W20 acting as the starting block. Since W20 lacks a proper connector to W18's bottom room with the quest marker, you are blocked off from reaching it. I'd say W20 is the culprit here, the dead-end passage in that block should connect to the hallway that has the entrance / exit.

The Hold of Ashford's core layout is W18 - N57 with W18 acting as the starting block, you start on the west side of the block but there is no way to get to the big room at the top of the east side from there, nor can you reach the bottom room on the east side that holds the quest marker. This also means that N57 is unreachable because you can not get to the east side of W18 so in this case, W18 does become the culprit. I don't think there's any harm in altering W18 to be able to get to the rest of the block from the east side, if I can figure out the alteration, I'll give it a shot using World Data replacement. Connecting the other parts of the block should be fine, core blocks are always surrounded by corner blocks and as such closed off from the void.

The only time we could expect problems is if we make border blocks that allow you to traverse all directions inside.

Automated validation would be nice to have but not as easy as it sounds, While the dungeons are constructed of a mix of more traditional models and loose planes, we only have a numeric index as identifier, the exit door for example is 70300. So someone would have to look through the models used in dungeons (a lot), define rules for each and then figure out how they interact with the other models to build a validation model from there. Even if everything 'connects' it doesn't mean it's traversable.

You can build a validator 'easily' if you know the ruleset used for generation but the individual dungeon blocks are handcrafted, not generated, only the layouts were. If someone ends up writing a true procedural generator for dungeon blocks, they will probably end up writing a validator too or embed it in the generator itself.

Next, I'll take a look at The Hold of Gav'kern (Lainlyn) and The Tower of Hearthhouse as well. They use different blocks and seem to have different issues but we'll see what I find.
DFU on UESP: https://en.uesp.net/w/index.php?title=T ... fall_Unity
DFU Nexus Mods: https://www.nexusmods.com/daggerfallunity
My github repositories with mostly DFU related stuff: https://github.com/BadLuckBurt

.

User avatar
pango
Posts: 3347
Joined: Wed Jul 18, 2018 6:14 pm
Location: France
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by pango »

Another disconnected dungeon using W0000018 reported on subreddit: The Hold of Hawkcroft, Daggerfall.
Attachments
SAVE478.zip
(375.04 KiB) Downloaded 129 times
Mastodon: @pango@fosstodon.org
When a measure becomes a target, it ceases to be a good measure.
-- Charles Goodhart

User avatar
pango
Posts: 3347
Joined: Wed Jul 18, 2018 6:14 pm
Location: France
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by pango »

Another disconnected one using W0000018: The House of Moringyth, Sentinel

One of the faces of W0000018 leads to a large deadend room connected to top entrance, and a small underwater "dentist chair" room connected to the bottom entrance; The large room is a quest location, but if that face is in front of a border module, or an inner module that's not otherwise connected to the entrance module, then those two deadend become not connected to the dungeon entrance.

One of those two rooms should be connected to other rooms or corridors of this module W0000018.
Mastodon: @pango@fosstodon.org
When a measure becomes a target, it ceases to be a good measure.
-- Charles Goodhart

User avatar
pango
Posts: 3347
Joined: Wed Jul 18, 2018 6:14 pm
Location: France
Contact:

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by pango »

TalonHatesNames found a very interesting dungeon, the Ruins of Kinghouse Grange, Glenpoint.
This is a L-shaped 3 inner modules dungeons, and the quest target was in the corner module (N0000055).

Code: Select all

N0000055 - N0000071
   |
N0000043
Interesting thing is, the room is connected to deadends provided by the other modules at its top SSW door and bottom ENE doors, while the two remaining entrances are basically just connected together.
So it looks like some kind of combinaison issue, I've yet to understand when are modules allowed to provide deadends for some of their entrances, so I'm not sure what modules are faulty in this dungeon...
Ruins of Kinghouse Grange, Glenpoint.jpg
Ruins of Kinghouse Grange, Glenpoint.jpg (277.27 KiB) Viewed 3206 times
Mastodon: @pango@fosstodon.org
When a measure becomes a target, it ceases to be a good measure.
-- Charles Goodhart

User avatar
Ferital
Posts: 282
Joined: Thu Apr 05, 2018 8:01 am

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by Ferital »

I submitted a PR to fix W0000009.RDB (https://github.com/Interkarma/daggerfal ... /pull/2125) and I am working on two similar ones to fix N0000055.RDB and W0000018.RDB.

User avatar
Ferital
Posts: 282
Joined: Thu Apr 05, 2018 8:01 am

Re: Found inconsistent dungeon: The Roost of Grumerus [GAME DATA RELATED]

Post by Ferital »

I submitted a PR to fix N0000055.RDB: https://github.com/Interkarma/daggerfal ... /pull/2126

I checked the Ruins of Kinghouse Grange and all dungeon internal parts are now accessible.

Post Reply