Building places to drive in Seat Time
Our Usui course had 17 recorded hairpin misses. We built it for Seat Time, our browser driving sim at AI Maker Lab, with our crew of AI coding agents. Recounting those misses changed the story: 13 were measurement artefacts, 2 came from prototype points snapped off-road, and 2 were real deviations of about 13 m. We needed to fix our measuring before deciding which bends needed fixing.
In early October 2026, we wanted more places to take the cars. Mountain roads, compact kart circuits and a community-made track each seemed like a way forward. Between 5 and 18 October, each also gave us a different reason to slow down: uncertain map data, an overfaithful trace, or geometry that was easier to display than to drive.
We read the map licence before the map
The mountain roads began with a rights check. Japan’s Geospatial Information Authority, or GSI, publishes map and elevation tiles, but their conditions depend on the layer. We selected permitted elevation and vector layers, with source credits and notices explaining our edits. We kept aerial photographs and OpenStreetMap comparisons inside our checks, rather than shipping them as mountain-road geometry.
The distinction mattered before we wrote a course generator. A tile we could inspect was not automatically a tile we had cleared for every use. GSI’s content terms require attribution and a separate processing notice. Its tile list describes the categories and individual conditions. We also chose a persistent in-game credit, following the stricter display approach in GSI’s credit guidance.
The mountain-course descriptions and figures draw on GSI tiles and optimized vector tiles, processed by AI Maker Lab. GSI did not make or endorse our courses. We turned the source data into game geometry.
Three mountain roads, loaded when needed
Haruna came first; Usui and Hakone joined it as point-to-point courses. Usui’s recorded route was about 12.06 km uphill, while Hakone’s was about 12.65 km downhill. The pipeline took cached tiles into a road centreline, a smoothed elevation profile and a coarse surrounding terrain grid. These are engineered approximations, not survey data. Source: GSI tiles and vector tiles, processed by AI Maker Lab.
The courses load on demand, so the initial page bundle carries none of their geometry. That kept adding a mountain road from also adding its whole asset to every visitor’s first load. The asset size mattered when someone selected the course. We still had to decide how much terrain to carry with the road.
Hakone made that trade-off unusually concrete. Its compressed asset measured 174,661 B against our chosen ceiling of 174,702 B: 41 bytes to spare. We quantized the far-terrain grid to 1 m increments. That was a storage choice, not a claim that the underlying terrain was accurate to a metre. Source: GSI-derived course data, processed by AI Maker Lab.
Usui’s recount left two bends unresolved
The Usui recount separated defects in the comparison from deviations in the road. Thirteen results came from how we sampled the apex—the tightest part of a bend. Two more came from prototype points snapped away from the road. The remaining two deviations, about 13 m each, survived that explanation. Source: our checks of the GSI-derived course, processed by AI Maker Lab.
Replaying the construction from the cached inputs reproduced the shipped asset byte for byte. The build was repeatable, but we still lacked a permitted public vector source good enough to settle those bends. We accepted them within a ±15 m bound we had chosen.
On 6 October, we accepted the open failures with disclosure on the course cards. Usui’s elevation note called it “an engineered approximation, not survey data.” Hakone had 43 photo checks still unverified because the photographs lacked documented alignment accuracy.
Our first kart tracks were too stretched out
The kart problem started with scale. We had three kart classes, but the smallest existing circuit was 2.2 km long and 14 m wide. The agents first made fictional layouts of 834 m, 1,208 m and 1,480 m. They were smaller, yet their long straights still did not read as kart circuits.
On 12 October, we tried real layouts instead. The agents fitted OpenStreetMap centrelines using straights and gradually tightening curves, then refined the fit. The traced layouts reached about 0.5–0.6 m mean error against the map sources. We then renamed and reshaped them that same day, reaching 5.6 m, 9.2 m and 10.9 m root-mean-square distance, or RMS, from those sources.
The reversal was our own risk judgment. We wanted short straights and dense hairpins, but did not want to ship faithful traces advertised as named venues. Reshaping gave us measurable separation while keeping that compact character. It did not establish a legally safe distance, and we do not present it as legal clearance.
The first set records average fitting error. RMS squares distances before averaging and taking the square root, giving larger deviations more weight.
The attribution stayed after the reshape: “Layout based on © OpenStreetMap contributors (ODbL).” The OpenStreetMap copyright page explains the Open Database License and attribution obligations. Moving the geometry did not turn the layouts into wholly original work or erase where we started.
We let a community track stay visual-only first
The community-track experiment began with permission, before any track binary download. We reviewed candidates made for Assetto Corsa, the desktop racing sim. One project’s grant clearly covered its original assets: OVER99K/assetto-hellvik, credited to Assetto Hellvik contributors under the MIT licence. Another candidate did not clear our review because texture provenance remained unresolved.
The first import, on 13 October, converted static track geometry into a neutral browser-friendly format. We pinned the source version, executed no mod code and converted no source-simulator physics. Permission covered that community project alone, excluding arbitrary tracks or official game assets. We kept the import visual-only while inspecting the converted geometry.
We measured the coordinate conversion rather than trusting unknown exporter settings. Across 24 published control points, the maximum distance to the converted centreline was 0.111 m. That supports the conversion’s agreement with the community source layout. It does not measure agreement with the real venue, and neither the venue nor Assetto Corsa’s owner is affiliated with or endorses our work.
A separate performance change removed temporary arrays from a geometry calculation used heavily by the importer. Weighted allocation fell from 575.4 to 87.4 kB per simulation step, while arithmetic and call order stayed intact.
By 18 October, the roads had more than shapes
The terrain repair arrived on 17 October. Haruna’s ground had been built outward from individual road stations, so nearby strips overlapped around tight bends and switchbacks. Replacing them with one continuous height field took its detected stacked sheets from 212,908 to 0 in our processed GSI-derived geometry. The same repair cleared the corresponding detector findings on Usui and Hakone.
On 18 October, the imported community track became drivable through our own surface-contact model with a stock kart. Surface grip came from ratios in the source track’s surface definitions; we did not import a car or its physics. The next obstacle was much smaller than a visible gap: platform maths functions changed wall directions in the last stored bit.
Switching those calculations to our pure-arithmetic maths routines made the generated contact data and report byte-identical on macOS arm64 and Linux arm64. The recorded result covers those two environments only.
Also that week: Graphic Street
On 10 October, Graphic Street became our default look, with Classic still selectable. Banded shading and ink outlines gave the circuits a different visual language. One apparent brush-stroke effect was actually a shadow bug: noisy sample rotations met a hard shading threshold and produced streaks. Fixing the rotation removed that cause. Follow-ups extended the look to the non-mountain circuits.
Later: the city needed the same scrutiny
On 19 October, the city’s kerb-wall check went from 3,076 missing wall faces in 37,782 probes to 0 in 37,781 probes. On 24 October, a further change made its prebuilt geometry check all inputs before reuse and rebuild when stale.
The places we still needed to drive
The remaining drive gap mattered: we had not hand-driven the kart layouts with a kart, and the reshaped versions were not browser-driven before merge. The generic automated driver could not drive karts either. Our records also left a production drive of all three mountain courses and a visual switchback check open. Haruna’s distant-detail transition still popped at 900 m.
Our plan was to investigate GSI DEM1A elevation tiles for Usui and Kanagawa’s airborne-laser point clouds for Hakone. Neither was a delivered answer to these open questions or a promise of survey fidelity. Better source data would still need its own coverage, rights and road-surface checks.
Drive Seat Time and choose a mountain course.
The next idea was to look at what happened when rain reached those roads—and why a parked car would not stay still.
Previous: our first engine sounded 8-bit. Next: rain and the creeping car.
Notes and sources
Measured — Our development records retain the hairpin recount, course lengths, compressed size, kart deviations, conversion check, allocation and terrain results quoted here. Hakone’s byte result used Bun 1.4.2 and gzip -9. Allocation evidence came from a shared M1 Max under load; it measures temporary memory allocation, not driving speed or phone performance. The kart mean and RMS figures are different statistics. These are historical records, not fresh runs for this article.
Chosen design values — The 174,702 B ceiling, 1 m far-terrain quantization and ±15 m Usui acceptance bound were our choices. They do not establish source accuracy. Our interpretation — The kart reshape reduced a risk we did not want to take; it was not legal clearance. The terrain and shadow explanations come from our development investigations.
Sourced facts — Mountain-course material uses GSI elevation tiles and optimized vector tiles, processed by AI Maker Lab. See the GSI terms, tile catalogue and credit examples. GSI neither made nor endorses the courses. Kart layouts: Layout based on © OpenStreetMap contributors (ODbL); see copyright and licence.
Not yet driven — The kart and mountain-course checks left open above remain gaps in this historical record. Planned sources — DEM1A and Kanagawa point clouds are research directions for those gaps, not completed improvements. Chronology — Our development records place terrain repair on 17 October, drivable import and maths repair on 18 October, and city follow-ups on 19 and 24 October 2026.
Disclosure — We build Seat Time at AI Maker Lab with AI coding agents. AI also assisted this article’s research synthesis, writing and localization. The source project’s public repository and MIT licence provide the community-track credit. The original English notice follows unchanged.
MIT notice — Assetto Hellvik contributors
MIT License
Copyright (c) 2026 Assetto Hellvik contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.