Skip to content
  • Version ID: 3637
  • Size: 134.55 MB
  • Published: 2025-10-18

Changelog

New features, options and improvements

  • Settings regrouped, some removed, others changed:

    • Lights FX, Fake Shadows FX, GUI, Reflections FX, Track Adjustments and Smart Mirrors modules can’t be disabled anymore;
    • Colored shadows can’t be disabled, entire settings section hidden;
    • Wheels-related visual things merged into a single config (only change that might cause some user settings to be lost);
    • Distant headlights glare is enabled by default;
    • Default chunks optimization switched to advanced (with a lot of fixes and improvements);
    • Option forcing render route with FXAA is active and hidden;
    • DPI-aware option is active and hidden;
    • New KN5 loader is always active, physics meshes data stripping enabled by default.
  • Hotlap rework:

    • Ghost is saved for all laps (only 5 best and 5 last laps are kept);
    • Ghost includes car setup, performance meter data, best lap time, comparable telemetry data, conditions details and more;
    • Manage and choose between ghost records from the main menu;
    • Load best lap time, performance meter and such from ghost, or just keep them across restarts (everything is optional);
    • Load weather and other conditions to match a ghost record;
    • Filter ghosts based on tyres and car (now, you can load a ghost for a different car too);
    • Loaded best lap time shouldn’t show up in shared memory or in race output;
    • Ghost recording stops on messed up laps;
    • Most of these things won’t be available with RSR app present, to be safe (akin to other physical experiments);
    • Option Use original materials loads the skin as well;
    • Ghost advantage can be loaded live'.
  • VR:

    • Oculus manifest generation fixed (although, it’s still not being picked up most of the time, no idea why);
    • CMAA2 is compatible with VR;
    • Sun shadows in VR are better configured;
    • Tweak to display HUD on mirrored window (optionally, hide in the headset, or hide entirely);
    • OpenVR: a parameter to tweak frame order, might help with responsiveness and performance;
    • OpenVR: a tweak to submit depth buffer as well (not sure if runtime would do anything with it, but why not give it a try);
    • Mirroring smoothing works without SPS;
    • CSP is better aware of moving headset and should handle user leaving the car properly (switch audio and rendering; optional, enabled by default);
    • New VR tweak (disabled by default) lowering UI render frequency if mouse is not moving or pressed;
    • VRS quality: different quality options for Quest 3 presets;
    • Accurate mirror projections are removed from VR for now;
    • Resizing AC window in VR mode no longer messes up HUD dimensions;
    • Better performance measurement support, smoother loading;
    • VR tweaks: option to inject Revive to run VR in Oculus mode using SteamVR or OpenXR runtime;
    • VR tweaks: option to allow switching filters in VR live, option to load the actual filter name from video config (both are experimental and disabled by default);
    • Mouse moved by a controller shouldn’t lag behind when car is moving anymore;
    • Moving controllers ensures to un-hide mouse pointer;
    • See-through VR HUD style fixed, custom VR HUD styles are better compatible with LCS;
    • New VR tweak ensuring AC window is not cropped in VR (messes up with mouse, got me a couple of times already);
    • Constraining mouse pointer to AC window in VR with windowed mode is enabled by default.
  • Online-related:

    • Conditions for session voting (for new menu and API) are closer matching original (now can’t cast a session vote in the last 30 seconds of a non-race session);
    • Set ballast confirm button fixed;
    • Disabling entries in chat settings fixed;
    • Cheats detection improved a bit;
    • New [EXTRA_RULES] NO_BACK_TO_PITS_SESSIONS=Q, R parameter to forbid teleporting to pits in qualify and race sessions only (P for practice);
    • New [EXTRA_RULES] DISALLOW_DEV_BUILDS=1 parameter blocking WIP builds, just in case;
    • CSP syncs server features and background image URL when jumping through a portal;
    • Custom loading screen script is working even if the server is using a custom loading image.
  • Physics-related:

    • Rare physics collapse with rain physics enabled fixed (best way to recreate is to drive on bumpy surface making sure rear wheels follow front wheels);
    • New physics experiment for time transponder to operate with 1 ms precision;
    • New physics experiment to start counting the first lap when crossing the starting line first time in practice sessions with hotlap start;
    • AC no longer crashes if power.lut in data.acd is damaged, instead it’ll use CSP LUT loader (but only if there’d be a crash otherwise);
    • Experiment fixing spawn points moved to completed section;
    • Unpausing offline races no longer causes simulation to jump forward in time.
  • Controls:

    • Raw mouse input rewritten, actually operates at mouse frequency;
    • New keyboard & mouse script for analog inputs of Wooting keyboards;
    • Pausing mouse steering resets accumulated angle;
    • Axis remapping removed from Gamepad FX module, please use Controller Tweaks app instead so it’d be properly stored in controls.ini;
    • Script Mobile from Gamepad FX updated, works again (Expo keeps changing things), wizard includes a link to an APK which should work until Google blocks sideloading APKs.
  • Rendering improvements:

    • Interior masking works a lot better with LCS;
    • VAO applies to refracting headlights;
    • Trees in mirrors can receive per-vertex shadows (without using most expensive mirrors option) and react to wind;
    • Flickering reflections (happening sometimes with a single face per frame and reprojection with LCS) fixed, reflections reprojection is smoother, especially for rougher surfaces;
    • Shadows flicker around cars in medium distance (noticeable on a race on Nordschleife when starting last, for example) fixed;
    • Bounce-back effect takes environment brightness into account as well, just a bit, for more lively look;
    • Puddles got waves if wind is strong enough;
    • Windscreen shaders flip normals in pixel stage if they detect surfaces facing away from camera (for example, fixes Porsche 911 Carrera S);
    • Shadows move smoother, especially when sun is close to horizon;
    • Inverse side of tyres (which started to be drawn around 0.2.6) got an offset, so if a car has tyre meshes double-sided to begin with (for example, Lamborghini Diablo SV by slang_diablo_sv), it wouldn’t look wonky anymore (offset is 2 cm);
    • Shadows on grass are slightly adjusted to be sharper and more reasonable;
    • Ideal line no longer illuminates everything with Extra FX;
    • Light bouncing off track surface shouldn’t illuminate car interiors anymore;
    • CSP tyre skidmarks no longer have speculars (doesn’t affect ice, dirt or gravel marks).
  • Car audio is entirely rewritten:

    • Should be faster, better logic when it comes to silencing distant cars;
    • Car soundbanks can’t redefine events without /cars/ prefix anymore (but can define the ones that weren’t seen before);
    • Wind audio is more intense with an opened door;
    • Limit for cars producing audio at once is set at 25;
    • Extra parameter throttle for turbo event now uses correct throttle value (taking cutting off into account);
    • CSP exhaust flame particles are linked to backfire audio, audio fixed;
    • When engine explodes, backfire audio uses a simple DSP to sound a bit differently;
    • CSP car audio refreshed a bit, useless clutch event is dropped;
    • New tweak: actual brakes intensity for wheels (affected by ABS);
    • New tweak: skids audio pauses without slip or contact with ground;
    • F7 (free) camera no longer gets track camera’s 2.5 volume multiplier for better consistency (not a bug);
    • Surface audio: volume is tied to the load of the wheels.
  • New window creation and handling:

    • Exclusive fullscreen has been replaced with a modern compatible fullscreen implementation (just in case, old approach is available as an option);
    • Alt+Enter is more reliable, with AC keeping its windowed size across sessions;
    • Maximize button works the same as Alt+Enter;
    • Binding for Alt+Enter can be changed;
    • Pressing Alt+Enter if AC window covers most of two monitors will extend it to cover those two (or more) monitors;
    • Flip model is active everywhere, including VR, unless compatibility option is used;
    • Cursor clipping (previously used for VR) reworked, now can be activated for windowed mode without VR too;
    • Option (disabled by default) to keep AC running when the window is being resized.
  • Optimizations:

    • New option (enabled by default) for using WIC (modern Windows approach to load images) to load PNGs and JPEGs, much faster;
    • Modern DDS loader tries to generate MIPs on CPU when possible, helps with rendering performance;
    • Splashscreen shows up faster and takes less time to render;
    • Loading parallelization is more aggressive;
    • Custom implementation for audio banks and GUIDs loading to speed things up a bit more;
    • Shader replacements load textures asynchronously during loading to speed things up and make loading more responsive;
    • Windscreen reflections optimized a bit, now using lower resolution if blur is active, and a bit simpler blur;
    • Physics setup for tracks no longer waits for textures to load, speeding up loading a bit;
    • A lot of functions related to AI splines processing are rewritten to improve accuracy and stability, as well as improve performance (in some cases, some rare overly long tracks might end up being reported as 1% shorter), AC no longer crashes if a spline overlaps itself;
    • CSP generates lightweight alternative mesh buffers for casting shadows;
    • IMGUI drawing allocator adjusted, might work a bit faster;
    • A bunch of other optimizations to loading process;
    • Mesh and texture deduplication no longer slows down loading or gets in a way of parallelization;
    • Lua calls from C++ are a bit faster too;
    • Internal C++ structures (mutexes and maps) are replaced with a custom faster version, leading to an overall speedup;
    • CSP is compiled using a unity build approach, that should also help a bit;
    • Compiler upgraded from 2019 to 2022 version (I ran into a pretty big bug with 2019 one, so I felt like it’s the time);
    • Unused background threads close sooner.
  • DirectX-related tweaks:

    • During DirectX initialization, CSP keeps track of whatever is going on and shows the culprit in possible slow downs (without that annoying popup message about initialization being slow);
    • Render scale adjustment is done by CSP now, should resolve some potential issues with variable rate shading and looks better too (quality can be adjusted in Graphics Adjustments);
    • HDR rendering is compatible with YEBIS replacement;
    • Compatibility with variable refresh rate improved, no longer optional;
    • New option Pace frames better (disabled by default) helps to reduce latency by asking GPU to time when to start rendering the next frame;
    • Shaders cache purging on CSP updates no longer clears out cache of other games;
    • Option to select brand of target GPU in DXGI Tweaks settings;
    • When GPU asks to slow down (for example, when screen is off), AC will listen;
    • V-sync video option works with the new swap chain (with an optional tweak for an alternative implementation).
  • More new options:

    • New non-physics experiment for recording ghost with 1 ms precision (enabled by default);
    • New non-physics experiment changing number of samples of performance meter based on track length (enabled by default);
    • Binding AC to localhost instead of 0.0.0.0 to hide Windows Firewall messages (disabled by default);
    • Option to use right mouse button for rotating F5 cameras;
    • Option adjust the speed of F5 cameras;
    • Option increasing track render distance by 2 for free/F3 camera is optional.
  • Default Weather FX style:

    • Clouds rewritten to have more depth and better performance;
    • Extra cloud layer appearing occasionally fixed;
    • Cloud shadows are nice and sharp;
    • Fog backlighting is dimmed in tunnels;
    • Sun rays are tuned down, especially in VR;
    • Lens glare in VR disabled entirely;
    • Bloom intensity depends on weather clarity;
    • Aurora effect fixed (there was this annoying shifting of pixels);
    • Enabled HDR stops YEBIS replacement from dithering and clamping the output;
    • NaN protection for YEBIS replacement;
    • If a scriptable filter requires for virtual mirror post-processing to be done separately, YEBIS replacement now can handle the request and add a bit of glare too.
  • New modes:

    • New Revenant mode: a custom ghost with all the visual effects and proper collisions;
    • Traffic mode: options can be edited in-game, cars spawn more lively at the start.
  • New logic for mouse capture for mouse steering, F7 camera and such:

    • CSP ensures mouse wouldn’t leave AC window;
    • Mouse position is restored when cursor is shown again;
    • Options to capture mouse for Neck FX and orbit camera;
    • Options to use raw input for F7 and other cameras.
  • New menu:

    • Enabled by default;
    • Drive button changes icon based on setup test status;
    • Randomize setup name button turned into a menu for extra functionality, dragging menu blocks fixed not saving across sessions properly fixed;
    • Chat settings are available;
    • Telemetry and Lap Times buttons are available with all window sizes;
    • Infinite sessions are shown as such;
    • Duplicated weather row in session info removed;
    • Fog in car thumbnail fixed (also affects car shots);
    • Moving components should work better, hold Ctrl to avoid accidental shifts;
    • Press Enter to save setup when typing its name;
    • Issue with cars with 0 for a gear ratio fixed;
    • Fix for some of setup items missing their default value and other details (often affected items in Alignment);
    • Better support for specific setup items, better positioning;
    • Heuristic for detecting mirrored setup items updated, checks display multiplier and setup item labels;
    • Fix for saving setup (name editing, empty category selection by default, missing extension);
    • To help dealing with consequences of older builds, setups without category will also be shown now;
    • At the first button press, mouse moves onto the drive button;
    • Compatible with FORCE_START option, as well as with ac.tryToStart();
    • Ctrl+Tab in main menu goes through Telemetry tab too;
    • Vertical setup tabs scroll to keep the selected tab in view.
  • Other UI changes:

    • Ctrl+Tab: outline style updated, sizing fixed;
    • New taskbar: when icons are hovered, windows are highlighted;
    • Simplified render UI option replaced with a dropdown to choose between a default, a simple style or some visual improvements;
    • New pause menu: camera shift improved, added nearby clipping, better rotation controls, better camera positioning, force deactivates TAA when paused to get dynamic motion blur to work properly;
    • Translucent IMGUI windows blur Python apps and AC UI as well;
    • Blurring for translucent IMGUI windows is better and faster;
    • Ctrl+Tab works property if UI scale is different from 100%;
    • All of CSP modal dialogs (excluding the ones from Lua, they have an argument for it) can be closed by pressing Escape or by clicking outside;
    • IMGUI UI rendering reworked, should help with performance.
  • Nice Screenshots:

    • Accumulation DOF settings moved to in-game photo app, with presets;
    • Shadows blurriness requires at least 250 samples to achieve the full radius (previously, 100);
    • Accumulation samples cap raised from 120 to 999ж
    • Disabling AC blurred wheels for screens affects brake disks as well.
  • CSP showroom:

    • Opened apps will be saved again;
    • Rare crash with acos.ini missing fixed;
    • Camera bindings, flying trajectory and main menu showing up for a frame fixed;
    • Previews generation is fixed, configs updated to speed things up a bit.
  • Car & track configs:

    • More deforming bits can be added with [DEFORMING_…] SIDE=FRONT/REAR/LEFT/RIGHT FIXED_CENTER=0.1;
    • [WINDSCREEN_REFLECTION] INTENSITY can be set below 0.01 without stopping the whole thing;
    • Use [BASIC] KEEP_SEATBELT_WITHOUT_DRIVER=1 to keep CINTURE_ON node visible when hiding driver model;
    • New option [BASIC] LOAD_SEATBELT_OFF=1;
    • Shader smSticker is compatible with Rain FX;
    • Rotating car components (extra_animations.ini) pause when AC is paused;
    • Live reloading for digital instruments showing odometer values fixed;
    • CSP digital instrument values are rounded down;
    • Formatting for CSP digital instruments shouldn't crash AC anymore (switched to a custom implementation);
    • New [ENGINE_DATA] BODY_TORQUE_MULT=0 for engine.ini (just in case somebody is working on some silly car where engine is a different thing altogether), sets a multiplier for how much changes in RPM rock the car (use [ENGINE_DATA] ORIENTATION=0,0,-1 to specify engine orientation);
    • Inputs KERS_MAX_KJ and KERS_LOAD now act like ac.StateCar.kersLoad, taking both ERS and KERS into account;
    • If your car is using transmission_ext event, add [AUDIO] TRANSMISSION_EXT_VOLUME_MULT=1 to compute its volume in the same way as AC computes exterior engine volume (boosted for track cameras);
    • New [SHADER_REPLACEMENT_…] flags: EXTRA_FX_SKIP_GBUFFER=0/1, EXTRA_FX_MASK_GBUFFER=0/1, EXTRA_FX_BLEND_GBUFFER=0/1, EXTRA_FX_DELAYED_RENDER=0/1.
  • Real Mirrors:

    • Accurate projection works in a case of several mirrors sharing the same mesh and both visible at once (for example, Ferrari SF70H);
    • Accurate projection is better compatible with virtual mirrors;
    • Option draw center piece only better handles a case with two side mirrors.
  • Render Stats app:

    • Measurements are more precise, the entire frame is measured from start to finish, overhead reduced;
    • Entries that haven’t been accessed in some time are hidden;
    • Time spent on FPS limiter or frames presentation is also measured, but excluded when computing total frame time;
    • VRAM tracking is faster and more informative;
    • Target FPS estimation is a lot more accurate, can be edited live if not correct (note, percentages shown by the app are in relation to target FPS);
    • Performance tips updated and fixed.
  • Built-in lap time app:

    • Before crossing starting line for the first time, current lap is shown as 0;
    • Extrapolation for current lap time to show the time precisely at the time the frame is being drawn.
  • Photo app:

    • White balance slider (instead of that another one);
    • Scrolling for saved positions;
    • Default grid mode changed to compact;
    • Grid is shown only when the camera is rotating.
  • Other apps:

    • App Shelf: automatic updates are enabled by default, the process has been thoroughly tested and fixed;
    • Audio Volume app: devices list no longer kills performance;
    • Built-in HDR app renamed to avoid confusion (an app to configure actual HDR is coming soon).
  • Miscellaneous changes:

    • New binding to show and hide Quick Pits Menu;
    • Main game loop rewritten to allow for further optimizations;
    • Frame limiter rewritten to hit target FPS precisely;
    • Algorithm used to compute unique machine key fixed, some Setup Exchange accounts might have been switched as a result (sorry about that);
    • Driver head (part of 3D model) responds to steering and drifting a bit;
    • A thing silencing FMOD explosions adjusted, uses 500 as a threshold instead of 3.5 (turns out, 3.5 is very easy to reach when messing with [AUDIO_VOLUME]);
    • Crash handling reworked, now generating a nice small ZIP file for a crash report;
    • F5 camera: orbit speed no longer depends on FPS, a few fixes for non-orbit one;
    • Original mouse hider has been replaced with a new implementation that also changes cursors and tracks mouse delta properly;
    • Mouse hider timeout reloads live;
    • Refracting headlights cache their maps to improve loading times and VRAM consumption;
    • If [REFLECTIONS_FX] MASK_CUBEMAP_OFFSET in car config is not set, CSP uses the same logic for positioning masking cubemap as it does with free camera for better consistency;
    • Race config verification updated, AC loads actual track and car IDs when loading a replay;
    • Benchmark result text includes CSP version;
    • If FMOD is unable to initialize output device, it’ll automatically try to change to the next one until all possible devices have been tried;
    • Custom AI disabled by default (that was a mistake), supports infinite number of debug lines;
    • Music tracking improved, properly reacts to pausing, seeking and closing the source;
    • Rare crash related to caching for car physics scripts fixed;
    • Start camera: overall movement improved a bit, shaking with custom trajectories fixed, support for "title" and "message" in custom trajectories config is improved;
    • Mesh optimizations should no longer affect the look of any geometry, also don’t affect meshes on CPU side and only apply when geometry is being transferred to GPU;
    • If AC ever gets stuck, press Ctrl+Shift+Alt+Win+F12 to crash it and get a report (please send those to me);
    • Scriptable filters can postpone virtual mirror render via API or in manifest (helps curved filter to be compatible with virtual mirror);
    • CSP Debug: button on Render tab for checking baked rain occlusion;
    • Triple screen configuration saving is a lot more reliable (rewritten, saves automatically a few seconds later, or more reliably on exit);
    • Skidmarks no longer dent local heightmap (overly complicated, looks messy, and resolution is not quite enough anyway);
    • Idle in background fixed, can be changed live;
    • Some crash messages are more informative;
    • Full reloading process reworked a bit: now changes in car or track configs triggering full reload won’t touch unrelated modules (like, adding [A] B=C to a car config should no longer force Weather FX to restart);
    • Few small issues related to CSP holding some files opened for a bit fixed;
    • Old crash dumps will be removed from time to time.
  • Other fixes:

    • Odometer saving fixed;
    • Brake disks glow (dynamic light) fixed;
    • Sparks stretched too much fixed;
    • Missing driver visor in some conditions in outside cameras fixed;
    • Piece particles are drawn over skidmarks;
    • Skidmarks: tyre patterns fixed, saving as OBJ should be working again;
    • Spectators use flash 20 times less often;
    • Default chase camera updated to be less jittery, got a parameter for G-force contribution;
    • Sky shader rarely producing not-a-number in a particular points of the sky fixed;
    • Stars sampling in sky shader adjusted: threshold for showing up with LCS increased, general optimizations;
    • Shadows from driver hands are no longer a previous animation frame leading to unpleasant artifacts when steering;
    • Driver model flex no longer overrides car body flex when casting shadows;
    • Rally and hillclimb tracks, as well as new modes, don’t take into account number of cars when estimating base number of spectators (also, formula is changed so spectators would max out a lot faster);
    • If Rain FX is disabled, rain in conditions data will always be 0 (fixes issue with rain audio without Rain FX module active);
    • Rain/dumb AI splines no longer interfere with AIs going to pits;
    • Car door opens only once loading is finished;
    • Checking if AC window is in foreground improved, samples a few points in the center of AC to see if at least one of them is not covered;
    • RSR app detection (used to stop physics experiments and such) is more robust;
    • Awake physics in pits: wheels no longer rotate (while it makes sense physically, it looks weird);
    • Old menu: look of new chat is improved;
    • Transparent flag is removed from rear view mirror geometry, fixing possible issues with VR and such;
    • New generic fix for all cars switching windscreen materials from alpha test to alpha blend;
    • Track ambience audio repositioning fixed;
    • Triple screen with Extra FX supports live pixel density changes;
    • Controlling AC with two mice in split-screen mode works better;
    • Ctrl+C pressed in the main menu no longer activates AI;
    • Rare crash related to cars storing custom physics values in replays with car.ini config fixed;
    • Positioning of sun origin for sun rays fixed (could get messed up with origin shift), might have affected other on-screen projections;
    • Occasional loading screen flicker with FSR fixed;
    • Visual bug with HDR enabled but not available occuring after resizing CSP fixed;
    • New pause menu with apps in pause menu enable is compatible with mouse steering;
    • Movement of Quick Pits Menu with custom UI scale is fixed;
    • Using a pen (like a Wacom tablet thing) with multiple monitors should work better;
    • Downshift protection no longer shows up with autopilot;
    • Pausing certain computations for distant cars reworked to take FOV into account and being a lot less agressive overall;
    • Comparable telemetry updated, now should be a bit more predictable and reliable, less likely to override the whole lap with a single last frame;
    • Alt+… hotkeys no longer make a beep sound;
    • Cloud shadows no longer cause a flicker with origin shift;
    • Some apps occasionally disappearing from the apps list are fixed;
    • New skidmarks no longer save when reloading while AC is running;
    • Free camera: mouse pointer won’t be grabbed if left mouse button is pressed (fixes issue with CSP Debug not being able to pin a force);
    • Transparent helmet meshes going out of alignment because of driver bending in some specific cases fixed;
    • File monitoring fixed, listening to a folder recursively after it’s been set in non-recursive mode actually works;
    • Missing or damaged triple_screen.ini no longer crashes AC;
    • Baking of some stuff during loading should be a bit more reliable;
    • IMGUI windows saving fixed, changes that occur shortly before exit are saved as well;
    • Randomizer used by CSP reworked, should be a bit faster and a bit more random;
    • Ghost no longer jumps for a frame with scene origin change;
    • Active free camera stops keyboard arrows from moving mouse pointer;
    • Fonts rasterization scale is clamped by 3 to prevent crashes with huge UI scale;
    • CSP cache cleaning routine picks up .tmp files as well;
    • AC shutdown should be a bit more stable;
    • AC runs properly when starting folder is not set correctly;
    • More crashes should be caught by CSP without the need to go to Local/CrashDumps;
    • Memory consumption should be slightly reduced;
    • A bunch of smaller fixes and optimizations.

Lua

  • Common API:

    • New car.extrapolatedLapTimeMs with precise graphics-time-corrected lap time;
    • New car.bestLapFromGhost: true if best lap time is not from this session;
    • New car.isRequestingPitStop: true if car is planning on going to pits;
    • New car.isRefueling, car.isChangingTyres, car.isRepairing;
    • New car.ffbSteerAssist fixed;
    • New sim.isHDR, sim.isMouseDeltaActive, sim.isMouseCursorHidden flags;
    • ac.getSim().frame and ac.getSim().systemTime are regular numbers;
    • New ac.isControllerBrakePressed();
    • INI parser no longer does INIpp stuff when loading controls.ini, meaning that ac.ControlButton() can use more characters for custom names;
    • New ac.onReplay() function;
    • mat4x4.look() no longer crashes if third argument (up) is not set;
    • rgb:hex() fixed;
    • Equality operators for mat3x3 and mat4x4;
    • setTimeout/setInterval reworked, more accurate and predictable (callbacks are triggered in order, errored callback doesn’t affect others, timers use the same C++→Lua call to keep things fast);
    • string.split: limit is respected if separator is empty;
    • CSP string functions can parse math.huge as limit to disable it;
    • ac.isControllerGasPressed() and such respect gamepad axis remapping;
    • ac.onOnlineWelcome() returns message even with the new main menu enabled;
    • ac.readDataFile() fixed, car scripts can load files from data.acd without using absolute paths;
    • Conflict between ac.getCarColliders() and ac.getCarDataFiles() should be fixed;
    • List of countries updated and fixed (old entries, such as ac.NationCode.Turkey, ac.NationCode.USA or ac.NationCode.Northern, still work, but are not documented and won’t show up if the list is iterated).
  • I/O:

    • Numbers in file attributes are proper numbers as well, none of that uint64 stuff;
    • File saving (with secure flag) is faster and more reliable;
    • New io.setAttributes();
    • New io.fileInUse();
    • New io.getExecutableAttributes();
    • New io.replaceFile();
    • New io.arePathsEqual();
    • io.recycle() actually moves files to the Recycle Bin.
  • UI:

    • CEF: engine update, fixing a few JS↔Lua communication issues and ac:// scheme, with a new acs:// scheme that can be used in secure context (also, disabled paste protection for developer tools), installation and reinstall are more robust;
    • ui.columns() takes flags;
    • New ui.bringWindowToBack();
    • ui.setItemDefaultFocus() can be used to hint where buttons would move the mouse initially.
    • Use ui.forceSimplifiedComposition(true) to disable frost effect for a single window;
    • ui.onExclusiveHUD(): parameter to get rid of padding, new return values to show Lua Debug app (or other apps) without stopping the rest of UI;
    • Rounded corners with large radius are smoother;
    • More mouse cursors are available;
    • A few new icons.
  • Libraries:

    • New shared/ui/components library for custom main menus to be able to draw chat and other things;
    • New shared/utils/kn5 library allowing to collect stuff from KN5 files (such as shader replacements) from background workers too;
    • New shared/ui/base with some generic helpers;
    • Library shared/sim/ghost got a lot more new stuff, overriding ghost time and such works is more reliable;
    • New functions for shared/utils/ioext.
  • Scene API:

    • ac.findNodes() and similar, as well as other scene filters, rewritten to operate much faster;
    • New ghostRoot:yes filter;
    • New ac.overrideLODMultiplier();
    • New ac.findMeshes():hintAsObscured() method helping chunks optimizer to hide extra geometry (unlike regular deactivation, chunks optimizer removes things from the scene);
    • :applySkin() can take a folder name as well;
    • :resetSkin() works better if it’s a KN5 other than car or track KN5;
    • :setVisible() got a parameter to disable motion reset on re-appearance;
    • Updating textures with a callback now checks texture size to prevent crashes;
    • Dynamic textures no longer crash if target materials stop existing;
    • VAO patch, if present, will be applied when loading extra KN5s (same filename, but with .vao-patch extension).
  • Gameplay API:

    • New ac.accessMouseDelta() to access this mouse delta capture, allowing to easily create FPV custom camera controls and such;
    • New ac.hideMouseCursor() to nicely hide mouse for a bit;
    • New ac.disableVirtualMirror();
    • New ac.disableExtraHUDElements();
    • New ac.disableNeckFXDriverModelMovement();
    • ac.resetVRPose() marked as deprecated;
    • ac.restartAssettoCorsa() shouldn’t crash AC anymore (it was working, but leaving its Lua script in a sad state);
    • ac.accessAppWindow() updated, applies UI scale for both AC and IMGUI windows (previously, it was only applied to IMGUI windows);
    • ac.trySimKeyPressCommand('Activate AI') (used by, for example, Unbound app) can be used to disable AI as well;
    • New ac.onOutgoingChatMessage() for intercepting user messages.
  • Physics API:

    • physics.setAISpline() takes an argument for AI hints config file;
    • physics.setAITopSpeed() stops AI flood from setting its AI speed limit;
    • physics.setAIPitStopRequest(0, true) works in the rain;
    • physics.addTrackSurface() fixed, should use the transform matrix properly and be less crashy overall.
  • New Modes:

    • ac.setReplayBasedGhost() to assign a replay of one car as a live state to another car;
    • ac.disableCar() to hide a car entirely;
    • [TWEAKS] SAME_DRIVER_MODEL_ACROSS_CARS=1 to use the same driver model for all cars;
    • ac.addMainMenuSettings() adding a custom piece of UI to the main menu;
    • physics.setUserControlledCar() for changing which car is being controlled by user;
    • New ac.overrideWeatherConditions().
  • Weather FX:

    • script.asyncUpdate() shouldn’t cause any crashes anymore;
    • New ac.setCloudShadowBlur() styles (set to 0 for sharper cloud shadows), can also be used to adjust shadows fade out with distance;
    • New ac.overrideVirtualMirrorShader() for Weather FX styles allowing to set a custom HDR→LDR conversion shader for virtual mirrors and thus move them back to UI layer and solve some potential issues with post-processing (like virtual mirrors messing up sun rays);
    • Update step (computing controller and style script) moved a bit down the frame, now occurs after the camera position update.
  • Mouse steering:

    • A few new functions to override keyboard inputs as well (look for wooting script).
  • Lua apps:

    • New ac.toggleFullscreen();
    • ac.stringifyCurrentSetup(): option to exclude metadata;
    • ac.getSetupSpinnerValue() is around 4 times faster;
    • App services can access ui.Icons and ac.noticeNewApp().
  • Car physics scripts:

    • ac.addTorque() got a parameter for FFB (0 by default to keep things compatible);
    • Car wheels in ac.accessCarPhysics() got a angularVelocity field for hub angular velocity;
    • New ac.setEngineRPMIdle();
    • New values for ac.overrideSpecificValue() allowing custom physics scripts to override TC, FFB multiplier and steer assist value.
  • Other changes and fixes:

    • Scripts stop outputting things in CSP log after 1000 lines, the log includes their names so it’d be easier to track down spammers;
    • Scripts lifetime management updated, should help with some crashes on reloads;
    • Scripts with UI/scene access sorted out, from now on all such scripts have full access to scene, UI, render, particles, lights, audio, etc. (apart from car scripts);
    • When looking for shared/… Lua libraries, CSP is going to check its lua-shared modules first to speed things up, and fallback to default search only if there isn’t anything (might break compatibility if your script also has shared/… folder with the same file names);
    • Checking if ui functions can be used should be more reliable, properly raising an error if used outside of IMGUI context;
    • Exceptions on C++ side when in Lua API now stop Lua scripts entirely, which hopefully should prevent some of crashes (sadly, it’s the only way to get it to somehow work without sacrificing performance);
    • Using ac.overrideWeatherConditions() or the old function for overriding replay conditions makes sure to restore actual conditions when deactivated even if controller is not pushing new conditions every frame;
    • Lua Debug app got colorful marks to help distinguish many items (shows up when there are too many, or you can use ac.debug('name\t#ff0', …) to specify color explicitly);
    • Background workers can return values directly using return without losing the first value now (previously, the only way was to use worker.result = …);
    • Scripts loading CSP textures with paths relative to extension/textures folder fixed;
    • LuaJIT panic crashes now should include dumps;
    • LuaJIT synced with the latest changes upstream;
    • Some documentation fixes and improvements.