Skip to main content
  • Version ID: 3747
  • Size: 136.66 MB
  • Published: 2025-12-25

Changelog

New features, options and improvements

  • Major fixes:

    • Triple screen-related issue with CSP not picking up regular AC configs fixed;
    • Timing of rendering and physics threads rewritten, fixing some occasional problems with performance;
    • Refraction headlights messing up certain meshes, especially LOD meshes, fixed;
    • Graphics adjustments: grooves fix has been reworked to stop breaking things;
    • V-sync not working correctly on some configurations fixed.
  • CSP physics:

    • Torque reaction edge case fixed;
    • More channels in CSP Logger and now variable precision to avoid some channels hitting data type limits;
    • Wings app & CSP logger downforce/drag levels corrected (fins were being included due to incorrectly set flag in code, did not affect physics);
    • New power steering max torque setup options;
    • Fixed blanket temperatures and overrides;
    • New GRIP_MULT_Y in tyres.ini;
    • Rewritten rev limiter to play more nicely with axle flex;
    • CSP controller inputs: inputs for missing extras G…T are added, new DRL input for daytime running lights;
    • New EXT_LOOK = CHECKBOX for setup.ini changing look of an item into a checkbox (switches between MIN and MAX);
    • Hide and disable setup items based on the state of other setup items using EXT_VISIBLE_WITH and EXT_ENABLED_WITH;
    • Hide setup tabs by adding [EXT_TAB_TWEAKS_0] TAB=ALIGNMENT EXT_VISIBLE_WITH=… (examples of queries: EXT_VISIBLE_WITH=WING_1 shows a thing if WING_1 is non-zero, EXT_VISIBLE_WITH=WING_1:5 is if it equals 5, WING_1≠5 is if it’s not, WING_1>5 if it’s above 5, WING_1≥5 if equals or above 5, complex queries such as EXT_ENABLED_WITH='{ WING_1:5 & ( ! WING_2<3 | SPRING_RATE_LF>10 ) }' are supported as well).
  • Inputs:

    • Some keyboard bindings failing entirely with high FPS fixed;
    • New binding to toggle high/low means/lights off;
    • New binding for toggling DRL;
    • New binding to remove smoke;
    • Direct input devices initialize with keyboard or gamepad input modes again, in background so loading speed wouldn’t be affected.
  • Audio:

    • Gear change events mixup fixed;
    • Surface audio not working if WAV is in uppercase fixed;
    • Surfaces volume slider is fixed;
    • New Alter wind audio tweak replacing broken audio sample used for slipstreaming with a DSP effect;
    • New audio tweak playing wind audio from cars nearby;
    • Wind volume fades out without atmosphere (for races in outer space);
    • Silence audio: default value changed to new When idling in background for better compatibility with idle-in-background from DXGI tweaks.
  • DXGI tweaks:

    • New tweak activating Win11 efficiency mode when AC is in background, enabled by default;
    • New Consider DXGI’s occluded state tweak (previously, with 0.3 it was always on, now it can be disabled to debug issues if AC suddenly stops rendering sometimes);
    • Smooth resize option in DXGI tweaks is enabled by default and improved a bit;
    • New experimental background idle option pausing rendering instead of limiting FPS (might help with some glitches on certain systems where AC would sometimes refuse to wake up after being Alt+Tab’ed back into);
    • New Adaptive V-sync option temporarily pausing V-sync if FPS dips below 90% of display refresh rate, to prevent FPS halving;
    • Options confining cursor to AC window, forcing AC to be a topmost window and forcing focus that can be enabled based on conditions (fullscreen and/or VR, or always);
    • Borderless window option (it can still be dragged and resized, even without a visible frame);
    • Alternative V-sync implementations in case Windows 11 with its Variable refresh rate option blocks regular V-sync from working.
  • Rain FX:

    • Rain drops missing on opaque materials with black alpha-channel fixed;
    • Baked rain occlusion not applying correctly to skinned meshes fixed;
    • Issue with rain puddles generation on low-detailed meshes using actual mesh fixed (now uses noise map again, like it was before, look for Collecting puddle meshes in logs for more details);
    • Rain hits and splashes are slightly readjusted to reduce aliasing and better react to rain conditions;
    • Rain hits fade nearby to be less distracting with open wheelers;
    • Windscreen drops caused by actual water (falling off edges, or from other cars) are smaller;
    • Rain splashes adjusted to fix issues with brightness, especially with LCS, now with a bit of a rainbow on a sunny day;
    • Rain occlusion misbehaving with water surfaces and trees fixed.
  • Smart Shadows:

    • First split reduction when camera is close to a car adjusted, should work smoother and have a more pronounced effect, also affects other splits;
    • Shadow biases adjusted to reduce self-shadowing issues with double-sided shadows;
    • When the sun is low, sun shadows trajectories update every frame (shadows moving unsmoothly look like crap, so I’m ok with a bit of a performance hit in exchange for that lovely smoothness);
    • Shadows with custom shadow matrices disabled no longer break if origin shift is enabled.
  • Grass FX:

    • Some local variance for grass shade;
    • Scriptable filters that alter FOV no longer mess up grass culling;
    • TEXTURE_BASE_CHANCE = 0 works properly, stops spawning basic grass nearby if normalized chance of basic grass is below 5%;
    • Customly colorized pieces (if color has red or blue component disabling surface color sync) don’t fade to green with distance.
  • Particles FX:

    • Smoke from locked wheels is visible again;
    • Smoke particles rendering improved to make things more lively;
    • Screen smoke (effect filling screen with smoky effect if camera is within smoke particles) conditions for activation have been fixed;
    • Flame and smoke particles from track configs no longer act strange for a first frame after spawning in;
    • Fireworks: new behavior option, spawn only if scripts are using fireworks.
  • Skidmarks FX:

    • A lot more responsive, can visualize ABS in action;
    • Shape for newly spawned piece adjusted;
    • Other small improvements.
  • Weather FX:

    • Custom MSAA resolve handles LCS properly;
    • New ac.setCameraExposureMultiplier() for Weather FX styles just in case;
    • BC7 compression for cached clouds texture dropped, instead, number of slices has been lowered from 128 to 32 (simpler animation, but much better static quality, and still only using 45 MB of VRAM);
    • Increased cloud shadows resolution option is enabled by default;
    • Missing moon, earth and stars textures used by default Weather FX style fixed;
    • Default Weather FX style: cloud map parameters adjusted, Extra FX emissives are 3 times brighter with LCS, to closer match the look without LCS, or the way Pure looks.
  • Online extensions:

    • Using AI (with [EXTRA_RULES] ALLOW_AI = 1) automatically activates net-aware AI tweak, which now should work a lot better;
    • New [EXTRA_TWEAKS] LOWER_SEND_RATE_FOR_STATIONARY_CARS = 1 lowering packets rate for stationary cars (experimental).
  • Adjustable car color (used in online, AI flood):

    • Alter secondary color, interior color and more (for some of compatible cars);
    • Loading of previously selected color fixed;
    • Complex textures (above 16×16 px) are colorized instead of filled;
    • Lua event ac.onCarColorChanged() is raised properly.
  • New behavior:

    • New tweak replacing AI smoothing with critically damped springs (purely visual, enabled by default);
    • Fix downshift option fixed;
    • New tweak lowering shifting thresholds on sectors with max speed hint around 120 km/h to stop calm traffic from redlining.
  • Small Tweaks:

    • Dark suit tweak reworked to use actual proper skins;
    • New tweak disabling shifting preload animation for drift or all cars (by default, disables animation for drift cars).
  • UI:

    • IMGUI windows show icons next to titles to make things more distinctive;
    • IMGUI windows now should store collapsed and pinned flag across desktops as well;
    • Reworked forms saving (acos.ini), should be compatible but a bit faster and a bit more compact;
    • Closing modal dialogs when clicking off improved, now ensures to not close it from the same click that opened the dialog.
  • New main menu & pause:

    • Car preview in setup menu: a bunch of fixes and shading improvements, LOD A is used at all times;
    • Menu movement with a mouse updated, now a lot less restrictive;
    • New pause menu can be moved as well, photo mode button animations adjusted;
    • Pause menu is always behind other windows (with an option to show apps in pause menu);
    • Photo mode in pause menu hides pause menu apps;
    • Look for cooldown timer and such updated;
    • Sessions selector when viewing lap times and such fixed;
    • Other tracks are present in the list of setup categories even if Skip creating setup folders option is enabled;
    • Mouse wheel scrolling setup tabs is optional, disabled by default;
    • Driver model flickering for a frame when leaving setup section fixed;
    • Clicking on saved setup brings its name into Save setup name input, but only if it’s empty or has an autofilled name already;
    • Slider malfunctioning on some of setup items with % units fixed.
  • Photo mode app:

    • Layout updated to be a bit more compact;
    • Edit names of saved points, preview camera positions;
    • CPL implementation rewritten to be more accurate and affect lights and digital screens as well (I finally got proper polarizing sunglasses).
  • Advanced chunkenization:

    • The algorithm updated to save a bit of memory and run things a bit more efficiency, better handle low FOVs;
    • Case with a node in track root storing static meshes (questionable KN5s) now will be chunked properly;
    • Meshes with ignorable order now ordered by distant lights layer before being sorted by material;
    • Small objects should no longer disappear in close distances.
  • Multiple ghosts:

    • Ghost of the first lap should be recorded correctly now;
    • The best ghost is mirrored to where AC stored ghosts originally, with extra data stripped, so that existing tools could still see the ghost (optional, enabled by default).
  • Showroom mode:

    • Lap time on car digital instruments is stopped;
    • Driving camera is no longer loaded or saved;
    • Starting camera starts properly;
    • Initial lag with car with setup restrictions is fixed;
    • Brightness with default Weather FX style fixed.
  • Miscellaneous:

    • New experimental KN5 streaming implementation;
    • In-game assists editor available online in both old and new menu;
    • Options to hide main menu and start the race automatically are visible;
    • Hyperthreading fix tweak has been disabled by default;
    • Nice Screenshots: option for LDR samples summation (disables bokeh entirely, not accurate, but just in case);
    • Rewinding replay clears out particles;
    • Extra FX: volumetric lights should look better with LCS;
    • Render Stats: target FPS selector should be working;
    • Autopilot (Ctrl+C) shows an icon in the top left corner;
    • Shaking gear shifter (SHIFT_HD) takes pause and slow motion into account;
    • Windscreen guessing (added to fix strange mods) updated, now uses total mesh area to stop some false positives (if you ever saw a car which would have a mesh inexplicably get ksWindscreen shader, this thing is to blame, by the way);
    • New physics experiment allowing CSP to keep loading and not waiting for wall physics meshes to initialize;
    • Few physics experiments upgraded to completed;
    • Render Stats app pauses when AC is in background;
    • CSP should be able to handle displays of varying DPI better;
    • Method of detecting display refresh rate updated, now should work more reliably;
    • FPS limiter below 5 keeps AC responsive (while waiting for the next frame, AC will keep processing window messages);
    • More informative loading screens when loading replays;
    • VR tweaks: Confine cursor to window area option moved to DXGI tweaks, moved one no longer active by default;
    • CSP trees: fake shadows are compatible with origin shift again, billboards switch to higher resolution LOD for accumulation screenshots;
    • Flicker of dynamic objects with origin shift fixed;
    • Groove meshes (AC making grooves darker as the race goes on): new custom implementation (pretty much the same, but a bit faster and a bit smoother, and should allow to get things compatible with streaming);
    • Activating replay online no longer trims final replay recording;
    • Debug rain occlusion button in CSP debug app now affects skinned geometry as well;
    • Crash handler now checks if crash originated in a different DLL, and warns about it early;
    • Fix for some crashes related to autopilot and such, might fix other AI-related issues too;
    • Handling of AC_CFG_PROGRAM_NAME environmental variable fixed;
    • New tweak for replays shifting car inputs for remote cars online based on their ping;
    • Brake Disk FX: carved effect is more noticeable, width increased by 50%;
    • Navigators: map rendering should be a bit faster, better compatible with origin shift;
    • Occasional crash happening at the start of a race with multiple AI cars fixed;
    • License plate generator fixed (last glyph was missing);
    • Slightly increased AC process priority to try and outcompete Discord;
    • Bounding sphere compute for non-renderable meshes uses a simpler rougher route (they don’t need precise bounding sphere anyway);
    • Saving of caching CSP data should be a bit more reliable, fewer chances to end up with useless .new files;
    • Alt handling to stop beeps with Alt-containing shortcuts redone in a way to keep regular Alt shortcuts working better;
    • HTTP flags (used for Lua web API and other web requests from CSP) updated, should speed things up, especially on Windows 10+;
    • Flatten nodes option removed;
    • Size of custom gear label in the gear app fixed;
    • Rare crash (that looks like another compiler error) related to track lines API fixed;
    • Developer option to produce detailed crash reports (taking more space);
    • Timezone database updated to 2025 (notable changes: DST in Brazil and Mexico have abolished);
    • Additional car icons in the top left corner fixed;
    • Threadpools garbage collector should be a bit less intense;
    • Foreground check option hidden, checks area coverage by default;
    • Logging for CSP attempts of detecting optimal display frequency;
    • Saving should be a bit more resilient;
    • Some instabilities related to GPU processing fixed.
  • Car & track configs:

    • New [SHADER_REPLACEMENT_…] STICKERS_FIX=1 for stickers mesh to overlay any mesh below it (should work the best with DEPTH_MODE = LESSEQUAL);
    • Track audio: RELATIVE accounts for the entire transform, not just for the local offset relative to parent;
    • New AVERAGE_NORMAL_MIX parameter for Extra FX emissives that might help in some extra difficult cases;
    • New INPUT = DRL for car instruments, BIND_TO_DRL for car lights, FALLBACK_DRL_COLOR for custom emissives (by default, OFF_COLOR works only if daytime running lights are active, but if FALLBACK_DRL_COLOR is set, OFF_COLOR is applied at all times), keyboard binding to toggle DRL manually;
    • New flag for extra car animations ([ANIMATION_…]): set AB_ANIMATION = 1 and animation will go from 0% to 50% on activation, from 50% to 100% on deactivation, and then loop back to 0%;
    • New [DATA] DI_0_ALPHA = <0.5>, [DIRECT] for adjusting alpha of digital instruments (for now, only v2 texts);
    • New [BASIC] DISABLE_SHIFTING_ANIMATIONS_WITH_AUTOSHIFTER = 1 for cars that use automatic shifter as a form of automated gearbox (not recommended, proper way of doing automatic gearbox is also available now);
    • CSP animated wipers are loaded last-to-first, fixing compatibility with old broken mods animating the same mesh multiple times (at around 0.2.8 times, a mesh would actually be animated twice at once causing some problems, later it was fixed so that already used meshes would be excluded, but it broke some mods, now it should work and not have a conflict);
    • Animated wipers tool: better support for UI scale;
    • Car settings ALLOW_INTERIOR_SSAO and ALLOW_INTERIOR_SSGI have been removed (they weren’t affecting HBAO+ and ASSAO anyway, and fixing that would surely annoy a lot of people);
    • Track configs: [VAO] FORCE_APPLY=1 to apply VAO tweaks to newer VAO patches (v4 and above);
    • New [SPECTATORS] ALLOW_DYNAMIC=0/1 parameter for track configs overriding Dynamic spectators amount option in track adjustments;
    • New ownMaterial:y and inserted:y (for nodes and meshes from [MODEL_REPLACEMENT_…]) properties for scene queries;
    • Material adjustments change actual material values, not just the ones mirrored to GPU (solves some issues with them not applying correctly in some cases);
    • Default light pollution tint for tracks is no longer zeroes (intensity is still 0 though, this just simplifies configuration a bit);
    • New DISTANT_LAYER_FADE_AT and DISTANT_LAYER_FADE_SMOOTH for track lights used when distant layer is active;
    • Updating track distant lights config no longer triggers full reload;
    • Track shader replacements are loaded only once at the start (previously, they were loaded for each KN5 again and again);
    • Trees surface alignment is forced to recompute if one of tree meshes doesn’t have data cached (and not if cache contains data for a mesh that isn’t present like it was before);
    • Objects Inspector shows static status of track meshes (static meshes are faster to draw).

Lua

  • Common API:

    • New car state fields: .isAIUsingRainTyres (fix for now hidden .aiRainTyres with a wrong type), .isAIGoingToPits, .aiLapsLeft;
    • ac.uniqueMachineKey() is de-deprecated (now, CSP computes the key at launch, so there is no need to wait for it);
    • A bug with some of car and sim states not being filled in correctly at the start of the game fixed;
    • math.isnan() shouldn’t misbehave anymore;
    • ac.ControlButton:setDisabled() should be compatible with the hold mode flag;
    • New global variable __monitored available to all scripts: if true, script tab in Lua Debug app is opened.
  • UI API:

    • New ui.windowTitleWidth() function;
    • Unbinding all of ac.ControlButton():control() inputs removes the section entirely (shouldn’t affect regular AC bindings, only the custom ones);
    • ui.modalPopup(), ui.modalPrompt(): proper arguments for automatic closing, default to false fixing recent regression;
    • Extra car icons (ui.drawCarIcon()): size with UI scale and positioning with fuel icon are fixed.
  • I/O:

    • New os.loadDLL() function just in case;
    • io.scanDir(): missing file attributes, such as .isArchive, are fixed.
  • ui.GIFPlayer():

    • Animated GIFs: better support for certain types of loops;
    • New methods for ui.GIFPlayer() for rewinding, pausing and resuming playback;
    • WEBP support improved;
    • State sharing between scripts (use :rewind() to detach a player from others);
    • If a player is assigned as a texture using Scene API, it keeps working after being GC-ed;
    • GIFs no longer flicker if game FPS is low;
    • Animated textures (GIF and WEBP) can be used naively in both UI API and with skins/shader replacements (could be a faster alternative to using ui.MediaPlayer for everything).
  • Gameplay API:

    • New ac.setDriverShiftAnimationPreloadThreshold() in Gameplay API;
    • ac.applyContentConfig(): option to set a key for localized config updates, more track features can be altered.
  • Scene API:

    • New :blendAnimation() for Scene API allowing to mix few animations together (plus, AC animation compute has been rewritten to smooth and streamline things);
    • Geometry shots of sceneRoot:yes called frequently keep nearby geometry and cars from being unloaded or switched to lower LODs (now, OBS cameras can render things far away more reliably);
    • New :setGrass() for geometry shots to include grass from Grass FX.
  • Physics API:

    • physics.addTrackSurface() no longer uses Embree, instead live track surfaces are handled by ODE to improve editing performance in exchange for tyres raycasting performance (as long as new surfaces are somewhat low-poly, it should be fast enough, and if they’re not low-poly, it’s not going to work all that well regardless), should help with instability as well;
    • Function physics.setAIPitStopRequest stops AC from telling AIs to go to pits for about 100 ms if called with false;
    • New physics.setAILapsToComplete() allowing to override internal counter AC AIs have telling them when to stop racing and go back to pits.
  • Car scripts:

    • ac.setGearLabel() got a parameter disabling shifting animations and audio;
    • ac.AudioEvent() now can use syntax like cars/:own/engine_int to create an audio event without specifying car ID explicitly (so [AUDIO_REDIRECT] could work).
  • Car physics scripts:

    • New ac.extendCarState() allowing to save and load extra data from car states (used by apps such as TimeShift);
    • ac.readDataFile() in car physics scripts can actually access car data with relative paths if car data is packed (with the previous fix, it would only work if path is absolute);
    • New ac.showNotification() allowing to show warnings similar to downshift warning (more types are coming soon, let me know if there is something you need);
    • New ac.setGearsGrinding(): option to add gearbox damage;
    • New ac.replaceClutch() allowing to define a custom clutch implementation;
    • ac.setExtraMass(): arguments to specify damping, stiffness and key (allows to move the mass around);
    • New ac.CarPhysicsValueID.ForcedAutoclutch allowing to fully disable autoclutch, even if selected input method tries to keep it enabled;
    • New ac.accessCarPhysics().targetGear allowing to track shifting process;
    • New ac.CarPhysicsValueID.DrivetrainOpenThreshold, ac.CarPhysicsValueID.DrivetrainClutchOverride, ac.CarPhysicsValueID.DrivetrainDriveVelocityMult, ac.CarPhysicsValueID.DrivetrainEngagedGear;
    • __dirname of car physics scripts from packed data now points to /data folder, matching behavior of unpacked scripts (I hope nobody was using it to check if car data is packed, because that was a bug).
  • Libraries:

    • New shared/physics/automatic-transmission and three more to simplify setting up automatic and automated manual transmissions;
    • New shared/ui/replay library to simplify building a custom replay UI;
    • New shared/sim/di library for altering some properties of digital_instruments.ini live;
    • New shared/sim/events library for rare events (currently, allows Weather FX styles to listen to light pollution configuration changes);
    • New shared/utils/steamvr library for some Steam VR extras;
    • New ghost.stripRecordMetadata() for getting rid of extra 0.3.0+ ghost data;
    • shared/ui/components: functions for the new assists editor;
    • Libraries shared/ are loaded from internal storage to ensure integrity of scripts using them, actual files on a disk are now for documentation purposes only.
  • Other changes and fixes:

    • New experimental ac.getSteerJointFeedback() for FFB scripts;
    • Precomputed Lua bytecode uses unique machine key for validation, cache files generated on one PC won’t work on another anymore;
    • Some crashes related to Lua resource management, causing, for example, crashes on restarts for some apps using ui.GIFPlayer to play static GIFs, fixed.