Skip to main content
  • Version ID: 3460
  • Size: 134.20 MB
  • Published: 2025-06-11

Changelog

  • Real Mirrors:
    • New Adjust FOV and squeese option improving the look of mirrors at grazing angles (enabled by default);
    • New Accurate option for correct mirrors projection;
    • A new tweak showing driver visor with high quality mirrors disabled, enabled by default;
  • OpenRGB integration replaced with a new RGB Control app available on App Shelf, with extended customization possibilities and its own Exchange platform to share presets;
  • CSP will try and track abrupt reportless crashes on subsequent launches, pointing out a crash report generated by Windows;
  • New menu:
    • Telemetry tab is recreated as well;
    • Ctrl+Tab to switch between tabs;
  • New option to hide pit crew of remote players only;
  • New tweak in GUI opening setup menu instead of session details when using those system bindings.

Fixes

  • Fully dynamic pits option stopping cars with axles from moving fixed;
  • Crashes caused by binding turbo, glance and such to D-pads fixed (regression in 0.2.9);
  • CSP previews generation fixed;
  • Recent AC logging rewrite fixed, no longer causes AC to collapse when trying to output long strings;
  • Option to hide pit crew fully is working online;
  • Occasional dead freeze during loading fixed;
  • Autopilot no longer drivers into a wall on a session restart, if the car was in pits before that (and, in general, AIs will switch active pitlane on teleports again based on where they’re ending up);
  • Cars with missing soundbanks should still detect when camera is inside the car (for example, helps windscreen raindrops);
  • New KN5 loader reports missing DLCs properly again;
  • A bunch of bugs with advanced online features on servers with more than 127 cars caused by CSP mistakenly treating session ID as signed fixed;
  • Extra FX: TAA misbehaving on grass (or in other areas with color below 0) fixed;
  • New trees:
    • Tree definitions are reused when reloading settings and cache some things a bit more intensely, fixing memory leaks and performance issues when using Tree Planter app;
    • Sun shadows are a lot smoother, self-shadowing reduced;
    • Shadows and billboads of trees with width above 100% should look better;
    • Ambient shadow is much smaller and more subtle (for large-scale shadows, please use VAO);
  • New menu:
    • Holding Alt to drag mirrored sliders fixed (regression in 0.2.9);
    • Welcome message closes when clicked outside of popup as well;
    • Exporting lap times as CSV is working (previously was generating an empty CSV);
    • Sorting by indices fixed;
    • Voting cooldown no longer applies to kick vote, for both new menu and Lua apps API;
  • Walking Out:
    • Unused cars won’t switch lights automatically anymore;
    • Headlights range misbehaving when switching cars with free camera fixed;
  • Smart Mirrors:
    • MIPs are no longer unnecessarily generating several times at once;
    • Mirrors reflected in mirrors now use cubemap to show something instead of being black;
    • Frame skipping is paused if camera is moving relative to the car too much;
  • Rain FX:
    • Rain hits fade with distance;
    • Rain spray in mirrors should no longer appear inside the car (clip distance increased);
    • Windscreen UV generation reuses worker threads, should speed up the generation a tiny bit;
  • AIs switching headlights according to Weather FX headlights suggestion should have some variance again;
  • AC no longer spams DInput input lost: when controller is lost;
  • IMGUI: symbols and added to the glyph atlas;
  • Skipping LOD A for other cars option no longer forces Rain FX occlusion rebake;
  • Render Stats app: relative subsections (those horizontal bars under the main graph) are meaningful again;
  • Shading in mirrors without LCS active closer matches the main scene;
  • Spam of log messages about HTTP2 and such is fixed;
  • Custom driver models no longer require LOD B;
  • Android Auto: timer fixed, clicking on the entire status block, not just the icon, opens the app;
  • Windscreen reflection shaders preload, should help to prevent a lag when switching to an interior camera for the first time;
  • CSP reporting errors for CM fixed.

Configs

  • New car inputs: AUTO_SHIFTING, MANUAL_SPEED_LIMITER;
  • Emissive shaders, such as smGlass_emissive, are compatible with mask pass;
  • New [_EXTENSION] FORCE_DOUBLESIDED_RAYCASTS=1 for surfaces.ini allowing tracks to enable double-sided raycasts for cars without extended physics (recent fix of that messed up some of the tracks);
  • Custom AI:
    • New .v1 struct for car control allowing to set extra grip, stabilizer and custom ABS logic;
    • New field for activating or disabling input smoothing;
    • New [DEV] DISABLE_AI_SMOOTH_STEERING disabling smoothing for Kunos AIs entirely, for debugging purposes.

Lua

  • Common:
    • New fields: ac.getCar().anyFlamesActive, ac.getSim().bestLapTimeMs (global best time), ac.getSim().isMouseSteeringActive, ac.getSim().originShift;
    • New math.simplex(): a better alternative to math.perlin();
    • New ac.areShapesColliding() allowing to quickly check a couple of shapes (geometric and car colliders) for an intersection;
    • New ac.getUnreadChatMessages() to get the number of unread chat messages;
    • New ac.getCarBlindSpot() returning the distance to the nearest cars in blind zones;
    • New event listeners ac.onLapCompleted(), ac.onTrackPhysicsObjectCarCollision() and ac.onCarColorChanged();
    • ac.areCarsColliding() function has been moved to Common API;
    • Functions web.get, web.post and such now allow to pin HTTPS certificate or access its fingerprint (matches SHA-256 fingerprint in Firefox);
    • web.load… functions loading remote assets can set headers and pin HTTPS certificate;
    • Functions math.saturate() and math.clamp() (as well as …N versions) got a major performance boost, math.clamp() can handle a case where one of the limits is a vector and another is a number (an old bug);
    • Function table.same() no longer malfunctions with false values in associative tables;
    • Pass 'deep' as a second parameter to table.clone() to make copies of vectors and colors as well;
    • Old functions ac.store() / ac.load() rewritten to be a bit more efficient;
    • ac.setHighBeams() works when binding is in held mode;
    • Updating friend status with ac.DriverTags() and ac.tagAsFriend() fixed;
    • ac.getSunAngle() updates online;
    • ac.getSim().timeMultipler is no longer zero online with WeatherFX conditions or a dynamic weather plugin (if time is actually moving);
  • UI:
    • ui.setNextItemIcon() works with ui.beginMenu();
    • Integrated tab bar: takes window settings button into account, style for the dropdown button updated;
    • New ui.beginPointSampler() / ui.endPointSampler() functions to swap IMGUI shader for the one using point sampler;
    • ui.keyboardButtonDown() works with sided buttons, such as left control;
  • Scene API:
    • Raycasting now takes ray length into account (except for AABB raycasting);
    • Raycasting with NanoRT acceleration returns correct local position, UV, etc., builds accelerating structures in background;
    • Removing nodes actively used by ExtraFX emissives shouldn’t crash AC;
  • Physics API:
    • New physics.setAIStopCounter() stopping AIs for some time;
    • physics.RigidBody: collision callback returns car index, if any;
  • IO:
    • io.load() releases file instantly, allowing to delete it after reading, for example;
    • io.recycle() fixed, actually recycles things now;
    • New io.findFile() returning an absolute file path to a file;
    • Background and physics workers now support relative and absolute paths as well (working script directory will still be the same as the parent’s one);
    • Workers kept alive by Lua Debug app still release the things they hold, such as event subscriptions, immediately;
    • os.runConsoleProcess(): new terminateWithScript = 'disposable' option can be used to get back an ac.Disposable instead, also, with that one set to false and previously undocumented assignJob it’s now possible to get a process to stay alive after AC has been closed;
    • io.extractFromZipAsync(): extra parameter for a crucial file to ensure full extraction (it’ll be extracted last with a different name and then renamed, so your code could simply check the file existance: as long as file is present, it means archive has been extracted in full);
  • web.loadRemoteAssets(): option to specify a crucial file name similar to io.extractFromZipAsync(), scripts with full I/O access no longer have file type restrictions, plus a bunch of fixes;
  • Lua apps:
    • New ac.restartApp();
    • ac.exportLapTimesToCSV() is working, got an optional argument to specify filename;
  • New Modes: use [TWEAKS] HIDE_PITCREW to hide pit crews entirely;
  • New functions in shared/sim/cars for getting and altering base wheel positions for remote cars;
  • ac.onOpenMainMenu() can be receive other types of pages, for example, when ac.tryToOpenRaceMenu() is called;
  • Lua Debug app:
    • Option to use point sampler when viewing Lua textures;
    • App now remembers the selected setting for rendering vectors across script reloads;
  • Docs for some functions and fields updated, Lua plugin by sumneko now properly understands types of CSP’s table. functions;
  • LuaJIT synced with upstream (there were some small fixes).