Three new modes, all our own code: - Pursuit (Simpsons Hit & Run's meter): smashing in cruise fills heat, at full the police hunt you. Open 250 m for 6 s to escape, get pinned 4 s to be busted. Heat decays, so picking a fight is a choice not a timer. - Drag (NFSU2's): the gearbox IS the event. The builder finds each level's longest genuinely straight run of wide road (442-628 m across the five OSM levels) and drops DragStart/DragEnd, so no level needs hand-authored coords. - Derby: five opponents in the carpark, last one running. Reuses the pursuit AI, each hunting a different car so it's a brawl not a mob. Crash damage now shows: total control-point travel drives paint dulling, roughness and a scratch layer, so scuffs and crumple can never disagree. Junction generator fixes, all found by measurement rather than inspection: - streams[:6] truncated after street A's ways, so junctions where A yielded 3+ usable ways shipped with ZERO cross traffic. Interleaved before capping; every event now has 2-4 crossing streams. - RADIUS 170 -> 95 spread the convoy over a 340 m window, so you threaded the intersection through a 20 m gap. Margaret x Edward was unwinnable: 27 convoy cars alive, zero collisions, $0. - Launch points now walk the street to exactly SPAWN_DIST and pick the busiest shared node, and _clear_spawn() unblocks a buried start. Albert x Adelaide went from $0 (drove 1 m into a building) to $91k. - build_all_junctions.sh records the street pairs, which existed nowhere before. Fixes from an adversarial review (23 confirmed findings), the worst being: - Derby could only ever be LOST: wrecked opponents un-wrecked 2.2 s later via Car._recover, so "last one running" was unreachable and the kill bounty could be farmed to the boost cap off one revived car. They now hold their wreck. - Drag reported WON to a beaten player: the AI's lookahead wrapped on a 2-point path, U-turning before the line so its distance-to-finish grew again. - The scratch layer used BLEND_MODE_MIX, whose mask defaults to white -- it replaced the paint entirely rather than scuffing it. Now MUL. - Drag on a level with no strip left the car at the origin, half-buried, unable to end. Cop spawns used an unflattened basis. Stale "WANTED" HUD text. Test harness: smoke covers all seven modes, and failures now exit instead of hanging -- a failed assert in a headless SceneTree halts the script but leaves the tree spinning, which cost 53 minutes of wall clock to notice. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
150 lines
2.2 KiB
JSON
150 lines
2.2 KiB
JSON
[
|
|
{
|
|
"name": "Cliffs Corner",
|
|
"spawn": {
|
|
"x": 19.82910866163153,
|
|
"z": -91.88863639399733,
|
|
"dx": 0.7116289476302671,
|
|
"dz": -0.7025555073406219
|
|
},
|
|
"streams": [
|
|
{
|
|
"pts": [
|
|
[
|
|
63.92619388342862,
|
|
-109.98937518013152
|
|
],
|
|
[
|
|
78.3750416498091,
|
|
-148.8340213803462
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
106.13660245700423,
|
|
-179.68219050814878
|
|
],
|
|
[
|
|
105.14898470103478,
|
|
-213.87167130817437
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
83.43625143590378,
|
|
-146.95142862004474
|
|
],
|
|
[
|
|
68.98740366952329,
|
|
-108.10678241983003
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
110.54673313420321,
|
|
-214.02759389225906
|
|
],
|
|
[
|
|
111.53435089017266,
|
|
-179.83811309223347
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
110.03793689684629,
|
|
-168.49583563849748
|
|
],
|
|
[
|
|
105.07701815835642,
|
|
-166.64105720795808
|
|
],
|
|
[
|
|
102.76621908994164,
|
|
-165.6886852292976
|
|
],
|
|
[
|
|
100.0562323833477,
|
|
-163.76233037299872
|
|
],
|
|
[
|
|
96.9873892973125,
|
|
-160.78656603278262
|
|
],
|
|
[
|
|
94.50499850150788,
|
|
-158.03413164414619
|
|
],
|
|
[
|
|
91.4342291831665,
|
|
-153.71805517412884
|
|
],
|
|
[
|
|
82.70848350683406,
|
|
-145.88280488205245
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
79.10280957887883,
|
|
-149.90264511833848
|
|
],
|
|
[
|
|
87.56161285248508,
|
|
-157.4814104264721
|
|
],
|
|
[
|
|
90.25853122720883,
|
|
-161.369924756482
|
|
],
|
|
[
|
|
93.10927630970947,
|
|
-164.5442567671812
|
|
],
|
|
[
|
|
96.57846276532892,
|
|
-167.89332522702423
|
|
],
|
|
[
|
|
100.07071556655998,
|
|
-170.36781557108517
|
|
],
|
|
[
|
|
103.11280473039093,
|
|
-171.67115319207213
|
|
],
|
|
[
|
|
108.14657768085227,
|
|
-173.5537759619962
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
}
|
|
],
|
|
"targets": [
|
|
15000,
|
|
35000,
|
|
60000
|
|
]
|
|
}
|
|
] |