Skip to content

Nav: door-seam fallback links no longer cross fences and walls - #49

Merged
codingncaffeine merged 1 commit into
codingncaffeine:mainfrom
qwerin:fix/fence-nav
Nov 9, 2026
Merged

codingncaffeine merged 1 commit into
codingncaffeine:mainfrom
qwerin:fix/fence-nav

Conversation

@qwerin

@qwerin qwerin commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Split out of #36 (one fix per PR, as suggested there).

StitchSnoDoorSeams's fallback linked any nearby unconnected walkable patches by nearest centroid with only a height gate, so the two floor strips of a t_grs01_fence_generic_wood-* tile (and house walls) got linked straight through the boards.

  • Candidate links are checked best-first against the non-walkable edges of both door tiles and their neighbours; an edge standing 0.25–2.0 u over the crossing is a barrier.
  • If every candidate crosses a barrier the link is held back, and restored only when dropping it would cut the mesh apart.
  • Component counts and largest-component sizes are unchanged on all 81 World.dsmap and 70 MpWorld.dsmap regions; ~15.5k (SP) / ~16.5k (MP) wall- and fence-crossing links drop; Elddim's pig-pen fence goes from 30 crossings to 0.

Checks: rebased on main (bef1f38); dotnet build SiegeFX.sln -c Release -warnaserror clean; dotnet test passes (new NavFenceSeamTests, data-free). Play-tested: the pig-pen fence near the Elddim start blocks.

🤖 Generated with Claude Code

The door stitcher's slot-starved fallback wires an ExtraLinks hop between
every pair of near-door local components that are not already adjacent,
picking the nearest centroid pair with only a 1.0u Y gate. A wooden fence
piece (t_grs01_fence_generic_wood-*) has a floor strip on each side of its
Ignored boards; its strips weld to the neighbouring tiles, so every door
off it fell through to the fallback and tied one side of the fence to the
other. In multiplayer_world town_center (the co-op start in Elddim) that
was 30 of 31 fence floor-pair crossings — players walked straight through
the pig-pen fence, and through blacksmith/house walls (4-6u hops).

Each candidate hop is now tested, best-first, against the Ignored nav
edges of both door snodes and their door neighbours; an edge standing
0.25..2.0u above the hop at the crossing is a barrier. A hop with no
barrier-free pair is deferred and only restored when dropping it would
split the mesh, so connectivity is unchanged: raw component counts and
biggest-component sizes are identical before/after on all 81 World.dsmap
and 70 MpWorld.dsmap regions, while ~15.5k / ~16.5k redundant
barrier-crossing hops are dropped. Host and client build the same mesh,
so both are fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 048d7dc61819877a29d9dfdfa9c8e7275da8ac86)
@codingncaffeine
codingncaffeine merged commit 738a4bb into codingncaffeine:main Nov 9, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants