Browse docs
Two-Step and Launch Control
Two-Step gives an installed vehicle a configurable RPM launch window, synchronized exhaust bursts, and optional launch assistance. Launch Control can hold the vehicle, limit torque while it is staged, and blend the configured torque back in when the brake is released.
inactiveCheckIntervalMs, switches to every-frame processing only while that combination is held, and keeps it only for the short launch-release ramp.Enable and install the feature
Two-Step has a global feature switch, a deployment-wide runtime switch, and a saved state for each vehicle. All three layers must allow the feature:
- Open
/jobconfig, select Mechanic Jobs, open Features, and enable Two-Step. - Keep
Config.TwoStep.enabled = trueinsky_mechanicjob/config/adv_config.lua. - Open a tuning session for the vehicle and select ECU & Vehicle Electronics → 2-Step → Enabled.
- Complete the tuning order and install its required part.
The default tuning profile prices twostep_enabled through the normal tuning-price configuration and requires one ecu_tuning_kit. Change its price, availability, or required items under Tuning Prices in /jobconfig just like any other tuning option.
The installation and enabled state are persisted with the vehicle. Disabling the global feature hides the tuning option and stops its runtime without deleting saved vehicle data.
defaultEnabled is the fallback for a restored Two-Step record that has no explicit enabled value. A normal new installation uses the Enabled or Disabled value selected in the tuning order.Use Two-Step
With the shipped keyboard controls, the driver stages the vehicle by holding:
- W + S when
useFootBrake = true - W + Space when
useHandbrake = true
When both brake inputs are enabled, either combination can arm Two-Step. The equivalent configured vehicle controls can also be used on a controller.
The feature activates only when every condition below is met:
| Requirement | Shipped value |
|---|---|
| Player is in the driver seat | Required |
| Engine is running | Required |
| Two-Step is installed and enabled for the vehicle | Required |
| Throttle plus an allowed brake input are held | Required |
| Vehicle speed | At or below 25 km/h |
| Current gear | 0 through 2 |
| Current RPM | 0.08 through 0.95 |
Gear 0 is intentionally included because some vehicles report neutral while stationary. Holding the input combination starts the responsive frame loop immediately, but exhaust bursts and Launch Control are applied only after the speed, gear, and RPM conditions also pass.
To launch, keep the throttle held and release the selected brake input. When Launch Control is enabled, the forced handbrake is released and the launch torque blends back to the vehicle's normal configured torque over releaseRampMs. Releasing the throttle as well cancels the ramp and clears the temporary launch modifier.
Open configuration
The complete deployment-wide configuration is stored in sky_mechanicjob/config/adv_config.lua:
Config.TwoStep = {
enabled = true,
defaultEnabled = false,
useFootBrake = true,
useHandbrake = false,
inactiveCheckIntervalMs = 125,
maxSpeedKmh = 25.0,
minGear = 0,
maxGear = 2,
rpmWindowMin = 0.08,
rpmWindowMax = 0.95,
burstIntervalMinMs = 55,
burstIntervalMaxMs = 115,
flameDurationMs = 130,
flameScaleMin = 0.7,
flameScaleMax = 1.8,
defaultFlameScaleLevel = 10,
defaultVolumeLevel = 8,
turboPressureSpikeEnabled = true,
turboPressureSpike = 28.0,
launchControl = {
enabled = true,
holdHandbrake = true,
rpmTarget = 0.72,
holdTorqueMultiplier = 0.12,
releaseRampMs = 90,
releaseTorqueStartMultiplier = 0.9
}
}
Changes made to the Two-Step feature switch in /jobconfig are sent to connected clients immediately. Restart sky_mechanicjob after editing the static values in adv_config.lua.
Availability, input, and activation
| Setting | Valid runtime range | Purpose |
|---|---|---|
enabled | Boolean | Deployment-wide hard switch in addition to the /jobconfig feature switch. |
defaultEnabled | Boolean | Fallback state for restored records without an explicit enabled value. |
useFootBrake | Boolean | Allows the normal vehicle brake control; S by default on keyboard. |
useHandbrake | Boolean | Allows the vehicle handbrake control; Space by default on keyboard. |
inactiveCheckIntervalMs | 50–1000 ms | Delay between input checks before the combination is held. Lower values react faster; higher values reduce idle checks. |
maxSpeedKmh | 1–120 km/h | Highest speed at which Two-Step may activate. |
minGear | 0–10 | Lowest allowed reported gear. Keep 0 for vehicles that report neutral at a standstill. |
maxGear | minGear–10 | Highest allowed reported gear. |
rpmWindowMin | 0.05–0.99 | Bottom of the normalized native RPM activation window. |
rpmWindowMax | Above rpmWindowMin, up to 1.0 | Top of the normalized native RPM activation window. |
At least one of useFootBrake and useHandbrake must be true. If both are false, no input can arm the feature.
Use 100–150 ms as a practical starting range for inactiveCheckIntervalMs. The shipped 125 ms value keeps idle work low while remaining responsive. A value of 50 ms gives faster initial recognition; values closer to 250 ms trade noticeable input delay for fewer idle checks.
Bursts, flames, and turbo pressure
| Setting | Shipped / accepted | Effect |
|---|---|---|
burstIntervalMinMs / burstIntervalMaxMs | 55 / 115 ms; each 20–3000 ms | Random delay range between local exhaust bursts. A maximum below the minimum is raised to the minimum. |
flameDurationMs | 130 ms; 25–3000 ms | Lifetime of each backfire flame. |
flameScaleMin / flameScaleMax | 0.7 / 1.8; minimum 0.05–5.0, maximum up to 8.0 | Visual scale range used with current RPM intensity. The maximum cannot resolve below the minimum. |
defaultFlameScaleLevel | 10; 1–10 | Default stored flame level. |
defaultVolumeLevel | 8; 0–10 | Default stored burst-volume level; 0 suppresses the explosion-based pop. |
turboPressureSpikeEnabled | true; Boolean | Enables the optional turbo-pressure kick while staged. |
turboPressureSpike | 28.0; 0.0–50.0 | Pressure value applied at a limited cadence while Two-Step is active. |
Nearby players receive synchronized backfire bursts. Custom vehicles still need suitable exhaust bones for flames to appear in the expected location.
Launch Control
| Setting | Valid runtime range | Purpose |
|---|---|---|
launchControl.enabled | Boolean | Adds RPM hold, launch torque control, and the optional forced handbrake. Two-Step bursts continue when this is disabled. |
launchControl.holdHandbrake | Boolean | Holds the vehicle in place while Two-Step is active. |
launchControl.rpmTarget | RPM activation window | Target normalized RPM while staged. It is automatically clamped between rpmWindowMin and rpmWindowMax. |
launchControl.holdTorqueMultiplier | 0.0–1.0 | Temporary torque factor while staged. Lower values hold power back more strongly. |
launchControl.releaseRampMs | 0–5000 ms | Time used to blend launch torque back to normal after the brake is released. 0 restores it immediately. |
launchControl.releaseTorqueStartMultiplier | 0.0–1.0 | Starting point of the release blend. The runtime never starts below holdTorqueMultiplier. |
Launch Control and installed ECU engine tuning share the same torque coordinator. Their multipliers are combined, so staging and release do not erase the vehicle's ECU tune.
Tuning guidance
Change one group of values at a time and test it on stock vehicles and every custom handling class used by the server:
- Set the speed, gear, and RPM activation window first.
- Choose an
rpmTargetinside that window. - Adjust
holdTorqueMultiplieruntil the vehicle stays controllable while staged. - Tune
releaseTorqueStartMultiplierandreleaseRampMstogether for the desired launch response. - Balance burst cadence, flame size, volume, and turbo pressure last.
For a tighter standing launch, reduce maxSpeedKmh, keep minGear = 0, use a low maxGear, and narrow the RPM window around the desired target. For broader compatibility with custom transmissions, keep the shipped gear range and first confirm which gear each vehicle reports while stationary.
Aggressive pressure, torque, or release values can react differently with custom handling files. Another resource that writes vehicle torque, RPM, or handbrake state every frame can also override Launch Control and should be tested or integrated explicitly.
Troubleshooting
| Symptom | Checks |
|---|---|
| No 2-Step option in the tuning menu | Enable Two-Step in /jobconfig, confirm Config.TwoStep.enabled = true, and confirm twostep_enabled is enabled for the active tuning-price profile. |
| Installed vehicle does nothing | Confirm 2-Step is set to Enabled for that vehicle, the player is driving, the engine is running, and speed, gear, and RPM are inside the configured window. |
| W + Space does nothing | The shipped configuration has useHandbrake = false. Enable it or use W + S. |
| Bursts work but the vehicle is not held | Confirm launchControl.enabled and launchControl.holdHandbrake are both true. Check for another vehicle-control resource overriding the handbrake. |
| RPM does not settle near the target | Keep rpmTarget inside the RPM window and check whether another performance or handling script continuously writes RPM or torque. |
| Initial input feels delayed | Lower inactiveCheckIntervalMs. Do not set it below 50; once detected, the combination already switches to every-frame processing. |
| Launch feels weak or abrupt | Raise the appropriate torque multiplier gradually, or lengthen releaseRampMs for a smoother blend. Test every change across vehicle classes. |
| Pops are audible but flames are missing | Test a stock vehicle, then verify the custom model's exhaust bones and particle-effect compatibility. |
| ECU power disappears during a launch | Update to the build containing the shared vehicle-torque coordinator and check for an external resource that overwrites the same native every frame. |
Testing checklist
- Install and enable 2-Step through a complete tuning order.
- Confirm throttle by itself and brake by itself do not start the responsive frame loop or effects.
- Hold the configured combination and verify activation only inside the speed, gear, and RPM window.
- Release the brake while keeping throttle held and verify the configured torque ramp.
- Release both controls and confirm the launch modifier clears immediately.
- Repeat with Launch Control disabled and confirm bursts remain but vehicle hold and torque control stop.
- Store and retrieve the vehicle and confirm its installed and enabled state persists.
- Observe the test from a second nearby client and verify synchronized sound and flames.
- Test stock, custom-handling, manual-transmission, and controller-driven vehicles used by the server.
- Temporarily disable Two-Step in
/jobconfigand confirm the running client stops the feature without a resource restart.