0.3.0-preview302
- Version ID: 3839
- Size: 140.96 MB
- Published: 2026-03-02
Changelog
Section titled “Changelog”New features, options and improvements
Section titled “New features, options and improvements”-
New functions:
- New P2P 1v1 race mode: race with a friend without having to set a server using a peer-to-peer connection;
- Experimental support for servers with client-specified cars and for changing car skins live (some features wouldn’t work for now, update for CM is coming soon).
-
Physics:
Extra contact pointsexperiment is back and enabled by default, no longer moves contact point laterally so it won’t affect FFB;- New physics experiment optimizing colliders for track physics objects;
- New physics experiment tweaking track physics objects without explicit configuration (CoG fix, a bit of damping, a bit of friction);
- New physics experiment equalizing pits check thresholds across Assetto Corsa (available online as
[PHYSICS_EXPERIMENTS] EQUALIZE_PITS_CHECK=1); - New options in general disabling lap invalidation by AI or Physics API;
- Automatic Sine→Perlin upgrade (affecting invalid surfaces only) now upgrades to Simplex instead;
- Procedural surface noise better handles multiple tyre rays;
- A few other improvements for surfaces with procedural noise (better car placement, better ground plane computation);
- Cars occasionally exploding on certain surfaces fixed.
-
AI:
- Steering is smoother (physically) at speeds below 7 km/h;
- Trajectories fixed (
cautious steeringtweak was messing things up); - AI debug app now shows actual AI inputs instead of smoothed ones;
- If the
Tweak autopilot switchingoption is disabled, AI inputs smoothing, as well as some other tweaks, will work properly anyway; RACK_TRAVEL_LUTstops working with autopilot as well (previously, it would stop for AIs to keep them safer, but not for the autopilot making testing more difficult).
-
Extended track physics:
- New
COG_OFFSET=AUTOfor track object physics parameters applying CoG fix; COLLIDER_DEBUGfrom custom track object collider parameters removed, replaced with a checkbox in CSP Debug app;- New
_EXT_PERLIN_NOISE=SIMPLEXfor track surfaces to use Simplex noise (basically Perlin but a bit better).
- New
-
Audio:
- New audio tweak: using traction control intensity for its audio volume (enabled by default);
- Collision audio for hits no longer cuts off, instead, new events are created live;
- CSP no longer plays hit audio for overwhelmingly scraping collisions, or scrape audio for hitting collisions;
- CSP ambience audio is no longer affected by doppler shift at all;
- Mumble voice chat: audio volume fading when talking or listening is disabled.
-
New main menu:
- Better setup titles (let me know if I missed any abbreviations);
- If any setup tab title has a lower-case letter, CSP won’t adjust case;
- Leaderboard uses custom driver icons, if set;
- Look and behavior of disabled setup items improved;
- Scrolling of setup tabs has been fixed;
EXT_VISIBLE_WITHworks from the start, not waiting for something to change;- Hidden tabs are fixed, no longer can be selected;
- Tab reset works for more types of tabs;
- Hold Shift and click on car preview in the main menu to change color in a single-player session.
-
Other UI changes:
- Position of warning icons (the ones in the top left corner) and race flags fixed;
- Options to disable warning icons and hide racing flags, by default icons hide with Ctrl+H;
Center UIoption got an extra variant centering apps bar (and tasks switcher) as well;- New pause menu: buttons don’t get clipped with photo mode anymore, buttons shift down if the menu has been moved to the bottom half of the screen;
- Recently added assists editor is optional, with a setting to turn it off;
- Starting lights shift upwards when the main menu is opened.
-
Default Weather FX style:
- Brightness adjusted;
- White reference point accounts for post-processing exposure, ensuring the same brightness in different conditions (LCS only);
- Fog is a bit less bluish;
- Glare in the virtual mirror is reduced.
-
Particles:
- Piece and spark particles: collisions with track improved, sparks use local heightmap, issue with sparks-car collisions misbehaving fixed;
- Fireworks use additive blending;
- Smoke behavior adjusted, positional variance no longer applies to most smoke types;
- Velocity of flame particles in track configs with flame intensity above 1 fixed;
- Particle sizes adjusted: pieces have a small chance of being large, flames are larger if fast.
-
Grass FX:
- Localized randomization no longer jumps with origin shift;
- Shading improved;
- Grass disappearing for a frame with origin shift in OpenVR mode fixed.
-
CSP Debug app:
- A checkbox showing outlines for track physics objects fixed;
- Dragging improved: forces are critically dampened to prevent oscillations, multiple cars can be dragged at once, track physics objects can be dragged as well;
- Click-to-teleport is merged with dragging, allows to orient car;
- Dragging tool allows to push or pull the car as well.
-
Hotlap with multiple ghosts:
- Laps done with AI (with AI lap invalidation disabled using the new option) are marked;
- Copying of the best record to the place where AC would originally store a ghost is fixed, now includes layout ID.
-
Miscellaneous:
- VR tweaks: options
Custom VR HUDandSkip post-processingare enabled by default (it just looks so much better this way, and it’s compatible with LCS too); - AC no longer raises an error with empty
aero.ini; - Other fatal AC errors are shown properly;
- Blown tyres of remote cars affect wheels positioning with custom motion enabled;
- Remote cars: angle of front wheels got a tiny bit of smoothing, fix for steering wheel angles range improved;
- CSP shows a warning if a Lua script takes more than a second to do something;
- If country name is missing, tooltip for its flag in chat will be hidden;
- Nice Screenshots: accumulate HDR summation is marked as not compatible with scriptable filters, will be paused when filters are active;
- Snow/ice definitions for
ek_akina_snow; - Timezone for
rt_lime_rock_parkfixed, added heading angle; - AC timing with fewer than four cores, or with multithreading disabled, improved;
- Vintage scriptable filter: small update reducing dithering;
Show important steering wheelstweak improved;- Old tweak getting dynamic object balloons to move with wind has been fixed and improved;
- Slightly improved taskbar closing behavior;
Disable Steam interfaceoption renamed and reset, in case somebody enabled it by mistake (now, CSP won’t offer to activate it anymore);- Neck FX temporarily pauses photo app FOV slider when changing FOV, for both to work better together and fix some issues with other components;
- Hotkey to toggle virtual mirror can be changed (CM update allowing to bind F… keys is coming soon);
- Active Steam overlay stops mouse hovering effects of IMGUI;
- With CSP flames enabled, original flames no longer waste time looking for textures;
- Rendering debug: new option forcing informative crashes on D3D11 errors;
- Crash reports are detailed by default, compact ones are pretty useless.
- VR tweaks: options
- Linear color space: speculars fixed;
- Some track physics objects missing on any collisions fixed;
- The crash caused by missing cache subfolder
meshes_metadatais fixed; - IMGUI: fallback fonts fixed, rare characters should work in titles and such;
- Shadows computing now takes base surface normal into account as well, fixing an issue with the main building on Spa;
- A few issues causing GPU to crash (related to navigators, particles, filters, car swap and more) have been fixed;
- Some of NaN rendering glitches with refracting headlights fixed;
- Fixed some crashes with cars with encrypted colliders;
- Visual tyre wetness and AI alterations getting stuck on rain deactivation fixed;
- Surfaces FX audio fixed.
- Issue with wheels increasing in size online without custom motion in long races fixed (I would highly recommend to enable custom motion though);
- Analog odometers no longer break some textures with HDR enabled;
- Car LODs acting strange with 20+ cars in a frame are fixed;
- Decoding of animated GIFs fixed;
- Misaligned colliders of some track physics objects on Barcelona fixed;
- Walking Out: pause is working correctly when walking around;
- Synchronization of dynamic objects across clients online fixed;
- Borderless AC window saves its size and position properly;
- A couple of core fixes to prevent memory corruption happening in some rare cases;
- A few crucial fixes for memory profiler;
- Headless mode disables all the input (keyboard, gamepad and wheel), few other fixes;
- Fallback LOD no longer takes a frame to appear if other LODs are available;
- Flashing for jumped cars, or from
ac.highlightCar(), fixed, shouldn’t affect grass anymore; - Resetting extrapolation of remote cars on teleports slightly improved.
Configs
Section titled “Configs”-
Car & track configs:
- New
[TYRES_FX] RADIUS_OFFSETparameter allowing to alter visual radius of tyres; - Glass materials: new
NormalMapUVMultparameter; - Brake Disc FX: compute of default value for
CERAMICadjusted to make them less frequent; - A few improvements for live car config reloads;
BLIND_SPOTcar input andac.getCarBlindSpot()fixed, now returns distances to the cars in front (as Z) and behind (as W) as well;[DATA] DI_…_…modifiers for digital instruments can useBASEinstead of an index to affect all of them;[DATA] DI_…_ALPHAaffects first version of text nodes as well;- Track conditions tool shows input values as well;
- New
[BASIC] SEASONS_DEACTIVATION_AWARE=0to fix tracks that don’t expectYEAR_PROGRESSto be -1 when season changes are disabled, on by default for all butdousojin_tougeanddousojin_touge_1990; - Box guessing for track object colliders (trying to replace a mesh with a box with custom track physics) improved.
- New
-
Extended configs for online servers:
- Use
[CUSTOM_PHYSICS] EXTRAPOLATE_STATE=1, 1, RAWto try a new approach to avoid shaking; - Use
[CUSTOM_PHYSICS] SMOOTHING_FACTOR=100to make movement of remote cars more snappy and less smoothed (lower value for smoother movement, default value is 250); - Add
[EXTRA_DATA] VR=1to sync the state of drivers using VR (requires AssettoServer); - Use
[EXTRA_RULES] ALLOW_PITS_JUMP=1to allow jumping in pits by holding Ctrl and clicking on car preview; - Set
[PHYSICS_EXPERIMENTS] EQUALIZE_PITS_CHECK=1to equalize thresholds of AC checking if car is in pits or not (experimental); - Jump limit slightly improved, more sensitive to jumps side-to-side, default time reduced from 5 to 2 seconds, flashing is only present if the car intersects another car, cars no longer flash if collisions are disabled via Physics API.
- Use
Lua & Python
Section titled “Lua & Python”-
Common API:
- New properties for
ac.StateSim:.isTrackOpen,.isTimeOffsetIgnored,.timePostOffset,.timePhotoModeOffset,.isAltOnlineRace; - New
ac.checksumCRC32(); - New
string.urlDecode(),string.urlParse()andstring.xor(); - New
mat4x4:getEuler()returning Euler vectors from a matrix as a counterpart tomat4x4.euler()creating a matrix from Euler vectors; ac.INIConfig.parse(): use@car:Nas include folder forread()expressions to work as well;- New
ac.getAssists(); - New
ac.onCarSwap(); - Function
ac.areShapesColliding()fixed: debug outlines for cylinders and capsules are aligned correctly, car colliders account for graphics offset, newphysics.Collider.Track()allowing to check for collisions with the track; - New
ac.getCollidingShapesContacts()returning actual contact points; - New argument for
coroutine.create()for flags: raise errors, start coroutine immediately; - New
insideCar:yes,actsAsLED:yesandactsAsAnalogInstrument:yesqueries Scene API; - Functions raycasting physics geometry got an argument for taking procedural noise into account;
- New
coroutine.sleep(); - Coroutines support improved (please report any malfunctioning functions).
- New properties for
-
Shared libraries:
- New
shared/promisewith a custom fast JS-like Promises implementation; - New
shared/utils/ntplibrary for querying precise time using NTP protocol (can help with syncing for alternative online modes); - New
shared/utils/luasteamfor full access to Steam API available to all scripts with I/O access (forked version ofluasteamwith a few more functions and a bunch of small fixes); - New
shared/utils/parcelfor exchanging small bits of data; - New
surfaces.raycastDetailed()inshared/sim/surfaces; shared/utils/signing: newsigning.check(), new{CSPVersion},{CSPVersionCode}and{UniqueMachineKeyBase64Trimmed}for signing format string, queries to quickly and easily verify integrity of cars and tracks, as well as AC’ssurfaces.ini,verifyfunction can handle absolute paths, other fixes;shared/sim/fireworkslibrary is more responsive.
- New
-
Render API:
- New
main.smokerender event forrender.on(); render.circle()and others: argument for white reference point brightness correction.
- New
-
I/O API:
- New
io.compress()and fieldcompressforio.extractFromZipAsync()for applying NTFS compression,remote_assetsfiles are compressed by default; io.functions accessing file times (such asio.lastAccessTime()) can be used to change file times as well now.
- New
-
UI API:
- Horizontal thin scrollbars (new argument for the function, or, you can use
bit.bor(ui.WindowFlags.HorizontalScrollbar, ui.WindowFlags.ThinScrollbar)for a window with horizontal scrollbar); ui.progressBar(): passmath.nanforprogressfor indeterminate progress bar;:linkToSimulationSpeed()of GIF players fixed;- Using
ui.unloadImage()now lets CSP unloaddynamic::hud::redirected::Nbuffers if unused.
- Horizontal thin scrollbars (new argument for the function, or, you can use
-
Gameplay API (available to apps, online scripts and more):
- New
ac.resetDynamicTrackObjects()in Gameplay API allowing to reset dynamic track objects; - New
:redirectLayer2()returning duplicate flag as well,:redirectLayer()is deprecated; ui.registerOnlineExtra(): argument to set a tooltip message.
- New
-
Game API (available to apps and New Mode scripts only):
- New
ac.setTrackCoordinatesDeg2()(ac.setTrackCoordinatesDeg()is mixing up X and Y of coordinates); - New
ac.debugTrackColliders().
- New
-
Lua apps:
- New
ac.sendKeyboardButtonEvent(); ac.getSetupSpinners(): newvisiblefield;- New
ac.getSetupTabs().
- New
-
New Modes:
- New experimental
ac.overrideSession(); - New
[TWEAKS] ALT_ONLINE_CARS=<number>adding extraremotecars that can be driven by the script, with a newshared/sim/altonlinelibrary to control them, as well as other values allowing to create proper custom online modes and more, seep2p-1v1for an example; - New
[TWEAKS] DYNAMIC_TRACK_OBJECTS_SEEDoverriding random seed used for arranging track objects; - Add
[TWEAKS] VERIFY_STEAM_API=1for CSP to check if Steam is actually available at the launch; - Manifests of New Mode scripts can use INIpp features, allowing to do things like activating tweaks based on
race.iniorsettings.ini; - Scripts can access
ac.startBackgroundWorker().
- New experimental
-
Physics API:
- New
physics.setPenalties(),physics.setWrongWayPenalty()and corresponding state fields inac.getSim()(also,.allowedTyresOutupdates live properly); - New
physics.setAssists()andac.onAssistsChanged(),physics.setAssists()can also be used to block out assists editing; physics.RigidBody(): alignment of debug outlines for cylinders and capsules is fixed as well;physics.overrideRacingFlag()works better if called every frame;- New
physics.getTrackObjectStatus(),physics.getTrackObjectPointVelocity()andphysics.addTrackObjectForce()for physics workers; - Enabling AI for cars online fixed;
- Logic for laps invalidation caused by usage of these functions slightly improved, invalidating less often, no longer invalidating when applying to AIs in offline races.
- New
-
Car physics scripts:
- New
ac.addCosmicForce()andac.addCosmicTorque()for adding forces to cosmic suspension; - Physics debug lines: brightness fixed,
.multofrgbmis taken into account, option to draw a dashed line.
- New
-
Other script-related changes:
- Lua profiler updated, cleaner and more informative, no longer freezes AC;
- Lua Debug app: texture viewer no longer conflicts with Objects Inspector, graphs for
ac.debug()with number adjusted; - Calling
script.asyncUpdate()is temporarily disabled until I figure out why it explodes at the start once in a dozen of runs; - Docs for states fixed, 0-based arrays use custom tables instead of array syntax to improve compatibility with Lua Language Server plugin;
- Some of LuaJIT functions, especially the ones returning complex entities like INI files, should be faster;
- New Python function
ac.ext_isLapInvalidated().