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>
186 lines
2.8 KiB
JSON
186 lines
2.8 KiB
JSON
[
|
|
{
|
|
"name": "Bridge Approach",
|
|
"spawn": {
|
|
"x": 32.83372074498513,
|
|
"z": -118.28842427027045,
|
|
"dx": -0.11409585864571734,
|
|
"dz": -0.9934697454074263
|
|
},
|
|
"streams": [
|
|
{
|
|
"pts": [
|
|
[
|
|
21.82446567810751,
|
|
-237.81387509878263
|
|
],
|
|
[
|
|
23.145720027383163,
|
|
-226.45520770652828
|
|
],
|
|
[
|
|
24.788209612143817,
|
|
-213.84815371354867
|
|
],
|
|
[
|
|
26.145569174952232,
|
|
-200.29741976993301
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
2.199941588527042,
|
|
-240.32717119002737
|
|
],
|
|
[
|
|
-2.5248172223755736,
|
|
-243.91950536774928
|
|
],
|
|
[
|
|
-6.325349530807717,
|
|
-247.60965512377
|
|
],
|
|
[
|
|
-15.183983237537262,
|
|
-255.2613583327868
|
|
],
|
|
[
|
|
-19.822722086570074,
|
|
-258.6729952966697
|
|
],
|
|
[
|
|
-24.279515332983824,
|
|
-261.70335578638884
|
|
],
|
|
[
|
|
-29.011437974400625,
|
|
-263.89076106496833
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
20.772447151780117,
|
|
-199.75931223039953
|
|
],
|
|
[
|
|
19.423377981138138,
|
|
-213.23286388675078
|
|
],
|
|
[
|
|
17.78654515972297,
|
|
-225.7924522932427
|
|
],
|
|
[
|
|
16.46063564037367,
|
|
-237.18991410136036
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
-26.737042902514784,
|
|
-268.7884265350654
|
|
],
|
|
[
|
|
-21.61124337794858,
|
|
-266.3980682135746
|
|
],
|
|
[
|
|
-16.704188313209045,
|
|
-263.0814811029762
|
|
],
|
|
[
|
|
-11.761774350471743,
|
|
-259.43849686691397
|
|
],
|
|
[
|
|
-2.7224195143774796,
|
|
-251.63195487598963
|
|
],
|
|
[
|
|
0.9839307874462617,
|
|
-248.02422063236523
|
|
],
|
|
[
|
|
5.4649806575202335,
|
|
-244.6282780101317
|
|
]
|
|
],
|
|
"speed": 11.0,
|
|
"interval": 1.8
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
11.27070084290225,
|
|
-197.84784324166512
|
|
],
|
|
[
|
|
10.896175804718348,
|
|
-204.76641770228525
|
|
],
|
|
[
|
|
10.476477879675205,
|
|
-211.20975788808624
|
|
],
|
|
[
|
|
9.92304078347784,
|
|
-216.20700696593718
|
|
],
|
|
[
|
|
8.932958301853615,
|
|
-221.62531766816238
|
|
],
|
|
[
|
|
7.508738699199866,
|
|
-226.8653717079938
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
},
|
|
{
|
|
"pts": [
|
|
[
|
|
28.875188928696993,
|
|
-229.49242546244793
|
|
],
|
|
[
|
|
28.72548025209394,
|
|
-214.05366159277472
|
|
],
|
|
[
|
|
28.150874632761848,
|
|
-209.45956029627345
|
|
],
|
|
[
|
|
27.279147353059784,
|
|
-204.7812989955361
|
|
],
|
|
[
|
|
26.094879529030933,
|
|
-199.44340263065618
|
|
]
|
|
],
|
|
"speed": 12.0,
|
|
"interval": 1.5
|
|
}
|
|
],
|
|
"targets": [
|
|
15000,
|
|
35000,
|
|
60000
|
|
]
|
|
}
|
|
] |