site banner

Friday Fun Thread for July 28, 2023

Be advised: this thread is not for serious in-depth discussion of weighty topics (we have a link for that), this thread is not for anything Culture War related. This thread is for Fun. You got jokes? Share 'em. You got silly questions? Ask 'em.

2
Jump in the discussion.

No email address required.

Yeah, you can do that (and in fact I distinctly remember Morrowind having a scripting function for it), the issue is that you can cast an infinite amount of rays from any point.

I don't think I communicated the intended algorithm well. This is just intended to be a batch program that you point your load order at and it spits out a file listing all the "holes" it found. I would only cast a single ray per worldspace, straight down from the (first, if more than one) spawn location to identify a surface to start the breadth-first search. My assumption is that this initial surface would almost certainly be part of the composite surface surrounding the playable volume of that worldspace rather than something floating within it, and thus "flooding" over it with a breadth-first search would suffice to identify holes.

EDIT:

Well, even then you need some criteria to try identify them. Otherwise you'd be showing people the entirety of the game map.

I do have a criteria to identify them: a surface with a texture adjacent to one without a texture. It is classification of them that I defer on. The definition of "adjacent to" is a bit complicated, but basically shares an edge with and if you rotated them around that edge they'd come together without intersecting another surface.

So to make sure I got it right: just a scan from the top to make sure there's no holes in the floor / the ground?

Yes, though I expect for interior worldspaces it'd wrap around to cover the walls and ceilings as well.

Oh ok. I think that should work for interiors (though the math of it is beyond me at the moment)... For exteriors, I thought there are not holes in the ground in TES games, that the map is literally a heightmap defining where topography of the ground?

This is true, but static objects (eg, boulders on mountains) intersect that heightmap and thus would be traversed by my search, and if they don't intersect it properly a surface without a texture on that object would be found.

surface without a texture on that object would be found.

This is another thing I glossed over, what exactly do you mean by that? Are we talking about a floating rock in your example? Which surface wouldn't have a texture here?

I'm probably not using the right terminology here. Consider the real-world example of a bowl turned upside down and lowered into water. The inside of the bowl is painted red and the outside blue. My goal is to identify whether any red is directly accessible from the outside. Because the bowl is upside down and in the water, the (EDIT:) directly accessible surface of the water only intersects the blue surface of the bowl, and thus the red is not accessible from the outside. If the bowl were on its side instead, the red surface would be accessible. Most static objects in Skyrim (and probably the other games as well) are topologically similar to bowls in this sense, where they are only partially textured with the intent that the non-textured stuff (corresponding to the red part of the bowl) is hidden behind other textured surfaces.

Oh! You're talking about normals. The surfaces do have a texture, but to save resources they're only drawn on the "forward" side (defined by the normal vector). I think you can actually use that for validation, though I still can't think of an obvious traversal algorithm that could do the check. It might be a solved problem for all I know (or not, lol), but I can't think of the right terms to google it. I'll let you know if I find anything.

Before jumping into Skyrim, I'd try to do a proof of concept in something like Unity. You can import a bunch of meshes there, set them up in an invalid way, and try to write a script that detects it. If it works, you can try looking into applying it to Skyrim.