ShitboxInfinity/levels/southbank/junctions.json
m3ultra 65da434678 Real terrain: DEM elevation under every level
tools/fetch_dem.py pulls the open AWS terrarium elevation tiles for each
level's bbox (derived from the OSM geometry itself -- the fetch bboxes were
never recorded) and writes an f32 heightmap. The builder bilinear-samples it:
roads/footpaths/crossings drape (subdivided to ~8 m so long OSM segments stop
chording across curved ground), buildings lift rigidly to the lowest terrain
under their footprint with a 2 m foundation skirt, trees/props/planters ride
their own base heights, and the flat ground slab becomes a real terrain mesh.
Bridges get an explicit deck profile (lerp between end heights plus a hump)
instead of draping down into the river, the truss follows the deck, and the
Bradfield Highway now genuinely flies over Kemp Place -- the game has an
underpass. Kangaroo Point's cliffs are an actual 20 m drop, Edward Street
climbs to 55 m at Spring Hill.

Junction events bake spawn/convoy heights (osm_junction.py grew a pure-python
DEM sampler); the game respects marker heights everywhere it used to hardcode
ground=0.

Bugs the terrain surfaced, all found by measurement:
- Long road segments chorded across curved ground: the car visually sank to
  its windows mid-block. Fixed by subdividing draped ribbons.
- The 9 m terrain grid aliases cliff edges and bulged metres ABOVE the finely
  draped roads: a car spawning there was inside the terrain sheet and got
  depenetrated through the floor into the void (y = -710). Fixed by giving
  roads real collision and carving the terrain grid down wherever a draped
  road sample lands (11k+ carve samples on Kangaroo Point alone).
- The junction validator and tuner drove throttle-only, which cross-slope
  drift turned into 40-86 m misses; they now hold aim like a player would.
- Edward x Elizabeth launched down a 17% grade, went airborne at the crest
  and wedged off-street: unwinnable geometry, not a bug. Swapped for
  Elizabeth x George on the flat lower CBD. All 9 junctions validate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 15:08:42 +10:00

408 lines
5.9 KiB
JSON

[
{
"name": "Melbourne x Merivale",
"spawn": {
"x": -596.868944790812,
"z": -210.35268183374677,
"y": 8.98,
"dx": 0.8528773292725991,
"dz": -0.5221113494388324
},
"streams": [
{
"pts": [
[
-522.2431469994345,
-263.2916099068527,
7.69
],
[
-513.2984743659174,
-268.5646201058227,
7.44
],
[
-505.76645618454586,
-272.8477143314658,
6.89
],
[
-497.90899041561073,
-277.2629244179048,
6.23
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-518.3319604245614,
-316.20816625786284,
9.74
],
[
-502.53998920863535,
-289.11772214349674,
7.36
],
[
-501.0310720126822,
-286.5339989119062,
7.03
],
[
-499.3074920997309,
-283.76972490400925,
6.7
],
[
-498.93054530357944,
-283.2413778417831,
6.63
],
[
-494.34501447411924,
-276.414559193545,
6.05
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-495.26368453007734,
-272.55523318206934,
6.0
],
[
-503.1094123444767,
-268.14663806831595,
6.51
],
[
-510.58925218160783,
-263.8934194939837,
6.98
],
[
-519.5007896114952,
-258.6397848932893,
7.39
]
],
"speed": 11.0,
"interval": 1.8
},
{
"pts": [
[
-498.82766047156883,
-273.4035984064291,
6.2
],
[
-503.4072640108861,
-280.2216113581537,
6.94
],
[
-503.85991989590116,
-280.8653486954825,
7.03
],
[
-505.6522751490968,
-283.7403486882755,
7.41
],
[
-507.20498688872703,
-286.3978330566516,
7.75
],
[
-522.997174842978,
-313.4886489421985,
10.11
]
],
"speed": 11.0,
"interval": 1.8
},
{
"pts": [
[
-497.7097209821479,
-277.3642792991366,
6.22
],
[
-489.2653413897242,
-281.21700470668776,
6.15
],
[
-470.16395422466655,
-292.9741741951012,
5.43
],
[
-453.3973200149641,
-303.3696498434199,
6.15
],
[
-438.7171383481014,
-313.0237718470059,
8.99
],
[
-428.17568968279613,
-319.6952218182481,
11.09
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-490.9127030755138,
-271.2416907037699,
6.0
],
[
-487.07948135301893,
-265.2321814476218,
6.0
],
[
-460.79611403958603,
-221.7057389459239,
6.26
],
[
-449.78766148749827,
-203.62165684766288,
6.74
]
],
"speed": 12.0,
"interval": 1.5
}
],
"targets": [
15000,
35000,
60000
]
},
{
"name": "Grey x Glenelg",
"spawn": {
"x": -137.3579079842604,
"z": -96.07581886007603,
"y": 13.36,
"dx": 0.5279471843098005,
"dz": 0.8492772047920241
},
"streams": [
{
"pts": [
[
-66.8941396578206,
18.021454924938546,
8.55
],
[
-68.93721227192415,
14.729250272207434,
8.67
],
[
-74.03417645108553,
5.788135121643277,
9.23
],
[
-78.66584427851572,
-1.692678191469608,
9.75
],
[
-82.82069253186671,
-8.344352365976752,
10.15
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-33.05020815528413,
-14.758620186231095,
8.09
],
[
-35.06751528318885,
-14.599409411489315,
8.2
],
[
-37.27001626186296,
-13.996146050544787,
8.29
],
[
-43.35852481930847,
-10.760668273887504,
8.5
],
[
-53.694918113870564,
-4.204520462618362,
8.68
],
[
-56.331462588402815,
-2.4702458690280507,
8.73
],
[
-63.091151948462084,
2.2185465904455017,
8.85
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-78.24074203456223,
-11.205130833848836,
10.32
],
[
-74.07981104388904,
-4.543695408341438,
9.85
],
[
-69.38832494823436,
3.0356700785490762,
9.17
],
[
-64.27327518677029,
12.007542928328153,
8.41
],
[
-62.30660151137585,
15.172859875635417,
8.28
]
],
"speed": 11.0,
"interval": 1.8
},
{
"pts": [
[
-66.1688465571084,
-2.2185465904455017,
9.29
],
[
-59.37835881390333,
-6.9285441308125515,
9.26
],
[
-56.602733425687326,
-8.754752337189586,
9.26
],
[
-46.12004993919494,
-15.401140126214159,
9.08
],
[
-39.50773651812935,
-18.910676349026538,
8.74
],
[
-36.1005431869604,
-19.899678588618844,
8.57
],
[
-33.51553068408273,
-20.138534213814854,
8.43
]
],
"speed": 11.0,
"interval": 1.8
},
{
"pts": [
[
-62.42866919418658,
-1.5633764655737972,
9.03
],
[
-56.22534149367183,
7.176315693408943,
8.15
],
[
-31.608294574960304,
46.399012606383145,
8.71
]
],
"speed": 12.0,
"interval": 1.5
},
{
"pts": [
[
-105.44415325837058,
17.29338138921854,
9.0
],
[
-124.85549758561747,
29.02803771609806,
10.01
],
[
-145.9651989732041,
41.680234308480806,
12.4
]
],
"speed": 12.0,
"interval": 1.5
}
],
"targets": [
15000,
35000,
60000
]
}
]