-
Notifications
You must be signed in to change notification settings - Fork 225
Cars – Physics scripts
With 0.1.77 update it is now possible to use a Lua script to extend car physics. Simply create a “script.lua” in car data folder and it’ll work if extended physics is enabled. And if data is unpacked, it would reload live if script has been edited.
- Basic:
- Access current car state;
- Access frequently updating detailed car physics state;
- Modify car state:
- Gear grinding flag;
- Car damage;
- Engine damage;
- Gearbox damage;
- Engine RPM;
- If stalling is enabled or not;
- Tyres inflation (set to 0 to blow them up);
- Modify user controls;
- Use up to 8 values accessible by dynamic physics controllers and car instrument inputs (for example, a complex logic can be tied to a differential this way);
- Add extra forces to car body.
- Added in 0.1.78:
- Move car box colliders;
- Set aero wings gain.
More functions will be added soon.
-
Use Extra A switch to toggle between engine power LUTs:
local carPh = ac.accessCarPhysics() local powerBase = ac.DataLUT11.carData(car.index, 'power.lut') local powerAlt = ac.DataLUT11.carData(car.index, 'power_alt.lut') function script.update(dt) local activeLUT = car.extraA and powerAlt or powerBase ac.overrideEngineTorque(activeLUT:get(carPh.rpm)) end
-
Exploding engine if engine water temperature exceeds 95 degrees:
function script.update(dt) if car.waterTemperature > 95 then ac.accessCarPhysics().engineLifeLeft = 0 end end
-
Rearranging gears in a car with H-shifter so that first gear becomes reverse, for a dog-leg gearbox:
function script.update(dt) local data = ac.accessCarPhysics() if data.requestedGearIndex == 2 then -- If first gear is requested, change to reverse data.requestedGearIndex = 0 elseif data.requestedGearIndex > 2 then -- If above frist gear is requested, bump it one down data.requestedGearIndex = data.requestedGearIndex - 1 else -- Otherwise, set it to neutral data.requestedGearIndex = 1 end end
-
Kill engine for a second if g-forces get too extreme for more than a second:
local counter = 0 local stalledFor = 0 function script.update(dt) local data = ac.accessCarPhysics() if math.abs(data.gForces.x) > 2 then counter = counter + dt else counter = 0 end if counter > 2 then -- If g-force was above threshold for more than two seconds, activate stall for a second stalledFor = 1 end if stalledFor > 0 then -- If stalled, lock gas pedal at 0 stalledFor = stalledFor - dt data.gas = 0 end end
-
Jet engine activating with Extra A switch when car drives above 40 km/h (regular car script can add audio and particle effects, also
[EXTRA_SWITCHES] SWITCH_A_FLAGS = HOLD_MODE
in car config might help):function script.update(dt) local data = ac.accessCarPhysics() local jetActive = car.extraA and car.speedKmh > 40 data.controllerInputs[0] = jetActive and 1 or 0 if jetActive then ac.addForce(vec3(0, 0, -2), true, vec3(0, 0, 5000), true) end end
Here is an introduction in Lua scripting. Some more examples can be found here.
If you have any question or suggestions, please feel free to add a new issue.
- Enabling Extended Physics
- Aerodynamics
- Body Flex
- Custom Suspension Joints
- Driver Weight Shift for Karts
- Extra Turbo Options
- More Clutch Damage
- New Inputs for Dynamic Controllers
- Physics Scripts
- Setup Items Driven By Controllers
- Suspension
- Cosmic Suspension
- Tyre Types
- Enabling Extended Physics
- General Options
- Custom Raycasting
- Collision Parameters
- Dynamic Physics Objects
- Geometric colliders
- Surface Tweaks
- Extra FX Flags
- Extra FX Emissive
- Mesh Adjustments
- Model Replacements
- Shader Replacements
- Scene Queries
- UV2
- General Options
- Analog Instruments
- Animations
- Digital Instruments
- Emissive Objects
- Extra Switches
- Inputs
- LED panels
- Multichannel Emissives
- Vintage Tachometers
- Audio
- Brake Disc FX
- Deforming Bonnets
- Driver Model
- Exhaust Smoke
- Exhaust Flames
- Extra Lights
- Fake Shadows FX
- Local Cubemaps
- Mesh Splitting
- Miscellaneous Options
- Neck FX
- Node Adjustments
- Smart Mirror
- Sparks
- Tyres FX
- Visually Adjustable Wings
- Wheels
- Wobbly Bits
- Wobbly Wipers