Release 105-1214
Release 105-1214
The changelog since release 105-966 until release 105-1214, which happened in October 2022.
Caveats
- there is now only one
UnitUnitCollisionevent for each unit pair, and return values from UnitUnitCollision are now ignored! vsyncspringsettng now defaults to -1- ships now obey
upright = falsewhen pulled out of water (still always upright when floating). - killed most of ARB shader fallbacks
Features and fixes
Unit collisions
- multi-threaded unit steering and collisions.
- there is now only one
UnitUnitCollisionevent for each unit pair, and return values from UnitUnitCollision are now ignored! - added modrule,
movement.groundUnitCollisionAvoidanceUpdateRate, for controlling steering performance vs quality tradeoff load. Reduce to get better quality at the cost of perf. Default value is 3 for cycling through all units over 3 sim frames. - added modrule,
movement.unitQuadPositionUpdateRate. Similar perf tradeoff to the above, but affects collision accuracy (incl. with projectiles). In particular, if this value isn’t 1 then sometimes beamlasers/lightning can visibly ghost through units. Defaults to 3. - added modrule,
movement.maxCollisionPushMultiplier, limits the speed (as a multiplier relative to their base speed) units can push each other at. Defaults to infinity/unlimited.
Particles
- add animated “flipbook” CEGs:
animParams = "numX, numY, animLength". Enabled for BitmapMuzzleFlame, HeatCloudProjectile, SimpleParticleSystem and GroundFlash. - some semi-transparent objects can cast colored shadows
- fixed smoke-trails with a non-standard smoke period
/dumpatlasfor now only works withprojargument to dump projectiles atlases to disk
Units on slopes
- ships now obey
upright = falsewhen pulled out of water (still always upright when floating). - added
upDirSmoothingto unit def so units could update their upward vector smoother than by default - floating mobiles can be built over seafloor slopes
Bugger off!
- add
Spring.SetFactoryBuggerOff(unitID, bool? active, number? distanceFromFactoryCenter, number? radius, number? relativeHeading, bool? spherical, bool? forced) → bool active. Forced means it also asks push-resistant units to move. Everything is optional. - add
Spring.GetFactoryBuggerOff(unitID) → active, distance, radius, relativeHeading, spherical, forced, same units as above. - add
Spring.BuggerOff(x, y = groundHeight, z, radius, teamID, spherical = true, forced = true, excludeUnitID = nil, excludeUnitDefIDArray = nil) → nil, for standalone bugger-off in-world (like happens when units stand on a construction site). /debugcolvolnow shows factory bugger off, in cyan. Standalone bugger off not shown.
Key press scan codes
- add
Spring.GetPressedScans() → {[scanCode] = true, [scanName] = true, ...}, similar toSpring.GetPressedKeysbut with scancodes - add
Spring.GetKeyFromScanSymbol(scanSymbol) → string keyNamethat receives a scancode and returns the user’s correspondent key in the current keyboard layout - add
wupget:KeyMapChanged() → nilcallin for when the user switches keyboard layouts, for example switching input method language.
Selection box
- add
Spring.SetBoxSelectionByEngine(bool) → nil. If set to false, engine won’t apply selection when you release the selection box. - add
Spring.GetSelectionBox() → minX, maxY, maxX, minY(sic) returning the screen coordinates of the selection box. Nil if not dragging a box.
Rendering internals
- lots of engine internals (in particular, fonts) use modern approaches to rendering. Expect speed-ups.
- applied more robust algorithm of culling shadow projection matrix. The net result is that shadows should not disappear any longer on small maps, at oblique camera angles, etc.
- allow skipping the use of Texture Memory Pool to save ~512 MB (by default) of statically allocated memory. Note this might be detrimental due to possible memory fragmentation. See
TextureMemPoolSizespringsettings - removed most of the sanity checks from window positioning code (reverted back to 105.0 like code). Now the engine won’t resist to resizing the window as the user/widget wants. There are still some rules in place, but they shouldn’t be too restrictive.
- FontConfig should be more robust upon failure and don’t crash that often on FC errors
- fix multiple camera issues.
- fix the hardware cursor on Linux/Wayland.
- fixed incorrect cubemap texture mapping
Rendering API
- add
DrawGroundDeferredcallin such that bound g-buffers could be updated from say game side decals renderer. - projectiles transformation matrices are now available through LuaVBO
Added the following GL. constants:
TEXTURE_{1,2,3}DTEXTURE_CUBE_MAPTEXTURE_2D_MULTISAMPLECOLOR_ATTACHMENT{0...15}{,_EXT}DEPTH_ATTACHMENT{,_EXT}STENCIL_ATTACHMENT{,_EXT}
Miscellaneous
- add
Spring.GetSyncedGCInfo(bool forceCollectionBeforeReturning = false) → number usage in KiB. Use from unsynced to query the status of synced memory occupation and force garbage collection - introduced
RapidTagResolutionOrderoption to control priority of domains when resolving rapid tags in case multiple Rapid mirrors are used at the same time. /dumprngswitch to tap out the state of synced RNG, works similar to/dumpstate- skirmish AI interface: add FeatureDef_isAutoreclaimable
- fix the 1 second pause/freeze players experience when a player or spectator disconnects from the match.
- fix SaveLoad hang in case when AllyTeams > 2 and one or more teams died.
- fix SaveLoad memory leaks.
pr-downloader
- add options to override rapid and springfiles url.
- add option to download from Rapid without using
streamer.cgi, but files directly. See https://github.com/beyond-all-reason/pr-downloader/pull/9 - improve file IO performance by multithreading it (big performance boost on Windows)
- fix handling of unicode paths on Windows
- fix finding and loading of SSL certificates on multiple Linux distributions (on Windows also switches to system certificate storage)