Files
Stargate/stargate-paper
Michael Burgess 0c74b68cbe Fix ring-orientation detection, which was breaking horizontal (and some vertical) gates
The plane-lock fix from a couple rounds back bootstrapped its axis
detection with an orthogonal-only (face-to-face) flood, reasoning
that couldn't leak through depth. But on a stepped/diagonal ring, an
orthogonal-only sample from the seed is just a short straight run -
which has zero variance in TWO axes, not only the true thickness
one. inPlaneDirections()'s tie-breaking (checks X thinnest, then Z,
falls back to Y) then frequently picked the wrong axis: a horizontal
ring's true thin axis (Y) was never even reachable once a straight
run made X or Z look equally "thin" by coincidence. Whether a given
gate linked successfully came down to which direction the seed's
first few connected blocks happened to run in - explaining the
inconsistent failures across otherwise-identical builds.

Fixed by making the bootstrap diagonal-inclusive again (safe now that
frame-materials defaults to just obsidian, so bootstrap leak risk is
minimal) so it actually samples the ring's real 2D footprint before
deciding the plane, then re-deriving the plane once more from the
full, properly-flooded frame set as a second safety net.

Also generalized pickChevrons()/walkRing(), which hardcoded
`row = block.getY()` - a vertical-ring assumption that's meaningless
for a horizontal ring where Y is constant across the whole thing.
Replaced with project(), which picks the correct pair of plane axes
for whatever orientation the ring actually has.
2026-08-09 12:11:16 -04:00
..