- AC & CSP physics:
- The old AC bug where subsequent hits override suspension damage fixed;
- Thermal model v4 is compatible with AIs;
- Speed limiter ([SPEED_LIMITER] in electronics.ini) rewritten to be more accurate and prevent oscillations;
- New parameters for [_EXTENSION_FLEX]: VERTICAL_BENDING, LATERAL_BENDING, LATERAL_SHEAR, VERTICAL_SHEAR, LONGITUDINAL (now everything works accurately);
- Add EXT_DAMAGE_GAIN=<amount> parameter to [FRONT]/[REAR] to damage suspension when travel exceeds EXT_DAMAGE_THRESHOLD from the same section;
- Add [_EXTENSION] WATER_THERMAL_MASS=20 WATER_COOL_SPEED_K=0.002 to “engine.ini” to tweak water temperature calculation;
- Surface noise reworked: a lot of fixes, now applies to all the contact points independently;
- Finished physics experiments can no longer be disabled online to ensure the same conditions for everybody;
- Editing custom physics setup sliders triggers ride height reevaluation as well;
- With minimal ride height, cosmic suspensions continue to be tested as long as ride height changes;
- Physics engine uses GIMPACT for detecting collisions, instead of OPCODE.
- New taskbar:
- An option to change the edge of the screen the taskbar is on;
- An option to configure icon alignment;
- Smaller fixes.
- New menu:
- If lap splits are empty, lap splits from the previous lap will be shown, matching original behavior;
- Split times are rounded the same way they are in the original menu;
- Race info: click on sessions on top to quickly switch between them (stepping back is not available online);
- Time table: times from previous sessions, times for different cars, printing fixed.
- Rain FX:
- Freezes when rain starts should be reduced;
- Small fixes for windscreens;
- Wiper showing up for a frame in wrong position fixed;
- Thresholds for splash particles adjusted;
- Rain is compatible with accurate mirror projection;
- A bug with rain occlusion failing to reuse cached variant fixed.
- CSP Debug app:
- A new checkbox to show the actual track surface relief (affected by track surface noise and such);
- A new button to break and fix suspension;
- A new button to view “tyres.ini” of cars with automatically generated tyre sets;
- An outline of a saved car state and the distance to it;
- LOD selector shows LOD distance multiplier for the car selected.
- Car state saving rewritten:
- Jumps with strut suspension fixed;
- Saving more data: state of turbos, controllers, ERS/KERS, cosmic damage, extra cosmic bodies, custom setup items;
- Issues with CSP body flex, shifting driver or ballast fixed;
- Interpolation between several states and state precision improved;
- Functions for state transformation are fixed and now work even if the car isn’t present.
- Visuals:
- Light bouncing off cars fixed;
- Dynamic shadows: car headlight edges are fixed, other small improvements;
- Trees receiving shadows adjusted;
- Large Grass FX pieces look better when close to an edge;
- Fake wheel shadows are better compatible with surface noise;
- Depth-based particles collision fixed, now sparks and pieces can be present under bridges;
- Rear mirrors use clamping sampler, fixing occasional rendering artifacts;
- Brake sparks disabled entirely until I’ll find a better way of tuning it.
- New and changed options:
- New option in DXGI Tweaks, “VRR / uncapped FPS”: automatic (default) uncaps FPS only if G-Sync or FreeSync is on in Windows or GPU settings; otherwise FPS stays capped to the display refresh rate to avoid tearing;
- New weather controller switching between a few weathers: Schedule;
- Using mouse wheel for zooming with free camera can be disabled now;
- New experimental option to use FFmpeg instead of Microsoft Media Foundation.
- Default Weather FX style:
- Puddles audio is working with rain and wetness at zero;
- Lightning illuminates the scene more.
- Showroom and CSP previews:
- Crashes and rendering issues when generating previews fixed, body flex is paused;
- Gaussian splats for showrooms.
- Neck FX:
- “Fix cursor in place” disabled by default (it was conflicting with some apps);
- Old motion method no longer glitches on overlapping AI spline;
- Helmet definition for “vrc_rhp_helmet_b_fa” model.
- DualSense haptic feedback:
- Available with Wheel input mode;
- Operates in stereo (for wheels);
- Adjusts to master audio volume (still doesn’t work with master volume set to 0% though);
- A few fixes.
- Music monitoring:
- New implementation, more efficient, responsive and informative;
- Direct audio capture from music process alone, allowing to track peaks and audio spectrum precisely;
- Experimental option for tracking peaks and spectrum from internal music players, disabled by default;
- AIMP integration updated and disabled by default.
- Miscellaneous:
- A simple turbo boost estimation for remote cars online;
- “Flash lights” button now uses logic similar to flashing high beams (with the new option [BASIC] FLASH_HIGH_BEAMS=1, which is default);
- A couple of small fixes for Surfaces FX physics, improved compatibility with Rain FX;
- New experimental controller tweaks for extrapolating steering (disabled by default);
- Car Debug app: new “Dynamic & aero controllers” section showing detailed controllers state;
- Bounding sphere calculation for cars rewritten, now uses lowest LOD if possible (the same as AABB), fixing issues with questionable mods;
- CSP now uses WIC to save regular PNG screenshots, no longer includes alpha-channel (previously, it could mess up screenshots if accumulation AA was disabled);
- Radiance (“.hdr”) and TGA textures support;
- Shaders cache purging reworked, might help with long initializations;
- Default timing modes are switched to high resolution timers, “Sleep” mode adjusted to improve responsiveness;
- Freezes profiling can be enabled in Render Stats app, without that setting in developer section, small fixes;
- “Check Intel CPUs” option is re-enabled (according to all the checks I’ve made, it should work correctly now);
- HBAO+ is initializing in background;
- A lot of improvements for background shaders loading to reduce stutters;
- Hyperthreading fix has been reworked for better compatibility with Windows 11 and those fancy new CPUs;
- Extreme FPS limit values work better with mouse and keyboard events (basically, any such event pushes a frame to happen sooner);
- More values in “assetto_corsa.ini” can be changed live: “LOW_SPEED_FF”, “FORCE_FEEDBACK”, “FF_EXPERIMENTAL”, “OVER_TIME_MULT”, screenshot format, dirt multiplier and glass damage threshold;
- If accumulation screenshots are disabled for some reason, photo app features (flashlight, preview, etc.) should be available regardless;
- New hidden OVERRIDE_SPLIT setting for Smart Shadows, for exceptional cases, allowing to override shadow distances entirely;
- CEF updated to v150.0.11.0;
- “meshoptimizer” library updated from 0.25 to 1.1.
- Fixes:
- SFP should be compatible with altonline (and P2P mode);
- The issue with disabled assists shown as enabled fixed;
- Leaderboard in replays fixed;
- Fixes for some crashes related to custom physics;
- Fixes for occasional crashes with P2P and custom physics that could happen when another user connects;
- Occasional crash linked to disabling original flames fixed;
- Small performance improvements, CSP no longer uses MMCCS for physics;
- Skipping to a race session from the main menu no longer leaves cars’ tyres in a messed up state;
- An issue with disappearing cars with a single LOD fixed;
- Test Pad track no longer breaks with “Do not wait for walls to be ready” experiment;
- “Account for ping online”: occasional crash should be fixed now;
- Occasional GPU crashes should be fixed;
- Extra FX doesn’t drop everything when resolution changes, fixing issue with accumulation screenshots and DLSS (or simply a different resolution scale);
- Session names in online sessions are fixed (in Lua API and the new menu);
- An old bug with disabled controls in chat settings fixed;
- Exporting skidmarks as OBJ is compatible with DLSS and similar extensions;
- Nice Screenshots: resolution multiplier fixed;
- New KN5 loader: bounding sphere cache not being reset cleanly fixed;
- Improved compatibility with non-linear (gamma) Weather FX styles;
- IMGUI: optional scrollbars no longer lead to flicker with components that have their width and height linked (such as color picker);
- Full reload no longer breaks custom lights (such as the light from Light Maker app);
- Bounding spheres recompute updated to be a bit faster and handle exceptional cases better;
- Crash reports include information about Lua scripts running on other threads;
- Crashes caused by resizing when loading fixed;
- Walking Out helper fixed, now loads car facing the correct way;
- Small fixes for multiple monitors;
- Loading process is a bit smoother.
# Configs
- Cars:
- Racing cars get low beams as well (previously, [BASIC] IS_LOW_BEAM_AVAILABLE for racing cars by default was 0, now it’s only 0 for open wheelers);
- New [AUDIO_PROPERTIES] WHEEL_BRAKE_TEMPERATURE=1 parameter for car configs for passing brake_temperature parameter to wheel audio events;
- New SKIP_FRAMES parameter for car stereos (defaults to 3);
- Fixes for car stereos: better characters lookup, frames skipping is now based on time and not on frames, refresh rate is boosted when real spectrum is available;
- Car headlights cast shadows even if DIFFUSE_CONCENTRATION is below 0.7 (it doesn’t have any other effect on car headlights anyway);
- CORNERINGLAMP_… car inputs: new MAX_SPEED_KMH parameter, defaults to 40 km/h;
- Issue with ride height detection with rear cosmic suspension in pits fixed;
- DISABLE_NEW_FLAMES_ENTIRELY option is working as intended now;
- New hidden [DEV] EXPORT_RAIN_TYRES=… option in “general.ini” allowing to export generated rain tyre textures;
- Car cloth flags physics rewritten (still needs a bit more work).
- Tracks:
- New [GRASS_FX] COLOR_SAMPLE_MIP_LEVEL=… parameter (defaults to 0, increase to make grass color smoother);
- New DELAY_BETWEEN_RUNS for ksanim-based track animations;
- Edits of included track configs no longer constantly trigger full reload.
- Both cars & tracks:
- New RECOMPUTE_TANGENTS = 1/INVERT option for [MESH_ADJUSTMENT_…];
- make-rgba:: and make-script:: textures are fixed;
- Objects Inspector: click and drag 1D values to temporarily change them;
- New depth mode: WRITE_ONLY (for exceptional cases).
- Session:
- New session tweak (for both offline and online): [EXTRA_RULES] BACK_TO_PITS_PRESERVES_DAMAGE=1 stopping cars from having their damage reset on teleporting to pits;
- New [EXTRA_RULES] CHANGE_TYRES_PER_AXIS=1 parameter for offline races, allowing changing tyres for front or rear axle only using Quick Pits menu (for online races, next CM update will have a checkbox; if set and user chooses to change tyres on both axles at once, time to change is doubled).
# Lua & Python
- Common API:
- New ac.SimState fields: .renderSize, .upscaleConfiguredFactor, .upscaleAppliedFactor and .upscaleSharpen;
- New ac.StateCar.suspensionDamage;
- ac.StateCar.collidedWith works in online races;
- ac.onCarCollision() works in replays;
- ac.encodeTexture() is available to scripts without I/O access once again;
- Pass an array of values to shaders using ac.StructItem.array(ac.StructItem.vec4(), …) (vec4 only);
- New require('shared/utils/playing').spectrum(), .fftMagnitudes() and .fftRawData() (relies on new music monitoring options);
- New ac.INIConfig.systemSurfacesData();
- New ac.SurfaceExtendedType.Wall, updates for shared/sim/surfaces, fix for surfaces.propertyAccessor();
- .raycastDetailed() of shared/sim/surfaces: argument to skip walls (or everything but walls), argument for backface culling;
- New ac.getReplayFilename() function returning full filename of the loaded replay;
- ac.stringifyCurrentSetup() fixed, got a new “modifiedOnly” argument;
- More details about loading FMOD audio events from Lua API in CSP log, prefixed with “[LuaFMOD]”;
- debug.traceback() function is available to sandboxed scripts as well;
- mat4x4:mul() and such no longer crash AC when receiving nil values;
- 2D perlin noise with large inputs fixed;
- Fix for a rare crash related to Lua callbacks.
- UI:
- New ui.nextRow();
- New ui.pathSetColor() allowing to draw multi-colored lines and shapes;
- New ui.drawRectMultiColor();
- Repeated calls to ui.pushDWriteFont() no longer lead to a crash;
- ui.MediaPlayer() with rawOutput = false now redirects audio through FMOD, allowing to position it in 3D;
- ui.GIFPlayer(): argument to specify format when pushing data manually, docs updated (if you need to pass a large array to a shader, this is the best option);
- A glitch caused when issuing too many “ui.” draw commands into a secondary render canvas fixed;
- Redirecting IMGUI windows no longer breaks canvas updates within.
- Web API:
- Improved certificate pinning (checking the entire chain, intermediate or final requests, public key, compare against multiple fingerprints, collect extended details);
- Option to ignore specific HTTPS errors;
- Errors should be more meaningful;
- Performance and security improvements.
- Scene API:
- New :createMeshAsync() function (uploads the asset to GPU in background);
- New :applyShaderReplacementsAsync() function (parses in background, applies changes a few at a time to prevent a freeze);
- :findByClass(ac.ObjectClass.Renderable, …) and such should work now;
- Small stability improvements and a couple of fixes for Scene API leading to occasional crashes;
- render.AntialiasingMode.SimplifiedYEBIS no longer follows auto-exposure of the main camera;
- Geometry shots use best sky shader if best quality is requested, culling with custom projection matrices fixed;
- New option to ignore renderable flag and load everything when loading KN5s;
- :getLocalAABB() takes an argument for extra transform, docs updated;
- Exclusive grass or shadows for geometry shots no longer mess up geometry culling.
- I/O API:
- os.runConsoleProcess() better handles environment variables, logging is more detailed;
- Fixes for os.listSerialPortsAsync() and os.openSerialPort();
- If AC is running elevated (as admin; please don’t do that), child processes now start from shell process, fixing some compatibility issues.
- Car physics scripts:
- New ac.StateCphysCar.suspensionDamage field, ac.addSuspensionDamage() for car physics scripts;
- ac.setGearsGrinding() respects damageK parameter as a multiplier;
- ac.addSetupTab(): default pitstop presets tab has an index of 2000, so passing 1000 for a custom tab will place it above;
- Additional tabs by default are sorted alphanumerically;
- ac.configureSetupTabs() affects dynamically added tabs as well;
- Hidden setup tabs no longer stay visible if they’ve been selected while tabs menu wasn’t shown, hiding is better compatible with horizontal tabs;
- Functions ac.setCurrentQuickPitPreset(), ac.setPitstopSpinnerValue() and ac.disableQuickMenuPitstop() are available to car physics render modules;
- Crash when reloading car physics scripts with automatic gearbox (and similar) fixed.
- Physics API:
- New physics.offsetFinalFFB();
- New physics.setSuspensionDamage();
- ac.tryToTeleportToPits() and physics.teleportCarTo(): argument to specify if damage should be preserved;
- physics.raycastTrack() and ray:physics(): argument for backface culling.
- Apps API:
- New NO_ICON_IN_WINDOW flag hiding icons from windows of Lua apps, or apps created via ui.addSettings();
- New ac.getPowerState() and ac.onPowerStateUpdate();
- New ac.applyRenderingLimits() for temporarily limiting FPS, game scale, shadows resolution, or disabling Extra FX (more fields will be added later);
- ac.setAudioVolume(): changes are saved, pass false as fourth parameter to disable.
- Lua Debug app:
- Better at showing large numbers;
- Column for garbage per second;
- Small improvements for summary tab.
- Miscellaneous:
- New require('shared/vr/vrmisc').rawDeviceTransform() function;
- require('shared/sim/weather').estimateRainIntensity(): adjusted values for drizzle;
- display.text(): alignment no longer mutates pos vector;
- Animated GIFs are working in loading screen scripts;
- New ac.preloadRainFX() for Weather FX controllers (Pure and Sol controllers are preloading rain automatically);
- GameNetworkingSockets: if signalling service is not configured, the default one will be used instead.
- Python:
- Warnings about Python apps causing freezes;
- ac.ext_setAudioVolume(): changes are saved, pass false as second parameter to disable;
- New ac.ext_setMessage() for Python apps, the same arguments as in ac.setMessage() in Lua scripts;
- CamTool_2 and other Python apps setting system-wide keyboard and mouse hooks no longer cause everything to lag when FPS is low (for example, when Assetto Corsa window is in background), hooks are no longer active when apps are paused as hidden.