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>
446 lines
6.8 KiB
JSON
446 lines
6.8 KiB
JSON
[
|
|
{
|
|
"name": "Alice x George",
|
|
"spawn": {
|
|
"x": -165.3192678228276,
|
|
"z": 159.9955423589618,
|
|
"dx": 0.7668331983120437,
|
|
"dz": -0.6418464348787193
|
|
},
|
|
"streams": [
|
|
{
|
|
"pts": [
|
|
[
|
|
-71.62300756706763,
|
|
85.0918821008208
|
|
],
|
|
[
|
|
-72.10279819575109,
|
|
85.49061753866586
|
|
],
|
|
[
|
|
-82.55345192912239,
|
|
94.80588029839768
|
|
],
|
|
[
|
|
-104.44928325520195,
|
|
113.36472803055571
|
|
],
|
|
[
|
|
-114.55295338424757,
|
|
122.93815788447793
|
|
],
|
|
[
|
|
-118.63551709634598,
|
|
126.33214688818488
|
|
],
|
|
[
|
|
-124.17972594270637,
|
|
130.60060399325408
|
|
],
|
|
[
|
|
-132.4126578466066,
|
|
136.84137198262476
|
|
],
|
|
[
|
|
-135.42619497476394,
|
|
139.13115862719584
|
|
],
|
|
[
|
|
-137.0173915026139,
|
|
140.32992242527928
|
|
],
|
|
[
|
|
-142.22691046279974,
|
|
144.18129435873087
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-75.361941989609,
|
|
84.82292365250544
|
|
],
|
|
[
|
|
-80.93953886827424,
|
|
78.61163770120406
|
|
],
|
|
[
|
|
-82.56599989409156,
|
|
76.7348960854059
|
|
],
|
|
[
|
|
-115.40558143561937,
|
|
38.74155522137386
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-145.4370805808313,
|
|
139.83908204087984
|
|
],
|
|
[
|
|
-140.2367304705485,
|
|
135.99450357474848
|
|
],
|
|
[
|
|
-138.6871885076824,
|
|
134.82698377267795
|
|
],
|
|
[
|
|
-135.67603860636424,
|
|
132.53900681717874
|
|
],
|
|
[
|
|
-127.45466133363814,
|
|
126.30702760692736
|
|
],
|
|
[
|
|
-121.99640893818653,
|
|
122.1055163120108
|
|
],
|
|
[
|
|
-118.19749682812089,
|
|
118.9535245154313
|
|
],
|
|
[
|
|
-108.01476176313997,
|
|
109.30919316947609
|
|
],
|
|
[
|
|
-86.07852578965569,
|
|
90.71517690194068
|
|
],
|
|
[
|
|
-75.68968831102165,
|
|
81.45400766143295
|
|
],
|
|
[
|
|
-75.08305996358739,
|
|
80.94603629889595
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-111.32018174165945,
|
|
35.21033597859207
|
|
],
|
|
[
|
|
-78.48079808538708,
|
|
73.20344791473178
|
|
],
|
|
[
|
|
-76.9072614072839,
|
|
75.01987789888024
|
|
],
|
|
[
|
|
-71.34412554104603,
|
|
81.2149947472113
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-72.11668883510822,
|
|
80.61865688274891
|
|
],
|
|
[
|
|
-63.31551687082244,
|
|
85.23196646473183
|
|
],
|
|
[
|
|
-54.55178175870453,
|
|
95.53822905343011
|
|
],
|
|
[
|
|
-39.78320194928109,
|
|
112.96784568335697
|
|
],
|
|
[
|
|
-38.24953472930413,
|
|
114.64142478239386
|
|
],
|
|
[
|
|
-37.466790819459995,
|
|
115.77089209241056
|
|
],
|
|
[
|
|
-36.90754547102499,
|
|
116.86830840435711
|
|
],
|
|
[
|
|
-36.64154284861633,
|
|
117.96012844030032
|
|
],
|
|
[
|
|
-36.54962586770791,
|
|
118.92829018795193
|
|
],
|
|
[
|
|
-36.58380403095183,
|
|
120.63163096695364
|
|
],
|
|
[
|
|
-36.733516672801336,
|
|
121.77324800253669
|
|
],
|
|
[
|
|
-36.949600973076684,
|
|
122.55506784741175
|
|
],
|
|
[
|
|
-37.31118692587169,
|
|
123.40422578212599
|
|
],
|
|
[
|
|
-38.02064964168787,
|
|
124.38554265247478
|
|
],
|
|
[
|
|
-39.45793344555888,
|
|
125.80100694689808
|
|
],
|
|
[
|
|
-41.96015977939887,
|
|
127.8781767661959
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-45.40767874247836,
|
|
123.72190283402932
|
|
],
|
|
[
|
|
-43.03089623055088,
|
|
121.75206425317394
|
|
],
|
|
[
|
|
-41.9792929338678,
|
|
120.7127857471952
|
|
],
|
|
[
|
|
-41.99739811738572,
|
|
120.72105141795794
|
|
],
|
|
[
|
|
-42.06268798731611,
|
|
120.81830615252781
|
|
],
|
|
[
|
|
-42.041735423545425,
|
|
120.78187839726885
|
|
],
|
|
[
|
|
-41.974164266802894,
|
|
120.30911503284231
|
|
],
|
|
[
|
|
-41.94908321684239,
|
|
119.00484301205215
|
|
],
|
|
[
|
|
-41.975684667956976,
|
|
118.80092035936316
|
|
],
|
|
[
|
|
-41.94671891520851,
|
|
118.80911519521383
|
|
],
|
|
[
|
|
-42.0788310934576,
|
|
118.57964350736775
|
|
],
|
|
[
|
|
-42.38250615411705,
|
|
118.1168452176333
|
|
],
|
|
[
|
|
-43.89081206390128,
|
|
116.47320431640294
|
|
],
|
|
[
|
|
-58.67282832403665,
|
|
99.02778134654227
|
|
],
|
|
[
|
|
-66.81772305118318,
|
|
89.3422647349603
|
|
],
|
|
[
|
|
-74.5893786955468,
|
|
85.41926151696784
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
}
|
|
],
|
|
"targets": [
|
|
15000,
|
|
35000,
|
|
60000
|
|
]
|
|
},
|
|
{
|
|
"name": "Margaret x Edward",
|
|
"spawn": {
|
|
"x": 276.7158840463856,
|
|
"z": -371.11587218595514,
|
|
"dx": -0.7427057931255263,
|
|
"dz": 0.6696178797327494
|
|
},
|
|
"streams": [
|
|
{
|
|
"pts": [
|
|
[
|
|
185.8338152967176,
|
|
-292.8126451679154
|
|
],
|
|
[
|
|
193.65593395098287,
|
|
-299.88251164434115
|
|
],
|
|
[
|
|
211.37786867540518,
|
|
-315.2307257048046
|
|
],
|
|
[
|
|
216.02310568686988,
|
|
-319.25459820267537
|
|
],
|
|
[
|
|
237.6429961947087,
|
|
-338.58229333857753
|
|
],
|
|
[
|
|
239.66099718191472,
|
|
-341.2883463335457
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
179.81812157632743,
|
|
-304.16623584225226
|
|
],
|
|
[
|
|
181.35983927566346,
|
|
-302.4069925620872
|
|
],
|
|
[
|
|
184.2133034529848,
|
|
-299.1448137854387
|
|
],
|
|
[
|
|
189.71555797124375,
|
|
-292.5416508365839
|
|
],
|
|
[
|
|
194.9234531376747,
|
|
-286.3366793395667
|
|
],
|
|
[
|
|
234.05675616721896,
|
|
-241.1315253602194
|
|
],
|
|
[
|
|
244.50993125963066,
|
|
-229.32934036140196
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
243.95347049022743,
|
|
-338.01196526635846
|
|
],
|
|
[
|
|
241.32949950132615,
|
|
-334.63644826175323
|
|
],
|
|
[
|
|
219.61114951437548,
|
|
-315.21901379742513
|
|
],
|
|
[
|
|
214.91318335480702,
|
|
-311.1488694949895
|
|
],
|
|
[
|
|
197.21785955435436,
|
|
-295.8238559560563
|
|
],
|
|
[
|
|
189.45480420951895,
|
|
-288.8065948320647
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
240.4674984004257,
|
|
-225.74901403845038
|
|
],
|
|
[
|
|
229.982416914263,
|
|
-237.5875502401286
|
|
],
|
|
[
|
|
190.83429465784906,
|
|
-282.80981346079136
|
|
],
|
|
[
|
|
185.5730615349928,
|
|
-289.07758916339617
|
|
],
|
|
[
|
|
180.09260788812207,
|
|
-295.6548470145767
|
|
],
|
|
[
|
|
177.29669340310514,
|
|
-298.8501898379666
|
|
],
|
|
[
|
|
175.7569318305437,
|
|
-300.6071997580377
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
}
|
|
],
|
|
"targets": [
|
|
15000,
|
|
35000,
|
|
60000
|
|
]
|
|
}
|
|
] |