- RainFX: handling of lightweight racing cars improved;
- NeckFX: redefine behaviour with a Lua script, helmet rendering got a blur option (and also now works properly, and compatible with RainFX);
- OBS integration: install an OBS plugin to access additional views, such as view without HUD, HUD only, extra cameras, separate AC apps, etc. (third-party Lua scripts can add their own OBS views too);
- Default WeatherFX script: optional simplified and faster post-processing alternative to YEBIS (requires new CM to show those new script-specific settings);
- New Unbound app (on App Shelf): access functions you might have forgotten to bound with a mouse, from pedals to working with brake balance or turn signals;
- New WebBrowser app: browse web, pin webpages as new apps and more;
- New Pocket Technician app: edit car setup outside of pits in offline practice sessions;
- Emoji support for both regular and IMGUI text (15.0 version, Twemoji pack, works for driver names online as well), emoticon selector in chat is replaced with emoji selector (optional, enabled by default);
- Few physics experiments moved to be always active in all modes, new experimental car extrapolation option added;
- Support for gamma sliders for other wheel axis in controls settings (needs a CM update);
- Yebisest: option to run post-processing in full resolution;
- BrakeDiscFX glow uses physics temperature if available (which also will be stored in replays now), light intensity reduced to stop things looking that broken;
- Option to render UI on top of other HUD elements (such as AC driver names or the proximity thing);
- Hotkeys to alter FOV live;
- Audio volume sliders for wipers and car Lua scripts;
- Curved monitor filter now can adjust render scale;
- New tonemapping function available in filter editor;
- Option to use detailed shadows and high-quality shading in mirrors in lights settings (very expensive);
- Option for free camera to automatically switch to single screen mode for triple screen rendering;
- Option to use real-time car positions for AC leaderboards (such as the one shown with F9);
- Loading progress is shown on Windows taskbar;
- CSP Debug app now shows relative position of contact points in its physics tab;
- Autopilot (Ctrl+C) can be turned off (apps would still think it’s AI driving to avoid messing up stats), old behaviour can be reactivated in settings.
- Ghost fixed, also got some shading improvements;
- Various Cosmic suspension bug fixes;
- Compatibility with Sandy Bridge Intel CPUs (and other CPUs without F16C instruction set) fixed;
- FSR and screenshots scale interaction fixed;
- Both body flex and driver weight shift fixed, ready to be used properly;
- Early collider activation physics tweak is disabled by default until it can support unusual mods;
- Sliding fix physics tweak is stronger (car still slides a bit though, might need a different approach);
- Tyres no longer burst into flames on some cars where they should not do that;
- ExtraFX emissives fixed, working properly with Pure without requiring a reload;
- Transparent surfaces rendered on top of smoke for interior cameras fixed;
- Autopilot (Ctrl+C) can handle rain and drive out of pits properly;
- Flags shading (overdarken ambient and translucency with insane logic) fixed;
- IMGUI blending fixed;
- Issue with skinned meshes positioned wrongly for a frame with LOD changes fixed;
- Headlights won’t activate anymore at the start of the race based on old weather item selected with WeatherFX active;
- AI Flood fixed (AI drivers should be more resilient);
- Walking Out module: FFB fixes, better support for DualSense and GamepadFX scripts, few other fixes and improvements;
- Depth map is available to WeatherFX and other modules even if soft particles are disabled;
- Lua apps opened in a previous session load first;
- Teleporting to pits button fixed, better compatible with the way CM treated those, with reduced delays as well;
- If paused in background option is active, AC will be paused when its window is collapsed;
- Android Auto: rear view mirror and YouTube app fixed;
- New render stats app: performance tips crash fixed;
- BrakeDiscFX light casting fixed;
- New SSLR quality levels added some time ago (such as Hi-Z) looking horrible on some GPUs fixed, blur quality is also improved;
- Static reflections breaking with new emissives option fixed (also, they won’t include fireworks);
- Dynamic lights should put less load on CPU;
- Track icon during loading now generates properly, not relying on “outline_cropped.png” produced by CM anymore;
- Post-processing auto-exposure no longer resets on changing filters or resizing AC (was causing issues with brightness when making a screenshot with a different render scale);
- Virtual mirror is better compatible with Real Mirrors;
- Compact mirrors format works with MSAA;
- Mumble FMOD integration (as well as other audio events streaming audio to FMOD) is fixed, no longer producing artefacts;
- Caching for IMGUI texture atlases improves loading times by about 0.6 s;
- Automatically controlled headlights (or AI headlights) rewritten, switching instantly if time has jumped (WeatherFX scripts now need to call
ac.setAiHeadlightsSuggestion()
with a number instead of the old function for a smoother transition); - Thing for searching apps in taskbar without switching keyboard layout fixed;
- VRSS is switching off for Lua render targets and such;
- Crashes with associating AC with a specific GPU fixed;
- Optional handbrake bar in built-in pedals app supports app scaling and works in replays;
- Impulse tachometer switches telltale to be impulse as well;
- File saving performance fixed;
- Surface colors are loaded properly in replays (was causing some issues with skidmarks and such);
- Win+V and Win+. should work as expected;
- Shift+Click on IMGUI text inputs adds selection;
- IMGUI keeps its state even if game is exited too soon after a change;
- New trees culling issue with trees wider than taller fixed, also issue with uneven LOD fading has been fixed as well;
- New trees are not as shiny during the rain;
- Trees are a bit less sharp now to both improve performance and reduce aliasing in VR, banding replaced with strict alpha testing;
- Escape no longer stops a replay when making an accumulative screenshot;
- Fake car shadows realignment causing flicker for stationary cars fixed;
- Turning lights work properly even if there are no emissives linked to them;
- Dragging car around with CSP Debug works a lot better with physics worker;
- POV thing on gamepads moving mouse and quick pits menu fixed a bit more;
- Exposure difference between eyes in VR with automatic exposure with SPS option enabled should be fixed;
- Disabled track seasonal adjustments also deactivate seasonal color shift for particles and skidmarks (also, those will fade as days pass);
- A few more fixes for curved filter;
- The way AC apps are checked for intersection and possible placement reworked to be more user-friendly, allowing to position apps everywhere by holding a Ctrl button;
- Car scripts and such not working with cars with two LOD A models shown at once (like a passenger model) fixed;
- VRS shouldn’t cause additional textures to become damaged;
- AC apps pinned while being placed too high up will have their pin buttons moved lower so they could be unpinned;
- Bending shader is compatible with RainFX;
- Rain drops on screen wrongly appearing for some cars with roofs fixed;
- Rain shouldn’t break rear view mirrors anymore;
- Rain maps flicker with low quality fixed;
- Rain occluders are loaded properly, getting rid of rain in tunnels and such;
- Rain occasionally messing up normal maps for tyres fixed;
- Drying line resets with session restarts;
- Driver head no longer jitters with G-forces when applying an extra driver animation;
- Hotkey for saving a replay clip can be edited in CM;
- AIs respect non-standard pitlane speed limit (also, the restriction with automatic limiter disabled is a bit softer now);
- CM storage parsing fixed (might have been messing up driver tags loading before);
- IMGUI fonts contain more symbols loaded from “data_imgui_symbols.txt”;
- Any key is redirected from AC to IMGUI if any input text is currently active, not just a select few as before;
- Compatibility with stylus-supporting mode (activated by Paintshop) fixed some more;
- Node filters
first:…
andlast:…
fixed, now supportingno
as a value; - Keyboard input uses a different function to speed things up a bit and improve stability;
- Broken Lua apps shouldn’t stop subsequent apps from loading anymore;
- Model encryption no longer breaks when extended physics option is enabled in Content Manager;
- Split-screen mode fixed, now compatible with custom physics;
- Weather transitions in replays fixed;
- Positions estimation for racing leaderboards slightly improved;
- GrassFX shading updated and fixed, with a bit of nearby clipping added for interior shots;
- Piece particles glitching and stretching over viewport fixed;
- AC and Python apps forcefully pushed into the screen area fixed, allowing to be poking out from the bottom or the right side of the screen;
- Digital LEDs merging malfunctioning with some ERS bars and similar fixed;
- Taskbar icons load on-demand, solving that lag happening first time taskbar is opened;
- Motion extrapolation online fixed;
- Few smaller fixes and optimizations.
- The way multiple configs are handled has been changed, giving more priority to subsequent configs (meaning, for example,
[SHADER_REPLACEMENT_…]
from skin config will be applied after[SHADER_REPLACEMENT_…]
from car config); [MESH_SPLIT_…]
can work based on UV (had to split 70s helmet for NeckFX helmet rendering);- New parameter for extra lights:
AFFECTS_TRACK = INTERIOR_ONLY
stopping light from affecting car exteriors as well (fits well for GT3 interior light, for example); - Car scripts can use conditions (like
INPUT = …
) to only activate when something special happens; - New car inputs:
FPS
,FRAME_TIME_MS
; - Car navigators got a few fixes and improvements, such as better camera movement, a new scale widget (for custom oldschool layouts) or a font scale option;
- InteriorPBR shader is compatible with bending effects;
- Oil pressure estimate is slightly lower in corners;
- Custom textures reload live as well;
- New trees: warning about mishandled compiled trees, GrassFX surface is taken as surface by default now to ensure normals synchronization (lack of synchronization breaks fake shadows), draw calls and triangles are counted properly;
- Referring to a flashing condition as an input for another condition now works properly;
- Hide meshes from secondary views (like mirrors) with
INCLUDE_IN_SECONDARY_VIEWS=0
of shader replacement section; - Mesh splits and mesh optimization hints are working again;
- A warning for cars with tyres of version below 3 with
RIM_RADIUS
parameter (might mean somebody set the version wrong and maybe even missed a zero there); - New filters:
insideNthWheel:N
,insideNthSuspension:N
,driverRoot:N
,driverNeck:N
.
- Preprocessor was rewritten, now inlining enums, computing
bit.
calls with enums and a lot more (docs are coming soon), even having access to some of CSP API, currently disabled by default to make sure things won’t break until it would be properly tested; - Hold Ctrl to automatically align new pinned windows in Lua Debug app;
- Lua calls are faster, meaning AC can run more scripts;
- Visual Code extension updated, sees shared libraries properly as well (documentation is also updated fixing issue with multiline table bug);
- Scripts such as WeatherFX, NeckFX, Chaser Camera or scriptable filters reload automatically if user settings changed (and CM can show those user settings in CSP settings section);
- Common API:
- New string functions:
:replace(…)
,:urlEncode()
,:nextEmoji()
,:findIgnoreCase()
; - Structures (
ac.StructItem
) can store tightly packed matrices; - Online events: with custom Assetto Server there is no size limit and optional UDP transport mode available;
- Load full car and track INI configs;
- Timers are more precise, especially interval ones (time of calls would still fluctuate, but it’ll average out perfectly);
ac.DataLUT11
can be serialized withstringify()
(also, its parser can handle two types of format now);- Helper
ac.DriverTags
now reads colors from custom CM tags, also addedac.getDriverChatNameColor()
; - Function
ac.getSkyFeatureDirection()
returns correct direction for ISS; - Web functions can load 16 things at the same time instead of old limit of 4, but it’s still no more than 4 simultaneous requests per domain;
- New
ac.getPerformanceCPUAndGPUTime()
for measuring performance live;
- New string functions:
- New state values:
- Cars:
- Static:
hasFlashingLights
,hasTurningLights
,hasHornAudioEvent
,hasAnalogTelltale
,hasCockpitSwitchForUserSpeedLimiter
,hasLowBeams
,sirenHorn
,fuelMaps
,tractionControl2Modes
; - Dynamic:
isUserControlled
,wiperSelectedMode
,autoShift
,justJumped
,resetCounter
,fuelMap
,speedMs
, matrices to transform to and from graphics offset; - Property
localVelocity
should work in replays; - New methods to quickly access some strings;
- Static:
- Sim:
- Static:
directUDPMessagingAvailable
,isPitsSpeedLimiterForced
; - Dynamic:
frame
,gameTime
,systemTime
,isMakingScreenshot
,gravity
,orbitOnboardCamera
,idealLineShown
,damageDisplayerShown
,driverNamesShown
;
- Static:
- Session:
leaderboard
; - UI:
currentDesktop
.
- Cars:
- UI:
- New
ui.inputTextCommand()
for controlling input texts; - New
ui.iteractiveArea()
and updatedui.captureKeyboard()
allowing more direct access to current keyboard state; - New
ui.setNextTextSpanStyle()
for coloring bits of text differently or adding bold style (also, aui.setNextTextBold()
shortcut); - New
ui.windowResizing()
,ui.windowPinned()
andui.windowScrolling()
for checking the state of current window; - Shortcut
ui.configureStyle()
for quickly altering accent color for subsequent widgets; - If you want to draw extra things with context menus in title bar, use
ui.setTitleBarContentHint()
to specify their position so that original context menu would be hidden; - New
relativePadding
option forui.setNextItemIcon()
making it a lot more usable; - Vector icons for creating pixel-perfect things;
- Function
ui.addSettings()
now allows to create new temporary apps outside of settings section, now with optional callbacks for removing and context menu from list of apps, as well as options for background color and such; - Add new items to context menu of your window;
- Create popups and new windows with
ui.popup()
; - Other popup-related functions:
ui.closePopup()
,ui.menuItem()
,ui.beginMenu()
, etc. - Function
ui.beginGroup()
with explicit width now alters default item width too; - Get file icons with
ui.FileIcon
helper; - Updating extra canvases copies and restores render target automatically (shouldn’t break anything unless you were doing something very unusual);
- New dynamic textures:
dynamic::final
,dynamic::mirror
and more; - Set callback to be called when IMGUI pass is done with
ui.onUIFinale()
; - New library
shared/web/browser
allowing to easily integrate Chromium engine to any of your scripts, such a custom web browser, web page acting as a car dashboard or a track display, a simple tab with the rest removed with custom CSS turning into a video or music player supporting modern formats and services, or even just an AC widget with transparency support (actual 100 MB engine will be downloaded with first usage); - Rotating text should work better, with fewer issues with clipping;
- Popping something from a stack (like
ui.popDisabled()
) in the wrong moment will throw an error instead of crashing entire game; - Dialog
ui.modalPrompt()
allows user to input empty strings; - Dialog
ui.modalDialog()
got a close callback; - New flag for text input for retaining selection;
- New flag for selectable to span clip rect, for creating proper menus;
- New
:gaussianBlurFrom()
method for extra canvases; - Higher UI scale no longer affects dwrite text for offscreen render targets;
- New
ui.setForcedImagesCaching()
function forcing CSP to ignore HTTP headers and just cache things; - New
ui.onExclusiveHUD()
for drawing fullscreen HUD and hiding the rest;
- New
- Render API:
- New
render.measure()
function for estimating; - New
render.onSceneReady()
event for drawing things right between mirrors and cubemap finished updating but the main render pass hasn’t started yet; - Geometry shots can use track cameras with
:updateWithTrackCamera()
, also reenable driver and steering wheel if they’re hidden with current camera; - Both
ac.GeometryShot
andui.ExtraCanvas
got some sort of API merge, both got access to functions like:setName()
; - Antialiasing modes for
ac.GeometryShot
andui.ExtraCanvas
fixed, new YEBIS mode running YEBIS post-processing added; - Accessing texture data works faster with textures pooling;
- Share and access textures to/from other Lua scripts or other Windows processes with
ui.SharedTexture()
and:sharedHandle()
; - Blurring (
ui.beginBlurring()
) fixed, uses mipmaps to improve quality and performance; - Functions taking shader to render something custom work a lot faster, no longer depending on shader string size, with an extra parameter
directValuesExchange
for extra boosted performance; - New
render.projectPoint()
function properly handling VR;
- New
- Scene API:
- Hide things from reflection cubemap or from extra views (like rear view mirrors);
- New method
:contains()
; - Method
:loadKN5Async()
fixed, shouldn’t fail to find files anymore; - Access to depth map of
render.shaderedQuad()
fixed, new parameters to draw a billboard quad (always facing camera); - New
:setAlternativeShadowsSet()
method for geometry shots switching to a different shadows set (expensive);
- I/O:
- New
io.getFileName()
function;
- New
- Lua apps:
- Manifests will be parsed with extended INIpp features allowing to use expressions;
- New
FLOATING_TITLE_BAR
flag working together withNO_BACKGROUND
to create nicer windows for apps that don’t need title bar and such; - New
FUNCTION_MENU
callback for windows for adding more items to title context menu; - New
[AWAKE_TRIGGERS] URL = <RegExp>
parameter for awakening your app if URL has been clicked (useac.onURL()
to get it when awoken); - New
[CORE] IMMEDIATE = 1
parameter for forcing app to load instantly (use very carefully, it’ll make loading slower); - Override car controls and trigger AC hotkey commands and more (pretty much what Unbound is using for simulating user input reliably);
- Similar to background workers, some scripts can create physics workers to access some of physics API from physics thread;
- Access list of all app windows, hide, show and move windows around, redirect any app windows to a separate texture (could be used for something like projecting certain AC apps onto separate objects in VR);
- Change current desktop with
ac.setCurrentDesktop()
; - Stop apps from working with
[CORE] FLAGS = DISABLED_OFFLINE
and others (docs are coming soon); - Issue with collapsed windows triggering apps to load fixed;
- New
ac.setVRSConfigurationForVR()
function which together withac.getPerformanceCPUAndGPUTime()
might be useful to adjusting quality live; - Setup items can be edited outside of setup menu in sessions with physics API access;
- Car physics scripts:
- Function
script.reset()
will be called when car resets; - New
car.limiterInAction
property, as well as functionsac.overrideGasInput()
andac.disableEngineLimiter()
for custom limiter logic if needed; - New API for altering joints live;
- Alter FFB;
- Block extra switches in a way that can’t be altered by editing car config;
- Override turbo BOV value (and handle it on FMOD side the way you need);
- Read (and change, but that’s not recommended) any setup values;
- Function
- Car scripts:
- Read & write access to F6 cameras;
- Alter properties of more audio events, such as skidmarks or wheels;
- Set custom navigator text with
ac.setNavigatorText()
;
- Car access API (car scripts, apps, and more):
- New functions
ac.getExtraSwitchName()
andac.isExtraSwitchAvailable()
(they can still switch those unless blocked by physics script);
- New functions
- Scripts with I/O access:
- Can listen to URLs and capture events from further processing (and eventually being opened in system browser);
- Can access SQLite3 functions, so those can be used with a SQLite FFI Lua library;
- Processes started with
os.runConsoleProcess()
shouldn’t get stuck on exit anymore; - File opening dialog can handle multiple files selection;
- Physics API:
- New functions
physics.forceUserClutchFor()
,physics.forceUserHandbrakeFor()
;
- New functions
- WeatherFX:
- Option to intercept post-processing application and alter all parameters, swap input by a custom texture (thus adding new preprocessing steps) or even replace entire YEBIS with a custom implementation;
- New rendering callback
script.renderSceneEnd()
;
- Post-processing scripts now can ask for a custom render scale to do things like scene reprojection and alter triple side params live;
- Some functions, such as replay seeking, postpone during accumulative shots;
- Pause car scripts (physics and others) until a certain condition is met to save more time;
- Scripts without I/O access can work with memory mapped files with names starting with “AcTools.CSP.Limited.”;
- Python:
ac.ext_takeAStepBack()
,ac.ext_getHandbrake()
fixed;- New
ac.ext_setEmojiActive(active: boolean)
(by default emojis are disabled for compatibility);
- A bunch of issues with exchanging data between scripts causing crashes fixed.