Files
settled-reach/spikes/heightmap-pipeline/kallast_heightmap_settlements.json
T
jpmschweitzerandClaude Sonnet 4.6 f64ee9dded feat(assets): annotated heightmap pipeline — Kallast spike #778
Validates full heightmap pipeline: pyplatec tectonics → erosion →
dynamic sea level → terrain classification (13 classes) → D8 river
network → settlement placement → geographic PNG + settlement JSON.

Key technical decisions:
- Dynamic sea level via np.percentile (pyplatec output is right-skewed;
  fixed fraction gives ~0.2% land, not 40%)
- Terrain classes as fractions of land_range (not fixed offsets)
- Two-layer model: geographic PNG + human-layer JSON sidecar
- Rivers painted AFTER LANCZOS upscale via NEAREST neighbor mask
  (painting before blurs rivers into invisibility)
- grain_belt removed — reclassified as grassland (natural terrain)
- Irrigation overlay removed — human activity, lives in JSON sidecar

Output: 4096×2048px (1024×512 simulation grid, 5.2s total runtime).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 08:19:23 +02:00

74 lines
1.0 KiB
JSON

[
{
"name": "Kallast Prime",
"grid_y": 297,
"grid_x": 460,
"tier": 1
},
{
"name": "Ardenvall",
"grid_y": 182,
"grid_x": 246,
"tier": 2
},
{
"name": "Thessmark",
"grid_y": 266,
"grid_x": 613,
"tier": 2
},
{
"name": "Coldwater",
"grid_y": 316,
"grid_x": 272,
"tier": 2
},
{
"name": "Brightfield",
"grid_y": 172,
"grid_x": 512,
"tier": 2
},
{
"name": "Vorn's Crossing",
"grid_y": 293,
"grid_x": 399,
"tier": 3
},
{
"name": "Saltmere",
"grid_y": 195,
"grid_x": 707,
"tier": 3
},
{
"name": "Kaspel",
"grid_y": 214,
"grid_x": 214,
"tier": 3
},
{
"name": "Drenmark",
"grid_y": 296,
"grid_x": 737,
"tier": 3
},
{
"name": "New Farrow",
"grid_y": 327,
"grid_x": 563,
"tier": 3
},
{
"name": "Ossenfield",
"grid_y": 155,
"grid_x": 433,
"tier": 3
},
{
"name": "Tyne Station",
"grid_y": 300,
"grid_x": 322,
"tier": 3
}
]