wip(assembler): round L33 -- SurfaceWorld can be an upper strate; FloorProfileBlend measures seams

Route planning for an upper SurfaceWorld failed on long candidate chords over steep relief; chords
are now capped to the arrival/departure radii on an 8 m centre grid with an origin-proximity cost
(21.5 m walk, about 4 deg). The departure passage starts at the SW ground and tunnels down through rock.
FI -> SW -> TN fixture: all 4 styles pass every passage audit on both compilers. FloorProfileBlend
now checks endpoint height/tangent seams (step and tangent-step negative controls detected). Owner
world hashes unchanged; 30/30 determinism; cost within noise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-21 22:30:36 +02:00
1 parent d0158c6019
commit b7a47bef95
17 files changed
+1116 -32

No files matched your search

@@ -0,0 +1,55 @@
#!/usr/bin/env python3
"""Build owner-like FloatingIslands -> SurfaceWorld -> TunnelNetwork fixtures."""
import copy
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[4]
SOURCE = ROOT / "Standalone/data/owner_world.json"
OUT = ROOT / "Saved/Linux/l33/fixtures"
def make_fixture(style: int) -> Path:
world = json.loads(SOURCE.read_text(encoding="utf-8"))
source_tunnel, source_surface = world["strates"]
floating = copy.deepcopy(source_tunnel)
floating.update(index=0, top_chunk_z=0, bottom_chunk_z=-15, height_chunks=16)
floating["asset"]["StrateName"] = "Linux33 Upper FloatingIslands"
floating["asset"]["StrateHeightInChunks"] = 16
floating["asset"]["GeneratorType"] = 6
surface = copy.deepcopy(source_surface)
surface.update(index=1, top_chunk_z=-16, bottom_chunk_z=-79, height_chunks=64)
surface["asset"]["StrateName"] = "Linux33 Middle SurfaceWorld"
surface["asset"]["StrateHeightInChunks"] = 64
surface["asset"]["PassageConfig"]["Style"] = style
surface["passage_config"]["Style"] = style
tunnel = copy.deepcopy(source_tunnel)
tunnel.update(index=2, top_chunk_z=-80, bottom_chunk_z=-143, height_chunks=64)
tunnel["asset"]["StrateName"] = "Linux33 Lower TunnelNetwork"
tunnel["asset"]["StrateHeightInChunks"] = 64
world["strates"] = [floating, surface, tunnel]
world["total_strates"] = 3
world["settings_asset"]["TotalStrates"] = 3
world["settings_asset"]["StratePool"] = [
"/Standalone/Linux33/UpperFloatingIslands",
"/Standalone/Linux33/MiddleSurfaceWorld",
"/Standalone/Linux33/LowerTunnelNetwork",
]
world["passages"] = [] # The L23 legacy coordinates are not part of this resolved stack.
world["source"] = "VoxelForge Linux33 owner-like SurfaceWorld-upper fixture"
OUT.mkdir(parents=True, exist_ok=True)
path = OUT / f"sw-upper-tunnel-network-style{style}.json"
path.write_text(json.dumps(world, separators=(",", ":")), encoding="utf-8")
return path
if __name__ == "__main__":
for style in range(4):
path = make_fixture(style)
print(f"style={style} fixture={path}")