The Sir Leo Hielscher Bridges and their industrial hinterland, from OSM
+ DEM like everything else -- but a 64.5 m concrete box girder split
across 13 OSM ways and twin carriageways broke every bridge assumption
the builder had, three different ways, before the right abstraction
appeared:
- Per-way sine humps (the Story Bridge recipe) turned each short
approach span into a 52 m wall.
- A whole-bridge axis projection lifted named segments 3 km from the
water and cliffed at every segment seam.
- The fix: deck height is a CONTINUOUS FIELD of distance-to-river --
smoothstep from terrain to +57 m over the water. The river is the
thing being bridged; let it set the profile. Seams are geometrically
impossible because the field doesn't know what a segment is.
The bridge arg grew to Name:hump:style. Style "box" adds concrete
piers under every bridge-tagged span (28 of them), collision guardrails
chasing both deck edges (a 64 m deck with open edges is a cliff with
lane markings -- the first playtest fell off it), and puts Spawn,
DragStart/End and the RacePath on the deck field. Story Bridge keeps
its 16 m truss unchanged.
The payoff mode: a 1,422 m drag strip -- the longest in the game --
running up and over the bridge, verified in-shot racing Nanna's Morry
between the steel rails with the deck climbing ahead. Race mode's
auto-traced loop weaves interchange ramps and is honestly chaotic;
README flags the hand-authored-loop fix if bridge racing matters.
Plus the trace stitcher's loose-join pass (carriageways within 60 m
merge), a FLUX river-industrial sky, and the loose-join is what future
divided-road levels will lean on.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The OSM pipeline pointed at actual mountains. Both levels ride the real
terrarium DEM (Coot-tha's range tops at 287 m, Gravatt's at 196 --
matching the survey numbers) with the real roads draped and carved over
it: Sir Samuel Griffith Drive winding up one side of town, Mount
Gravatt Outlook Drive zigzagging up the other. Race mode is 3 laps of
the mountain; the drag finder even discovered a 1080 m strip through
Mount Gravatt's suburbs (Logan Road, of course it is).
Pipeline upgrades earned along the way, all reusable:
- trace: RacePath mode now STITCHES every OSM way sharing the name into
one chain by shared endpoints (SSG Drive is 19 segments; tracing only
the longest produced a fraction of the route) and samples densely --
16 points cut hairpins cross-country and gridded race starts in a
paddock.
- 9th builder arg selects the raw-terrain texture. Bushland levels pass
"grass" (tiled at 3 m -- 18 m tiling reads as macro-photography lawn
blades under the car) which also enables forest fill: ~2600 extra
gums, 65% biased to within ~150 m of roads, where the driver's eyes
actually are.
- amenity=parking polygons are now PAVED (draped asphalt) as well as
stocked with parked shitboxes -- a summit lookout carpark is a
burnout pad, not a dirt patch. Both summits come ready.
- man_made mast/tower ways become tapered lattice towers with a cage
and whip antenna, built from beams into the steel bucket. Mount
Gravatt's telecom tower stands over its carpark.
- Levels can carry their own sky: levels/<id>/sky_<time>.jpg overrides
the global panorama for any time of day, including day (previously
always procedural). Both mountains ship FLUX skies with the Brisbane
skyline on the horizon; Gravatt also has a sunset one, because John's
reference photo demanded it.
Suite green at 11 levels. Next burnout spot: the Gateway Bridge, when
the details arrive.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
southbank, albert_parklands, story_bridge, kangaroo_point + queen_st_mall
rebuilt textured. Level builder now does: FLUX facade/road/grass/water/rock/
steel materials with box-projected UVs (roofs split to plain grey), parks,
multipolygon river water (solid, cars skim it), tree nodes as low-poly cones,
natural=cliff walls, and a procedural steel cantilever truss along a named
bridge way (Story Bridge / Bradfield Highway, 338m). osm_xml_to_json.py
assembles water relations; osm_level_args.py gains trace: mode for race paths
that follow one iconic road. 11 textures via Cloudflare Workers AI
flux-1-schnell (tools/flux_texture.sh, creds from .env never printed).
Data (c) OpenStreetMap contributors, ODbL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tools/build_level_osm.py extrudes OSM buildings (-col), lays road strips,
Spawn + RacePath empties; osm_level_args.py computes a building-clear spawn on
a named way and race-loop corners from street intersection nodes. game.gd
builds Path3D from GLB RacePath empties, sanitizes spawn bases, and places
bodies BEFORE add_child. Three real bugs fixed: mall canopies (building=roof)
extruded as solid blocks, underground busways rendered at surface, and the
km-wide ground trimesh breaking suspension raycasts (now -convcol). Cars get
continuous_cd for thin building shells. tests/probe.gd is the physics
raycast debugger that found it.
Data (c) OpenStreetMap contributors, ODbL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>