Skip to content

0.3.0-preview302

  • Version ID: 3839
  • Size: 140.96 MB
  • Published: 2026-03-02
  • 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 points experiment 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 steering tweak was messing things up);
    • AI debug app now shows actual AI inputs instead of smoothed ones;
    • If the Tweak autopilot switching option is disabled, AI inputs smoothing, as well as some other tweaks, will work properly anyway;
    • RACK_TRAVEL_LUT stops 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=AUTO for track object physics parameters applying CoG fix;
    • COLLIDER_DEBUG from custom track object collider parameters removed, replaced with a checkbox in CSP Debug app;
    • New _EXT_PERLIN_NOISE=SIMPLEX for track surfaces to use Simplex noise (basically Perlin but a bit better).
  • 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_WITH works 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 UI option 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 HUD and Skip post-processing are 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_park fixed, 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 wheels tweak improved;
    • Old tweak getting dynamic object balloons to move with wind has been fixed and improved;
    • Slightly improved taskbar closing behavior;
    • Disable Steam interface option 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.
  • Linear color space: speculars fixed;
  • Some track physics objects missing on any collisions fixed;
  • The crash caused by missing cache subfolder meshes_metadata is 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.
  • Car & track configs:

    • New [TYRES_FX] RADIUS_OFFSET parameter allowing to alter visual radius of tyres;
    • Glass materials: new NormalMapUVMult parameter;
    • Brake Disc FX: compute of default value for CERAMIC adjusted to make them less frequent;
    • A few improvements for live car config reloads;
    • BLIND_SPOT car input and ac.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 use BASE instead of an index to affect all of them;
    • [DATA] DI_…_ALPHA affects first version of text nodes as well;
    • Track conditions tool shows input values as well;
    • New [BASIC] SEASONS_DEACTIVATION_AWARE=0 to fix tracks that don’t expect YEAR_PROGRESS to be -1 when season changes are disabled, on by default for all but dousojin_touge and dousojin_touge_1990;
    • Box guessing for track object colliders (trying to replace a mesh with a box with custom track physics) improved.
  • Extended configs for online servers:

    • Use [CUSTOM_PHYSICS] EXTRAPOLATE_STATE=1, 1, RAW to try a new approach to avoid shaking;
    • Use [CUSTOM_PHYSICS] SMOOTHING_FACTOR=100 to make movement of remote cars more snappy and less smoothed (lower value for smoother movement, default value is 250);
    • Add [EXTRA_DATA] VR=1 to sync the state of drivers using VR (requires AssettoServer);
    • Use [EXTRA_RULES] ALLOW_PITS_JUMP=1 to allow jumping in pits by holding Ctrl and clicking on car preview;
    • Set [PHYSICS_EXPERIMENTS] EQUALIZE_PITS_CHECK=1 to 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.
  • Common API:

    • New properties for ac.StateSim: .isTrackOpen, .isTimeOffsetIgnored, .timePostOffset, .timePhotoModeOffset, .isAltOnlineRace;
    • New ac.checksumCRC32();
    • New string.urlDecode(), string.urlParse() and string.xor();
    • New mat4x4:getEuler() returning Euler vectors from a matrix as a counterpart to mat4x4.euler() creating a matrix from Euler vectors;
    • ac.INIConfig.parse(): use @car:N as include folder for read() 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, new physics.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:yes and actsAsAnalogInstrument:yes queries 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).
  • Shared libraries:

    • New shared/promise with a custom fast JS-like Promises implementation;
    • New shared/utils/ntp library for querying precise time using NTP protocol (can help with syncing for alternative online modes);
    • New shared/utils/luasteam for full access to Steam API available to all scripts with I/O access (forked version of luasteam with a few more functions and a bunch of small fixes);
    • New shared/utils/parcel for exchanging small bits of data;
    • New surfaces.raycastDetailed() in shared/sim/surfaces;
    • shared/utils/signing: new signing.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’s surfaces.ini, verify function can handle absolute paths, other fixes;
    • shared/sim/fireworks library is more responsive.
  • Render API:

    • New main.smoke render event for render.on();
    • render.circle() and others: argument for white reference point brightness correction.
  • I/O API:

    • New io.compress() and field compress for io.extractFromZipAsync() for applying NTFS compression, remote_assets files are compressed by default;
    • io. functions accessing file times (such as io.lastAccessTime()) can be used to change file times as well now.
  • 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(): pass math.nan for progress for indeterminate progress bar;
    • :linkToSimulationSpeed() of GIF players fixed;
    • Using ui.unloadImage() now lets CSP unload dynamic::hud::redirected::N buffers if unused.
  • 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.
  • 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().
  • Lua apps:

    • New ac.sendKeyboardButtonEvent();
    • ac.getSetupSpinners(): new visible field;
    • New ac.getSetupTabs().
  • New Modes:

    • New experimental ac.overrideSession();
    • New [TWEAKS] ALT_ONLINE_CARS=<number> adding extra remote cars that can be driven by the script, with a new shared/sim/altonline library to control them, as well as other values allowing to create proper custom online modes and more, see p2p-1v1 for an example;
    • New [TWEAKS] DYNAMIC_TRACK_OBJECTS_SEED overriding random seed used for arranging track objects;
    • Add [TWEAKS] VERIFY_STEAM_API=1 for 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.ini or settings.ini;
    • Scripts can access ac.startBackgroundWorker().
  • Physics API:

    • New physics.setPenalties(), physics.setWrongWayPenalty() and corresponding state fields in ac.getSim() (also, .allowedTyresOut updates live properly);
    • New physics.setAssists() and ac.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() and physics.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.
  • Car physics scripts:

    • New ac.addCosmicForce() and ac.addCosmicTorque() for adding forces to cosmic suspension;
    • Physics debug lines: brightness fixed, .mult of rgbm is taken into account, option to draw a dashed line.
  • 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().