Methods and checks
Answer and scope
We tested five presets in RocketSim. We used isolated car-ball physics for no-flip hits and airborne dodges, then genuine Soccar collision meshes for ground-start flips and carry/flicks. We have not reproduced these shot speeds in Rocket League.
In the no-flip search, we found Breakout's fastest accepted shot at 118.067 kph, 0.491 kph above Octane. We started the car at 82.8 kph and the ball approaching at 36 kph. Breakout's stationary-ball lead was 0.054 kph; Dominus led the awake near-stationary control. A larger search may change these rankings.
We freeze the ranking after the search and the stated transfer stage. We report later execution-error tests apart from that ranking, including any higher valid speeds. Some perturbations, such as changing A's fixed initial orientation, fall outside the nominal setup.
Seven named bodies plus Hybrid preset: five configurations
Octane, Fennec, Harbinger and Scarab are represented by exactly the same CarConfig.OCTANE object definition. Their ties are by construction, not independent simulated measurements. Epic's indexed help article and current search results corroborate the requested mapping; direct article retrieval hit a Cloudflare challenge. Saved source snippets and retrieval limitations are in ../evidence/. Visual-model fit is unmeasured.
| Car | Preset | L × W × H (uu) | Pivot offset X/Z | Front / rear reach | No flip, approaching ball | Δ Octane | No flip, stationary ball | Airborne flip / Δ | Ground flip / Δ | Flick / Δ |
|---|---|---|---|---|---|---|---|---|---|---|
| Octane | Octane | 120.51 × 86.70 × 38.66 | 13.88/20.75 | 74.13/46.38 | 117.576 kph | +0.000 kph (+0.000%) | 116.386 kph (+0.000 kph; +0.000%) | 128.301 kph / +0.000 kph | 132.771 kph / +0.000 kph | 100.071 kph / +0.000 kph |
| Fennec | Octane | 120.51 × 86.70 × 38.66 | 13.88/20.75 | 74.13/46.38 | 117.576 kph | +0.000 kph (+0.000%) | 116.386 kph (+0.000 kph; +0.000%) | 128.301 kph / +0.000 kph | 132.771 kph / +0.000 kph | 100.071 kph / +0.000 kph |
| Harbinger | Octane | 120.51 × 86.70 × 38.66 | 13.88/20.75 | 74.13/46.38 | 117.576 kph | +0.000 kph (+0.000%) | 116.386 kph (+0.000 kph; +0.000%) | 128.301 kph / +0.000 kph | 132.771 kph / +0.000 kph | 100.071 kph / +0.000 kph |
| Scarab | Octane | 120.51 × 86.70 × 38.66 | 13.88/20.75 | 74.13/46.38 | 117.576 kph | +0.000 kph (+0.000%) | 116.386 kph (+0.000 kph; +0.000%) | 128.301 kph / +0.000 kph | 132.771 kph / +0.000 kph | 100.071 kph / +0.000 kph |
| Dominus | Dominus | 130.43 × 85.78 × 33.80 | 9.00/15.75 | 74.21/56.21 | 117.975 kph | +0.399 kph (+0.340%) | 116.431 kph (+0.045 kph; +0.038%) | 131.492 kph / +3.191 kph | 131.351 kph / -1.420 kph | 97.553 kph / -2.519 kph |
| 2016 Batmobile | Plank | 131.32 × 87.17 × 31.89 | 9.01/12.09 | 74.67/56.65 | 118.015 kph | +0.439 kph (+0.373%) | 116.436 kph (+0.050 kph; +0.043%) | 132.330 kph / +4.029 kph | 132.876 kph / +0.105 kph | 97.277 kph / -2.795 kph |
| Breakout | Breakout | 133.99 × 83.02 × 32.80 | 12.50/11.75 | 79.50/54.50 | 118.067 kph | +0.491 kph (+0.418%) | 116.440 kph (+0.054 kph; +0.046%) | 132.448 kph / +4.147 kph | 133.294 kph / +0.523 kph | 94.974 kph / -5.098 kph |
| Hybrid (preset) | Hybrid | 129.52 × 84.69 × 36.66 | 13.88/20.75 | 78.64/50.88 | 117.506 kph | -0.069 kph (-0.059%) | 116.354 kph (-0.032 kph; -0.027%) | 128.425 kph / +0.124 kph | 133.457 kph / +0.686 kph | 95.533 kph / -4.539 kph |
We use Plank for the 2016 Batmobile and list Hybrid as a physics preset. The no-flip approaching and stationary columns use matched initial conditions across presets. We calculate each delta against Octane in the same test.
Executed design
- Target world +X. Optimize total outgoing speed with |horizontal yaw| ≤5° and elevation in [0°,30°]. CLI cone bounds configurable;
protocol.jsonrecords actual values. Report +X velocity separately. 120 Hz, default gravity (0,0,−650) uu/s², default 2300 car / 6000 ball speed caps, masses 180/30, ball radius 91.25 uu, ball drag 0.03. No modified impulses, restitution, friction, car inertia, or angular caps. Ball orientation integration enabled (no_ball_rot=False); physical spin retained. No other cars or arena surfaces exist in A. - A starts with zero car orientation, zero angular velocity, zero ball spin, 100 boost, all controls neutral. Ball starts at (0,0,1100). Car speeds: 1000,1800,2300. Ball velocities: (0,0,0), (−1000,0,0), (+1000,0,0), and (0,0,−0.001) uu/s. These are matched initial velocities; actual incoming velocities include drag, gravity and speed clamping and are recorded, not assumed equal.
- First candidate is centered front-face (lateral=vertical=approach angle=0; nominal lead=6 ticks). Sweep contact lateral/vertical coordinates relative to hitbox center, normalized by half-width/half-height, over [−1.8,1.8]; sweep velocity approach heading over [−20°,20°] while initial orientation remains identity. Lead-time search spans 4–8 ticks. Align sphere/rounded-box tangency using offsets and margins, then back up along relative velocity; compensate nominal differential falling displacement. Actual Bullet contact is measured, not snapped onto a face.
baselines.csv,conditions.csvand raw trials retain edge/corner trials and rejected candidates. - Stationary-ball anomaly: RocketSim puts an exactly zero-velocity, zero-spin ball to sleep every tick. Its airborne position stays fixed until touched, despite nonzero gravity. We preserve and expose this stock behavior; do not call it a realistic falling ball. The −0.001 uu/s vertical control starts almost stationary, remains awake and falls normally. No fake gravity impulse or per-tick repositioning was used. Incoming-ball velocities measure the difference.
- Reject initial geometric interpenetration with Bullet's rounded-box convention. Save pre-solver contact callback states; classify surface from geometry. Python exposes the actual sphere-side callback point, not the car-side Bullet manifold point. Reconstruct the car contact point and normal from the rounded-box surface at that state; reconstruct the independent callback normal from the rotated local sphere point to quantify agreement. Contact velocity uses that geometry-reconstructed car point, not an unexposed exact manifold coordinate. We end a contact episode after a callback-free physics tick with signed separation >1 uu. Callback count is not episode count; positive-gap callback impulses are retained and flagged. A/B reject multiple episodes and unfinished episodes. Observe A for all 96 ticks (0.8 seconds), not just until a convenient speed peak. Measure ball velocity at the end of the final contact-callback tick, before any unrelated bounce.
- 72,000 no-flip search evaluations: 5 presets ×12 initial-velocity conditions ×1200 candidates. One seed, 20260909, identical bounds/budget for every preset. Each condition: 316 coarse evaluations (including baseline), 24 additional random population members, then 860 differential-evolution candidates; population 48 starts with 24 coarse elites plus 24 seeded uniform candidates; DE/rand/1/bin F=0.7, CR=0.8, immediate updates. No independent multi-seed uncertainty estimate. Every candidate saved, RNG/population/checkpoint every 128 candidates. Search runtime 275.10s, excluding pilot/replay/visuals. Pilot: 120 trials, see
pilot.json. Best-so-far convergence retained in each checkpoint. - Every one of the 60 no-flip condition winners replayed from the exact serialized inputs to SetState, avoiding lossy UU↔Bullet readback. Every tick's complete neutral input schedule saved; nominal physical trajectories and contacts audited by
audit_replays.py. Cross-preset transfer reuses controls, approach parameters and normalized geometric alignment, not tuned target-specific offsets:cross_preset.json(25 transfers per highlighted condition; airborne flips kept in their own category).
Centered baseline versus contact placement
Stock-maximum car speed, exactly stationary ball:
| Preset | Centered front face (kph) | Optimized placement (kph) | Placement gain (kph) |
|---|---|---|---|
| Octane | 113.766 | 116.386 | +2.620 |
| Dominus | 115.011 | 116.431 | +1.420 |
| Plank | 115.594 | 116.436 | +0.843 |
| Breakout | 115.685 | 116.440 | +0.755 |
| Hybrid | 114.054 | 116.354 | +2.300 |
Centered faces are not equally high relative to the COM. Moving contact closer to COM height substantially narrows the initial difference. We measure contact offset and rotational recoil alongside forward reach.
Surface-specific highest valid search candidates at initial car speed2300 (not separately budgeted optimizations for each surface):
| Preset | Ball | front-face peak (kph) | front-edge peak (kph) | front-corner peak (kph) |
|---|---|---|---|---|
| Octane | stationary | 116.386 | 116.383 | No valid candidate found |
| Octane | approaching | 117.576 | 111.524 | No valid candidate found |
| Dominus | stationary | 116.431 | 112.997 | No valid candidate found |
| Dominus | approaching | 117.975 | 113.931 | No valid candidate found |
| Plank | stationary | 116.436 | 113.920 | No valid candidate found |
| Plank | approaching | 118.015 | 115.118 | No valid candidate found |
| Breakout | stationary | 116.440 | 114.084 | No valid candidate found |
| Breakout | approaching | 118.067 | 115.318 | No valid candidate found |
| Hybrid | stationary | 116.354 | 116.269 | No valid candidate found |
| Hybrid | approaching | 117.506 | 112.318 | No valid candidate found |
All-condition surface counts and peaks are in surface_peaks.csv; absent valid candidates are not zero-speed results.
Contact measurements: fastest nominal no-flip conditions
All vectors below share world axes except explicitly local contact positions. Displayed velocity components are kph; angular velocities rad/s; contact positions uu. Cross products are computed consistently in uu/s before display conversion. Full raw uu/s vectors, contact locations, normal directions, first/last callback data and extra velocity impulses: contacts.csv and each winner.json.
| Preset | Car incoming v (kph, world) | Ball incoming v (kph, world) | Contact local r (uu) | v_contact · n (kph) | ω first / last (rad/s) | Extra Δv (kph, world) | Outgoing +X / total (kph) | Yaw / elevation ° | Surface / episodes / callbacks |
|---|---|---|---|---|---|---|---|---|---|
| Octane | (82.76, -2.55, -0.78) | (-35.95, 0.00, -0.78) | (74.13, 0.97, 7.36) | 82.757 | 0.000 / 2.610 | (52.40, 0.47, 1.26) | 117.576 / 117.576 | 0.009 / 0.042 | front-face / 1 / 2 |
| Dominus | (82.79, 0.00, -1.36) | (-35.93, 0.00, -1.36) | (74.21, -0.00, 5.33) | 82.789 | 0.000 / 1.436 | (52.41, -0.00, 0.95) | 117.975 / 117.975 | -0.000 / 0.114 | front-face / 1 / 2 |
| Plank | (82.79, 0.00, -1.17) | (-35.94, 0.00, -1.17) | (74.67, -0.00, 4.92) | 82.792 | 0.000 / 1.321 | (52.41, -0.00, 0.84) | 118.014 / 118.015 | -0.000 / 0.117 | front-face / 1 / 2 |
| Breakout | (82.79, 0.00, -1.17) | (-35.94, 0.00, -1.17) | (79.50, -0.00, 4.37) | 82.792 | 0.000 / 1.111 | (52.42, -0.00, 0.72) | 118.067 / 118.067 | 0.001 / 0.013 | front-face / 1 / 2 |
| Hybrid | (82.77, 1.93, -0.97) | (-35.95, 0.00, -0.97) | (78.64, 2.71, 8.18) | 82.772 | 0.000 / 2.595 | (52.39, 1.30, 1.37) | 117.486 / 117.506 | 1.066 / 0.002 | front-face / 1 / 2 |
Initial angular velocity at first contact is exactly zero for every A winner. Rotation measured at the second callback was generated by collision response, not supplied as a flip. Every highlighted shot has two callbacks in one continuous episode. Discrete-step penetration at impact is possible despite a nonpenetrating initial state; gap measurements are saved. The additional impulse is applied on the first callback tick, not again on the adjacent second tick.
Pivot geometry: calculations, not fitted visual models
Local X=forward, Y=right, Z=up. CarState.pos is Bullet rigid-body origin/COM, the rotation reference; hitbox center is offset from it. front_reach=L/2+offset_x, rearward reach magnitude L/2−offset_x. Bullet dimensions already include face margins: do not add a second margin to length. The box constructor subtracts margin from inner half-extents; sphere/box contact rounds edges with that margin. Margin is min(2 uu, 10% of smallest half-extent). Edge/corner distances below refer to nominal sharp-box top/bottom edge midpoints and front-side corners, not the inward-rounded physical corner. Bottom front edges are closest to these winning contacts. Actual contact offsets are measured independently.
| Preset | Front reach | Rear reach | Front edge distance, top / bottom | Front corner distance, top / bottom | Rounding margin | Inertia Ixx/Iyy/Izz (BT) |
|---|---|---|---|---|---|---|
| Octane | 74.12920 | 46.37780 | 84.27283 / 74.14291 | 94.76870 / 85.88578 | 1.93295 | (54.07, 96.10, 132.23) |
| Dominus | 74.21350 | 56.21350 | 81.07815 / 74.22241 | 91.72357 / 85.72347 | 1.69000 | (51.00, 108.92, 146.22) |
| Plank | 74.66857 | 56.65143 | 79.76037 / 74.76792 | 90.89217 / 86.54427 | 1.59472 | (51.70, 109.57, 149.06) |
| Breakout | 79.49600 | 54.49600 | 84.33289 / 79.63188 | 93.99552 / 89.80177 | 1.64000 | (47.81, 114.18, 149.08) |
| Hybrid | 78.63520 | 50.88380 | 87.81285 / 78.67260 | 97.48901 / 89.34421 | 1.83295 | (51.10, 108.71, 143.68) |
Breakout's forward reach is 7.240% longer than Octane's, not a 7.240% ball-speed gain. Measured stationary search-stage difference is 0.046%; approaching-ball difference 0.418%. Winning contact positions are near the COM height, not the furthest front-top corner.
At each callback, v_contact = v_pivot + omega × (contact_point − pivot_position) in world coordinates; the benchmark records its dot product with the car-to-ball contact normal. For an unrotated front-face normal +X and pure pitch omega=(0,ωy,0), the rotational contribution is (ωy*r_z, 0, −ωy*r_x): more forward reach directly changes vertical contact motion, not automatically the forward component. A has zero pre-impact rotation, so a rotational-lever explanation for its first impact is unsupported.
Mechanistic interpretation, not a causal ablation: changing presets also changes inertia and contact height relative to COM, affecting recoil/rotation and effective collision mass. RocketSim then adds its own velocity impulse based on relative linear speed, COM-to-ball direction, Z scaling 0.35, forward-direction adjustment 0.65, and a speed-dependent factor curve (0:0.65, 500:0.65, 2300:0.55, 4600:0.30), capped at relative speed 4600 before scaling. It suppresses an extra impulse on consecutive ticks. The measured ~1456 uu/s extra impulse is not all of the final ~3280 uu/s velocity; incoming ball momentum, the Bullet solver, friction, inertia and gravity also contribute. No lever-only collision law replaces this logic.
Execution sensitivity (not simulator-accuracy uncertainty)
Every condition winner receives 14 one-at-a-time errors: ±2 uu car position on each world axis; ±0.5° initial yaw, pitch and roll; and ±1 tick timing. A has no timed controls, so timing means shifting the initial car by ±v_initial/120 while fixing the initial ball. For grounded B/C, we shift the control schedule by a tick. Nominal plus 14 samples determine peak/median/range; valid fraction excludes nominal and uses all 14 errors. This deterministic stencil is not a random human-error model or confidence interval. No-contact/interpenetration cases count invalid, with speed zero. Below: all-condition nominal winners. Stationary diagnostics are separate in stationary_sensitivity/.
| Preset | Nominal search peak (kph) | Diagnostic peak, all (kph) | Diagnostic peak, valid (kph) | Median (kph) | Range (kph) | Valid errors |
|---|---|---|---|---|---|---|
| Octane | 117.576 | 117.858 | 117.786 | 117.572 | 117.208–117.858 | 78.6% (of 14) |
| Dominus | 117.975 | 118.125 | 118.067 | 117.973 | 117.762–118.125 | 78.6% (of 14) |
| Plank | 118.015 | 118.150 | 118.101 | 118.011 | 117.817–118.150 | 78.6% (of 14) |
| Breakout | 118.067 | 118.178 | 118.139 | 118.064 | 117.896–118.178 | 57.1% (of 14) |
| Hybrid | 117.506 | 117.790 | 117.690 | 117.506 | 117.148–117.790 | 78.6% (of 14) |
Many invalid perturbations still have high speeds but slightly negative elevation. Cone compliance, especially at the zero-elevation boundary, matters more than tiny headline speed differences. Diagnostic peak can exceed nominal peak; the table explicitly separates valid and invalid peaks. Initial-angle perturbations are outside A's zero-orientation ranking constraint. Repeating one sequence on another preset also changes direction; no guarantee a high-speed transfer remains a forward shot.
Geometry-derived normal versus callback sphere normal differs by at most 0.00751 in vector norm across the no-flip search (GJK/numerical corner behavior); highlighted winners have much smaller errors. Some callbacks occur at positive separation (maximum 1.835 uu across no-flip trials), and the additional impulse can be applied there. This stock contact-proximity behavior is retained, not interpreted as a new hit or proof of real-game accuracy. Each of the five highlighted no-flip winners has two adjacent callbacks and one additional impulse.
All speed infographics use kph, including an absolute Δkph versus Octane chart. Kph and km/h denote the same unit; raw uu/s remain in the measurement files for reproducibility.
No highlighted winner saturates the 6000 uu/s (216 km/h) ball cap. No Rocket League replay validation was performed. RocketSim itself describes its accuracy as approximate; numerical/contact-callback behavior and the sleeping-ball shortcut limit real-game inference. Execution robustness within this simulator is not uncertainty about simulator fidelity.
Grounded results
We ran 6,000 candidates per preset in each grounded test, then transferred the five winning schedules across presets. We kept the original search winners and saved transfer improvements apart from them.
| Category | Preset | Peak (kph) | Delta Octane (kph) | Independent search (kph) | Schedule source | Evaluations | Accepted search candidates | Episodes | Callbacks | Grounded carry ticks | Yaw (degrees) | Elevation (degrees) | Dodge tick | Launch contact tick | Launch surface |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ground-start flip | Octane | 132.771 | 0.000 | 127.499 | Hybrid | 6000 | 759 | 1 | 2 | 0 | 1.364 | 6.049 | 77 | 77 | front-edge |
| Ground-start flip | Dominus | 131.351 | -1.420 | 131.351 | Dominus | 6000 | 860 | 1 | 2 | 0 | -3.489 | 3.662 | 85 | 85 | front-edge |
| Ground-start flip | Plank | 132.876 | 0.105 | 131.834 | Dominus | 6000 | 806 | 1 | 2 | 0 | -3.540 | 3.962 | 85 | 85 | front-edge |
| Ground-start flip | Breakout | 133.294 | 0.523 | 129.272 | Dominus | 6000 | 588 | 1 | 2 | 0 | -3.347 | 4.412 | 85 | 85 | front-edge |
| Ground-start flip | Hybrid | 133.457 | 0.686 | 133.457 | Hybrid | 6000 | 1013 | 1 | 2 | 0 | 1.295 | 6.362 | 77 | 77 | front-edge |
| Carry and flick | Octane | 100.071 | 0.000 | 100.071 | Octane | 6000 | 3262 | 7 | 16 | 9 | -2.299 | 3.996 | 105 | 123 | corner |
| Carry and flick | Dominus | 97.553 | -2.519 | 96.477 | Octane | 6000 | 2390 | 7 | 16 | 8 | -3.080 | 6.417 | 105 | 121 | edge |
| Carry and flick | Plank | 97.277 | -2.795 | 97.277 | Plank | 6000 | 2239 | 5 | 12 | 7 | -1.085 | 4.812 | 104 | 119 | edge |
| Carry and flick | Breakout | 94.974 | -5.098 | 94.974 | Breakout | 6000 | 1870 | 5 | 12 | 7 | 1.448 | 4.573 | 96 | 112 | edge |
| Carry and flick | Hybrid | 95.533 | -4.539 | 95.533 | Hybrid | 6000 | 2187 | 7 | 15 | 10 | 4.546 | 1.648 | 103 | 126 | edge |
Ground-start flip setup
We start each car on its measured wheel-rest pose at 64.8 kph, with 100 boost and zero angular velocity. The ball starts 3 m above the field with zero spin and a downward velocity of 0.001 uu/s to keep it awake. We search initial distance, lateral position and yaw, first-jump timing, hold/release, dodge direction, air controls, boost duration and steering. We require a directional dodge before the first contact and one completed contact episode.
Carry and flick setup
We start car and ball at 43.2 kph. We place the ball 2 uu above the roof tangent at the hitbox center. We search carry duration and throttle, then jump, dodge, air controls and boost; boost begins with the first jump. We require six grounded roof-contact ticks before that jump, at least two separated episodes, and a flipped final contact. The control family has 11 parameters; it does not cover every possible 240-tick input sequence.
We stop both grounded tests before the ball reaches an unrelated world bounce, even if the car has not touched it. We reject initial overlaps, unfinished episodes and contacts close enough to the floor or a car-body world collision to risk a pinch. We use the same forward cone as the no-flip tests.
Launch-contact measurements
For flicks, we report the first flipped callback in the final episode. Earlier carry contacts can change the incoming ball speed and car rotation. The full CSV keeps those earlier contacts.
| Category | Preset | Launch surface | Incoming car (kph) | Incoming ball (kph) | Angular speed (rad/s) | Contact distance (uu) | Angular normal component (kph) | Contact normal speed (kph) | Dodge tick | Launch tick |
|---|---|---|---|---|---|---|---|---|---|---|
| Ground-start flip | Octane | front-edge | 99.409 | 14.867 | 0.999 | 83.595 | 0.383 | 97.477 | 77 | 77 |
| Ground-start flip | Dominus | front-edge | 99.598 | 16.395 | 0.422 | 81.011 | -0.280 | 97.744 | 85 | 85 |
| Ground-start flip | Plank | front-edge | 99.598 | 16.395 | 0.422 | 79.660 | -0.201 | 97.654 | 85 | 85 |
| Ground-start flip | Breakout | front-edge | 99.591 | 16.395 | 0.422 | 84.254 | -0.156 | 97.522 | 85 | 85 |
| Ground-start flip | Hybrid | front-edge | 99.400 | 14.867 | 0.999 | 87.215 | 0.291 | 97.231 | 77 | 77 |
| Carry and flick | Octane | corner | 71.580 | 75.691 | 5.500 | 73.118 | 9.547 | 78.219 | 105 | 123 |
| Carry and flick | Dominus | edge | 71.889 | 73.133 | 5.500 | 67.290 | 8.850 | 75.575 | 105 | 121 |
| Carry and flick | Plank | edge | 69.963 | 50.344 | 5.500 | 62.710 | 10.972 | 78.896 | 104 | 119 |
| Carry and flick | Breakout | edge | 67.968 | 51.040 | 5.500 | 60.598 | 9.445 | 73.898 | 96 | 112 |
| Carry and flick | Hybrid | edge | 71.043 | 53.684 | 5.500 | 63.288 | 8.341 | 76.595 | 103 | 126 |
Grounded execution sensitivity
We keep these perturbations outside the ranking stage. Their valid peaks can exceed the selected nominal result.
| Category | Preset | Nominal (kph) | Highest valid diagnostic (kph) | Median (kph) | Minimum (kph) | Maximum (kph) | Valid errors (%) |
|---|---|---|---|---|---|---|---|
| Ground-start flip | Octane | 132.771 | 132.807 | 132.767 | 115.654 | 132.807 | 100.000 |
| Ground-start flip | Dominus | 131.351 | 131.665 | 131.344 | 114.104 | 132.465 | 85.714 |
| Ground-start flip | Plank | 132.876 | 133.140 | 132.869 | 115.439 | 133.594 | 85.714 |
| Ground-start flip | Breakout | 133.294 | 133.556 | 133.288 | 115.809 | 133.998 | 85.714 |
| Ground-start flip | Hybrid | 133.457 | 133.481 | 133.452 | 116.205 | 133.481 | 100.000 |
| Carry and flick | Octane | 100.071 | 100.078 | 86.886 | 60.954 | 100.078 | 64.286 |
| Carry and flick | Dominus | 97.553 | 100.769 | 96.191 | 60.477 | 100.769 | 71.429 |
| Carry and flick | Plank | 97.277 | 97.292 | 95.125 | 61.803 | 97.292 | 78.571 |
| Carry and flick | Breakout | 94.974 | 95.415 | 82.460 | 62.637 | 95.415 | 57.143 |
| Carry and flick | Hybrid | 95.533 | 96.326 | 92.939 | 79.953 | 96.654 | 64.286 |
Contacts later in the dodge
We also selected the fastest accepted original-search candidates whose first contact came at least two ticks after the dodge, with incoming car speed at or below 82.8 kph. We did not run a separate optimization for this subset.
| Preset | Later contact (kph) | Delta Octane (kph) |
|---|---|---|
| Octane | 116.924 | 0.000 |
| Dominus | 119.014 | 2.091 |
| Plank | 118.925 | 2.002 |
| Breakout | 117.852 | 0.928 |
| Hybrid | 119.536 | 2.612 |
Arena extraction and setup checks
We extracted 16 Soccar collision meshes from DFH Stadium Day through Proton, using Rocket League's official anti-cheat-disabled launch mode. We changed the dumper's process lookup to Wine's implemented Unicode API and ran it inside the game's existing runtime. An initial capture returned 10 meshes; a later capture passed the unchanged 16-mesh Soccar classifier. We matched all 16 RocketSim reference hashes and recorded SHA256 hashes for the file bytes. We keep the game assets private.
We checked wheel settling for all five presets, a floor bounce and a corner-mesh bounce. We cache each measured rest pose as state data and load it into a fresh arena for each trial. Ten before/after checks matched trajectories and contacts when we added this cache. The cache does not retain the settling arena's solver history.
We also added a carry regression check: a sequence with only four grounded roof-contact ticks before jumping now fails, even if it touches the ball more often during the jump. The grounded pilot and test logs record these checks.
Artifacts and sources
cars.csv/json/md: seven bodies plus Hybrid preset;conditions.csv: all 60 no-flip matched groups;baselines.csv: centered front-face baselines.measurements.csv.gz: all candidates; per-grouptrials.jsonl.gz: full records;checkpoint.json: seeds/RNG/population/runtime/convergence;winner.json: complete initial states, controls, contacts, trajectory.contacts.csv,cross_preset.json, all per-groupsensitivity.json;environment.json,protocol.json,assets.json,pilot.json,aggregate.json.*.png: charts/pivot/contact diagrams.simulation_*.gif: approaching-ball winners;stationary_*.gif: stationary winners. Wireframe physics boxes, not car-body meshes; simulations, 0.2× playback, first 0.3 s shown. Full 0.8 s trajectories remain in JSON.- Simulator installation and accuracy: https://github.com/ZealanL/RocketSim . Inspected upstream HEAD
c2baacb8f4b441dd8505e63c2aeb5a1679b60b02. - Installed Python binding 2.2.1: https://github.com/mtheall/RocketSim at
2da51b1dac7b8127127613a5ff30e490bdd70dd8(tag v2.2.1), merging upstreamf80f9d90f922315c5877a81987845d3242ff1780. Published Linux x86_64 wheel SHA2562f9518e9895447d2480680b7825866e881981102c66365c1d9fea62589a0dd9d; extension SHA256c1f246a531eb7a9b957e39acb8d61d740ec9d1d3befca05d2c05777c543ee023. Wheel matches installed extension. This is published-wheel/tag provenance, not an independently reproduced binary build. - Installed implementation reads:
vendor/python/src/Sim/Car/CarConfig/CarConfig.cpp,Car.cpp(offset compound shape and child-box inertia),src/Sim/Ball/Ball.cpp(additional hit impulse),src/RLConst.h,src/Sim/Arena/Arena.cpp(sleep/contact processing), bundled Bullet3-3.24btBoxShape.cpp,btSphereBoxCollisionAlgorithm.cpp. - Binding getter issue:
ArenaConfig.max_posreturnsminPosin 2.2.1; actual default max bounds come from source (5600,6000,2200). The incorrect getter value and correct source default are both recorded; no broadphase settings patched. - Mapping source: https://www.epicgames.com/help/c-Category_RocketLeague/c-RocketLeague_Gameplay/rocket-league-car-hitboxes-a000084362?lang=en-US . Search evidence retrieved 2026-09-09; full article was challenge-blocked. Supplemental indexed per-car sources saved under
../evidence/. - Conversion: Rocket League uu treated as centimeters; 1 uu/s =0.01m/s ×3.6 =0.036 km/h. These are ball velocities, not the rounded in-game goal-speed display.
## Executed airborne-flip supplement (B_air)
We found the highest accepted airborne-dodge speed with Breakout: 132.448 kph, after the search and equal-budget transfers. We keep this test apart from ground-start flips.
| Preset | Independent search (kph) | Best incl. transfers (kph) | Winning schedule source | Δ Octane (kph) | Δ Octane (%) | +X component (kph) | Yaw / elevation ° | Near-forward / diagonal peaks (kph) | Surface | Episodes / callbacks | Valid execution errors |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Octane | 127.869 | 128.301 | Breakout | +0.000 | +0.000 | 128.025 | 3.58 / 1.14 | 127.869 / 128.301 | front-face | 1 / 2 | 92.9% |
| Dominus | 125.603 | 131.492 | Plank | +3.191 | +2.487 | 131.414 | -0.40 / 1.93 | 131.492 / 128.985 | front-edge | 1 / 2 | 85.7% |
| Plank | 132.330 | 132.330 | Plank | +4.029 | +3.140 | 132.269 | -0.29 / 1.71 | 132.330 / 129.194 | front-edge | 1 / 2 | 85.7% |
| Breakout | 129.209 | 132.448 | Plank | +4.147 | +3.232 | 132.381 | -0.29 / 1.79 | 132.448 / 129.209 | front-edge | 1 / 2 | 85.7% |
| Hybrid | 123.293 | 128.425 | Breakout | +0.124 | +0.096 | 128.164 | 3.49 / 1.09 | 128.187 / 128.425 | front-face | 1 / 2 | 92.9% |
How the flip is legal without arena meshes
Use THE_VOID with unmodified Soccar car/ball physics. Start in a nonpenetrating airborne state with an unused air dodge: is_on_ground=False, has_jumped=False, has_double_jumped=False, has_flipped=False, zero angular velocity, initial car velocity (1800,0,0) uu/s (64.8 kph) and 100 boost. This is an airborne state of the kind available after leaving a surface without jumping or obtaining a flip reset; its prehistory is not simulated or validated in Rocket League. No wheel-ground contact, fake platform, first-jump impulse, or angular velocity is injected. Winner audits also verify no suspension-wheel contacts through first impact and no post-tick car speed exceeding the stock cap. The jump button is pressed for one tick with directional pitch/yaw, so RocketSim itself creates the dodge impulse and rotation; earlier pitch/yaw/roll controls can orient/spin the car legally.
The ball is fixed initially at (0,0,1100) uu with v=(0,0,−0.001) uu/s and zero spin. This tiny nonzero initial falling speed prevents the known stationary-ball sleeping shortcut; gravity remains −650 uu/s². Every preset shares the same ball, initial car velocity and boost. Geometric alignment uses the rotated front-face-center tangent, followed by identical world-axis search displacements.
Twelve bounded parameters: additional X gap50–800 uu, lateral±80 uu, ball-above-hitbox-center displacement±150 uu, initial yaw±15°/pitch±30°/roll0°, dodge tick0–50, direction±60° (0=forward), pre-dodge pitch±1 and yaw/roll±0.5, boost duration0–120 ticks, post-dodge pitch/cancel±1. Throttle1; steering/handbrake0 in air. Window≤240 ticks (2 s), ended earlier if either body leaves conservative central airspace. This boundary is an observation limit, not a physical wall. First contact must occur after the dodge input has taken effect; exactly one completed contact episode, horizontal±5° and elevation0–30° required. All input schedules and exact initial states are saved.
30,000 independent search candidates = 5 presets ×6000; seed20260909, 243 coarse candidates plus the same DE optimizer as A, 212.58s search runtime. Then 25 transfer evaluations (five original winning schedules per target, including its own replay) form a second ranking stage. Promote only valid improvements, save them separately in B_air_transfer_*/winner.json, replay exactly, and run sensitivity around the promoted states. Original independent search winners remain unchanged; air_transfer_selection.json preserves all transfer proposals. The coarse grid includes 0° and ±45° dodges equally. Reported direction buckets are descriptive: near-forward |direction|≤10°, diagonal >10°; these are not independently optimized categories. Every winner is replayed, receives ±1 tick/±2 uu/±0.5° errors, and transfers to every other preset with only documented geometric realignment. air_results.csv, air_measurements.csv.gz, per-condition JSON and cross_preset.json preserve measurements.
Pivot motion and important speed-clamp caveat
| Preset | Incoming car v (kph) | Incoming ball v (kph) | ω world (rad/s) | Contact r world (uu) | ω × r · n (kph) | Contact v · n (kph) | Extra Δv world (kph) | Dodge / first contact tick | Transient car speed >82.8 kph |
|---|---|---|---|---|---|---|---|---|---|
| Octane | (95.99, -8.80, -6.38) | (0.00, 0.00, -7.57) | (1.14, -0.40, 0.82) | (72.34, 2.88, 18.48) | -0.009 | 92.237 | (48.95, 3.00, 1.35) | 39 / 39 | YES |
| Dominus | (98.21, 7.40, -8.95) | (0.00, 0.00, -9.30) | (1.10, 0.95, 0.33) | (77.47, -2.24, 21.85) | 0.554 | 97.867 | (48.86, -2.39, 7.58) | 48 / 48 | YES |
| Plank | (98.21, 7.40, -8.95) | (0.00, 0.00, -9.30) | (1.10, 0.95, 0.33) | (77.38, -1.95, 17.20) | 0.360 | 97.422 | (48.95, -2.40, 6.96) | 48 / 48 | YES |
| Breakout | (98.21, 7.40, -8.95) | (0.00, 0.00, -9.30) | (1.10, 0.95, 0.33) | (82.18, -1.76, 16.70) | 0.302 | 97.194 | (48.97, -2.39, 6.86) | 48 / 48 | YES |
| Hybrid | (95.99, -8.80, -6.38) | (0.00, 0.00, -7.57) | (1.14, -0.40, 0.82) | (76.89, 2.86, 18.79) | 0.011 | 92.257 | (48.97, 2.82, 1.24) | 39 / 39 | YES |
Vectors use world axes, except where explicitly marked; velocity display is kph, raw JSON calculations use uu/s. Rotation before impact comes from controls, not state injection. We calculate the angular term as (omega × contact_offset) · normal and add pivot velocity for total contact velocity. Contact locations/normals are geometry-reconstructed and cross-checked against the actual sphere-side callback, as in A.
We measured incoming car speeds above the usual 82.8 kph cap on the dodge-input tick. RocketSim applies the dodge impulse in _UpdateDoubleJumpOrFlip, processes collisions, then clamps car speed in _FinishPhysicsTick. All five selected airborne shots contact on that tick. Their pre-impact spin comes from earlier air controls; the new flip torque has not yet built rotation. We have not verified this transient-speed behavior in Rocket League or optimized a delayed-contact airborne variant. The normal car cap and 216 kph ball cap remain unchanged. The timing-error table records the cost of missing this tick.
We improved several presets by transferring another preset's winning sequence. The table retains the original search peaks alongside the transfer-pooled values.
A's winning no-flip conditions and B_air have different initial ball/car velocities and setup bounds. Compare presets within each category; do not interpret A-to-B_air gains as a clean causal effect of flipping.
Execution sensitivity and no-dodge control
| Preset | Nominal (kph) | Diagnostic peak, all (kph) | Diagnostic peak, valid (kph) | Median (kph) | Minimum (kph) | Maximum (kph) | Valid fraction |
|---|---|---|---|---|---|---|---|
| Octane | 128.301 | 128.610 | 128.610 | 128.286 | 107.915 | 128.610 | 0.929 |
| Dominus | 131.492 | 131.578 | 131.578 | 131.457 | 111.737 | 131.578 | 0.857 |
| Plank | 132.330 | 132.396 | 132.396 | 132.309 | 112.547 | 132.396 | 0.857 |
| Breakout | 132.448 | 132.554 | 132.554 | 132.434 | 112.679 | 132.554 | 0.857 |
| Hybrid | 128.425 | 128.696 | 128.696 | 128.412 | 108.020 | 128.696 | 0.929 |
Median/range use nominal plus all14 errors; valid fraction excludes nominal. Some errors miss the same-tick dodge/contact coincidence or violate the cone. A shift earlier than tick0 cannot reproduce a dodge before the defined initial state; it is outside the available input window. Sensitivity is not simulator-accuracy uncertainty. Higher valid diagnostic speeds are published separately and not silently substituted for optimization-stage winners.
| Preset | With dodge (kph) | Without dodge, unoptimized (kph) | Without dodge in forward cone |
|---|---|---|---|
| Octane | 128.301 | 108.319 | True |
| Dominus | 131.492 | 112.328 | True |
| Plank | 132.330 | 113.032 | True |
| Breakout | 132.448 | 113.134 | True |
| Hybrid | 128.425 | 108.417 | True |
This removes only the jump input from each exact winning sequence, keeping its initial state and other controls. It is an unoptimized control ablation, not a fair best-no-flip ranking; the no-dodge ball can leave the forward cone and is not a valid B_air candidate.
Running it, or switching to ground-start flips
Run benchmark.py run --category B_air --budget 6000, then rank_air_transfers.py, audit_replays.py and visualize.py. This category needs no arena meshes. For B/C, use the verified Soccar assets and the grounded setup below.
Geometry diagrams

