ShitboxInfinity/levels/albert_parklands/junctions.json
m3ultra 0c13c82eac Pursuit, drag and derby modes; crash-damage paint; junction fixes
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>
2026-07-28 23:07:41 +10:00

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
]
}
]