Skip to content


Subversion checkout URL

You can clone with
Download ZIP
5728 lines (5081 sloc) 287 KB
Spring changelog
(since 85.0: "!" prefix indicate backward compability broke)
(numbers in brackets normally mean the mantis ticket ID)
-- 100.0 --------------------------------------------------------
- bugfixes
! Added radar2 los colour for colouring the inside of the radar edge.
- it is changeable through SetLosViewColors (see Lua changes)
- fix visibleShieldHitFrames not read from shield subtable
! scale flighttime with GAME_SPEED and not 32
- warn on unknown tags
- weapondefs_post.lua: set legacy weapontype tags to nil, so they don't cause engine warnings
- make little bit more accurate
! SetLosViewColors changed:
- radar2 colour (see Map changes) is required.
- parameters are now in the form of GetLosViewColors output:
(always = {r,g,b}, LOS = {r,g,b}, radar = {r,g,b}, jammer = {r,g,b}, radar2 = {r,g,b})
- changed args of Spring.GetGroundNormal
- new 3rd arg: bool smoothedNormal (default false)
- 4th return arg: float slope
! convert UnitDef::attackSafetyDistance to a key recognized by Spring.SetMoveTypeData
- handle rejected connection attempts (when version differs)
- make path cache part of synced state -> player desyncs right from the start when got an invalid one
- make "MaxParticles" & "MaxNanoParticles" runtime changeable
- fix #4837: hang in linux crashhandler
- fix #4819: ai interface log messages are now logged into infolog.txt
- fix #4882: endlessloop at start when MaxSounds = 0
- unselect AI when game is selected in old menu
- demotool: add more info to dump output
-- 99.0 ---------------------------------------------------------
- new shader based InfoTexture
- new linux crashhandler (by Major Bor3d0m)
- new rotatable default camera
- MASSIVE speedup in lategame rendering (cutting rendertime upto 1.5-3 times!)
- add Spring.Reload(script) to change/map & game without exiting spring
- added lua override for InfoMaps (by enetheru)
- allow to enable isolated mode by creating a file isolated.txt next to spring executable
- internal weapon refactor
- fix particle limit
! removed TW, Orbital & Smooth camera
! add new default camera: Spring camera
- it's a merge of TW & Overhead camera
- it's using [alt] as modifier for rotating the camera (in key & middle click scrolling)
- also can be rotated with the screen edges of the upper 30% of the screen
- add new EdgeMoveWidth & EdgeMoveDynamic config tags
- EdgeMoveWidth: defines the screen edge width used for scrolling
- EdgeMoveDynamic: if scroll speed depends on the distance to the screen edge (default on)
! don't read old config file locations any more:
! add dedicatedValue & headlesValue to confighandler:
! make spring-dedicated listen at as default again
! add headless values from springrc-tempate-headless.txt
- print user's config to infolog
! new linux crashhandler by Major Bor3d0m
- libunwind is required to compile spring on linux
- fix headless compile on systems w/o x11 & SDL
! save windowed size in separate tags (#4388)
- fix crash with intel gpus
- fix bug that caused to recompress groundtextures always to ect1 on intel/mesa even when there was no need for it
- fix #4576: F6 does not sound mute
- fix #4578: backspace key events aren't captured by chat entry mode
- fix #4455: disable in-map draw when user starts writing
- fix #4706: do not ignore next char in ChatActionExecutor
- document keychains in uikeys.txt
- improve default cmdcolors.txt
- improve default los colors
- OverheadCamera: make angle 100% stable when doing `mousewheel down then up`
! remove los view w/o radar a.k.a. [;] (can be emulated with Spring.SetLosViewColors)
- draw weapon debug spheres in /debugcolvol (aimfrom pos, muzzle pos, target pos)
- fix harvesting
- fix #4591: builders `randomly` remove build orders from queue
- fix #4587: (stuck units in labs): remove a failing optimization CPathEstimator::FindOffset()
- fix units disobey move cmds
- fix user target being set for all weapons
- fix aircraft in groups (e.g. brawlers) not being able to attack the target and landing instead at target pos
! fixed shaking units when getting close to blocked squares
- repath GroundMoveType only every SlowUpdate() (to save cpu cycles)
- runtime cache failed paths, too (and use a lower lifeTime for them)
- fix #4592: broken per-piece coldet
- fix #4602 and improve CQuadField::GetUnitsAndFeaturesColVol
- speed up UnitCollisions
- base automatic attack commands for idle units on weapon priorities
- refactor weapon code:
- use LeadTargetPos more often
- give current unit's target higher priority than weapon ones
- plasmarepulsor: spawn projectiles from QueryWeapon (when defined)
- drop bombs from QueryWeapon() (when defined) and not AimFromWeapon()
- call AimWeapon() more often (depending on fireTolerance tag)
- see fireTolerance & allowNonBlockingAim tags
- fix impactOnly BeamLasers or LightninghtCannons dealing damage to units in the path of a beam blocked by water or a shield. (by GoogleFrog)
- add fallback name:
- weaponVelocity := maxVelocity
- weaponAcceleration := acceleration
- add fireTolerance tag: Angle which prevents a weapon from firing in CanFire. (GoogleFrog)
- add allowNonBlockingAim tag (default false = old behaviour). When enabled it makes AimWeapon() LUS/COB calls non-blocking (still the fireTolerance tag might prevent the weapon firing).
This is very useful for fast units that need to retarget often (e.g. armflash driving next to a llt).
- add new tag attackSafetyDistance used by airplanes (by springraaar)
- randomize IDs
- add SFX.RECURSIVE flag to Explode(), allowing to draw the piece and all its children recursively.
New InfoTexture Renderer:
- new shader based InfoTexture (faster, shinier & modular)
- add new `/ToggleInfo %name_or_shader_path%`
- fix #4608: add new /showpathtype [movdefname | movedefid | unitdefname | -1]
- removed multiple linked lists from rendering (massive speed up, cutting rendertime upto 2-3 times!)
! fix particle limit being ignored for particles created in the same GameFrame
- ShieldParticles: reduce count of particles by more than half
- always draw WaterPlane (that's not the water surface) below current minimum terrain height
- FlyingPieces: add camera frustum check
! SMFTexAniso: changed default to 4 (was 0)
- add UseShaderCache config tag (default true)
- allow to override the following InfoMaps via mapinfo.lua: (by enetheru)
- metalmapTex
- typemapTex
- grassmapTex
- minimapTex
- allow to load dds as detailtex
- add Spring.Reload(script) to change/map & game without exiting spring
! modified Spring.Restart(parameters, script): it only restarts spring when parameters isn't empty
! removed alias "/quit" (use /quitforce)
- add "quit to menu" to quit-box
- add "/reloadforce"
- add callouts to read and set engagement range of a unit (by FLOZi)
- Spring.GetUnitMaxRange(unitID) -> number maxRange
- Spring.SetUnitMaxRange(unitID, maxRange) -> nil
- add Spring.GetLosViewColors
- add new call-in: UnitStunned(unitID, unitDefID, unitTeam, stunned) -- called whenever a unit changes its stun status
- add Set/GetProjectileIsIntercepted
- add GetProjectileTimeToLive, GetProjectileOwnerID and GetProjectileTeamID.
- add a second return value to AllowWeaponTargetCheck callin to allow ignoring the callin.
! remove Spring.UpdateInfoTexture
! fix Spring.GetKeyState & Spring.PressedKeys expecting SDL2 keycodes while whole lua gets SDL1 ones
! Spring.PressedKeys now also returns keynames
- fix missing COLVOL_TYPE_SPHERE in luadefs
- add new tag `grayscale16bit` to gl.SaveImage() to save single color 16bit PNG
- add Spring.SetUnitTarget(unitid, nil) syntax
- expose some tags to LuaDefs: (by sprunk)
- expose maxReverseSpeed to LuaUnitDefs
- expose dynDamage tags to LuaWeaponDefs
- expose flightTime tag to LuaWeaponDefs
- support rapid tags
- allow to disable demo file recording in script.txt via RecordDemo = 0
- add DefaultStartScript config setting:
- if set, automaticly start it!
- add --oldmenu command line parameter to always get to the old menu
AI: (all by rlcevg)
- add Lua.callRules, Lua.callUI to JavaOO
- added weapon related callouts: Unit_getWeapons, Unit_getWeapon, Unit_Weapon_getDef, Unit_Weapon_getReloadTime
- expose resources via Game_getTeamResource* & Economy_get*
- new linux crashhandler (by Major Bor3d0m)
- HWCursor: support for 48x48 & 96x96 sizes
- allow to enable isolated mode by creating a file isolated.txt next to spring executable
! merged spring-headless / spring-dedicated into linux static builds / windows installer
! remove broken maven support
- colorize gcc output
! remove DEBUG2 & DEBUG3, replaced with just DEBUG
- enable "Identical Code Folding" with
- disable unused ASSIMP formats at compiletime
- add cmake option DEBUG_LUANAN to enable lua check for nans in a release build
-- 98.0 ---------------------------------------------------------
- vaporized PathFinder's runtime precache cpu usage
Cmdline Arguments:
- allow ./spring --game rapid://ba:stable --map DeltaSiegeDry
- give correct error message when cmdline given filepath wasn't quoted and contained spaces
- rename BypassScriptPasswordCheck to AllowSpectatorJoin and default to true
- added AssignPlayerToTeam(playerID, teamID)
- added SetAlly(firstAllyTeamId, secondAllyTeamId, ally)
- added VFS.UnmapArchive(string fileName)
- added VFS.GetMaps(), VFS.GetGames(), VFS.GetAllArchives(), VFS.HasArchive(archiveName)
- added VFS.GetArchiveInfo(archiveName)
- added VFS.GetArchiveChecksum(archiveName)
- added VFS.GetArchiveDependencies(archiveName), VFS.GetArchiveReplaces(archiveName)
- allow tcp connections by luasocket as default (udp is still restricted)
- add callin DrawInMiniMapBackground(sizex, sizey) -> nil
- add callin AllowBuilderHoldFire(unitID, unitDefID, action) --> boolean
action is one of:
Build -1
Repair 40 (CMD_REPAIR)
Reclaim 90 (CMD_RECLAIM)
Restore 110 (CMD_RESTORE)
Resurrect 125 (CMD_RESURRECT)
Capture 130 (CMD_CAPTURE)
- glFont: make inlined colorcodes reuse current set alpha value
- make lowRes PathEstimator using medRes PE instead of maxRes PathFinder (massively reducing cputime)
- massive cleanup & modularization
- reduced memory usage
- modrules: add system.pathFinderUpdateRate tag
- fixed/reduced PathEstimator update rate
- crashing aircraft doesn't spam PE updates anymore (#4500)
! fixed booleans in CEGs (sometimes they were randomly overriden with random data)
- shields have a new weapondef tag armorType - specifies the armor category to which the shield belongs (you can input either an armorclass name, or a unitdef name to share that unit's armor category)
! move magic number to weapondef_post.lua: crater were 1.5x of craterAreaOfEffect while decals are 1.0x -> make them _both same size_
! fixed #4523: typo in craterAoE loading
! LightningCannon visual now obeys the beamTTL weapondef tag (behaviour same as BeamLaser) - previous value was hardcoded 10
! wobble and sprayAngle now improve with experience (same as [moving]accuracy)
! Shields obey dynamic damage
- GroundBlocking: don't align immobile objects to even squares
- reduce load in Collisions handling (by doing blocked ground squares scans only every 2nd frame)
- AI is initializated earlier: no more hang on game start
- add /set GrassDetail to console
- slightly speed up scanning for archives
- add HostIPDefault, HostPortDefault to set default host ip/port
- reduce default spintime of ThreadPool workers to 1ms (from 5ms)
! remove LogFlush, introduce LogFlushLevel:
when a log-message with level >= LogFlushLevel is logged,
logfile is flushed, else not,
see rts/System/Log/Level.h for int values
! rename /nosound to /mutesound
- fix #4417 (spring spring://username:passwd@hostname:port doesn't work)
- fix #4413 (widget:GameProgress() was no longer called for rejoining player)
- fix #4407 (SetUnitRotation broken for buildings)
- fix #4406 (crash at start)
- fix #4377 (compile with cmake 3.0)
- fix #3677 (bounceExplosionGenerator tag does not work for bouncing aircraftbomb weapon types)
- fix #4483 (Spring.SetProjectileAlwaysVisible doesn't always make a projectile always visible)
- KingRaptor found the cause of a _very_ old bug: fix green screen tint in startselector stage
- PE: fix bug where buildings weren't registered as blocking, cause they were not snapped to ground when the PE update was called (c03022cc)
- fixed return-type and value of Pathing::GetApproximateLength (pullrequest by rlcevg)
- heavily reduced files which are compiled multiple times
! add check for gcc >=4.7 at configure
-- 97.0 ---------------------------------------------------------
- utf8 support (kudos go to N0U)
- switch from sdl to sdl2:
- added /fullscreen (alt+enter) command ingame
- fixes some window manager bugs/problems
- KeyChains (kudos go to MajBoredom)
- split LuaRules & LuaGaia into their synced/unsynced luaStates
Cmdline Arguments:
- added new `spring spring://username:passwd@hostname:port` syntax (all except hostname are optional, i.e. spring://localhost does work fine)
- Should in longterm replace script.txt for clients, so script.txt is only needed for hosts.
-> No need to create a file on the filesystem to start spring as a client.
- Spring links spring:// URL scheme in the OS, so you can start such URLs from browser (as UT99 did).
E.g. you can place a spectator link on your website to join your autohosts and/or you can use it for weblobbies.
! changed -s/--server argument to take a param (the ip/hostname listen to)
! removed -c/--client argument (was only needed in times when clients didn't retrieved their script.txt from the server)
Hosting & Connecting:
- fixed direct connect in SelectMenu
- by default listen to localhost:8452 now, so you can always connect to localhost started matches
- improve debug draw (alt+[b])
! demofile string in infolog changed "recording demo: %s" -> "Recording demo to: %s"
- demo filehandle is now opened on start, so you can use lsof to readback the used filename
- fix freetype not found on windows / mingw
! add check for gcc >=4.6 at configure
- optional fontconfig support
! SDL2 dependency
- `DebugGL` configtag works now (cause of SDL2 switch)
! removed /keyset
! removed /hotbind (Ctrl+insert)
- new KeyChains support:
- example: /bind Ctrl+a,Ctrl+b say Hello World!
- you can double bind a button this way, e.g.:
- "/bind e,e say Bar", "/bind e say Foo" -> 1st press prints Foo, 2nd press prints Bar
- use KeyChains for defaults:
! double hitting drawbutton sets label
! switching between ally,spec & all chat is now done by double hitting alt,shift or ctrl
! alt+return now toggles fullscreen (default shortcut e.g. in mediaplayers)
- the parser now checks the returned tables for NaNs & Infs and prints a warning if it finds some (they are sources of desyncs!)
- add new "harvestStorage" unitdef tag, UnitHarvestStorageFull lua callin and Spring.GetUnitHarvestStorage(unitid) callout
it's for engine assisted starcraft/c&c like feature harvesting (atm only metal is supported)
NOTE: the unload command still needs to be implemented in lua (much less work than the reclaiming one)
- LuaRules & LuaGaia are now splitted into their synced & unsynced parts, and each one got its own luaState
! this way unsynced parts of gadgets now get `synced` callins like 'UnitCreated' etc. w/o SendToUnsynced from their synced part
- LuaRules & LuaGaia are now ~equal (except a very minor subset of differences) and get the same callins esp. all AllowXYZ callins
- LuaUI now has a GotChatMsg too (same as LuaRules always had), it's similar to the now deprecated LuaUI-only ConfigCommand callin, but is called more often
- fixed a lot bugs in Spring's c-lua code
- use lua's original math.random() code and only use streflop for it in synced luaStates
- always make math.randomseed() available (synced & unsynced)
- in future this will also allow multithreading of the different luaStates
! SYNCED. does a copy on access now and so is slow:
- bad: for i=1,100 do ...[i] ... end
- good: local foo =; for i=1,100 do ... foo[i] ... end
! SYNCED. can't be localized in global scope anymore:
- bad: local foo =; function gadget:DrawWorld() ... foo ... end
- good: function gadget:DrawWorld() local foo =; ... foo ... end
! moved Spring.GetGameSpeed() from SyncedRead to UnsyncedRead cause it was causing desyncs in demos
- fix Spring.Restart on windows
! new TextInput(utf8char) callin, needed cause of changed unicode handling in SDL2
- added Spring.SetUnitHarvestStorage(unitid, metal) & Spring.GetUnitHarvestStorage(unitid)
! prevent triggering of ATi driver bugs
! gl.LineWidth & gl.PointSize throw an error when called with incorrect argument (<=0)
! gl.Scissor & gl.CreateTexture throw an error on incorrect sizes, too
! fix gl.Viewport
- add missing colvol tags to Unit-/FeatureDefs:
- .collisionVolume.type = {"ellipsoid" | "cylinder" | "box"}
- .collisionVolume.scale{X|Y|Z}
- .collisionVolume.offset{X|Y|Z}
- .collisionVolume.boundingRadius
- .collisionVolume.defaultToSphere
- .collisionVolume.defaultToFootPrint
- .collisionVolume.defaultToPieceTree
- add optional 4th argument to Spring.GetUnitSeperation to calc the distance between the unitsphere surfaces instead of their midpos
! fix wrong coords & crash in Spring.RemoveGrass
- added new LOG.NOTICE (should be used instead of LOG.INFO)
- improve Spring.GetKeyBindings output (backward compatible)
- added Script.IsEngineMinVersion(major [,minor [,commits]])
- added Spring.GetClipboard() & Spring.SetClipboard(string text)
- allow to connect to by luasocket as default
- SetUnitValue now accepts booleans, too
- fixed desync checker
- added GAME/MUTATOR{0..9} so you can load arbitrary mutator archives before the game
- make GameID the only seed of the synced random generator
so you can define the gameid in a luaAI battle startscript and you will always get a syncing match
! disallow to install spring over existing installations / ask for uninstall first
- don't associate .sdf with spring.exe any more
! new BlockCompositing configtag (default true). Disables kwin compositing to fix tearing.
-- 96.0 ---------------------------------------------------------
- kill memory leaks crippling large games (#4152)
- kill micro-jitter in simulation framerate (#4171)
- kill unclean exits causing various forms of corruption (#4053)
- "nugget" is hereby officially promoted as the new umbrella term for widget or gadget
- default disable grass for ATI cards (crashes for some people)
- made stacktrace-translation script recognize more crash/hang patterns
- improve Shard AI for BA
- fix some MSVC compile errors
- TimeProfiler (alt+b) shows now max `lag` of each item
- massively speedup caching with many .sdd archives
- fixed some FreeBSD compile issues (thx AMDmi3)
- dump (engine) shaders to infolog when they fail to compile
- more extensive logging during shutdown
- fix a number of potential issues if a thread crashes on engine shutdown
- increase precision of several timer variables to preserve intermediate results
- Lua: track more memory-allocater statistics for display in debug-mode
- Lua: limit maximum amount of memory allocated globally and per handle
- GameServer: always echo back client sync-responses every 60 frames (see #4140)
- GameServer: removed code that blocks pause / speed change commands from players with high CPU-use in median speedctrl policy
- GameServer: sleep less between updates so it does not risk falling behind client message consumption rate
- LuaHandle: make time and steps spent on garbage collection configurable
CollectGarbage callin is restricted to run for at most
MaxLuaGarbageCollectionTime (user-configurable) millisecs
MaxLuaGarbageCollectionSteps (user-configurable) iterations
- GlobalConfig: add new config-option 'UseNetMessageSmoothingBuffer' (see #4053)
- LogOutput: make enabled 'section' log-levels configurable by users
- MoveDef: add key 'allowTerrainCollisions' for handling units with super-sized footprints (see #4217)
- SolidObject: make {Unit,Feature}{Pre}Damaged events receive the 'attacker' ID when object is crushed
- QuadField: add raytraced projectiles to three cells instead of one
- GameInfo: add map hardness label/value to 'i' overlay
- Rifle weapons can hit features too now and apply impulse to the target
- add gadgetHandler:AllowWeaponInterceptTarget
- LuaSyncedRead:
make Get{Unit,Factory}Commands (optionally) return just the queue's size
(ie. without copying the entire command queue into Lua VM memory, *VERY*
important for performance when a nugget is not interested in the commands
"if #Spring.GetCommandQueue(unitID, -1 | nil ) == 0 then return end" --> BAD, CREATES COPY OF QUEUE
"if Spring.GetCommandQueue(unitID, -1 | nil, false) == 0 then return end" --> GOOD, DO THIS IF POSSIBLE
- fix #4215 (stack-buildable units on non-flat terrain)
- fix #4209 (antinukes firing at nukes targeted outside their area)
- fix #4205 (air-transports unable to unload hovercraft on water)
- fix #4204 (float3.* clang compilation failure)
- fix #4203 (air-transport unable to load units floating on water)
- fix #4202 (S3O textures loaded multiple times instead of being cached)
- fix #4200 (secret)
- fix #4198 (amphibious units without waterweapons chasing hovercraft whilst underwater)
- fix #4197 (units moving right up to their target instead of attacking from range)
- fix #4186 (log-system crash on exit)
- fix #4173 ("Error: [Watchdog::ClearTimer] Invalid thread N")
- fix #4171 (see 'Major' section)
- fix #4163 (corrupted unit environment reflections)
- fix #4161 (Spring.Restart failing when path contains spaces)
- fix #4155 (reverse-built gunships maintain their vertical speed)
- fix #4154 (calling LUS 'AttachUnit(piece, unitID)' turns following 'Move(piece, ...)' calls into no-ops)
- fix #4152 (see 'Major' section)
- fix #4149 (rendering corruption in DynamicWater mode)
- fix #4144 (partly submerged units not hittable by non-waterweapons)
- fix #4145 (depthcharges fired by ships having trouble to reach their targets)
- fix #4138 (same as #4171)
- fix #4137 (units randomly switching team-color, old bug with new cause)
- fix #4135 (ATI driver crash with *disabled* shadows)
- fix #4133 (cloaked units hidden even when set to alwaysVisible)
- fix #4131 (units moving to position of manualfire command if outside weapon range)
- fix #4129 (air-constructors flailing around construction targets)
- fix #4128 (units stuck in 'skidding' state: repeatedly bouncing on ground while unable to move)
- fix #4091 (gadget:MousePress() and other unsynced gadget functions not called with LoadingMT=0)
- fix #4053 (see 'Major' section)
- fix #3749 ('initCloaked' UnitDef tag overriding user cloak commands for being-built units)
- fixed wreckage heaps could be resurrected
- LaserCannon: (once again) fix range overshooting
- always clamp length of blended wind-vector to [map.minwind, map.maxwind]
- the 'AllowDeferred*Rendering' config options are now safe to enable
-- 95.0 ---------------------------------------------------------
! new datadir structure: &
! new LuaIntro (Lua based loadscreen with examples)
- add map border rendering (+ /mapborder command)
- bugfixes & speedups
! remove support for SM3 maps
(but fix #3942 so SM3 is left in a slightly less broken state for whoever wants to mess with it in the future)
- use SSE in some matrix math
- save a little mem in Pathfinder
- reduce PFS update rate by 10%
- little speedup in Grass rendering (it's still slow on some maps)
- use 32bit shadowmap. ~7% faster than 24bit one, cause of better alignment
- move Lua GC to its own callin; fixes bug where GC was too slow to catch up and ate >>100MB ram
- nihiliate MiniMap usage by rendering it to a texture
- PathEstimator: add unsynced caches (*might* help in big AI games)
- ExplosionGenerator:
pre-load all static (weapon/model/piece) CEG's and
never do lazy script-parsing anymore where possible
(only CEG's delay-spawned by other CEG's are still
loaded this way, rest can be dynamically reloaded)
- PFS: prevent special-case search expansion when unit is close to goal but goal is blocked
- make FeatureHandler::AllocateNewFeatureIDs more efficient in case of feature spam
- force-align all thread entry points so SSE functions don't crash (on win32)
- allow Lua AI's to be selected from the menu
! removed "mods" from archive scandirs
! converted RotateLogFiles to a bool var (defaults to false)
! remove "--projectiledump" and add "--list-ceg-classes" (converted to JSON format )
- do not switch camera-mode on countdown
- colorized stdout (you can use `spring --nocolor` & SPRING_NOCOLOR envvar to disable)
- show LuaMemUsage in /debug view
! load only image formats which work on all platforms, current supported image formats are:
! remove engine support for gamedata/messages.tdf,
see examples/Widgets/game_messages.lua for a possible replacement
- more verbose CEG parsing (warns now about unknown tags)
- switch to a high precision clock all over the engine (including Lua)
- copied a lot config descriptions from wiki to the engine (thx for all the wiki'ers)
- is now automatically updated with each release
! disable build of spring-multithreaded (unmaintained / doesn't compile)
! disable luaThreadingModel > 2, can be overriden with EnableUnsafeAndBrokenMT=1
fixes #3774, #2884, #2784, #3673, #3808
- more verbosity for spring-dedicated on exit & demo-writing
- add config "MenuArchive" to allow background image to be set which is read from the archive in the path bitmaps/ui/background/
- fix /keydebug for release builds
- updated game_end example gadget to handle quit/resigns better, reacts faster, and better code
- GuiTraceRay does not stop at water surface anymore by default
(all ground-attack positions are adjusted in synced code now)
--> torpedo launchers cannot overshoot, etc.
- GuiTraceRay now ignores noSelect units
- SmoothCameraController: add SMOOTHing to alt+mousewheel zoom
- change WorldObject::speed to a float4, store magnitude in .w
(saves a number of unnecessary .Length() calls here and there)
- PathCache: track maximum size + double initial capacity, register hash collisions and switch hash function
- GameServer: add config-option ServerRecordDemos
non-dedicated servers (eg. headless builds used as "dedicated" standin) can now record games if desired
ACHTUNG: server demos are now stored in a separate directory "demos-server/" to prevent name conflicts!
- AssParser:
generalize logic for multiple UV channels
fix major issue with baked transforms
restrict support to well-known & -maintained formats (.3DS, .DAE, .LWO, .BLEND)
allow modellers to work around #3552 by recognizing a number of new piece-table keys
for the root piece:
"xaxis" = float3, "yaxis" = float3, "zaxis" = float3 (determine global orientation of model)
for all pieces:
"rotAxisSigns" = float3 (determines direction of script-applied rotations around each axis)
"rotAxisMap" = number (currently can only be 0=XYZ or 3=XZY, determines coordinate conversion)
- SpringApp:
fix old bug in fullscreen&&dualscreen mode cutting window-size in half on each SDL_VIDEOEXPOSE event
refactor to allow choice of (win32) timer via cmdline&config
- SpringTime:
switch to native win32 clock (same as used by SDL) on windows
select win32 clock based on config&cmdline-parameter 'useHighResTimer'
remove the last SDL_GetTicks dependencies
- reduce target-lost CAI timeout from 8 to 2 seconds
- make calls to script->{Start, Stop}Moving more consistent: only run them
when a unit transitions from zero to non-zero speed or vice versa, and no
longer do so during in-place rotations --> animations should no longer be
interrupted / reset
! remove TA-specific code in CobInstance::Create
(this changes the argument value to COB's SetMaxReloadTime for
units equipped with BeamLasers and / or more than one weapon)
- {Laser, Emg}Projectile: disable all collision-testing when ttl <= 0
these projectile types could exceed their range due to fadeout
and only removed themselves (deleteMe=true) when intensity or
length reached 0, so without disabling coldet (checkCol=false)
range-exploits were possible
- remove impulse "capacitance" from ground units (SolidObject::residualImpulse and ::StoreImpulse())
- apply UnitDef::myGravity to ground units (if non-zero)
NOTE: myGravity acts as a map-gravity MULTIPLIER for aircraft; it REPLACES map gravity for land-based units
- steering/avoidance: actively avoid only mobile units, let PFS/CD handle statics
- SolidObject:
cleanup internal physical/collision state management
model physical drag, use it for features and skidding units
related to the change above: Spring.Set*Physics now takes three extra number
arguments (Set*Physics(..., number drag.x, number drag.y, number drag.z))
to control how much an object is affected by drag forces
- Feature: set default impulseMult to 0 for 'immobile' / static wreckage (cf. new FeaturePreDamaged)
- Unit: transfer impulse to transporter if being transported
- Unit: swap order of UnitPreDamaged and HitByWeapon callins (viewtopic.php?f=23&t=30879)
- *Weapon: fix minor targeting issues due to new SolidObject underwater state definition
- LaserCannon: calculate projectile ttl from weapon range, not weapondef range
- BombDropper:
*always* drop bombs/torpedoes in time to hit target
(even if the distance from weapon to target still exceeds static
range, range is not meaningful for these weapons anyway since it
depends on launching unit's velocity, altitude and gravity)
- BeamLaser: fully reimplement the sweepfire logic
still has no script interaction so use with care
(respects reloadtime constraint but not much else)
! UnitDef:
read brakeRate for aircraft without scaling by 0.1 and make brakeRate
default to maxAcc, not maxAcc * 3.0 (--> open up your unitdef_post's)
- WeaponDef: silently ignore bad slavedTo indices
- MoveDef:
remove old naming-scheme restrictions (which required names to contain "tank", etc)
instead parse key "speedModClass" with accepted values 0=Tank, 1=KBot, 2=Hover, 3=Ship
fix insane default value for heatMod parameter (since 7bef7760f4)
- MoveType: fix LOS emit-heights for floating units being relative to ocean floor
- AAirMoveType: do not use fuel while being refueled (yo dawg...)
- StrafeAirMoveType: overshoot less when landing
- HoverAirMoveType:
remove support for reading (and assigning to) key "brakeDistance"
via MoveCtrl; this quantity is now calculated dynamically based
on speed
- GroundMoveType:
add missing TestMoveSquare checks in places where units are repositioned by coldet
fix minor bug in GetGroundHeight (caused hovercraft to vibrate in shallow water)
- remove ancient "move transportee 1000 elmos under the map to hide it when attaching to piece -1" hack
there is now a "void" state for such purposes; objects (units and features) in this state will never
1) take damage, even from Lua (but can be killed by Lua)
2) be rendered through any engine path (nor their icons)
3) be intersectable by either synced or unsynced rays
4) block any other objects from existing on top of them
5) be selectable
- hovercraft now take water damage by default
! LuaUnitDefs: deprecate the "drag" key, was an internal variable
- LuaUnitDefs:
add more is* functions for all unit-types known to Spring
the complete function list as of 95.0 is:
fully deprecate the following UnitDef keys:
after 95.0 these will all become nil, beware
! LuaUnitDefs: deprecate canHover (check instead to determine if a unit is a hovercraft)
- LuaUnitDefs: log error when explodeAs & selfDestructAs are missing
- LuaUnitScript: optionally make Turn and Move insta-update piece matrices (pass "true" as the fifth argument)
- LuaRules:
setup "proper" (transformation) state for the DrawProjectile callin
add callin AllowWeaponInterceptTarget(number interceptorUnitID, number interceptorWeaponID, number targetProjectileID) --> boolean
add callins FeatureDamaged and FeaturePreDamaged
number featureID, number featureDefID, number featureTeam,
number damage
[, number weaponDefID, number projectileID
[, number attackerID, number attackerDefID, number attackerTeam ]]
number featureID, number featureDefID, number featureTeam,
number damage
[, number weaponDefID, number projectileID
[, number attackerID, number attackerDefID, number attackerTeam ]]
! LuaSynced*: make sure ALL weapon API functions are 1-based
! LuaSynced*: make {S,G}et{Unit,Feature}Blocking signatures match
Get{Unit,Feature}Blocking(number objectID) -->
boolean isBlocking,
boolean isSolidObjectCollidable,
boolean isProjectileCollidable,
boolean isRaySegmentCollidable,
boolean crushable,
boolean blockEnemyPushing,
boolean blockHeightChanges
number objectID,
boolean isBlocking,
boolean isSolidObjectCollidable
[, boolean isProjectileCollidable
[, boolean isRaySegmentCollidable
[, boolean crushable
[, boolean blockEnemyPushing
[, boolean blockHeightChanges ]]]]]
! LuaSynced*: slightly change {Get,Set}ProjectileTarget signatures
GetProjectileTarget now returns a number instead of a string to indicate target-type
GetProjectileTarget now always returns two arguments (if given projectileID is valid)
GetProjectileTarget now always returns a target position if projectile has no target object
SetProjectileTarget now takes a number instead of a string to indicate target-type
GetProjectileTarget(number projectileID) --> nil | [number targetType, number targetID | table targetPos = {[1] = x, ...}]
SetProjectileTarget(number projectileID, [number targetID [, number targetType]] | [number x, number y, number z]) --> nil | boolean
where targetType is one of {string.byte('g') = GROUND, string.byte('u') = UNIT, string.byte('f') = FEATURE, string.byte('p') = PROJECTILE}
- LuaSynced*:
add callout Spring.GetRadarErrorParams(number allyTeamID) --> nil | number allyteamErrorSize, number baseErrorSize, number baseErrorMult
add callout Spring.SetRadarErrorParams(number allyTeamID, number allyteamErrorSize [, number baseErrorSize [, number baseErrorMult ]]) --> nil
add callout Spring.SetUnitPosErrorParams(number unitID,
number posErrorVector.x, number posErrorVector.y, number posErrorVector.z,
number posErrorDelta.x, number posErrorDelta.y, number posErrorDelta.z
[ , number nextPosErrorUpdate]) --> nil
add callout Spring.GetUnitPosErrorParams(number unitID) --> nil |
number posErrorVector.x, number posErrorVector.y, number posErrorVector.z,
number posErrorDelta.x, number posErrorDelta.y, number posErrorDelta.z,
number nextPosErrorUpdate
add callout Spring.SetFeatureBlocking(args = see SetUnitBlocking) --> boolean
add callout Spring.SetPieceProjectileParams(number projectileID,
[ number explosionFlags, [ number spinAngle, [ number spinSpeed,
[ number spinVector.x, [ number spinVector.y, [ number spinVector.z ]]]]]]) --> nil
deprecate the Spring.SetProjectileSpin* functions
add callout Spring.GetFeatureBlocking(number featureID) --> boolean collidable, boolean crushable, boolean blocking
add third return-value to Spring.GetUnitBlocking (signature is the same as that of GetFeatureBlocking)
- LuaSyncedCtrl:
add callout SetProjectileAlwaysVisible(number projectileID, boolean alwaysVisible) --> nil
add callouts SetFeatureVelocity and SetFeaturePhysics (these work like their SetUnit* counterparts, reference the wiki docs)
cleanup arg-parsing of Spring.SetUnitPieceCollisionVolumeData callout
new signature: SetUnitPieceCollisionVolumeData(
number unitID,
number pieceIdx,
boolean enable,
number scales.x, number scales.y, number scales.z,
number offset.x, number offset.y, number offset.z
[, number volumeType [, number primaryAxis]]
! LuaSyncedRead: deprecate the Spring.GetProjectileSpin* functions
- LuaSyncedRead:
add Spring.GetPieceProjectileParams(number projectileID) -->
number explosionFlags, number spinAngle, number spinSpeed,
number spinVector.x, number spinVector.y, number spinVector.z
add callout Spring.GetUnitWeaponCanFire(number unitID, number weaponNum) --> boolean
add callout Spring.GetFeatureVelocity(number featureID[, boolean norm]) --> nil | number vel.x, number vel.y, number vel.z[, number |vel|] and Spring.GetProjectileDirection(number projectileID) --> nil | number dir.x, number dir.y, number dir.z
add callout Spring.GetProjectileDefID(number projectileID) --> nil | number weaponDefID
using this to get a weaponDefID is HIGHLY preferred to indexing WeaponDefNames via GetProjectileName
add callout Spring.GetUnitRotation(number unitID) --> nil | number pitch, number yaw, number roll (WIP)
extend arguments to Spring.TestMoveOrder
old signature: TestMoveOrder(
number unitDefID,
number pos.x, number pos.y, number pos.z
) --> boolean
new signature: TestMoveOrder(
number unitDefID,
number pos.x, number pos.y, number pos.z
[, number dir.x
[, number dir.y
[, number dir.z
[, boolean testTerrain
[, boolean testObjects
[, boolean centerOnly ]]]]]]
) --> boolean
added GetUnitWeaponTarget(unitID, weaponID) ->
nil | number targetType [, bool isUserTarget, table targetPos = {x, y, z} | number targetID]
(returned number of args is always 3 if targetType != None)
- LuaUnsyncedRead:
add callout Spring.GetPixelDir(int x, int y) -> number dirx, number diry, number dirz
add callout Spring.GetVisibleProjectiles(
[ number allyTeamID = -1
[ , boolean addSyncedProjectiles = true
[ , boolean addWeaponProjectiles = true
[ , boolean addPieceProjectiles = true ]]]]
) --> nil | {[1] = projectileID, ...}
! Spring.GetUnitNearestEnemy doesn't return neutral units anymore
- Spring.GetProjectileVelocity now returns (targetPos - startPos) for BeamLasers and other hitscan weapons
- Spring.Get{}Velocity: always return speed.w (it's free now)
- Spring.SpawnCEG: allow number (cegID) as first arg + return a second value (number cegID)
- add Spring.GetLogSections() & Spring.SetLogSectionFilterLevel(string sectionName, string|number logLevel)
- add new Game. constants: Game.gameName, Game.gameVersion, ...
- allow to save strings in RulesParams
- add 'parent' field to Spring.GetUnitPieceInfo
- GadgetHandler:
add several missing callins (AllowStartPosition, ...)
expose actionHandler through gadgetHandler table (seems to be a common enough mod)
log if callin is not implemented
unify callin lists (now all in callins.lua)
add missing projectileID argument to UnitDamaged
- LuaOpenGL::Draw{List,Func}AtUnit: just use drawPos or drawMidPos
- gl: add callout UniformArray(number location, number type, table uniforms) -> nil
(type can be one of {0 = int, 1 = float})
- gl.CreateShader: support uniform arrays (table values with more than 4 and up to 32 elements)
- gl.CreateShader: make 'definitions' a recognized key (whose value should be a subtable or string of shader #define's)
- Spring.{Get,Diff}Timer(s): save some precision (important with new high-resolution timers)
- Spring.DiffTimers: accept optional third argument (boolean) to return dt in milliseconds
- add some utility functions to the math table, see
- LoadingMT: add a runtime check that should detect incompatibilities
- disable ARB shaders with Intel/Mesa drivers (can be overridden by setting ForceEnableIntelShaderSupport=1)
- reduce used varyings in SMF GLSL shader in the hope it will fix advmapshading on some lowend GPUs
- render MiniMap to a texture and update it async from screen (new configtags: MiniMapRenderToTexture & MiniMapRefreshRate)
- do not draw ground reflections in water if drawGround=false
- 3DModel: do not set tex1 to 'default.png' (it breaks assimp's auto-texturing ability)
- SMFFragProg: fix '#version must occur before any other statement' and eliminate dynamic branching
- implement Lua-bindable map and model normal/depth/material buffers
note: this is *FULLY* compatible with custom Lua UnitRendering
shaders (even easier if some minor framework changes are made)
so the vast majority of deferred rendering operations is now
within Lua's abilities
new configuration-keys to enable/disable G-buffer draw-passes:
AllowDeferredMapRendering (default true)
AllowDeferredModelRendering (default true)
new LuaUnsyncedCtrl callouts to enable/disable G-buffer updates:
Spring.SetDrawGroundDeferred(boolean) -> nil
Spring.SetDrawModelsDeferred(boolean) -> nil
new LuaUnitRendering Material keys:
"standard_shader" (same as "shader")
"deferred_shader" = {vertex = ..., ...}
"deferred" (same as "deferred_shader")
deferred fragment shaders must *ONLY* write to gl_FragData[i] where
i = {0 = normals, 1 = diffuse, 2 = specular, 3 = emissive, 4 = misc}
new Lua texture names:
"$map_gb_nt" or "$map_gbuffer_normtex"
"$map_gb_dt" or "$map_gbuffer_difftex"
"$map_gb_st" or "$map_gbuffer_spectex"
"$map_gb_et" or "$map_gbuffer_emittex" // for emissive materials (bloom would be the canonical use)
"$map_gb_mt" or "$map_gbuffer_misctex" // for arbitrary shader data
"$map_gb_zt" or "$map_gbuffer_zvaltex"
"$mdl_gb_nt" or "$model_gbuffer_normtex"
"$mdl_gb_dt" or "$model_gbuffer_difftex"
"$mdl_gb_st" or "$model_gbuffer_spectex"
"$mdl_gb_et" or "$model_gbuffer_emittex"
"$mdl_gb_mt" or "$model_gbuffer_misctex"
"$mdl_gb_zt" or "$model_gbuffer_zvaltex"
! updated gentoo overlay url to
- switch to mingw64 for the windows build
- remove some custom Find*.cmake files
- fix #3645 Can't build if source directory has white spaces
! removed VS project files / fix compile with Visual Studio 2012 Express for Windows Desktop:
use cmake -G "Visual Studio 11" to generate project files
dropped support for Visual Studio 8, 9 & 10
! compile Spring using c++11 standard
- fix clang compile errors + some bugs detected by clang
! slightly refactored build system, now every target can be disabled:
spring-dedicated, spring-headless, spring-legacy, spring-multithreaded
- more unittests (extended FileSystem, timers, unitsync, SSE Matrix Math, ...)
- fix some errors when running spring in-source (AI / Interfaces are still broken)
! remove unused libspringserver
! fix {Get,Set}UnitWeapon{Fire,HoldFire,TryTarget,TestTarget,TestRange,HaveFreeLineOfFire} WeaponID argument to use the same 1-starting indexes as rest of lua interface
- fix #4092 (empty pieces Explode()'d with PF_FIRE flag leave behind small stationary fire FX)
- fix #4079 (resurrecting could lead to multiple units created by one wreck)
- fix #4078 (float-->int conversion overflow)
- fix #4073 (fuel-level of unit is lowered upon completion)
- fix #4070 (units can skip attack orders in their queue)
- fix #4068 (the "wrong cursor for certain attack commands" part)
- fix #4057 (double BeamLaser visualisation)
- fix #4054 (homing missiles miss radar dots of flying units)
- fix #4047 (ground decals don't fade away)
- fix #4043 (constructors can build large units ontop of themselves & walk through 'gaps')
- fix #4023 (allow 'key'=value options-table format in Spring.GiveOrderTo*)
- fix #4019 (receiveTracks not working reliably)
- fix #4011 (GetTeamStartPosition cannot determine whether start position was placed by player)
- fix #4010 (disable /spectator before gamestart)
- fix #4007 (large-radius air transports failing to load transportees)
- fix #3980 (air transports set to 'Land' wander around while idling if loaded)
- fix #3979 (unhelpful error message)
- fix #3974 (out-of-fuel bombers set to 'Land' fly all over the map)
- fix #3973 (aircraft taking off in wrong direction on attack orders)
- fix #3961 (expect ArmorDef subtables in array-format, show warning if armordefs contains old-style subtable entries)
- fix #3959 ("flying" ground-units colliding with aircraft looks unrealistic)
- fix #3957 (Unit icons of underwater units are drawn at water level instead of actual depth)
- fix #3951
submissile was being checked in the base-class for all
weapons despite being a TorpedoLauncher-only property
- fix #3948 (broken voidwater shading)
- fix #3941 (CBitmapMuzzleFlame doesn't render when dir is <0 -1 0>)
- fix #3937 (transport unloading on top of non-blocking objects)
- fix #3924 (add callout Spring.UpdateInfoTexture(number texMode) --> boolean)
- fix #3890 (Unloaded units fly across the map)
- fix #3873 (lag while loading model-less features)
- fix #3862 (aircraft overshooting/flailing around repair pads, also #3834)
- fix #3861 (BeamLaser does not hit if it starts within hitvolume)
- fix #3855 (LosHandler bug that made provided full LOS on underwater units in radar coverage)
- fix #3835 (try to avoid clash between Weapon::AutoTarget and MobileCAI::AutoGenerateTarget)
- fix #3785 (Construction aircraft getting stuck)
- fix #3783 (add FailedCommand sound to default sounds.lua)
- fix #3765 (make Gaia the default feature team, not -1/0)
- fix #3754 (high decal-strength unit tracks drawn twice due to alpha-wraparound)
- fix #3752 (safeguard execution of SimFrame() against garbage keyframe messages)
- fix #3743 (partially: make non-hovering aircraft start turning to goal during takeoff)
- fix #3739 (apply impulse to aircraft)
- fix #3737
gadget:AllowStartPosition() now receives the raw
unclamped start position as three extra arguments
- fix #3736 (TextureAtlas crash)
- fix #3720 (unit pushed through impassable part of factory)
- fix #3718 (units moving in circles near obstacles)
- fix #3715: make all info-textures individually queryable by Lua (gl.Texture)
"$info" and "$extra" still map to the active info-texture as before
"$info_losmap" or "$extra_losmap" map to the L-view texture
"$info_mtlmap" or "$extra_mtlmap" map to the F4-view texture
"$info_hgtmap" or "$extra_hgtmap" map to the F1-view texture
"$info_blkmap" or "$extra_blkmap" map to the F2-view texture
textures contain no data until user switches to their respective modes
non-active textures are not updated in the background, so will go stale
- fix #3714 (minimap icons of enemy units visible after /spectator plus /specfullview 0)
- fix #3697
Spring.GetPositionLosState now returns a 4th argument which indicates
if a position is actively being radar- or sonar-jammed by any allyteam
- fix #3686 (free flying ground units follow terrain slope)
- fix #3683 (minimap textures not freed on exit)
- fix #3681 (make widgetHandler:LoadConfigData() more robust)
- fix #3675 wrong loglevel in unit_script.lua
- fix #3665
AllowStartPosition now receives the ready-state of
each player as an argument too, making its complete
signature as of 95.0:
number clampedPos.x, number clampedPos.y, number clampedPos.z,
number playerID,
number readyState,
number rawPickPos.x, number rawPickPos.y, number rawPickPos.z
where readyState can be one of:
PLAYER_RDYSTATE_UPDATED = 0 -- player picked a position
PLAYER_RDYSTATE_READIED = 1 -- player clicked ready
PLAYER_RDYSTATE_FORCED = 2 -- game was force-started (player did not click ready)
! the default 'failed to choose' start-position is now just (0,0,0), not (0,-500,0)
- fix #3662 (secret)
- fix #3660 (memory leak in Spring.GetVisibleFeatures)
- fix #3655 (UnitDef::canMove misinterpreted by factory CAI code)
- fix #3653 (clash between mutually push-resistant units moving to same spot)
- fix #3643 (get PFS and CD to agree regarding factories)
- fix #3641 (fix several issues with units using per-piece collision volumes)
- fix #3640 (Groundplates don't disappear when out of LOS)
- fix #3637 (desyncs due to not versioning cache-data, also #3692)
- fix #3633 (non-3DO projectile models not being rendered fully)
- fix #3623 (broken PPCV offsets for DAE models)
- fix #3617 (ship transports can't load units)
- fix #3614 (units stuck on narrow terrain passages)
- fix #3606 (TorpedoLauncher force-attack aims at water surface)
- fix #3598 ("vibrating" ground units due to gravity)
- fix #3373 (crash when exiting before countdown finished)
- fix #1368 (AllowBuildStep only called for building)
- fix ground units not moving in FPS mode
- fix (non-hovering) aircraft jittering at high altitude
- fix submarines being considered "underwater" even when pos.y + height > 0
- fix subtle bug in LegacyAtlasAlloc::Allocate exposed by Intel GMA
atlas could grow LARGER than its maximum size in x-dimension due to TEXMARGIN not being considered
3DO texture atlas has a maximum size of 2048 pixels but grew to 2050 pixels in at least one *A game
on Intel hardware with maxTextureSize=2048 this caused driver memory corruption --> random crashes
- fix units switching team-colors
- fix debug-vectors for ground units being drawn even when not cheating or not spectating
- fix LoadScreen exception being thrown just for failing to load a startpic
- fix crash in Spring.GetVisibleUnits on bad teamID value
- fix C stack overflow in Shard
- fix logLevel of WatchDog stacktraces
- fix decals were rendered twice
- fix spike CEGs
- fix units with PPCV's ignoring mouse-rays; run PPCV test before CV test
- fix possible bug in MoveCtrl.SetMoveDef
- don't automaticly set "MaxSounds"
- try to fix "[Sound] Error: CSoundSource::Play: Unknown Internal Error" on Mac
- removed unused AI_UnpauseAfterInit config setting
- add DeleteSpringConfigKey(const char* name)
-- 94.1 ---------------------------------------------------------
- bump path cache version
-- 94.0 ---------------------------------------------------------
- default LogFlush to true again
- fix crash at start related to Optimus
! remove Tobis rapid client (its broken)
- add multi engine type support
- recycle unit and feature ID's less quickly again, a la 91.0 and prior
although this was an unintentional change in 92.* / 93.*, it exposed
many bugs in widgets and gadgets which INCORRECTLY assumed ID's were
globally unique for all time --> check your code for more latent bugs
- automatic runtime recompression of groundtextures to ETC1 (future MESA drivers should support ETC)
- fix #3591 (UnitFromFactory(..., userOrders) always passes userOrders=false)
- fix #3561 (units getting stuck on edges of impassable areas --> pathing is no longer FUBAR)
- fix #3575 (QTPFS terrain deformation lagspikes)
- fix #3580 (decreased unit/feature ID randomness)
- fix #3557 (TorpedoLauncher weapon fires only when on land)
- fix #3564 (sun-flare visible when obscured by terrain)
- fix #3553 (sun-flare has harsh edge)
- fix #3562 (units are reluctant to fire in crowded situations after 'fix #3488')
- fix #3559 (avoidGround weapon tag is broken)
- fix #3563 (units rub against building edges and slow down to a crawl) and #3592 related to it
- fix #3567 (transported nanotowers periodically teleporting to ground)
- fix #3520 (kamikaze units always have bad attack cursor when giving manual attack command)
- fix #3531 (wrong textures assigned to assimp models)
- fix #3545 (AddUnitImpulse() causes unit to move in random direction)
- fix #3544 (units briefly invisible when transferred to another team)
- fix #3490 (ships cannot be transported by aircraft)
- fix #3596 (in debug-mode the firing-cone visualisation of weapons points up)
- fix 'fix #3506 (wrong calculation of goffset for assimp model pieces)'
- fix pseudo-static units (nanotowers, etc) no longer being transportable
- fix #3569 (texturing for OBJ and ASS projectile models)
- fix OBJ models being parsed by assimp
- fix SEGV on exit
- fix flashing team colors
- fix some trees drawn after being destroyed
- add Spring.UnitWeapon{Fire,HoldFire}(number unitID, number weaponID) --> nil
- add callouts Spring.GetUnitWeapon{TryTarget,TestTarget,TestRange,HaveFreeLineOfFire}(number attackerID, number weaponID, number attackeeID | [number targetPosX, number targetPosY, number targetPosZ]) --> boolean
- add Spring.SetProjectileTarget(number projectileID, [number objectID, string objectType] | [number x, number y, number z]) --> boolean
- add Spring.GetProjectileTarget(number projectileID) --> number targetID, string targetType
- add Spring.SpawnProjectile(number weaponDefID, table projectileParams) --> number projectileID | nil
- add MoveCtrl.SetMoveDef(number unitID, number moveDefID | string moveDefName) --> boolean
- add projectileID argument to UnitPreDamaged
OLD signature: unitID, unitDefID, unitTeam, damage, paralyzer [, weaponDefID [, attackerID, attackerDefID, attackerTeam] ]
NEW signature: unitID, unitDefID, unitTeam, damage, paralyzer [, weaponDefID, projectileID [, attackerID, attackerDefID, attackerTeam] ]
-- 93.2 ---------------------------------------------------------
- fixed unitsync in linux static builds
-- 93.1 ---------------------------------------------------------
- fixed treedrawer crash
- fixed MT crashes
- fixed X11 cursor offset
- fixed smooth camera transitions
- fixed clipped sun
- fixed selection sounds
- fixed attack cursor for kamikaze units
- fixed wrong assimp texture
-- 93.0 ---------------------------------------------------------
- fixed disappearing GUI with non-GLSL drivers & grass rendering (3dtrees=1)
- fixed not working assimp textures
- fixed /ally
- fixed /chat[|ally|spec|all], so it doesn't misbehave when called from lua
- fixed attack-ground orders placed on water
- fix bug in footprint overlap detection reported by dnw
- make dead/crashing/stunned units unshareable (may fix #3476)
- fixed objects with cylindrical CVs would not take damage if hit in rear endcap
- block Lua from creating non-uniformly scaled COLVOL_TYPE_SPHERE volumes
- make sure pastetext and buffertext don't strip whitespaces from the attached message
- allow whisper between spec <-> spec (player -> spec and spec -> player whispers are still forbidden)
- fixed flying transport reservation not flushed properly with area commands (#3478)
- fix #3481 (unit targets not flushed on cloak + jam)
- fix #3488 (avoidFriendly check works improperly if firepoint is inside friendly unit)
- fix bug in ray-ground intersection logic
- make mutual push-resistant unit collisions more like 0.82.x (smoth's issue)
- fix some cases of units getting perma-stuck (s.t. even spammed user orders cannot free them) on terrain, esp. #3423
- fix #3506 (wrong calculation of goffset for assimp model pieces)
- fix #3505 (ground-transported units cannot be killed)
- fix #3465 (WeaponDef infolog error messages are unhelpful)
- fix attack-ground orders placed on water
GuiTraceRay now stops at water surface by default, not ocean floor
add sixth argument 'ignoreWater' to LuaUnsyncedRead::TraceScreenRay
- support double-resolution yardmaps for buildings (these require four times as many characters, beware)
the engine will interpret a yardmap string as such if its FIRST (and ONLY its first) character is 'h'
- workaround CVE-2013-0249 (disable all protocols expect http/https)
- reduce log messages
- fix invalid timeout
- fix ignored depends in http-downloads
! apply rotations & scalings
- fixed per-piece colvols
-- 92.0 ---------------------------------------------------------
Major Changes:
- Linux cross-distro binary builds
- much faster Sim (~20% and ~50% with working OMP)
- new cmdline arguments
- better pathing
- add experimental map generator (see for details)
- some new sim/weapon features
- Shard update
- AAI: refactor / fixes
- AAI: add BAR config
- AAI: update XTA config, to work with XTA > 9.71
- fix bug in /aikill
- new --download-engine
- fixes / speedups
- add c-api to shared lib & use it for pr-downloader
! fix return in GetInfoMapSize (#2996)
- no crashes in unitsync without init any more (#3120)
! ProcessUnits, GetUnitCount, GetMapCount, GetMapArchiveCount,
GetInfoMap, GetPrimaryModInfoCount,GetPrimaryModArchive,
GetSideCount, GetModOptionCount, GetCustomOptionCount,
GetSkirmishAICount, GetInfoValueInteger, GetInfoValueFloat,
GetOptionType, GetOptionNumberDef, GetOptionNumberStep,
GetOptionStringMaxLen, GetOptionListCount and GetModValidMapCount
returns now -1/-1.0f on error
! make TeamHandler::IsActiveTeam check Team::isDead
! gl.UnitPieceMatrix & gl.UnitPieceMultMatrix do now the same and work from UnitSpace & aren't recursive anymore (don't depend on the parent-piece)
! remove LuaLobby
- enable luasocket as default and always allow to listen (UDP & TCP)
- new Spring.GetTerrainTypeData (already on wiki)
- new Spring.GetUnitCurrentBuildPower(unitID) -> number 0..1
- new Spring.SetUnitNanoPieces(unitID, {piece1, piece2, ...})
- new Spring.GetUnitNanoPieces(unitID) -> table {piece1, piece2, ...}
- replace Spring.Echo with Spring.Log in most places in cont/
- LuaUnsyncedCtrl: make Spring.GetConfig* return non-nil (= 0) values when LuaModUICtrl=0 (3280)
- Lua: make Spring.GetPlayerRoster really return a boolean for spectator as the wiki says
- fix crash when calling Script.Kill() (3292)
- fix Spring.GetUnitNearestAlly takes self into account (3293)
- Spring.SetTerrainTypeData now only updates pathfinder when there is a real change (performance)
- fix crash in LuaUnitDefs when trying to read deathExpWeaponDef (#3333 & #3325)
- add Spring.GetReplayLength()
- add Spring.GetConfigParams()
- add Spring.GetUnitWeaponTryTarget(uid, wid, [number posx, number posy, number posz] | [number enemyid]) -> nil | boolean
- fix error spam on malformed Lua-issued unload commands (#3378)
- fix crash caused by comparing strings with numbers in base-content's weapondefs_post.lua
- add mapHardness to the Game constants table (#3390); make Spring.GetGroundInfo now match its wiki documentation
- make Create{Feature, Unit} take an optional (7th, 9th) {feature,unit}ID argument to spawn a feature/unit with a specific ID
- make CreateUnit take an optional (10th) builderID argument
! deprecate LuaUnitDefs.extractSquare
! replace LuaFeatureDefs.deathFeature(string) by LuaFeatureDefs.deathFeatureID(number)
- fix crash in Spring.GetVisibleFeatures (#3400)
- fix Spring.GetFeatureDirection returning direction in (x,z)-plane only (#1599)
! couple the AllowWeapon* callins to SetWatchWeapon state
- add optional 4th argument to Spring.SetUnitImpulse to control a unit's impulse decay-rate (now unhardcoded)
! Game.version now returns the same as `spring --sync-version`, e.g. "92.0" or "91.0.1-1283-gf3805a7"
- new Game.buildFlags (unsynced only) to get additional engine buildflags, e.g. "OMP" or "MT-Sim DEBUG"
- Better notification and protection from unbalanced OpenGL matrix stack after return from Lua rendering code
! drop support for ellipsoid-cylinders and ellipsoids
cylinders with round(!) baseplates are still supported!
simplify how damage from an explosion is calculated, fewer magic numbers, etc
no more distance approximations means no more invincible units (or features)
and no more general "weird" cases like 3103
! get rid of TYPE_FOOTPRINT, it was an alias for TYPE_SPHERE in the continuous case which is now default and the
original intent (a shape defined by the CSG intersection of sphere and footprint) would have been tricky to get
instead support a {Unit,Feature}Def key "useFootPrintCollisionVolume" which
makes a collision volume a box with dimensions equal to the object's footprint
(this overrides any custom scaling and/or offsets)
! let projectiles explode _on_ collision volumes and not in a interpolated pos in front of it
- rework projectile-vs-volume special cases so they can be distinguished better for the above
! rewrite TraceRay::{TestConeHelper, TestTrajectoryConeHelper} for #3399
these now no longer use any bounding-radius approximations to
figure out if an object will potentially be hit, but calculate
the exact colvol surface distance taking spread into account
- faster updates
- legacy: use omp in ::Update to multithread a function that eats 40% of the time spent in ::Update
- this gives a _massive_ boost with like >30% more FPS
- it needs low latency omp threads to work, those are currently broken in gomp, the bug will be fixed with the next release of gcc
- QTPFS: a lot of fixes & optimizations, fixed dev-build desync (#3339), made cache reads/writes atomic, read constants from MapInfo
- give pathfinder debug-data drawing its own shortcut (alt+p)
- rewrite collision handling between units and static objects (again)
instead of using impulse to push units away, do SCII-style strafing
! put on upper limit on directional slope tolerance for "downhill" slopes
before, units could move across ANY downhill slope if they ended up there
and directional checking was enabled; now the downhill slope-tolerance is
limited to twice the uphill tolerance
! set avoidMobilesOnPath to true by default again
pro: groups moving without a ctrl-order clump much less
contra: groups moving with a ctrl-order are less organized
- fix units moving orthogonally across too-steep faces (and getting stuck afterwards)
- fix humping triggered when unit crushes feature and feature spawns a non-crushable
replacement (if unit's next waypoint happens to be inside replacement's footprint)
- change precondition for crushing units from 'collider must be moving' to 'collider impulse must exceed collidee impulse'
- units that are mutually forbidden from pushing each other will no longer get stuck blocking the other party
- units moving toward the same spot will no longer clump up into a jiggly ball (#3355 & #3381)
- units with low delta-v no longer receive bogus move orders after being told to stop (#3358)
- actively push units away from speedmod=0 squares when possible
! LUS/COB: deprecate QueryNanoPiece() makes SimCode ~10% faster use the new Spring.SetUnitNanoPieces instead
Note, once set the engine won't call `QueryNanoPiece` anymore and instead randomly toggles between the set nanopieces,
saving a lot time-consuming COB/LUS calls.
! LUS/COB: cache QueryNanoPiece() results
Note, this stops QueryNanoPiece() calls after 31 times no matter what!
This breaks ZK's LupsNanoSpray, fixed version can be found here
- support a 2nd texcoord
- auto-calc midPos
- read texture filepaths from modelfile if available
- extended auto-finding of textures
! remove of manualBombSettings (backward-compability code in weapondefs_post.lua)
! fix: half craterAreaOfEffect the same way as it is done with damageAreaOfEffect
! removed color1 (hue) & color2 (sat). Use rgbColor instead!
! removed isShield. Use weaponType="Shield" instead!
- new 'interceptSolo', if true (=default) don't allow any other interceptors to target the same projectile
- allow any weapons to be interceptors/targetables (not that all combinations work/make sense)
! stop subs/AA-fighters trying to chase hovers and tanks (check all equipped weapons if they can target the unit, before _auto_ chasing enemies in FireAtWill)
! all weapons will now obey avoidFriendly, avoidNeutral, avoidFeature + avoidGround
! add new avoidGround weapondef tag (default true)
! remove "nodrawundergray" now that there is a proper "floating" tag
- a new GameID tag to script.txt
! always account local players (even when host is a spectator!)
! don't lower-limit gameSpeed to `userSpeedFactor * 0.5f` when userSpeedFactor is greater than 2
- make game ways more responsive when running at high speeds
- add /ReloadShaders
- less jerky camera transitions (thx cleanrock)
- make camera a bit smoother by adding some micro-transitions
- pressing F5 no longer hides the minimap in dualscreen mode (#3095)
- SMF/MapInfo: new tag voidGround
- fix 'only FreeCamera allows to set FOV ingame' (3291)
- do not spam unit self-destruct messages when spectating
- new configtag "StacktraceOnGLErrors": Create a stacktrace when an OpenGL error occurs (only available in DEBUG builds)
- fix performance leak in CSolidObject::Block()
- make UnitScript::{ScriptToModel, ModelToScript} O(1) instead of linear
(TODO: UnitScript::HaveListeners is another new O(n) source)
! remove OSC
- add new `cursorattackbad` mousecursor, used for static defense when giving a CMD_ATTACK
- get rid of the 'extractSquare' non-feature for extractor buildings
- when a team dies, redistribute unit-limits over the remaining teams in that team's allyteam (also means dead teams can no longer produce any units)
- record demos in-memory to make speccheating 1% harder
- make hovercraft with non-zero waterline transition into/out of water more smoothly
- make unit movement more physically-based:
add modrule 'allowGroundUnitGravity'; allows fast units to catch air
add modrule 'allowHoverUnitStrafing'; allows hovercraft to slide in turns
ground units cannot change speed or direction in mid-air
- in god-mode, units can now be selected and commanded by any player even when not spectating (#3412)
- fix multiple build-started sounds being played when ordering single builder to construct something
! UnitDef::can{Restore, Repair, Reclaim, Capture, Resurrect} now default to true only if the unit is
a builder and has the corresponding {Terraform, Repair, Reclaim, Capture, Resurrect}Speed property
set to a non-zero value
- speedup minimap icon rendering
- fix a few OpenGL errors reported by MESA drivers
- fix SimpleParticleSystem directional particles disappearing (#1665)
- ROAM: resize pool when running out of nodes fixes rendering on maps like Knockout
- disable occlusion query in BumpWater it doesn't work and just makes it slower
- move `lastFrameTime` calculation from the end of a drawframe to the beginning this way vsync locktimes are counted to the previous frame time
! removal of DepthBufferBits & StencilBufferBits
- BumpWater renders now with shadowmap & infotex
- clamp map ShadowDensity 0..1 (fixes shadow distortions on maps like Iamma)
- use VBOs for S3O and OBJ model piece geometry
- fix grass shadow rendering (no self-shadowing yet)
! changed `usable` range of GrassDetail configtag, so you can set it now >10 to increase viewrange w/o getting Tribble plushies
Sim Bugfixes:
! stop buildframe decaying on reclaiming
- fix unload commands close to map edges are ignored (3175)
- fix nukes (3269)
- fix some issues with bombers (3253)
- fix MANUALFIRE hangs despite no target lock
- fix gunship jumping on takeoff (3526)
- make sure unsupported build orders are never given to new factory buildees (3257)
- fix aircraft failing to land properly on repair pads (3260)
- fix gunships jittering when stunned (3262)
- fix builders 'ignoring' wait-orders when reclaiming
! fix units failing ground-attack orders when their "main" weapon != weapons[0] (3276)
logic change: MobileCAI::ExecuteAttack now cycles through all weapons until
it finds one which can execute the order, and no longer depends on weapon[0]
being the "main" weapon
- fix units gaining negative experience when shooting at dead targets
- fix old logic error in obstacle avoidance handling (IMMOBILE objects were being ignored --> no wonder the "infinite bouncing bug" was so pronounced)
- fix 'Crashing aircraft can be reclaimed' (3288)
- fix 'Units get stuck in sea labs on build completion' (3290)
- fix 'Paralyzed landed aircraft start moving forward slowly' (3287)
- fix bug reported by jamerlan (
- make HoverAirMoveType aircraft able to crash (3289)
- fix 'Move/Turn (piece) fails with negative speed' (3300)
- fix "Total velocity loss during a prolonged unit-to-unit [skidding] collision" (3302)
- fix 'Units with height advantage are unable to force fire with that range' (3303)
- fix air transports have trouble loading multiple units if units are large (3307)
- fix partly reclaiming factory allows unit teleportation/remote destruction (3308)
- fix 'SetFeaturePosition snapToGround get reset when there is terraform nearby' (3243)
! disable collision checking between transporter & transportee
- fix being-built units having order queues overwritten upon completion (#3342)
- fix FPE's in {Large}BeamLaserProjectile (#3413 & #3414)
- fix impulse not being applied to features (unit wrecks)
- allow underwater units to build stuff on the waterplane
- fix network connection is not properly closed when an error occurs in pregame (3166)
- extend desync message (send in debugmode for specs too and send correct & got checksum)
- fix "Transport endpoint is not connected"
- fix secret exploit
- fix secret exploit #2
- fix memory leaks, particularly when the game is minimized
- fix several crashes in multithreaded exe
Cmdline Arguments:
- new --game (-g) & --map (-m)
- if both parameters are set, this starts spring a with minimal setup and it sets the modoption minimalsetup = 1
- supports fuzzy search e.g. `spring -g ba -m Delta` or `spring -g zk -m "Delta X"`
- renamed shortarg -m (--minimised) to -b (~background)
- new `spring --list-def-tags`, will in future return all Unit-, Weapon-, FeatureDefs in a `--list-config-vars` manner (not finished yet)
- new benchmark mode (`--benchmark %time_min --benchmarkstart %starttime_min`) writes a parsable by gnuplot
- set affinity of omp threads
- search script.txt & demofiles in $PWD
- detect Valgrind and disable Watchdog & syncing (it won't let us change the FPU state) if it is running
- don't install crash handler when core dumps are enabled
- boost 1.50 compatibility
- detect and compress debugsymbols
- update 7z to v9.22
- use tcmalloc when found (new USE_TCMALLOC use-flag)
- add target headercheck
- OpenMP build
- update to boost 1.50
- slightly improve speed of zip / sdz archives (#3338)
- Nvidia Optimus support
- removed springsettings.exe as its directly included in springlobby
- Linux's ctrl+c: `hardkill` after 10sec (and 5 seconds softkill)
- workaorund issue in FOSS ati drivers with NPOT cursors
-- 91.0 ---------------------------------------------------------
- fix Linux sync errors
- fix QTPFS deadlocks
-- 90.0 ---------------------------------------------------------
- fix endless loop in Shard in mingw32 builds
- fix builders sometimes don't notice when a building was finished by another unit
- fix SkyBox corruption
- fix QTPFS deadlock at start
- partially revert the "lock-on targeting" behavior:
If a user-selected target moves out of range, the lock is
now broken as it used to be and automatic targeting is not
blocked anymore (though this can take some SlowUpdate's).
For ground-attack orders it is still in place, since the
behavior seems to be preferred (so a unit that is told to
attack a position and then to move away will keep firing
even when other targets are available)
- really fix "endgame stats only show APM for self"
- really fix "Size of unidentified radar blips can be determined with mouseover"
- fix ship wreckage drag
- fix gunships don't obey land/fly state
- fix 'Bombers with fight command do not fire' (3190)
- fix 'Emit-sfxed weapons point at {0, 0, 0}' (3205)
- fix an incorrect watchdog trigger before gamestart
- fix 'Aiming animations ignore maxAngleDif [actually tolerance]' (3180)
- fix 'Grass is not animated in LOS view' & 'LOS view does not render trees in the same way' (3207 & 3203)
- fix `halo` in BumpWater with EndlessOcean & OwnRefractionRenderPass
- fix 'Bombers with area attack dont work ' (3195)
- fix 'If air constructor lands it often fails to do next construction command' (3198)
- make fight commands work with noAutoTarget weapons (3190 #2)
- fix 'Constructor stops before it enters build range' (3210)
- fix bugged/all-white decals when shadows=0
- fix units being able to move down steep cliffs (directional slope-tolerance needs work)
- fix dangling pointer/memory corruption in QuadField (3211)
- fix 'Reclaiming units under construction results in no resources being returned' (3216)
- fix some OpenGL usage errors found by [teh]decay
- fix 'Gunships dont always aquire targets despite fireatwill+roam+fly' (3221)
- fix 'TargetBorder=1 only works when a unit has a specific attack command' (2971)
- fix CFeature::ForcedMove (3226)
- fix Spring crashes when sending large messages (3228)
- fix 'Armed constructors attack neutral units on Fight order'
- restore old shield visibility behaviour (3242)
- fix 'Units with cannons remain out of range when you force fire onto high ground' (3241)
- disable unit pushing bidirectionally when one of the parties is non-blocking
- make target locking optional via meta-key
- support start-scripts of arbitrary size (still not advised to use scripts bugger than 256kB, and we won't optimize anything related to such huge scripts)
- make cloakCostMoving default to cloakCost
- change default weapon "mainDir" to "0,0,1" (before it was "1,0,0")
- always enable continuous hit-testing (it showed discountinuous one is used <<1%, so it's not worth to keep it)
- add explicit `floating` featureDef tag (before it was implicit via nodrawundergray and failing a lot)
- add Spring.SetUnitDirection(unitid, x,y,z)
- add `ignoreLOS` tag to Spring.UpdateMapLight
- LuaRules: add DrawProjectile to complete the Draw* quartet
- add `allowAircraftToHitGround` tag (3199)
- runtime create missing DDS mipmaps when supported by the hardware
- call SDL_WarpMouse every frame again (fixes `ghost mouse` in middle click scroll)
- explicit pipe --large-address-aware through -Wl (fixes compiling with tdm-gcc)
-- 89.0 ---------------------------------------------------------
Major Changes:
- LuaSocket
- MessageBox for unsupported GPUs (+drivers)
- fixed ATi PointSize bug
- LOS et al. are rendered now through the GLSL terrain shader (-> shadows in LOS-view)
- added Shard to the windows installer
- added pr-downloader as submodule (only compiled if libcurldev is available)
- limit infolog.txt buffer to 8kB
- open a MessageBox on systems with unsupported GPUs (+drivers) on engine start (suppressible with a config-tag)
! remove selectkeys.txt support (use uikeys.txt instead)
! remove TASServer.jar (outdated, use )
! send gameID and SDF filename with SERVER_STARTPLAYING to autohost
! remove deprecated LogSubsystems config var
- do not send GameOver from a client that timed out
- add LogFlush config var for instant writes (disabled as default)
- add UI config-variables AutoAddBuiltUnitsToFactoryGroup (def: false) and AutoAddBuiltUnitsToSelectedGroup (def: false)
if the first variable is true, new units auto-inherit their group number from the factory that built them
if the first AND second are true, new units are auto-selected if their factory group is currently selected
- weapondefs.cylinderTargetting spelling fixed, the old one is deprecated
- exit with !=0 if spring can't connect to server
- decrease loglevel for "Load S3O texture now" & luasocket
- change content-exception (for a missing water texture) in BasicWater to a warning message
- dedicated server no longer consumes 100% CPU while waiting for gameID
- headless builds use less cpu-time (nominally 50% instead of 100%)
- fix some orders are discarded when issuing commands to landed planes
- fix unfinished units with 100% hp can't be finished
- fix 'crash when getting LOS of a feature without 3d object and drawType!=-1' (3032)
- fix "changing unit speed does not work anymore" (2877/3016)
(scripts can now arbitrarily override the UnitDef values, which are only used for initialization)
- fix 'LightningCannon can fire into water' (3057)
- fix BeamLasers and LightningCannons not ignoring stunned shields
- fix GameSetupDrawer player-state string (3064)
- fix 'Con/com gets weird move order after stop command is given' (3069)
(was intended to keep factories clear, any side-effects are up to players to deal with)
- fix stunned=true crashing=true airplanes falling into the void (3078)
- fix zombie coverage from sensor-units (if activated while in a transport, exploit)
- fix crash in unit_script.lua
- fix 'Units stuck in factory' QTPFS bug (3055)
- fix units moving (being pushed) through factory walls
- fix terrain water reflections
- fix game does not end properly for a player that is being kicked
- fix problem to build near map edges
- fix ping display after mid-game (re-)join + try to reduce lag after mid-game join
- fix missing stack trace if out-of-memory occurs
- fix missing stack trace on abnormal termination (sigabrt)
- fix resurrecting an individual wreck results in the resurrector not healing it
- fix /godmode and /{luarules,luagaia} {reload,disable} not working in demos (2701)
- fix targetting bug (weapons sometimes failing to fire at badTargetCategory units) as a result of AllowWeaponTarget misuse
- fix kamikaze units not self-d'ing when given an attack order while on hold-fire (2405)
- fix 3105 (PlayerChanged callin not available in unsynced gadgets)
- fix 2947 (size of unidentified radar blips can be determined with mouseover)
- fix 1843 (Spring.GetUnitHealth returned nothing for buildProgress on in-LOS enemy units with "hideDamage=1")
- fix 3122 (failure to fire at badTargetCategory)
- fix crash when give all units to uncontrolled team
- fix fighters that have a target may refuse to obey orders
- fix crash in GetPlayerTeam (AI)
- fix sync warning when resizing the main window
- fix ctrl/alt/shift keys stuck after alt tab
- make COB's set(MAX_SPEED) permanent again like its Lua counterpart, rather than
letting it apply only temporarily (for the duration of the current move command
if any); use negative speed values if you want the change to be non-permanent
- YardMap changes:
- more verbose yardmap parsing
- ignore any whitespaces in yardmap strings (esp. newlines)
- new "i" yardmap code (inverse of "c")
! remove TA-ism in buildrange code:
! make buildrange not immobile dependent
! changed terraform range check a little
! make terrain restore range check consistent with new terraform one
! don't add target's radius to the builder's builddistance, only do so if the target is bigger than the builddistance (mostly only true for terraform)
-> from now on the to be built unit's centerpos has to be in buildrange not its border!
! remove obsolete default dependence of cloakCostMoving on cloakCost
! remove modelCenterOffset tag (can now be dynamically set with Lua)
- improved behaviour of builder masses
- make StartBox clamping of StartPositions synced
- don't reclaim in-the-way features when the buildee is going to morph into a feature of the same type
(fixes the ancient bug where ordering a row of features with N > 1 builders causes each to be reclaimed and then immediately rebuilt)
- do not apply impulse to units being transported
- make falling wreckage (from aircraft) not lose all its forward speed
- make ground units consume waypoints less aggressively
- remove special treatment for collisions between mutually-pushResistant objects for 3031
- add 'allowUnitCollisionOverlap' (def=true) and 'useClassicGroundMoveType' (def=false) ModInfo keys
the former allows unit movement like at the cost of more clumping (learn to use ctrl+lmb formation orders)
the latter is a ticket back to unit movement circa 2009: no reversing, no turninplace=false, no smooth collision handling, no nothing (figure it out)
- add mod-rule 'targetableTransportedUnits' (default false)
- introduce an independent Lua-controllable aim-position (defaults to mid-position) for units and features, used by weapons as their aiming/target point
- make ground units less keen on repairing fast units such as patrolling aircraft
- fix distinction between user-selected and internal CommandAI targets
- QTPFS: less loadscreen spam, make F2 functional, enable corner-connected node topology, use staggered layer-updates, speedups and tweaks
- QTPFS: increase MAX_TEAM_SEARCHES, decrease LAYERS_PER_UPDATE (more units can request paths per frame, units get paths back more quickly)
- QTPFS: fix assertion failure, make execution of path requests more asynchronous
! some config values are now write protected (Spring.SetConfig*)
- added luasocket support for widgets, see
- fixed params of Spring.MarkerAddPoint & Spring.MarkerAddLine
- call AllowWeaponTarget at the end of the queue, so lua only gets those units which are _not_ filtered by the engine
! LuaSyncedRead: better hide enemy radarblobs unit-info
! MoveCtrl: remove SetGroundMoveTypeData(unitID, "wantedSpeed", v) and SetGroundMoveTypeData(unitID, "maxWantedSpeed", v)
(the preferred way for gadgets to change a unit's speed is by calling SetGroundMoveTypeData(unitID, "maxSpeed", v))
! replace Game.gameID by synced callin GameID(string gameID)
- fix TraceScreenRay never returning "sky" when includeSky=true
- fix TraceScreenRay coordinate offset when onlyCoords=true
- fix typo in Spring.GetUnitVelocity
- add extra parameter 'defPriority' to AllowWeaponTarget (what the engine thinks the target priority should be)
- add bool FeatureDefs[xyz].autoreclaim
- add new gl.Texture("$minimap")
- add new gl.Texture("$info")
! remove gl.SelectBuffer and co.
- new Spring.LoadCmdColorsConfig(configStr) & Spring.LoadCtrlPanelConfig(configStr)
- add new 3 param 'pairwise' to Spring.GiveOrderArrayToUnitArray(), used to send multiple units a single individual command
- fix crash due to UpdateCallIn removing the current event client from list being iterated
- add missing team/player callins to (unsyced) GadgetHandler
- add new synced callouts Set{Unit,Feature}RadiusAndHeight(number id, number radius, number height) --> boolean
- add new synced callouts Set{Unit,Feature}MidAndAimPos(number id, number mpx, number mpy, number mpz, number apx, number apy, number apz) --> boolean
- add optional 2nd (boolean midPos) and 3rd (boolean aimPos) arguments to Spring.Get{Unit,Feature}Position to go with the above four callouts
! change Spring.GetUnitPosition to return a unit's base-position by default, like .GetFeaturePosition does for features
(this is usually a point on the model closer to the ground than its mid-position, so may affect some Lua drawing code)
- fix keys hang after LuaUI tweakmode
- [MT] disallow other Lua environments to invoke LuaUI if LuaThreadingModel = 2, to prevent deadlock
- [MT] fix desync with LuaThreadingModel > 2
- [MT] fix teams sometimes wrong in UnitGiven() and UnitTaken()
- fix DynWater ship wakes, BumpWater shorewaves
- fixed ATi PointSize bug
- update assimp to svn rev 1231
- fixed assimp lua metafiles
- warn about null normals in models
- add visualization of default object radii (used for AOE calculations, etc) to alt+v
- SMF: render the info-texture through GLSL (noob translation -> shadows in LOS-view)
- improved VSync under Linux (with support for AdaptiveVSync)
- added FeatureFadeDistance & FeatureDrawDistance config tags
- more failsafe shadow FBO creation
- fixed vibrating planes (again)
- fix spring_multithreaded hangs
- display average draw & sim frame time in debugview
- draw buildRange for mobile selected units too & always render them on shift hover (also for shield range)
! all items in sounds.lua are now converted to lowercase
- allow to create a new "default" item in sounds.lua
- WeaponDef: support 'soundHitWet{Volume}' keys for in-water explosion sounds
(the 'soundHit' key is now deprecated in favor of 'soundHitDry')
- set IMAGE_FILE_LARGE_ADDRESS_AWARE (increased >2GB memory limit)
! strip CXX_FLAGS & C_FLAGS in build process to prevent sync incompabilities (can be turned off with a new CUSTOM_CFLAGS cmake flag)
- on multicore systems set scheduler to SCHED_BATCH (semi-solves the core hoping issue)
- call SDL_WarpMouse only when needed (fixes massive FPS-drop in middle-click-scrolling)
- use a non-locking vsync mechanism & add support for nvidia's `adaptive vsync`
- explicit disable all CPU extensions except SSE1
- use mtune=generic on 64bit systems
- fix stack corruption in sound code
-- 88.0 ---------------------------------------------------------
! showing collision volumes has now its own command (`/debugcolvol` & `alt+v`)
! use footprint (not model) radii for obstacle avoidance
- improve reconnecting sim/draw balance
- disable line/point smoothing in safemode
- time profiler updates now even when paused
! MoveInfo read "avoidMobilesOnPath" from correct table and disable it by default (before it was default enabled)
! allow to list files with unsolveable depends
- warn about usage of deprecated functions in unitsync
- added new Spring.TestMoveOrder(unitDefID, worldx, worldy, worldz) -> boolean
- added new Spring.Log()
- same as Spring.Echo, but passes metadata to the logsystem
! to be able to use LOG.XYZ you need to update your system.lua
- Spring.Log(string logsection, int loglevel, ...) (with loglevel either: LOG.DEBUG, LOG.INFO, LOG.WARNING, LOG.ERROR, LOG.FATAL)
- Spring.Log(string logsection, string loglevel, ...) (with either: "debug", "info", "warning", "error", "fatal" [lower-/uppercase doesn't matter])
- fixed WeaponDefs[123].pairs()
- added myGravity tag to WeaponDefs[] table (thx DeadnightWarrior)
! distinguish water-damage in Unit{Pre}Damaged
- water damage has index -5
! kill damage was -5 before and is now -6
- fixed multiple crashes
- fixed gcc i686 march flag
- fixed an aircraft refueling bug
- fixed multiple pathing bugs/issues
- fixed crash at startup when DynamicSun=1
- fixed 'Nanoframe targeting and water' (3017)
- fixed desync _warning_ between 32- & 64-bit systems
- fixed FarTextures with GPU/drivers that don't support FBOs
- fixed spring-mt & spring-safemode links in window's startmenu
- fixed incorrect drawMidPos (e.g. used for command line drawing)
! add vcredist_x86.exe to the installer / remove MSVCR71.dll from mingwlibs
- fixed safemode shortcuts
-- 87.0 ---------------------------------------------------------
! restore pre86.0 maxAngleDif arcs
! remove the following Lua consts: wdef[id].areaOfEffect, wdef[id].maxVelocity & wdef[id].onlyTargetCategories
- fix "LuaUI didn't got unprocessed /xyz commands" (mantis 2982)
- fix shield rendering
- support for zlib 1.2.6 (thx sirmaverick)
- fix crash on start when invalid ai is in script.txt
- fix multiple pathing & collision issues
- some Maven (Java) updates
! removed ArchiveMover
- fix compile for "make tests" on win32
-- 86.0 ---------------------------------------------------------
- new commandline argument "--safemode": It turns off all features that are known to cause problems on some system.
! ignore features with `blocking=false` in all RayTracing/Aiming functions (other code still checks them!!!)
- enable ROAM in spring-mt
- IsolationMode: scan ENV{SPRING_DATADIR} & config's SpringData as readonly datadirs
- using now OS functions to expand special paths in spring's include dirs (config's SpringData, ENV{SPRING_DATADIR}, ...)
! Windows: now uses windows syntax ("$HOME/foo/bar" is now "%HOME%/foo/bar") (see msdn's ExpandEnvironmentStrings documentation)
- Linux: now supports full bash path syntax ("~/", "${HOME}/.spring/", "/foo/../bar/", etc.) (see manpage of wordexp)
- remove "Start SpringSettings" and "Start the Lobby" from the test/develop menu
! remove support for selectionkeys.txt
- add internal_pthread_backtrace for freebsd
- update mingwlibs (fixes rotated textures)
- make globalLOS a per-allyteam variable
/globallos <n> --> toggle for allyteam <n>, no argument --> toggle for all
fix several minor issues and corner cases
support partial searches, allow search to start from blocked nodes
tweak heuristic so it overestimates less on non-flat terrain
do not let units move before path-request is processed
- UnitDef: add turnInPlaceAngleLimit tag
for a unit with turnInPlace=true, defines the
maximum angle of a turn above which it starts
to brake (defaults to 0.0, values in degrees)
- MoveDef:
unhardcode default pathfinder cost-adjustment and
speed-multipliers for squares blocked by *mobile*
avoidMobilesOnPath = boolean,
speedModMults = {
mobileBusyMult = number,
mobileIdleMult = number,
mobileMoveMult = number,
unhardcode the DepthMod equation:
depthModParams = {
minHeight = number,
maxHeight = number,
maxScale = number,
quadraticCoeff = number,
linearCoeff = number, -- deprecates "depthMod"
constantCoeff = number,
new formula is given by
if h < depthModParams.minHeight: 1.0
if h > depthModParams.maxHeight: 0.0
depthScale = MAX(0.01, MIN(depthModParams.maxScale, (a * h * h) + (b * h) + c))
depthMod = 1 / depthScale
h = unit's absolute height below water surface
a = depthModParams.quadraticCoeff
b = depthModParams.linearCoeff
c = depthModParams.constantCoeff
- reload IsolatedMode & Dir via the EnvVar on Init() calls
- warn about invalid version numbers
- add python bindings for unitsync
- fix signal handling
- use native DialogBoxes
- cleanup and extend SSMF shader, now includes a parallax-mapping stage
- add LuaRules callin `DrawShield(number unitID, number weaponID) --> boolean`
(true skips Spring's own drawing of shield <weaponID> owned by unit <unitID>)
- make LuaUnsyncedCtrl::SendSkirmishAIMessage return a table, not N loose strings
(but note there is nothing in this table due to "limitations" of the AI interface)
- add weaponDefID parameter to ProjectileCreated
- add facing parameter to AllowUnitCreation
- remove most range-checks in default gadget-handler for registering commands (2930+2952)
- distinguish damage-types for Unit{Pre}Damaged when weaponDefID < 0 (2966)
weaponDefID -1 --> debris collision
weaponDefID -2 --> ground collision
weaponDefID -3 --> object collision
weaponDefID -4 --> fire damage
weaponDefID -5 --> kill damage
- fixed Intel GPU detection under Windows
- fixed handling of duplicated used hotkeys (i.e. unit groups & specteam switching)
- fixed minor issues with ground collision RayTracing
- fixed compilation with boost >=1.48
- fixed Spring.Restart
- open logfiles on win32 with commit flag set
! don't allow spring to start when a depend file is missing
- "Rapid unit ejection from factory" (2864)
- "Units walk in circles on their way to a far awar move goal" (2866)
- "Excessive movement bouncing off buildings and wreckages" (2865)
- "armpw stuck in air while pathing around solars" (2854)
- "Enemied units can get stuck in each other with movectrl" (2832)
- "A factory set to wait continues the queue" (2868)
- "Change in Factory Behaviour wrt AllowUnitCreation" (2873)
- "Building with Meta-Key pressed does not work" (2764)
- "'Move at slowest speed of group' move order (ctrl+alt) semi-permanently changes unit maxvelocity." (2880)
- BeamLasers could hit but not damage units using per-piece colvols
- heap corruption in UnitDrawer::ShowUnitBuildSquare (2903)
- heap corruption in TransportCAI::UnloadDrop (2911)
- mismatched feature colvol matrices
- MoveCtrl.SetRelativeVelocity
- bug in TestTrajectoryCone for ballistic weapons
- transported units being unhittable (2875, 2934)
- SetUnitCrashing inconsistency, caused "Aircraft crashing while landed results in irregular behavior" (2924)
- obscure targetting bug, caused "Gunship jams when on hold fire" (2406)
- deprecate / remove the 'toAirWeapon' WeaponDef tag
(use "onlyTargetCategory = VTOL" for the same effect)
- 'airmesh is 0 at x >= width or z >= height' (2938)
- GuiHandler crash when unit has no valid selfDExplosion (2852)
- <canSubmerge=false, floater=true> aircraft landing on sea floor (2856)
- 'waterweapon=false BeamLaser can fire into water' (2857)
- the units-humping-obstacles syndrome (forward and reverse)
- silly aircraft refueling bugs
- 'Warning message on SetGroundMoveTypeData(unitID, "maxSpeed", 0)' (and some related possible div0's)
- weird inability of weapons with a non-default onlyTargetCategory to attack the ground
- 'Unit LOD billboards are too dark' (2948)
- rare antinuke bug (2956)
- typo in setting of default turnInPlaceSpeedLimit
- "All terrain units move commands are removed when climbing cliffs" (2958)
- 'Landed gunships do not follow height reduction' (2823)
-- 85.0 ---------------------------------------------------------
Major Changes:
- ROAM \o/
- QTPFS (disabled by default)
- updated man-pages
- added new argument `--sync-version` (i.e. prints "85" for a 85.0 build or "84.0.1-567-g69ef7a3 develop" for a dev build)
- allow to build proper release builds without being on branch master
- added a full set of new arguments to spring-dedicated (see `spring-dedicated --help`)
- added --isolation & --isolation-dir arguments
- optionally, you may supply a path with SPRING_ISOLATED=<isolation-mode-dir>
- added ROAM. Kudos go to B. Turner (the original author of the code) and Beherith (for integrating it into Spring).
- set SmoothLines & SmoothPoints by default on DONT_CARE (so your gfx driver settings decide if it is enabled or not)
- dynamic viewrange handling, so even a 32x32 map can be rendered w/o clipping in low camera angles
- log available video memory on NVidia/ATi gfx drivers
- disable GLSL shaders on Mesa/Intel drivers
- re-added forced log file flushing when handling crashes
- made the (new) C++ AI Wrapper VS compatible
- name threads so you can identify them in `htop` (Linux only)
- some additional time-profilers in rendering code
! hide "(Headless)" in dedicated's returned version name
- fixed stacktrace translation with some Linux setups
- fix crash when specs are cheating in via /team
- fix transport loading failure
- fix keyshortcuts (handle F3 OR any+F3 but not both at once!)
- fix EndGameBox
- make F2 colors less ambiguous
- the ManualFire action now expects a cursor "cursormanfire"
- make units crushable like features
- implement avoidFeature for Cannons and MissileLaunchers
- fix extremely fast unit rotations after being hit
- fix FPS-mode range exploit
- fix teleport-to-smooth-mesh after unloading
- fix units sometimes moving onto impassable squares
- fix the mass-clumping unit movement bug
- properly restore MoveType::maxSpeed after a guard-order
- prevent units getting stuck when turning around the corner of other units
- give warning when textures used in SimpleParticles don't exists
- really fix default projectile colors
MultiThreaded (GML):
- fix hang/runtime error during pathing
- fix Creating unit in gadget:Initialize()
- lots of other fixes
- limit UnitReplies to max one concurrent playback
- play most unit sounds (activate, ...) only if unit is in LOS
! removed "commander" tag (The Commander selectkeys filter is now defunct (ctrl+c hotkey). Lua it, or add a new one that looks for any canManualFire units.)
- added new "blocking" bool tag
! "canDGun" is now a synonym for "canManualFire"
- added new tag "crushResistance" (defaults to unit's mass)
! make the default cloakCost* values 0 instead of -1,
! added new "canCloak" bool tag (If an unit can receive user cloak commands. Before, canCloak was auto set to true if cloakCost >= 0.)
- added new tag "crushResistance" (defaults to feature's mass)
- added new "craterAreaOfEffect" float tag (defaults to the value of areaOfEffect)
- added "movement.allowCrushingAlliedUnits" (default false)
- added "movement.allowUnitCollisionDamage" (default false)
- added "system.pathFinderSystem" (defaults to 0, 1 is QTPFS)
! UnitDef[].isCommander returns now false
- fixed Spring.GetTimer/DiffTimers
- fixed Spring.SetMouseCursor when using hw cursor
- handle Lua code crashes in some events correctly, so they don't crash the whole Lua enviroment (fixes: "LuaRules::CheckStack top = -1")
! call UnitMoveFailed event only for via Script.SetWatchUnit registered UnitDefs
! added new WeaponDefs[].craterAreaOfEffect
- extend Spring.SetUnitBlocking with an optional 4th "crashable" bool argument
- added new Spring.GetUnitBlocking(unitid) -> blocking, crushable
demo widgets:
- minimap_startbox.lua: play sound when start-positions are placed
- create spring_${VERSION}
- if Init() is called, but we are already initialzied, do a re-initialization
-- 84.0 ---------------------------------------------------------
Bugfixes & Improvements:
- reduced 'Got invalid Select' message spam
- hide framNums from chat console
- fixed command queue bug (zombie builders)
- always flush stdout/stderr
- workaround a SDL bug with X11 & fullscreen that broke MiddleClickScrolling
- changed target behavior of enemies outside of LOS
- fixed BumpWater with DepthBufferBits=16
- fixed aircraft landing on repairpads
- reset aircraft state after starting from repairpad (`ground hover bug`)
- make UHM available before the gamestart (fixes Spring.GetGroundHeight in :Initialize() etc.)
- workaround 'Bertha' issue (UHM related)
- make C++ AI Wrapper compile with VS
- fixed fog in some shaders
- fixed F2 view
- improve weapon interceptors (anti nukes can now intercept nukes that fly over them)
- fixed free resources by NanoFrameDecay
- handle resigned players (:= /spectator) in game_end.lua gadget
- Lua Spring.KillTeam: disallow killing of Gaia (engine doesn't support so atm)
- fixed lasers not hitting targets at edge of range
- fixed stutter with low-reloadtime weapons
- Lua: removed WeaponDefs[i].graphicsType & renamed WeaponDefs[i].hardStop -> WeaponDefs[i].laserHardStop
-- 83.0 ---------------------------------------------------------
Major Changes:
- EFX/EAX support (sound reverb)
- ASSIMP support (not 100% finished yet)
- AI Interface pure-ification
- many speedups and double as much slowdowns
- use a new engine versioning scheme (RC12)
- use more smooth algorithm for wind updates
- fixed a few focus lost issues (keyboard & mouse)
- DebugMode now draws feature collision volumes too
- made ShadowSpace linear
- multithreaded loadingscreen
- hide out-of-LOS heightmap changes
- replace engine start point marker with lua-widget
- use "game" instead of "mod" in many places
- add "isolation" mode (do not use global data-dirs)
- change lobbyserver main address to ""
- use everywhere (deprecate clan-sy links)
- ArchiveMover uses unitsync to detect the writable data dir
- improve version logging on non-Windows OSs
- include player-name in log message when resingning
- add `../` as data-dir if it contains `maps/`, `games/` and `engines/`
- allow to define the default config- nad data-dir on windows, using env var PROGRAMDATA
- refuse to load too heavily compressed archives (see 0.82.3-1043-g2c15040 commit message for details)
- better IP v6 and v4/v6 mixed mode support
- lots of error messages improved and new ones added
- add the first few unit-tests
- add a validation-test
- add network bandwidth limits per player to prevent malicious command spam
- add optional high-loss network modes to make spring playable on very lossy connections (NetworkLossFactor = 0|1|2)
Engine / bugfixes:
- too many to list, see (incomplete!)
- calculate the team unit-limit without ancient hacks
- stop the maxunits team restriction from applying to Gaia (#2435)
- fix ray-ground intersections when camera is outside map
- fix spring on MacOSX
- CMake configure and make build are much more stable now (no more failure due to wrong order of actions)
- fix DamageArray related sync error
- fix a lot of memory-leaks
- fix unit does sometimes not reach target position when given a restore command
- prevent build time-out when builder or other units are blocking the build pos
- fix "cheat" status disparity between server and client after watching demo
- fix captured unit still getting shot at
- fix repeat commands remain even if the target object is destroyed
- fix unwanted error spam when disconnecting from server
- fix reconnect failure (incorrect password)
- fix rare desync and keyframe mismatch after reconnect
- fix two crashes related to audio channels
- eliminate some false hang detections on load
- fix multithreaded crash in lua material rendering
- fix hang after crash
- fix memory corruption in bitmap handling
- fix desync in PieceProjectile (#2591)
- fix a certain /take exploit
- fix hover aircraft may become unresponsive in conjunction with command chains and repeat enabled
Engine / misc defs:
- replace UnitDef::pieceTrailCEG* by a Lua subtable of sfxTypes
- deprecate several *Def tags and their Lua*Defs copies (type/maxSlope/isBuilder/canDGun/transportableBuilding/dropped/canCrash/...)
- make a missing UnitDef::humanName non-fatal
- UnitDef: remove hardcoded: if ((waterline >= 5.0f) && canmove) { waterline += 10.0f; }
- make UnitDef::losHeight configurable instead of an unused hardcoded value
- add collide{Enemy, Ground} as weapondef tags
- use a more reasonable default for FeatureDef.autoreclaimable (== reclaimable)
- scan in 'effects/' as well as 'gamedata/explosions' for CEG definitions
Engine / misc commands:
- add a /clearmapmarks command
- rename /advshading to /advmodelshading; add an /advmapshading analogue
- add '/reloadCEGs [cegtag]'; reloads all CEGs or one specific CEG by tag
- add '/dumpstate <minFrame> <maxFrame> [frameInt]'
- add '/CommandList'
- add '/CommandHelp <commandName>'
- more complete word completion for game-commands
- make auto-host command `paused` use a parameter (0|1)
- add scrollbars for player list in "quit" and "share" dialogs
Engine / Userconfigs:
- removed the "FSAA" config tag (FSAALevel is enough)
- removed default 1024x768 res and use desktop one now instead (done when X/YResolution <= 0)
- added a new 3rd state for AtiHacks: -1 (autodetect each run, so you can switch GPUs)
Engine / Simulation:
- never allow zero-area feature footprints
- remove radius halving for default aircraft collision-volumes
- close down another out-of-map attack exploit route
- rewrite collision detection/resolution between ground units
- skip path-estimating for unused MoveDefs
- use the full resolution of the blocking object map in pathestimator
- invoke higher resolution pathfinder if needed
- always add the "geovent" FeatureDef (#2402)
- only send UnitLoaded events for units that were not already being transported (when Attach'ing them)
- fix bizarre skidding behavior for ground units with non-zero slideTolerance
- higher priority for nano particles when capturing and reclaiming other teams units
- print error message for select commands referencing invalid object IDs
- make TorpedoLauncher weapons able to target any in-water unit
- make pushing of enemy units during collisions a ModInfo option ("allowPushingEnemyUnits")
- remove hardcoded enter-crashing-state-on-death behavior for aircraft (now delegated to Lua or COB)
Engine / Map:
- merged both mapinfo.lua's! before there were two, one in the base-dir (-> ArchiveScanner) and one in "maphelper/mapinfo.lua" (-> MapParser/MapInfo)
engine now always tries to read the base-dir one
- new mapinfo.lua tags:
- "specularExponent" (moved from userconfig)
- "fogEnd"
- "bladeColor"
- check for the smt _next to_ the smf (which can already freely placed in the archive!)
- allow resources_map.lua to specify GroundFX textures for CEGs (that use CSimpleGroundFlash)
Engine / Rendering:
- Lua-scriptable dynamic lighting of models and terrain (
- WIP DynamicSun option for moving shadows
- add optional SSMF normal-mapping and self-illumination stages
- fix holes in shadows cast by non-closed S3O/OBJ models icw. face culling
- always cull (non-3DO) model backfaces for the shadow pass
- squeeze some extra precision out of the shadow-map
- make map/model/tree/projectile shadows individually configurable
- allow weapons to not leave any explosion scars (add "explosionScar=true|false" to a WeaponDef)
- render all SMF maps through GLSL if it is available
- make depth-testing and -masking configurable for CSimpleGroundFlash
- fix mixed up textures in the multithreaded version
- fix awkward performance with multithreaded engine in games using custom model formats
- add peak display for time profiler
- don't display /mtinfo if the value is near zero
- properly fade out features
- make underwater shadows darker in deeper water
- significantly reduced performance impact for Lua rendering widgets in the multithreaded version
- enable creation of OpenGL objects such as display lists in the sim thread in the multithreaded version
- fix BumpWater on ATI cards when atiHacks=false
Engine / Sound:
- added EFX/EAX support (reverb)
- /tset UseEFX [0|1]
- /tset snd_filter %gainlf %gainhf
- /tset snd_eaxpreset "bathroom" (see EFXPresets.cpp for alternatives)
- fixed a bug when runtime changing the volume
- added a warning when trying to play a non-mono sound in 3d (OpenAL doesn't support this!)
Engine / COB&LUS:
- fixed bug in WaitFor... [mantis #2499]
- minor animation-handler optimizations
Engine / Lua:
- fixed "/luagaia xyz" cmds
- added EAX/EFX funcs: Spring.[Get|Set]SoundEffectParams
- totally remove following args of SetUnitPieceCollisionVolumeData: affectLocal, affectGlobal, enableGlobal (it's now always local!)
- fixed gl.PushAttrib(GL.ALL_ATTRIB_BITS)
- added a new channel argument to Spring.PlaySoundFile(). it is always the last argument (independent if you defined pos/speed)
it can either be:
"battle", "sfx", 1
"unitreply", "voice", 2
"userinterface", "ui", 3
anything else defaults to "general"
- removed teamcolors.lua (redundant since Spring.SetTeamColor)
- add optional flattenGround parameter to Spring.CreateUnit
- remove the "n" field from array-like tables returned by API functions
- added Spring.GetProjectilesInRectangle
- linked Projectile{Created, Destroyed} to the Spring.SetWatchWeapon state
- added Spring.SetWatchUnit(unitDefID) and Spring.SetWatchFeature(featureDefID) analogues of SetWatchWeapon
- extend LuaPathFinder with support for setting node cost overlays
- extend SyncedRead::Pos2BuildPos: add support for additional param "facing"
- added Spring.{Get, Set}MapSquareTexture (these allow complete dynamic run-time retexturing of SMF maps)
- added Spring.GetMetalMapSize (returns size in metal map coordinates)
- added Spring.GetMetalExtraction (note: uses metal map coordinates)
- added Spring.{Get, Set}MetalAmount (note: uses metal map coordinates)
- added Spring.GetFeaturesInCylinder
- added Spring.GetFeaturesInSphere
- added Spring.GetFeatureCollisionVolumeData
- added Spring.SetWMIcon
- added Spring.SetWMCaption
- added Spring.ClearWatchDogTimer
- added widget call-in GamePaused
- added widget call-in PlayerAdded
- added widget call-in PlayerRemoved
- added callins for collision events
UnitUnitCollision(colliderID, collideeID) -- needs SetWatchUnit enabled for both parties
UnitFeatureCollision(colliderID, collideeID, crushKilled) -- needs SetWatchFeature enabled for both parties
- added Spring.SetUnitCrashing
- add All/None buttons for widget selector
- fix multithreaded crashes in Spring.Get{Full,Real}BuildQueue
- fix Immobilebuilder fails near the map edge
- fix Spring.SetUnitWeaponState "range" for cannon weapons
- add control over airStrafe via MoveCtrl.SetGunshipMoveTypeData
- migrate MoveCtrl.SetLeaveTracks to (LuaUnsynced) Spring.SetUnitLeaveTracks
- removed all widgets (moved to examples/Widgets)
Engine / Internal:
- added limited OpenMP support
- added multithreaded OpenGL support via offscreen contexts
- added LinkingTimeOptimization (currently fails with GCC4.5/6)
- more/better error reporting
- new logging system:
frontend is leightweight
frontend is C compatible
is more modular
supports log levels: DEBUG, INFO, WARNING, ERROR, FATAL
"sub-systems" renamed to "sections"
more section then before
is compatible with unit-testing
write DEBUG and INFO to stdout, the rest to stderr
disable console logging for unitsync
disable console output for dedicated server shared library
turn off flushing to log-file completely
- added GL_ARB_debug_output support (callback-based opengl error reporting)
NOTE: this doesn't work yet, because most drivers export this ext only for so called debug contexts.
Creating those is impossible with near all current GL frameworks (SDL, SFML, ...).
- fixed unnecessary memory allocation in Archive7Zip
- promote the CrashHandler hang-detector thread to a WatchDog
- use a SafeVector for the Command parameter array
- lots of cleanup and refactoring
- get rid of goto
- modularized chat-/game-commands (for example /cheat)
- no more use of AUX_SOURCE_DIRECTORY in CMake (as recommended by CMake team)
- Remove the obsolete SCons build system
- reduces constantly allocated memory for drawing stuff for AIs from ~130MB to ~ 2KB
- add a new build-target "generateSources"
- allow to use a system-supplied minizip library
- allow to disable each build type individually at configure stage
- generate version from git-describe (git tags), instead of hardcoding them into a source-file
- unsynced deletion of synced projectiles
- watchdog monitoring for some additional threads
- AI Interface pure-ification, see Forum: Development - AI - <sticky-thread>
- add full two-way communications between AI's and unsyced Lua
- let AI's send textual commands (like "/cheat")
- allow AI Interface plugins to provide info about available Skirmish AIs
- install Java-AIInterface and JavaOO-AIWrapper as maven artifacts into the local repository
- Legacy C++ AI: allow fetching the maximum number of units in a game
- fix source generation occasionally failing for Java-AIInterface
- treat allied units as always in LOS
- fetch the correct UnitDef for decoy units, if the unit is allied
- Java AI Interface: pack native sources too
- Maven-ize NullOOJavaAI
- Java AI: allow AIs to support compiling only through Maven
- generally improved Maven support
- make source generation compatible with BWK and GAWK 4.0.0
- E2323AI: bump to latest version
- KAIK: mid-game init fix
- AAI: prevent stack corruption in the case of file paths longer then 500 chars
- RAI: do not use a single/static team-instance callback in a place used by all RAI instances
- implemented GetDataDirectoryCount() and GetDataDirectory(int index)
- add support for retrieving non-string info value types (string, integer, float, bool)
- introduce GetPrimaryModInfoCount
- fix OpenArchiveFile
- create minimal-portable .7z version of engine and reuse it in installer
- ai's are now installed always (removed individual sections)
- add registry key to unitsync.dll HKLM\Software\Spring\SpringEngineHelper
- replace readme.html with
-- ---------------------------------------------------------
Engine / General:
- disable frame number prefix in messages to the console by default
- add temporary hack to not crash on HostIP=localhost
Engine / Lua:
- change parameter `useOverlay` from type number to bool in config access functions
Engine / Auto-Hosts:
- gracefully exit if the autohost is not reachable
- if the local socket supports IP v6, but AutohostIP is specified as IP v4, use v4 to connect
- stop server on config problem
Engine / Dedicated-Server:
- fix crash when game ends prematurely
- add new function GetSpringVersionPatchset() (return "1" for a spring version of ""
- remove accidentially added third paramter to Init()
- fix: do not check for running .exe in silent-mode
- Zero-K: desktop-shortcut: rename & add icon
- KAIK: add missing initialization checks
-- 0.82.7 --------------------------------------
Engine / General:
- fix crash due to invalid lastAttacker
- do not bind a UDP socket for local games -> allows multiple local instances again sans hassle)
- clamp minimum mapHardness to 0.001 to prevent div/0
- fix dangling CUnit* (crash for everyone in-game)
- fix crash in 3DO Parser
- fix bug in CGround::TrajectoryGroundCol with outside map coordinations
- prevent memory-leak in LoadGrayscale() if there already was pixel-data
- fix some more memory-leaks
- prevent equal unsynced random seeds
- fix SetUnitRotation
- fix enemy units responding to bugger off
- apply damage wrt. impacted piece if usePieceCollisionVolumes == 1
- make CBitmap::ReverseYAxis() more efficient
- remove excess elements from BasicMapDamage::craterTable
- rename "mod" to "game" in default menu & add "games/" to mod scanDirs
- implement host-definable IP's
- do not save/restore minimized windows state on win32
- convert some crashes because of invalid CEGs into warnings
- properly ignore non-blocking objects during collisions
- change minimum for UnitDef.buildDistance from 128 to 38 (default stays 128)
- broadcast team died events to all players, so it is stored in the demo file
Engine / Logging:
- give S3O model name in error message when a texture is missing
- print name of widget to infolog.txt before it starts to load
- prevent empty content_error messages
- catch model content_error exceptions ASAP
- unify stdout/infolog output
Engine / Lua:
- fix global enviroment pollution in luaui.lua
- allow Spring.AssignMouseCursor & Spring.ReplaceMouseCursor from LuaRules, too
- Allow loading from subfolders for weapon-def files (tdf and lua)
- implement Lua's GameFrame event via the EventHandler
- added parameter includeSky to TraceScreenRay
- correct `AllowResourceTransfer` params in default gadget handler
- new parameter for LuaSyncedCtrl::SetUnitArmored allows setting of the armor multiple
Engine / Path-Finder:
- fix units-stuck-behind-terrain
- fix Godde-III
- do not assign extra waypoints to aircraft
- decrease ETA-failure response time
- keep speed above UnitDef::turnInPlaceSpeedLimit when turning (if turnInPlace==0)
- fix units slowing down on negative slopes
- set a more reasonable default turnInPlaceSpeedLimit
- PFS: remove circular constraint from run-time searches
- set a more reasonable turnInPlaceSpeedLimit
Engine / Rendering:
- fix cannon visuals
- fix rendering of tri-stripped S3O's
- require GLEW 1.5.1+ because 1.5.0 does not have `glMapBufferRange`
- do not crash on shader compilation error
- fix build-order drawing for OBJ models
- replace 63x63 icons with 64x64 ones in LuaUI/Icons/ (prevents glitches on some older GFX cards)
- fix occasionally strange wake SFX
Engine / Auto-Hosts:
- builds other then dedicated-server now also support commands "kill" and "pause"
- make command `paused` support a parameter (0|1)
Engine / Dedicated-Server:
- fix binary name
Engine / Head-Less:
- crash fix
- remove of "jump depending on uninitialized value"
- LegacyCpp-AIWrapper: fix some memory leaks
- KAIK: fix memory corruption (one-character-typo...)
- KAIK: clamp costs to 1.0, not to 0.0
- KAIK: compile fix for 64bit
- KAIK: fix infinite loop
- KAIK: do not access invalidated pointer
- KAIK: init value before use
- KAIK: prevent accessing of array at position -1
- KAIK: prevent a crash when enemy unit is out of map bounds
- KAIK: fix mid-game init
- AAI: add version independent config file (by azaremoth) for _The Cursed_ game
- RAI: made compatible with MSVC
- RAI: fix cache file names
- RAI: fix AI considering water as harmful
- RAI: fix building non suitable buildings on certain maps
- RAI: fix a crash at end of game
- E323AI: pump to version 3.25.0
- fixed for main binary (.exe, windows)
- do not check for .Net when installing Zero-K
- delete all files that were installed
- add Tobis rapid client
-- --------------------------------------
Engine / General:
- prevent false hang detection trigger
Engine / Rendering:
- fix occasional ATI crash
- rename SpringDownloader to Zero-K Lobby
- re-add MSVCR71.dll
-- 0.82.6 --------------------------------------
Engine / General:
- fix various bugs related to mid-game join
- fix LosHandler ignoring units with losRadius <= 0 but airLosRadius > 0
- fix a leftover icon bug
- fix BFGroundDrawer crash at extreme view-distances
- fix death-wait
- allow death-wait in games with more then 2 ally teams
- reduce risk for deadlock during stack trace
- allow to specify game-start-delay in the start script (GameStartDelay)
Engine / Simulation:
- prevent SEGV when updating skidding units
- improve turnInPlace=0 path-following (#2072)
- units ignored ETA failures when <= 200 elmos from goal, even if goal unreachable
- make pushResistant (allied) units still move out of the way of constructions
Engine / Rendering:
- update the displayed resource production for inbuilt units too
- fix spectators see ghosted buildings
- do not draw icons for noDraw units
- do not cast shadows for noDraw units
- do not draw healthbars for noDraw units either
Engine / AI:
- add feature-ID trace-ray command
- allow fetching of other teams resources (current, income, usage, storage)
- EnableCheatEvents() was a no-op because it did not enable cheats temporarily
- IsUnitInLosOrRadarOfAllyTeam() now considers gs->globalLOS
-> UnitCreated now may trigger EnemyCreated for non-cheating AI's
- E323AI: new version: 3.22.4
- Python AI Interface: removed a few memory leaks
- fix mapname/mapfilename conflicts
- add portable install option (default: disabled)
- add Python AI Interface to the windows installer
- remove SelectionEditor
-- --------------------------------------
Engine / General:
- fix FPS/direct controlling crash
Engine / multi-threaded:
- fix unit icons/healthbars crash
Engine / AI:
- E323AI: NOTA and XTA support enhanced & lots of improvements
-- 0.82.5 --------------------------------------
Engine / General:
- draw icons for cloaked units again
- fix NaNs if map hardness is zero
- fix UnitPreDamaged Lua CallIn
Engine / AI:
- AAI: do not crash on game end if mod did not spawn a commander in the first 450 frames
- E323AI: lots of fixes & support for NOTA & Conflict Terra and AI options
-- 0.82.4 --------------------------------------
Engine / General:
- fix demo desyncs if commands were issued during pause
- fix abnormal demo speed (during reconnect and temporary lags)
- fix demo runs away from local user
- fix mid-game join
- fix FullScreen mode under Linux
- fix KDE/GNOME detection for error message box
- fix another FPU reset in LuaLobby
- don't reload defaults each time /ctrlpanel command is used (behaves now the same way as /cmdcolors)
- speed up reflection pass a little
- disable heatmapping by default
- fix COB's KILL_UNIT for self-kills
- fix bugged default-argument passing in path-follower
- fix broken return-value handling for UnitPreDamaged
- OBJParser: deal with carriage returns
- fix holdSteady (and sweeping beamlaser) rotations
- fix SEGV when /give'ing features
- fix crash when linking grass shaders on non GLSL system
- fix specs do not see all features
- fix Projectiles do not show up for missile weapons or torpedoes
- fix crash on bad playername message
- disable team highlighting for spectators by default
- fix incorrect ClipPlanes in DrawInMinimap if gl.SlaveMiniMap is used
- fix metal-maker widget
Engine / AI:
- fix crash on capture from/by AI
- fix Python AI Interface
- AAI support version independent mod config files, for example BA.cfg
Engine / Dedicated server:
- fix/re-add sync-check
- possibly fix crash when sending data to improperly-connected autohost socket
- add support for more then 16 start positions
- fix checks for installed .Net version
- add SpringDownloader desktop shortcut
- fix _make install-spring_ to work after initial configure
- fix windows linking (related to -lws2_32)
- updated man pages: spring & spring-dedicated
- new man pages: spring-headless & spring-multithreaded
-- 0.82.3 --------------------------------------
Engine / General:
- rebuild because of stale base content packages
(different checksums between windows and linux)
- fix NullAI installing into /
-- 0.82.2 --------------------------------------
Engine / General:
- miscellaneous OS X compile/link fixes
- fixed incorrect handling of negative references in OBJParser
- fixed misinterpretation of the OBJ spec
- reorganized WindowState saving on exit on X
- fixed source package build
- always print crash errors to infolog
- added to OGL driver crash detection on Linux
Engine / Simulation:
- fixed autosharing resources to dead teams
- fixed units disappearing from quadfield after load-unload in transport
Engine / Lua:
- fixed invalid FPU flags after LuaLobby connection is made
- fixed DrawFeature event
- Spring.UnitScript.GetScriptEnv returns nil if the unit does not run a Lua script
- Spring.GetCOBScriptID returns nil if the unit does not run a COB script
- fixed typo in mapdefaults.lua
- possibly fixed GetPlayerInfo
Engine / AI:
- updated E323AI to latest version
-- 0.82.1 --------------------------------------
Engine / General:
- fixed source package build
- fixed MT crash in DrawCommands
- fixed radar blips seen by spectators
- fixed dark metal spots in watert
- reduced default value of max particles
- increased default LOD/icon distances
- glFont::GetTextHeight & glFont::GetTextNumLines return now 0 lines for empty strings
- fixed 3do shadows
- fixed minimap rendering in dualscreen modes
- fixed laggy camera update with UnitTracker
- fixed seismic pings with incorrect size
- fixed incorrect highlight on end game screen
Engine / Simulation:
- prevent units from becoming immobile zombies while maneuvering
- base etaFailures limit on a unit's full-circle turning time
- decrease etaFailures every frame we are not standing still
- fixed vibrating planes
- fixed nanoframe being spawned while game is paused
- fixed slow response when releasing wait command
- fixed the silly unit spinning ad-infinitum bug
- fixed unit occasionally not taking damage when it just left a transport
- fixed some awkward transport behaviour
- properly deal with radars/jammers being transported
- fixed unit returning to pick up point when it dropped out of transport
- skip waypoints that are behind a unit but within its turning circle
Engine / Lua:
- added a LuaRules DrawFeature call-in
- fixed LuaUnsyncedCtrl::SetWaterParams
- fixed Spring.Restart with Win 2k and OpenAL-soft
- LuaSyncedRead::GetUnitExperience: also returns limExperience now
- removed obsolete engine options from EngineOptions.lua
Engine / Dedicated server:
- use default visibility (hidden) for spring-dedicated under non-windows
- RAI: log files are now under _log/_ sub-dir
- AAI: added config for BA 7.14
- E323AI: added config for BA 7.14
- made main part mandatory
-- 0.82 --------------------------------------
Engine / General:
- added HeadLess version of the engine (no graphics, no sound) by hughperkins
- better overall handling of connection problems, with highlighting of uncontrolled units
- players in startscript may reconnect to a running game, even with changed IP address
- players can choose server speed throttling algorithm by voting (/speedcontrol)
- do not crash on AI Interface error
- MT/GML: now a separate build target: make spring-multithreaded
- fix linking under Fedora 13
- allow choosing between available sound devices through config (snd_device)
- add missing /skip variants to word completion
- use new dependency system for maphelper.sdz (by Beherith)
- OS X fixes
- hardcoded startscripts removed (Air Test, etc.)
- more default intercept types added
EmgCannon -> 1, AircraftBomb -> 8, Flame -> 16, TorpedoLauncher -> 32
LightningCannon -> 64, Rifle -> 128, Melee -> 256
- engine does not spawn start unit anymore
- engine does not use StartUnit tag in sidedata.lua anymore (but still passes it to Spring.GetSideData)
- engine does not read `Script' map tag anymore
- engine does not read `ScriptName' modoption anymore
- engine does not deal with `StartMetal' and `StartEnergy' modoptions anymore
- pathfinder debugging views can be rendered now when spectating (and not cheating)
- dropped modinfo.tdf support (only modinfo.lua is supported now)
- clients now compare their path-cache CRCs and warn about differences instead of updating their running checksums with them
- Spring's CPU affinity can now also be set on non-win32 platforms, use the SetCoreAffinity ~/.springrc parameter as a bitmask
Engine / Simulation:
- new unit tag: cloakTimeout, int, default 128 frames
- fixed the featureVisibility mod-option
- fixed calls to the engine path-finder to be sync-safe when run in unsynced context
- reduced frequency of units ending up in "can't reach destination" situations
- fixed units not inheriting orders from factories and piling up (due to having their paths aborted)
- removed the TEDclassString UnitDef parameter (side-effect: hub-like units will break if they have a yardmap)
- removed diminishing metal makers option
- changed the semantics of the holdSteady UnitDef tag
true ==> slave transportees to orientation of transporter attachment piece
false ==> slave transportees to orientation of transporter body (default)
- fixed canDGun+commandfire to properly reproduce commander-like DGun behavior without script hacks
Engine / Rendering:
- fixed alpha-masked shadows for S3O models
- fixed ATI alpha masked shadows (trees, features)
- fixed far-textures (caused changing teamcolors and disappearing units)
- support the OBJ model format (
- support specular lighting, multiple blendable detail textures, and sky reflections on SMF maps ("SSMF") (slightly outdated wrt. the SMD parameters)
- converted all shadow, tree, grass, model, and map shaders to GLSL
- vertex-animated grass; maps can specify the grass blade- and shading-textures and the dimensions/angle for blades
- refactored and abstracted unit/feature/projectile drawing to be format-agnostic
- increased global decoupling between simulation and rendering code
- fixed model specular lighting (most visible on units)
- S3O model normals are now auto-scaled to unit-length
- maps with mis-specified skybox textures will now load (without crashing Spring)
- use OpenAL Soft 1.11 under windows (was Creative)
- air-absorpion: absorb high frequencies when sound effects are far away (config-key & default value: snd_airAbsorption=0.1)
- no-sound support through NO_SOUND compile time define or NoSound config-key
- list of data-dirs for engine & unitsync are now always equal
- API cleaned: no more void*, all structs deprecated
- data dirs read from /etc/spring/datadir (separator is now ":" instead of " ")
- added a new inline ctrl command '\008' which resets the TextColor to the
color that was active when Print() got called, as in the following example:
font:SetTextColor(0, 0, 1); -- blue
- LuaLobby:
- Script.CreateLobby() -> userdata lobCon
- lobCon:Connect(string url, int port)
- lobCon:Disconnect()
- lobCon:Login(string username, string password)
- lobCon:Rename(string newname)
- lobCon:ChangePass(string oldpassword, string newpassword)
- lobCon:Register(string username, string password)
- lobCon:ConfirmAggreement()
- lobCon:JoinChannel(string chan_name [,string password])
- lobCon:LeaveChannel(string chan_name)
- lobCon:Say(string chan_name, string message)
- lobCon:SayEx(string chan_name, string message)
- lobCon:SayPrivate(string user_name, string message)
- lobCon:StatusUpdate(bool ingame, bool away)
- lobCon:Channels()
- lobCon:KickChannelMember(string chan_name, string user_name, string reason)
- lobCon:ChangeTopic(string chan_name, string topic)
- lobCon:Poll()
- lobCon.DoneConnecting(bool sucess, string error_message)
- lobCon.ServerGreeting(string server_version, string spring_version, int udp_port, int mode)
- lobCon.RegisterDenied(string reason)
- lobCon.RegisterAccepted()
- lobCon.LoginDenied(string reason)
- lobCon.LoginEnd()
- lobCon.Aggreement(string text)
- lobCon.Motd(string text)
- lobCon.ServerMessage(string text)
- lobCon.ServerMessageBox(string text, string url)
- lobCon.AddUser(string user_name, string country, number cpu)
- lobCon.RemoveUser(string user_name)
- lobCon.UserStatusUpdate(string user_name, bool away, bool bot, bool ingame, bool moderator, int rank)
- lobCon.ChannelInfo(string chan_name, int num_users)
- lobCon.ChannelInfoEnd()
- lobCon.RequestMutelist(string chan_name)
- lobCon.Mutelist(string chan_name, table {"userABC","userXYZ",...})
- lobCon.Joined(string chan_name)
- lobCon.JoinFailed(string chan_name, string reason)
- lobCon.ChannelMember(string chan_name, string user_name, bool joined)
- lobCon.ChannelMemberLeft(string chan_name, string user_name, string reason)
- lobCon.ChannelMemberKicked(string chan_name, string user_name, string reason)
- lobCon.ChannelTopic(string chan_name, string author, int time, string topic)
- lobCon.ChannelMessage(string chan_name, string text)
- lobCon.Said(string chan_name, string user_name, string text)
- lobCon.SaidEx(string chan_name, string user_name, string text)
- lobCon.SaidPrivate(string user_name, string text)
- lobCon.Disconnected()
- lobCon.NetworkError(string message)
- added a new los checking argument to Set..RulesParam()
e.g. new syntax is SetUnitRulesParam(int unitID, string paramName, float paramValue, { public = true } )
possible values for the table are:
`private` : only readable by the ally (default)
`allied` : readable by ally + ingame allied
`inlos` : readable if the unit is in LOS
`inradar` : readable if the unit is in AirLOS
`public` : readable by all
note: if one condition is fulfilled all beneath it are too (e.g. if an unit is in LOS it can read params with `inradar=true` even if the param has `inlos=false`)
note2: all GameRulesParam are public, TeamRulesParams can just be `private`,`allied` and/or `public`
- new Spring.GetUnitMetalExtraction(unitID) -> nil | number
- new synced Spring.ShareTeamResource(teamID_src, teamID_dst, type = ["metal"|"energy"], amount) -> nil
- new Spring.GetTeamResourceStats(teamID, resourcetype = ["metal"|"energy"]) -> nil | used, produced, excess, recv, sent
- added Spring.SetProjectileMoveControl(number pid, boolean b) --> nil callout; if (b), makes all piece/weapon projectile movement fully Lua-controllable
- improved Spring.GetTeamStatsHistory. It retuns now also the most recent data, not just the data of the cached stats which get updated only all 16 seconds.
- fixed incorrect scaling in Spring.SetUnitResourceParam
- fixed Spring.GetAIInfo, it returned incorrectly the given teamID as first argument
- fixed a bug in Script.RemoveSyncedActionFallback
- added missing `coroutines` module and missing `select` function to unsynced LuaGadgets
- added os.setlocale to LuaUI
- added Save/Load callins, both get a userdatum representing a save file as single argument
Save is unsynced, Load is synced (both gadget only)
Should allow implementing savegames mod side with less hacks
/reloadgame chat command added for development purposes, this fires the Load event again
- modified base {armordefs|movedefs|sidedata}.lua to follow pattern of icontypes.lua
- added a ShieldPreDamaged call-in to LuaRules, triggered before any engine shield-vs-projectile logic executes
- UnitDefs[i].model.textures now actually contains the names of the model textures for unit-type i
- script.txt: Engine ignores GAME\\ModOptions\\LuaRules & interprets GAME\\ModOptions\\LuaGaia just as a boolean now
- fixed GetScreenGeometry on win32 platforms to return the proper screenSizeY, not screenSizeY - taskbarSizeY
- moved Spring.SetUnitRulesParam, Spring.SetTeamRulesParam, Spring.SetGameRulesParam from LuaRules-only to LuaSyncedCtrl
- removed evaluator functions from LuaOpengl
- removed Spring.MakeFont
- removed Spring.SetRulesInfoMap, Spring.GetRulesInfoMap, Script.GetConfigString
- removed Spring.CreateUnitRulesParams, Spring.CreateTeamRulesParams, Spring.CreateGameRulesParams
- removed AllowUnsafeChanges("USE AT YOUR OWN PERIL"), it's always enabled now
Engine / Unit Scripts:
- LUS: SetSignalMask raises error now when called outside thread
- LUS: Signal/SetSignalMask support arbitrary objects as `signal names' now, bitwise logic is still applied to numbers
- LUS: _G in a Lua Unit Script points to the environment of that Lua Unit Script now
- LUS: TargetWeight and BlockShot are actually called now
- COB: Added KSIN (135, 1024*sin(x)), KCOS (136), KTAN (137) and SQRT (138) get constants.
- LUS: Fixed a desync bug.
- fixed middle click scroll speed on linux
- added new MiddleClickScrollSpeed option
- more responsive mouse movement
- made it easier to select units in factories
- added new command "/buildwarnings [0|1]", analogous to "/movewarnings [0|1]"
- improved unit type mix in front moves
- new middle click scroll icon
- added various new debug-draw callouts for profiling, state visualization, etc.
- make sure the Release event always reaches dieing-state AI's
- added a GetUnitVel callback, returns a unit's velocity vector
- new Python AI Interface by theGeorge & abma
- E323AI bug-fixes, logic- and performance enhancements
- AAI: fix some crashes (one on death) & a logic error
- RAI, KAIK and AAI: support unit captured&given from&to them
- RAI, KAIK and AAI: config-, log- & cache-files now compatible with pool archived mods
- KAIK: switched to .lua config-file format, added a basic mod whitelisting mechanism
- KAIK: event-based TM updates
- fix a crash on Skirmish AI death
- fix Java AI Interface loading on Debian
- fix Java compilation on some systems
- fix Java crash: increase initial java heap size (by cranphin)
- send an Update event before the first UnitCreated (when initializing mid-game)
- LightingCannon (sic) finally isn't supported anymore, use LightningCannon instead (default weapondef_post.lua includes backward compability)
- fixed a bug in LuaParser, so you can now use booleans in lua CEG configfiles (before it just accepted "1"/"0" for some tags)
- fixed occasional bug where countdown time went into negative numbers and game never started
- fixed impactOnly ignored features
- improved error handling on network packet level
-- --------------------------------------
- Fixed incorrect projection matrix (i.e. tiny build menu)
- Fixed some Mac and MSVC compile errors
- Switched to OpenAL-soft, that should fix volume escalation
- Slightly improved detection of ATI/Nvidia OpenGL driver crashes
- Fixed team-color bug for both units and flying pieces
- AAI: removed obsolete map config files
- AAI: added BA 7.12 config file
- KAIK: removed dependence on TEDClass
-- 0.81.2 --------------------------------------
- Removed OpenGL 1.4 version check
- Fixed sync with GCC 4.3 builds
- Fixed crash when sending startpositions of uncontrolled team
- Fixed race condition when taking screenshot
- In 'info' screen, human name instead of archive name is shown
- Reduced input CPU usage
- StartSpectating only has an effect if the player is not already spectating
- Packet resends have higher priority now than new packets
- Print message to infolog when traffic from unknown IP gets dropped
- Fixed vsync for Linux
- Removed OpenGL immediate mode rendering to work around broken ATI drivers
Engine / Simulation:
- Kamikaze distance is now 3D, this fixes mines
- Added new UnitDef tag 'kamikazeUseLOS' (default false)
- Fixed submarine stacking
- Fixed units using smoothMesh unable to land at repair pads near hills
- Fixed COB interpreter incorrect compiler optimizations (fixes e.g. XTA hovercraft)
- Fixed features not taking damage from impactOnly weapons
- Fixed multiple-cons-build failing on structures with open yardmaps
- Fixed maxParalyzeTime when paralyzeOnMaxHealth is enabled
Engine / AI:
- Fixed AI initialization process for games with >1 human player and for Lua AIs
- Fixed NETMSG_AISHARE for message size >32k
- Allow fetching the file path of an AI interface plugin
- Fixed crash on Skirmish AI death
Engine / Lua:
- Spring.MarkerAddPoint now defaults to local
- Spring.CreateFeature heading value is converted to closest-matching facing
Lua Unit Scripts:
- Fixed handling of AimShield return value
- Fixed Sleep/WaitFor not working in Killed
- Slightly improved AimWeapon/AimShield/Killed error messages
- E323AI 3.18.1
- AAI: Doesn't use minkowski metric for retreat distances anymore
- AAI: Fixed some NaNs
-- --------------------------------------
- Fixed automatically assigning start position if none is chosen
- Fixed bug in DXT5 loading (caused artifacts with teamcolors)
- Fixed F1 heightmap view
- Fixed playing of demos created in a game in which Spring crashed
- Made spectator drawings white instead of random team color
- Disable recording demos from demos (default, DemoFromDemo in springrc to enable)
- Added a mechanism to register/unregister for messages that are normally not broadcasted to game server
- E323AI 3.14.5:
* support for: partial watermaps (plays land only), group merging,
auto kbot/vehicle lab selection, template configs
* XTA & BA config improvements
* Better lab assisting
- KAIK: do not build MExes on spots used by allies
-- 0.81.1 --------------------------------------
Engine / Simulation:
- Terrain types and water damage are now taken into account for pathing checksum
(Fixes desyncs on maps with map options which modify terrain types or water damage)
- Changed builder patrol/fight behaviour for Hold Pos and Maneuver movestates
- Being-built units are now visible on radar by default
Engine / Rendering, UI:
- Added speed display
- Improved basic player list
- If OpenGL 1.4 is not available, an error is shown
- Fixed being-built unit rendering
- Placing buildings close together works again
- Fixed canceling of first build item when buildiconsfirst is toggled
Engine / Lua:
- Less strict type checking in VFS.DirList (fixes FBI2Lua converter)
Engine / System:
- Map options fixed
- Menu doesn't crash anymore if no mods/maps found
-- 0.81.0 --------------------------------------
Engine / Simulation:
- Builders are now smart enough to to reclaim features that block their
buildsite, which weren't there when they started moving to it
- Fixed issues with features with 0 metal and 0 energy
- Fixed crashes / desyncs when using area orders with a large radius
- Hold position doesn't imply "don't turn" anymore, and units with small
firing arcs in general behave a lot better in this case.
- Units on hold position now don't get confused by nearby invalid targets
- Smooth ground mesh for better aircraft behaviour (unit tag: useSmoothMesh)
- Wind fixed to stay in between map boundaries
- Momentum isn't conserved anymore in unit-unit collisions
- Impulses decay every frame instead of every slow update
- Kamikaze units now do a visibility and 3d distance check
- Fixed ships were able to 'climb' cliffs
- Fixed multiple issues with pathmap updates after terraforms
Engine / Rendering, UI:
- Changed default binds of forcestart, singlestep, debug to Alt+f, Alt+o, Alt+b
- Non-reclaimable features show up as red squares now when placing a building
- Out-of-LOS features don't show up anymore when placing a building
- Fixed icons not rendering properly when distance-to-ground method was used
- Better mipmap handling on SMF maps
- Fixed specular lighting calculation on SM3 maps
- Fixed "/shadows" command on SM3 maps
- Fixed SM3 map holes
- Fixed "/wiremap 0|1" (argument was inversed)
- Lots of other drawing fixes
- Far-textures fixed
- Load-screens preserve aspect ratio
- Added checks for insufficent gfx cards
- Added new shadow rendering option ("/shadows 2"): it disables terrain rendering
in the shadow pass, which gives a huge performance increase
- Changed BumpWaterReflection values:
0 = disable; 1 = enable (no terrain); 2 = enable (with terrain - was '1' before)
- Fixed occasional hang when word wrapping text
- S3O transparency is now supported even with AdvUnitShading disabled
Engine / Lua:
- Added AllowFeatureBuildStep call-in to included gadget handler
- Fixed typos in certain featuredefs.lua, weapondefs.lua that mutilated error messages
- Spring.Rehost fixed on Win32 when spaces in install path
- Added support for modifying CTAAirMoveType (gunships)
- Add GetUnitMoveTypeData(unitID) call-in, returns a table
- Fixed Spring.SetFeatureDirection
Engine / System:
- Fixed incorrect startpositions in skirmish games
- Proper handling of mod dependencies
- MAN pages support (Linux)
- Support for external debug symbols (Linux)
- Fixed an issue with using the root of a drive as data directory
- Use less memory when reading from 7z archives
- Improved handling of spectators in case of sim slowdown and desync
- E323AI: CPU performance improvements & bug fixes
- KAIK: better D-Gun handling
-- --------------------------------------
- AI: Properly fix Lua AI loading
- AI: Fix crash when Lua AI team dies
- AI: Fixed clean target of ant scripts
- Fixed deadlock in hang detection
- Fixed .desktop file
- Fixed crash on startup on Ubuntu Karmic
- Fixed reflections
- MT: Don't crash if draw callins access features
- Fixed fading features for ATI (atiHacks)
- Fixed crash when parsing certain chatmessage from autohost
- Fixed crash if OSC stats sender is enabled and no network is reachable
- cmake: Fixed 7-zip detection
- AI/cmake: Split system dependent/indepentent install parts (AI_LIBS_DIR, AI_DATA_DIR)
- AI: Debugging is now enabled by default in the ant scripts
- Time profiler cleanup, both code and UI
- Show an AI's shortName + version + nick in tooltips
-- --------------------------------------
- fix a bug where empty network packets were spammed (eating bandwith and demo space)
- fix a possible desync in the pathfinder
- fix mouse jumping in windowed mode (windows)
- fixed crash in KAIK
-- 0.80.5 --------------------------------------
- lots of bugs in the AI interface fixed
- fix some network-related problems and improve behaviour under worse conditions
- large performance increase for units on patrol
- fix some performance problems with the new heatmap pathfinder
- fixed a crash which could occur after an AirBase was destroyed
- joystick support
- some bugs resolved which could lead to crashes when using ogg samples or music
- properly handle dds textures
- fix some mouse-jumping in windows
- lua unit scripts major rework
- some sources of desync fixed
- fix some compiling problems related to boost 1.40
- some fixes for OS X
-- --------------------------------------
- fix crash when doing lots of mapdrawing (#1632)
- fix crash when loading certain cursornormal files
- fix drawing of ghosted buildings
- properly initialise SDL timer for dedicated server
- fixed GatherWait cursor
- don't send resign-command when already spectating
- fix units with vlaunch missiles (#1647)
- Spring compiles boost 1.40
-- --------------------------------------
- Fix missing tree fog, misc fog fixes
- fix crash in AI pathing
- fix crashes in the Java AI interface
- added VFS.MapArchive
- fix possible crash on exit
- fix crash when loading certain ogg-files
-- --------------------------------------
- don't reclaim dragonteeth with area-reclaim
- lua unit script framework respects script tag
-- --------------------------------------
- fix direct control unit movement (forwards and backwards)
- don't spam empty directories everywhere
- fix BA crash when doom was installed
- fix desync in pathfinder
- fix music timing
- single units should move in straight lines again
- fix shadows on features
- fix LocalModelPiece::GetPiecePosIter,GetPos,GetEmitDirPos
- fix vertical text aligning of multiple GUI controls
- fix jumping in middle click scrolling (windows)
- massive speedup in Spring.GetVisibleUnits
- added changed font vertical alignment opchars in gl.Text & luaFonts
- fix wreckages sinking in the ground
- add a modinfo featureLOS.featureVisibility tag
- fix BumpWater shorewaves
- make /nocost reversible
- add snapToGround bool param to SetFeaturePosition (default true)
- add SetFeatureAlwaysVisible (analog to SetUnitAlwaysVisible)
- added changed font vertical alignment opchars in gl.Text & luaFonts (baseline renamed to 'd'->'x', and use 'd' for descender)
- unit script: added GetPieceTranslation, GetPieceRotation, GetPiecePosDir
- unit script: SetSpeed/SetDirection/Go changes (see commit
- unit script: removed Create (framework handles it)
-- --------------------------------------
- fix creation of DDS textures
- Unbreak transports when loadingRadius <= some magic number
- fix Zlib-compression and decompression for lua
- Added VFS.SubDirs(dir, pattern, modes) callout to LuaParser
- added some more map water configs to Game. table
-- --------------------------------------
- don't write spring-files where they don't belong
- some rendering fixes (ATI errors, bumpwater)
- IPs of players not broadcasted
- area reclaim doesn't know of features not in los anymore
- slightly better paralyzeDamage handling
- fixed several issues with ArchiveMover - it now moves files to
My Documents\My Games\Spring and should be more reliable
-- --------------------------------------
Engine / Simulation:
- units can now move backwards
- notable speed improvement of feature handling (unit wrecks, tress...)
- LuaCOB: make it possible to make units with Lua instead of bos/cob
- some fixes for sm3 map-format
- pathfinding improvements for close groups of units
- reclaim / ressurection now correctly exported to LuaAI
- make better use of SSE functions for speed improvements
- now compatible with Boost 1.34 again (was 1.35 for spring 0.79)
Engine / GUI, System:
- IPv6 support for all parts of the engine
- caching for 7z archives: speed improvements at high compression levels (solid archives now usable)
- rudimentary menu when starting spring executable directly
- BumpWater got a major speed increase, and shorewaves look better
- various improvements for the sound system (multithreading, fixes for music, ogg-effects...)
- Added /aikill and /aicontrol commands (only works in singleplayer in this version)
- AIs won't crash the game anymore on startup
- some AIs play better now (especially KAIK)
- a lot of minor bugs
Dedicated Server:
- ingame stats exported to the autohost on game end
- always print IPs of players, even if connection fails
- allow password-protecting client slots to prevent name spoofing (needs lobby support)
-- --------------------------------------
- fix microlags and increased CPU usage for dedicated server
- fix the game ending when playign with AIs
- various AI-interface and AI-related fixes
- fallback to Lua for unhandled actions
- fixed exploit where spectator could make Team 0 resign
- fix certain soundeffects
-- 0.79.1 --------------------------------------
- fix crash when a direct-controlled unit dies
- fix watching of demos
- various AI-related fixes
- SetUnitShieldState fixed
- fix an infinite memory allocation loop on startup
- restore acceptable framerate on vey old cards
-- 0.79 --------------------------------------
Major stuff:
- rewritten AI interface in C
- new font renderer
- sound system and music overhaul
-> 2292 files changed, 149700 insertions, 290245 deletions
-- --------------------------------------
- fix for game refusing to speed up after a slowdown
- set MaxSpeed to 20 on (test)singleplayer
- fix insta-gameover vs. AIs
- fixed the server to run away from the local player on high gamespeeds
-- 0.78.2 --------------------------------------
General bugfixes:
- fix crash on gamestart with lots of players
- should fix most of the desyncs
- fix startscript not written in demo header
- units trying to stay in LOS of a target account for mip levels
- fix the no-commander-for-side-Arm problem for local games not based on TA content
- cob: made modelpiece mapping case-insensitive
- initialize relPos in EmitSfx
- fix for a fix in GetEmitDirPos
- fix aircraft not flying back to repair pads when all are reserved
- planes that are being refuelled aren't able to fire anymore
- clamp map position in unitLoader.
- players who didn't choose a start position start in their ally box
- fixed short command line params on windows (mantis #1271)
- don't try to kill dead teams
- add gamemode 3 (no game over) and make it the default in non-AI non-script.txt games
- removed luabind + lua-startscripts
- fixed multithreaded pathing
- removed partial match test for piece mapping
- fixed emitsfx crash (Mantis: #1252,#1238 & #1242)
- stunned planes shouldn't keep repair pads reserved
- always apply a miniscule amount of impulse when a unit is damaged
User Interface:
- fixed AltTab bug on gpus w/o FBO support
- EndGameBox shouldn't render stats if the game hasn't started
- changed minimap_startbox.lua to not show cones in top left (#1272)
- StartPosSelector now unloads itself when game is started without sending start positions.
- fixed refraction=2, disabled endless ocean for maps that don't show any water at the start of the game
- fix #1258 (FBO crash on exit with non-FBO gpus)
- gl.Texture() can now load the textures of s3o features, syntax is gl.Texture('%'..(Game.maxUnits+featureDefID)..(':0' or ':1'))
- added a new (unsynced) callout Spring.SetWaterParams, it needs cheating enabled and allows you to edit the mapwater settings ingame
- fix Luamsg if null-characters where inside
- add an GetUnitTransformMatrix unsynced callout (handy for shadow algs)
- add RAI to installer
- allow the user to close TASClient / downloader during install
-- --------------------------------------
- fix Features (wrecks, rocks) not beeing drawn with reflective units
-- 0.78.1 --------------------------------------
(notice the new version number scheme, its MAJOR (0.78) - MINOR (1))
- fix crash on window resizing
- more groundDecal fixes
- do not force useFPShadows to true unless they are supported (to prevent crashes during map-loading)
- fix UDP buffer overrun
- use %CSIDL_LOCAL_APPDATA%/springsettings.cfg (e.g. \Users\<user_name>\AppData\Local\) to store settings instead of registry
- use SSE instead of X87 for FP-calculations
- if in Choose ingame startposition mode its possible to play a map with more players than startpositions
- fix the aircraft hovering / drifting
- fix random start positions not being random
- fix area-attack for aircraft (#1144 again)
- GenerateTargets no longer has much information that the team requesting targets doesn't have
- fix spikes / lags in hosting demos
- don't allow gunships to drift off the map
- make planes bobble in place gently by default, and make hoverfactor work as intended
- fix unit reply sound
- don't open a (unused) network socket in single player mode
- Don't let static beamlasers overshoot
- Added new collision volume types: sphere, footprint.
- Units/features with no collision volume defined get 'footprint' type by default now, this restores the 0.76b1 behaviour as default
- Gave COB function BlockShotX a third parameter, userTarget, uses the engine's hasUserTarget value, that seems to reflect when unit has an attack order
- fix teamstats in demofile
- don't fail with "network unreachable" instantly, but wait until timeout or connection fix
Spring start / script.txt changes:
- added Game/MyPlayerName (MyPlayerNum is now deprecated and will be removed sometimes)
- send the gamesetup to each client once they join the server
- Player / Team / Mod - options are not needed anymore for clients, they are transfered from the server once ingame
User Interface:
- Argh's ground-decal shader shadow tweak
- enable startboxes by default
- decreased CPU load and increase drawing speed lines
- fix small memleak when resizing the window
- The protection ring shows up for non-stockpile interceptors
- fix detection of units under mouse for spectators
- fix the CTeam statistics tracking
- do not force useFPShadows to true unless they are supported (to prevent crashes during map-loading)
- fix for annoying flickering of the grounddetail texture in CA if some LUPS fx were visible
- fixed a bug with waterplane on centerrock (the terrain is deeper than the water plane was drawn)
- made forcestart a real shortcut, so you can unbind it
- don't draw the terrain if curMaxHeight<0 and voidwater
- fix long commandline options for linux build
- dynamic sky rednerspeed improvements
- added Spring.GetLastMessagePositions() (returns the 10 last message positions)
- moved Spring.GetDrawSelectionInfo() LuaUnsyncedCtrl -> LuaUnsyncedRead
- moved Spring.GetSoundStreamTime() LuaUnsyncedCtrl -> LuaUnsyncedRead
- added a 2nd return value to Spring.GetSoundStreamTime() (total sound stream length in seconds)
- Made it possible to specify start positions in map with LUA .smd file
- Immobile Builders doesn't put factories on patrol and doesn't give a stop order
- Don't crash/abort() on invalid handles, but throw exception instead
- Fix crash bug in unitsync when UnInit/Init was called after an earlier Init which returned error code
- Doesn't leak exceptions anymore over C interface.
- Doesn't just crash by design anymore after something goes wrong.
- Added API GetNextError, can be used to get error queue (currently limited to 1 error)
- added SetSpringConfigFile(char*): reinitialise config handler to use the provided path
- added char* GetSpringConfigFile(): return the currently used path to the config file
- Deprecated APIs:
- GetCurrentList
- AddClient
- RemoveClient
- GetClientDiff
- InstallClientDiff
- IsUnitDisabled
- IsUnitDisabledByClient
- Removed all code supporting those functions.
- These deprecated functions pop up MessageBox once on windows to nag lobby devs.
- Use engine's logOutput, still writes to unitsync.log (overwrites, doesn't append)
- ProcessUnitsNoChecksum is now identical to ProcessUnits.
- ProcessUnits now returns 0 immediately (but should still be called in loop until it returns 0, in case it's changed sometime later)
- Fix groups.ini being overwritten by installer
- removed all maps and mods from the installer
AAI v0.875
- Current amount of land/water within the base is taken into account when selecting factories (e.g. don't order water factories on a land map anymore)
- Improved AAIs behaviour on water maps with start positions on islands/land masses
- Improved metal extractor construction algorithm (spots closer to available builder, faster algorithm, works better if there are land and sea spots available at the same time)
- Continent file version bumped to 0.87
- Fixed a crash on shut down
-- 0.77b5 --------------------------------------
- check if common unitsync users are running, abort installation if any is found
- don't download and install RiverDale and SmallDivide when the user already has it
- even more preventions of DIV0
User Interface:
- whe watching a demo with a setup locally, overwrite maxspeed with 10
- fix mousehover detection for radar icons
- fixed performance of Lua fontHandler
- make the orbit-controller actually do something on win32
- make the orbit-controller speeds configurable
- rescale fonts on window resize so they don't look ugly
- fixed black border blending of fonts
- ATI drivers lie about not supporting extensions required by shadows. we ignore that extension now
- new fbi tag: bankingAllowed - only affects hoverAttack=1 units; controls if the aircraft can bank.
- fbi tag upright now affects gunships
- fix CAirMoveType using an uninitialized variable (maxSpeed)
- fix Aircraft fuel not working properly on units with multiple weapons
- fix SendLuaMsg
- improve heading table resolution, this makes huge units less jerky
- fix the gamespeed not going back up after it was slowed down
- when ArchiveCache has not been written yet, do not add archive dependencies that are already in the chain (was breaking demos)
- fix factories switching their yardmap to fully-blocked when a unit is present inside (so units don't getstuck inside)
- fixed map defined detailtex
- fix LUA Spring.GetTeamResources does not return "received" for one player on each team
Unitsync / Lobby interface:
- engine now loads many start script options from GAME\ModOptions\ section in start script, instead of just GAME\
- added EngineOptions.lua to springcontent.sdz, this contains the default engine options for backward compatibility
- GetModOptions unitsync call parses both EngineOptions.lua and ModOptions.lua, and returns combined list of options
- lots of fixes to CMake and dedicated server (already released)
- minor KAIK stability fixes
-- 0.77b4 --------------------------------------
- fixed a crash (on exit) in colormap.cpp
- fixed another division /0
- fix crashes on "/take"
- fix crash when loading units into transporters
User Interface:
- fix tabulator toggling overview mode
- reduce the maxBreaking-is-zero message spam
- fix far textures showing up as gray rectangles
- the error message "no writable directories found" now has a windows version too
- Fix explosion spheres appearing at wrong position
- fix attackorder for radar dots
- fix attacking gaia units
- fix the collision detection for dgun (and other noExplode) projectiles
- Made gunships (and possibly other units too) point their noses at the midPos of their target instead of the pos, the old behaviour could cause trouble with units where midPos and pos differ much.
- added crashDrag tag (float, default 0.005) to fighter/bomber planes, when the plane is crashing it uses this drag instead of the automatically calculated drag it uses when flying. The calculated drag is no longer used when crashing, even if no crashDrag tag is present in the unit fbi
- fix (AirMoveType) aircraft refueling
- fix gameend detected not propperly
- gameslowdown triggers at higher CPU usage and is limited to half the userspeed
User Interface
- added a simple Orbit-Camera controller
META-key + LMB + drag ==> alter elevation, rotation
META-key + MMB + drag ==> pan up/down/left/right
META-key + RMB + drag ==> zoom
- fix transports not killing their transportees when they should
- update installer shortcuts
- when kicking a player, kick only the player and don't disconnect everyone
- fix invalid command spam
- fix some divisions through 0
- fix crash for all players when someone gives away all his units
-- 0.77b1, 0.77b2 --------------------------------------
User Interface:
- all commands are prefixed with '/' instead of '.' (".cheat" becomes "/cheat", etc.)
- Added /mapmarks [0|1]
- Added /allmapmarks [0|1]
- Added /forcestart command
- Added /ally teamID [0|1] (Ingame alliances)
- Added /commands (shows all registered commands in the console)
- whisper private messages to any other player ingame (excluding spectators) by typing "/w Playername Your secret message"
- Added new camera controller: SmoothCamera
behaves like overview controller, but feels much smoother
- Added possibility to specify files that should be excluded from Spring's
archive checksumming routines ('springignore.txt').
- Added commandline resolution change:
./spring -xresolution 800 -yresolution 600
- Added /unitreplyvolume [0.0-1.0]
- Added /hardwarecursor [0|1]
- Added /minimap drawprojectiles [0|1]
(you can turn off drawing of projectiles on the minimap now)
- Added /grounddecals [0|1]
- Added /movewarnings [0|1]
- Added /globalLOS [0|1] (needs cheats on)
- Added the /luamoduictrl [0|1] command. Enables LuaRules/LuaGaia access
to many LuaUI callins/functions.
- Added ground rendering detail factors:
(GroundLODScaleRefraction unused atm)
- Added TextureLODBias to settings (global mipmapping bias)
- Added CompressTextures to settings (it compress textures on runtime)
- Added UsePBO to settings (enables PixelBufferObject usage for smf texture loading)
- Added CamModeName as an alternate for CamMode
(should still be backwards compatible for settings programs)
- Added SPRING_DATADIR variable on linux
- Added option "AtiHacks" to settings. This fixes an issue with severe
display corruption during building, on ati drivers, where multiple
colored lines criss-cross the screen. It also fixes issues with the
new texture mipmap generation.
- You can now cycle through the last 10 message positions with F3.
Spring Engine:
- multithreaded avi-generator
- new water renderer: bumpwater ("/water 4"), pretty and fast
- the usual speedups and performance improvements
- Font rendering system overhaul
- Functionality of Sensors.tdf and Particles.tdf moved to modrules. removed Sensors.tdf or Particles.tdf
Transfers resources.tdf to resources.lua, and resources_map.tdf to resources_map.lua.
Sidedata.tdf -> sidedata.lua
changed SideData 'commander' tag to 'startUnit'
Replaced 'messages.tdf' with 'messages.lua'
modinfo.tdf --> modinfo.lua
ArchiveCacheV6.txt --> ArchiveCacheV7.lua
- Add 'springcontent.sdz' as the last dependency for all primary mod archives
- Custom collision volumes for Units and Features
- you can ally / unally other teams ingame using the "/ally [teamnumber] [0|1]" command (needs to be activated in lobby)
- Made the groundplate decals follow their parent building's facing.
- Allow modnames (e.g. "OTA Content") in dependX tag (modinfo).
- Removed 50% capture progress after an unit got captured.
- Made units transfer their speed to their wrecks.
- submarines can now travel directly underneath surface vessels and floating obstacles
(and conversely; ships can move across underwater objects), EDIT your mod's MoveInfo
entries so that the classes used by submarine-style units have "subMarine=1;" set if
you want to enable this fully
- Increased weapon limit per unit to 32.
- Added the following new tags to modrules.{lua,tdf}
- repair.energyCostFactor
- capture.energyCostFactor
- resurrect.energyCostFactor
- reclaim.unitEnergyCostFactor
- reclaim.featureEnergyCostFactor
- reclaim.unitMethod
- reclaim.unitEfficiency
- reclaim.allowEnemies
- reclaim.allowAllies
- Allow any key binding to a CMDTYPE_ICON command to use the 'queued' keyword
(except for build and stockpile commands, which already have special handling)
- Keep units in various situations from deciding to attack units they
shouldn't (noChaseCatagory, neutral, under water without water weapons).
Units & Weapons:
- Added canFireControl unitdef tag.
- Fixed the stop-turn-move-stop-turn behavior for ground units (new udef tag, turnInPlace)
- Added maxRepairSpeed tag for builders. Limits the rate a con swarm of any
size can repair a single target.
- Made accuracy, sprayangle and similar tags work for starburst missiles.
The inaccuracy is applied when the missile turns toward its target.
- Added capturable tag.
- Implemented 'y' value for yardmaps which means this square is not blocked.
- Have fighting, patrolling and guarding aircraft and guarding ground units
follow noChaseCatagory.
- Added per-weapon highTrajectory tag (int, default 2). It acts like the unit
tag, 0 is always low trajectory, 1 always high and 2 uses the unit's setting
(whether the unit uses a switch or fixed setting).
- Added impactOnly weapon tag (bool, default false), if set the weapon does damage
by colliding with units instead of causing an explosion (the CEG will still run)
to avoid the shortcomings of small AOEs. It's only implemented for projectile weapons
so far.
- Custom collision volumes:
- collisionVolumeType (either: "ellipsoid","cylT" where 'T' is one of {X, Y, Z}, "box")
- collisionVolumeScales (float3)
- collisionVolumeOffsets (float3)
- collisionVolumeTest (0: per-frame hit detection, 1: raytraced)
- all these tags are the same for Features
- Added shieldRechargeDelay weapon tag (float, default 0). The delay is the number
of seconds the shield won't charge after being hit (kinda like the idle autoheal
for hitpoints)
- Added 'sonarStealth' unitDef tag.
- Added new stockpileTime weapondef tag. It allows seperate reload and stockpile
times for stockpile weapons.
- Allow for square metal extraction areas (use the new extractSquare unitdef tag).
- Added moveState and fixed fireState unitdef tags.
- Added strafeToAttack tag. Moving sideways when in range but not shooting optional
behaviour, the behaviour fails if the unit just takes its time for aiming (or
cannot shoot at all) or has any other reason not to shoot.
- Added avoidNeutral (targetting) and collideNeutral (projectiles) weapon tags.
- Added verticalSpeed (float, default: 3.0) unitDef tag for non-fighter/bomber
planes to define the speed of takeoff and landing (or loading).
- Made missiles obey burnblow=1 (existing tag), the missile will explode in midair
instead of turning away or falling down when its flighttime expires if the tag is set.
- Added the 'customParams' table to both featureDefs and weaponDefs
(accessible via the lua FeatureDefs and WeaponDefs' tables).
- only add ".wav" extension for unitdef sounds if it is missing
- Made MeleeWeapon obey impulseFactor.
- Maps have their own resource_map.lua/resource_map.tdf now.
- converted map config scripts to lua format (LuaParser / MapParser)
- MapOptions.lua is now handed the 'Map' table information as well
(allows one to write a generic MapOptions.lua file that accesses
the SMD/SM3 files to retrieve the defaults)
- the SM3 format is yet to be converted to the lua format
(but its MapInfo information is)
- added SMF height overrides in the SMD file, example:
smf = {
minheight = -100.0f,
maxheight = 200.0f,
(note: these values can be changed by MapOptions)
- new water tags (mostly used by the BumpWater renderer):
- shoreWaves (true)
- forceRendering (false)
- ambientFactor (1.0)
- diffuseFactor (1.0)
- specularFactor (1.0)
- specularPower (20.0)
- diffuseColor float3(1.0, 1.0, 1.0)
- specularColor float3(light.groundSunColor)
- fresnelMin (0.2)
- fresnelMax (0.8)
- fresnelPower (4.0)
- reflectionDistortion (1.0)
- blurBase (2.0)
- blurExponent (1.5)
- perlinStartFreq (8.0)
- perlinLacunarity (3.0)
- perlinAmplitude (0.9)
- foamTexture
- normalTexture
- numTiles
- caustics (texture table)
- Added new COB get constants MIN (131), MAX(132) and ABS(133).
- Added the SONAR_STEALTH (108) COB get/set parameter
LUA changes:
- Added 'teamcolors.lua' to the installers
- Renamed 'gui.lua' to 'luaui.lua'
- Removed LuaCob, and redirected Cob2Lua calls to LuaRules
- removed the following compatibility defines from luaconf.h
(can break compability with old lua scripts):
- Moved most of the LuaUI call-outs into LuaUnsyncedRead
and LuaUnsyncedCtrl. The LuaUnsyncedCtrl call-outs require
that the modUICtrl variable be enabled for gadget scripts
to use them.
- Moved most of the LuaUI call-ins into LuaCallInHandler and
LuaHandle. The moved call-ins require that the modUICtrl
variable be enabled for gadget scripts to receive them.
- Updated included gadgetHandler
- Removed unwanted/confusing widgets.
- fonts.lua can load fonts from the VFS
(and will create LuaUI/Fonts/ if it does not exist)
- Removed the unused CommandDesc 'hotkey' member
- Renamed CommandDescription's 'onlyKey' to 'hidden'
- lua scripts now get first crack at all mouse events
- Treat SDD file sizes as dynamic, so that lua scripts can
be reloaded while dev'ing without having file size mismatches
(LuaRules, LuaGaia, mod widgets, etc...)
- Added some new constants to the lua Game{} table.
- Added the dynamic HeightMapTexture
- can be accessed by lua scripts using '$heightmap'
- can be disable by clients with 'HeightMapTex=0' (config parameter)
- Added multiple new callins:
- UnitEnteredWater(unitID, unitDefID, unitTeam)
- UnitEnteredAir(unitID, unitDefID, unitTeam)
- UnitLeftWater(unitID, unitDefID, unitTeam)
- UnitLeftAir(unitID, unitDefID, unitTeam)
- PlayerChanged(playerID) (player changed team or spectating state)
- TeamChanged(teamID) (team changed allyteam, not useful yet)
- UnitCommand(unitID, unitDefID, unitTeam, cmdID, cmdOpts, cmdParams) (note that cmdOpts is a number)
- UnitMoveFailed()
- MoveCtrlNotify(unitID, unitDefID, unitTeam, data)
- currently called with data = 1 if the unit hits the ground and stops
- return true to disable the unit's MoveCtrl
- ProjectileCreated(projectileID, projectileOwnerID) (arg #2 is -1 if no owner)
- ProjectileDestroyed(projectileID)
- GamePreload() (Called at the end of the loading process)
- GameStart() (Called when the game is about to start)
- TerraformComplete(UnitID, UnitDefID, UnitTeam, BuildUnitID, BuildUnitDefID, BuildUnitTeam)
(it gets called after the terraforming for a construction is complete (once
per terraforming builder), the return value is whether the con should stop
- DrawGenesis()
- called immediately following Update()
- called even when the game window is minimized
- modelview and projection matrices are identities
- can be used to update GPU-side physics simulation
textures and custom per-unit textures
- a real ViewResize() call-in
- Added the unicode values to the lua KeyPress() and KeyRelease() call-ins
- Replaced Spring.GetMouseMiniMapState() with:
Spring.GetMiniMapGeometry() ->
posX, posY, sizeX, sizeY, minimized, maximized, <false | "left" | "right">
- Changed the GetUnitNearestEnemy() lua call-out to:
GetUnitNearestEnemy(number unitID[, number range[, boolean useLos=true]])
- Added geometry shader support to LuaOpenGL
- Added Spring.ValidUnitID(number id) -> boolean
- Added Spring.ValidFeatureID(number id) -> boolean
- Added Spring.GetUnitIsDead()
- Added Spring.GetModUICtrl()
- Added Spring.GetViewGeometry() -> sizeX, sizeY, posX, posY
- Added Spring.GetWindowGeometry() -> sizeX, sizeY, posX, posY
- Added Spring.GetScreenGeometry() -> sizeX, sizeY, posX, posY
- Added Spring.IsAboveMiniMap(x, y) -> boolean
- Added Spring.GetUnitLastAttacker()
- Added Spring.GetUnitFuel()
- Added Spring.SetUnitFuel()
- Added Spring.GetUnitSensorRadius(unitID, <type>)
- Added Spring.SetUnitSensorRadius(unitID, <type>, radius)
- new projectile call-outs:
Spring.GetProjectilePosition(projectileID) -> px, py, pz
Spring.GetProjectileVelocity(projectileID) -> vx, vy, vz
Spring.SetProjectilePosition(projectileID, px, py, pz) -> nil
Spring.SetProjectileVelocity(projectileID, vx, vy, vz) -> nil
Spring.SetProjectileDetonate(projectileID) -> nil
- added the GL evaluator functions to the lua GL interface
(note the gl.EvalEnable() and gl.EvalDisable() can only be
called in a gl.Eval(func) block).
- Added Spring.SetUnitCollisionVolumeData(id, xs, ys, zs, xo, yo, zo, vtype, ptype, paxis)
and Spring.SetFeatureCollisionVolumeData() (same args)
- Added Spring.SetLastMessagePosition(x,y,z)
- Added Spring.SetUnitLosMask(unitID, allyTeamID, number | table) -> nil
and Spring.SetUnitLosState(unitID, allyTeamID, number | table) -> nil
- Added Spring.FixedAllies()
- Reverted the GetPositionLosState() to its original configuration (no air los)
- Added Spring.IsPosInLos()
- Added Spring.IsPosInRadar()
- Added Spring.IsPosInAirLos()
- Added Spring.PauseSoundStream(), Spring.GetSoundStreamTime(),
- Added burst, burstRate and projectiles to Spring.SetUnitWeaponState
- Added Spring.AddUnitIcon(string name, string texture
[, number size[, number distance[, bool radiusAdjust]]])
Spring.FreeUnitIcon(string name)
- Added Spring.SetUnitSonarStealth()
- Added Spring.SpawnCEG(tag, px, py, pz, dx, dy, dz, rad, dmg) synced callout
- Added Spring.SetHeightMapFunc(lua_func,arg1,arg2,..),
Spring.AddHeightMap(x, y, h) -> `final height`
Spring.SetHeightMap(x, y, h [,t]) -> `absolute value changed`
- Added Spring.ExtractModArchiveFile(path) callout
For example, Spring.ExtractModArchiveFile("sounds/boom.wav")
will create a directory "sounds/" and extract "boom.wav" to it.
- Added Spring.GetUnitPiecePosDir(unitID, piece) -> posx,posy,posz, dirx,diry,dirz
- Added Spring.GetUnitVectors(unitID) -> {front_x,front_y,front_z},{up_x,up_y,up_z},{right_x,right_y,right_z}
- Added Spring.GetUnitWeaponVectors(unitID,weaponNum) -> wpos_x,wpos_y,wpos_z, wdir_x,wdir_y,wdir_z
- Added gl.ActiveShader(shaderID, function(), ...) (safe way to set shader uniforms in non-drawing code)
- Added gl.DepthClamp(bool) (not always available)
- Added gl.UnsafeState(number, [bool reverse, ] function, ...)
(glEnable() / glDisable() for unknown states; considered 'unsafe')
- Added Occlusion Queries:
- Added gl.CreateQuery() -> query
- Added gl.DeleteQuery(query)
- Added gl.RunQuery(query, function, ...)
- Added gl.GetQuery(query) -> number
- Added the following unsynced query call-outs:
- Spring.GetUnitLuaDraw()
- Spring.GetUnitNoDraw()
- Spring.GetUnitNoMinimap()
- Spring.GetUnitNoSelect()
- Added the fbo 'readbuffer' parameter
- Added gl.ReadPixels(x, y, w, h [,format])
- Added StencilTests:
NOTES: The engine expects that the stencil buffer be left in a
state of all 0's when a task has finished with it. This
is not enforced by the lua backend.
- Added gl.StencilTest(bool)
- Added gl.StencilMask(bits)
- Added gl.StencilFunc(func, ref, mask)
- Added gl.StencilOp(fail, zfail, zpass)
- Added gl.StencilMaskSeparate()
- Added gl.StencilFuncSeparate()
- Added gl.StencilOpSeparate()
- Added gl.BlendEquation()
- Added gl.BlendEquationSeparate()
- Added gl.BlendFunc() -- redundant
- Added gl.BlendFuncSeparate()
- Added gl.Blending() convenience names:
name blend_src blend_dst enabled
"add" ONE ONE true
"add_alpha" SRC_ALPHA ONE true
"modulate" DST_COLOR ZERO true
- Added Picking support:
- Added gl.Texture($shading) & gl.Texture($grass)
- Allowed to use gl.CopyToTexture with non GL_TEXTURE2D, i.e. GL_TEXTURE_RECTANGLE
- Modified Spring.GetVisibleUnits() so that the team specifier can
- 'facing' parameters can now use long strings: 'north', 'south', 'east', 'west'
- Spring.UnitCreated() call-out now accepts unitDef names and unitDef IDs
- Spring.SendCommands() can use a bunch of string arguments as well as the old
table format. e.g Spring.SendCommands('echo aoeu', 'info 2', 'specteam 0')
- Fixed Spring.UnitRendering interface to make it possible to emulate the default 3do/s3o shaders
- fixed $shadows texture params (you can now use shadow2DProj() in glsl)
- fixed wrong (!=0) check if uniform locations are set (they begin with 0!)
- added new uniforms: cameraposloc,shadowloc,shadowparamsloc
- added new culling tag, so you can enable s3o backface culling w/o using a displaylist
- auto enable alphatest (+blending in case of cloaked stuff) for luaUnitMaterials
(alphatest: 0.5 for opaque and 0.1 for cloaked stuff)
- Fixed missing return;'s in gl.LoadMatrix() and gl.MulMatrix()
- Fixed WarpMouse() for dual mode (minimap on the left).
- Fixed the 'frame' table value returned by Spring.GetTeamStatsHistory()
(and added the 'time' value, which is in seconds).
- Fixed full-view spectators get all LuaUI RecvLuaMsg() messages now.
- Fixed Spring.SetFeaturePosition().
- Fixed Spring.SetFeatureDirection().
- If Spring.SetDrawSky(false) is set, do not draw the sun.
- Fixed s3o recognition in LuaUnitDefs
- Added new ai value AIVAL_SCRIPT returning start script text.
- Removed ABIC AI stuff that no-one is using.
- Added AIHCGetUnitDefById, AIHCGetWeaponDefById, AIHCGetFeatureDefById
- Added LuaParser API to unitsync.
- Added OpenArchiveType(name, type) to unitsync
(type can be "zip", "7z", "dir", or "hpi").
- Added 'const char* GetSideStartUnit(int side)' to unitsync.
- Added InitDirListVFS(path, pattern, modes) and
InitSubDirsVFS(path, pattern, modes)
- Mod/Map Options : 'section' option type added
- Mod/Map Options : 'style' option added, syntax not defined yet
- Fixed Aircraft units that can't land not stopping when reaching the final waypoint.
- Fixed display of times in the EndGameBox (For example 9:07 displayed as 9: 7)
- Fixed the grey flashing that sometimes happened when making new buildings
- Prevent decay when the builder or factory is waiting (executing a wait command).
- Fixed positions occupied by units with a maxspeed of zero (hubs, etc) being considered
valid build-sites.
- Fixed division by zero if two units are in the exact same spot and collide.
- Fixed negative pings
- Fix a dangling pointer when using ground decals. Could have caused desyncs
and LuaUI bugs.
- Fixed possible out of bounds map reads that could cause crashes
- Fixed /cheat and /skip not working in demo-playback mode
- Fixed /noSpectatorChat
- Fixed /fpshud polarity
- Randomize unitIDs
- Fixed dds mipmapping filter (was GL_NEAREST_MIPMAP_LINEAR).
- Fixed dynamic water with geforce 8x00
- Fixed it so that units using ScriptMoveType can not be pushed
- Fixed an infinite recursion in the LuaUI layout handler
- Fixed the Lua SendToUnsynced() stack check bug
- Fixed ScriptMoveType vs. unit pushing
- Fixed "cloaked units were invisble underwater" with DynWater
- Blocked team changes for dead units
- Fixed beamlaser damage vs shields
- Fixed smoke textures loading from resource.tdf (resources/graphics/smoke/smoke00 .. smoke11).
- Fixed clipping issue with units begin built.
- Don't show two statistic windows after demo watching.
- Always create/update the perlin texture used by shields and not only if shadows are enabled.
- Fixed ctrl+c, it searches now for the iscommander tag instead for the commander category.
- Fixed a wrong rotation in ApplyTransform() (which is used by lua's gl.UnitPieceMultMatrix).
- Fixed black lines on CEGs when AntiAliasing is enabled.
-- 0.76b1 --------------------------------------
- Add new installer SideBanner, Spring icon and ArchiveMover icon all
contributed by AF.
- Put springcontent.sdz and bitmaps.sdz in upgrading installer.
- Installer greatly improved - all content is downloaded from the internet based
on which mods and maps you choose to install.
- No more updating installer because updating and full one would be nearly
identical (in size and functionality).
- Added the following original content mods to the installer (downloads):
-Kernel Panic
-Spring: 1944
- Added springsettings.exe by koshi.
- Added ArchiveMover by zizu. Automatically moves .sdz and .sd7 files to the
correct place (Spring folder\maps\ or Spring folder\mods\)
- Moved to Satirik's lobby, huge amount of changes.
- Moved shaders into springcontent.sdz
- Replacement Bark, bleaf and foam images.
Spring engine varying changes:
- A lot of networking code was refactored.
- Reintroduced heightMod to TryTarget.
- New aircraft command CMD_IDLEMODE, it switches between landing when idle
and not landing.
- Cache input and output of GetWantedDir to save a lot of expensive calculations
for a little loss of accuracy.
- Tiny speedups in LosAdd and SafeLosAdd.
- Optimized unnecessary sqrt in GuiTraceRay.
- Made the replay format better:
- It has a proper header now with version field instead of the entire file
being just a data blob.
- The header has made the gameSetup script.txt modifications redundant: the
UnixTime and Spring Version are in the header, and the gameSetup script is
stored unmodified now.
- It stores a game ID, this can be used to match replays of the same game together.
- It stores the winning ally team, if any.
- It stores player stats.
- It stores team stats.
- It stores game duration, both in game time and wallclock time.
- Small messages are once again send together in one packet.
- Stop animations when network lags (timeout set to 0.5 sec).
- Added some OGGVorbis sound support.
- Added behavior to mobile units so that they will start chasing when the target
is running away, but before the target exits weapons range, allowing the unit
to fire continuously at the retreating unit, instead of the cycles of firing,
then running to catch up that existed prevously.
- Added client side network traffic tallying (per packet type).
- Lasers no longer use their full texture on shots that hit before their full length.
- Negative damage now allowed.
- Log the version of some of the major libraries (SDL, GL, GLEW, AL)
- Bump the unit-limit to 10000.
Lobby interface (unitsync, game setup):
- Added new start positions mode Choose Before Game. Useful for AIs, you can
select the starting position of players from the client.
- Gap removal in GameSetup, players/teams/allyteams can now be given\
with gaps in the numbering, e.g. PLAYER10 and PLAYER14 in an 1 vs 1.
Ordering does still matter.
- Unitsync Java bindings now have a version number.
- Checksum is now read from 7z/zip archive header instead of checksumming entire
file, making things like map list reloading faster by a huge amount.
- Added GetPrimaryModVersion() to unitsync.
- Bumped to ArchiveCache version to 6 ... ArchiveCacheV6.txt
- Applied patch by tc making Spring's configuration variables available through
- Disabled recursive directory scanning for .sdd and omitted files within
.../hidden/* directories from the scan.
- Added the following unitsync calls:
int GetModValidMapCount()
const char* GetModValidMapCount(int index)
- Valid maps are listed in the mod's "ValidMaps.lua" file.
- A valid map count of 0 means that any map can be used with the mod.
- This can be used in concert with LuaRules to setup multi-player scenarios
and tutorials.
AI interface:
- Exposed unit->maxSpeed to the AI interface.
- Added CallLuaRules() to CAICallback.
- Added 'AIDLL=LuaAI:' -> CTeam::luaAI handling for LuaAI.
- Added AI unloading after team is destroyed.
- Allow GlobalAIs to send a startposition.
User Interface:
- Added the CTRL modifier to area reclaims to allow reclaiming your own wrecks
- Removed some hard-coded key bindings and replaced them with:
- Added some reasonable default keybindings for all/ally/spec chat messaging:
enter -> send to <last send type>
Ctrl+enter -> send to All
Alt+enter -> send to Allies
Shift+enter -> send to Spectators
(Note that the modifier versions can be used to change the send mode ever
while typing the message.)
- Added the CTRL modifier to area reclaims for reclaiming all features.
- /specfullview 3 is the new default for spectating and watching demos.
(can view and select all units)
- Added the ctrlpanel.txt "frontByEnds" option. (let's you use the endpoints to
define a front instead of the midpoint and one of the ends.)
- When a factory is set on repeat, alt+build-click inserts the order as a
no-repeat and right after the currently built unit. Behavior is unchanged
if repeat is off.
- Added water lines while placing unit builds.
- Moved the clock and fps indicators to the upper right hand corner.
(the default setup results in overlaps with the player info text.)
- Modified the LOS view to better show the los-only and radar-only conditions
dark = no los, no radar
white = los + radar
blue = los-only
green = radar-only
red = jammed area
- Disabled shadow generation when using LOS viewmode. (would be better to add
shadows in LOS mode, but might as well avoid the shadow generation overhead
until the shadows are added.)
- Make Fight be able to be given a line command, like move already can be.
- Only add the SelectAI button if the current selection has valid GroupAIs.
- Change default keybinding for createvideo to Ctrl+Shift+F10 (was Any+F10),
so it is less easy to accidentally hit it.
- Change savegame default keybinding from Any+F8 to Ctrl+Shift+F8,
for the same reason as the createvideo keybind change.
- Improved view centering for the Free Camera mode.
- Made nano-particles unsynced. (and respect maxParticles)
- Added '/cross [size]'.
- Added .godmode [0|1] -- allows all players (even specs) to control all units.
- Added a team parameter to .give: .give [amount] <unitName> [team] @x,y,z
- .kick and .kickbynum messages are filtered.
- Changed '/grabinput' to '/grabinput [0|1]', and added state reporting.
- Added the "/grounddecals [0|1]" command.
Modinfo / modrules tags:
- Allow for the modder to define whether the crashing planes (and/or units
running long Killed() scripts) can be fired on via modrules.tdf new section:
The defaults are to disallow both (Spring 0.75 behaviour, both variables set
to 0). Spring 0.74 behaviour (allow both) can be emulated by setting both
variables to 1.
- Added modinfo.tdf 'version', 'mutator', and 'shortName' tags.
- Added the following to modrules.tdf (default values shown):
- Adds [experience] { experienceMult = 1.0; } to modrules.
- Adds [flankingBonus] { defaultMode = 1; } to modrules.
- Replaces the old bonus shield system with flanking bonus
Unit / feature definition tags:
- The TDF tags MetalStorage and EnergyStorage now override the StartMetal and
StartEnergy specified in the startscript, instead of the other way round. If
MetalStorage or EnergyStorage isn't specified the default values for commander
units are StartMetal and StartEnergy. For other units the default remains 0.
- Moved the buildOptions definitions into the unitDef definitions, LuaParser
handles backwards compatibility.
- Changed init_cloaked to initcloaked.
- Add a tag 'pushResistant' to UnitDef. If set to true, a unit will not be
pushed out of the way by another when their footprints overlap, nor will
it respond to BuggerOff directives when the other party has an important
move order. Defaults to false.
- Added a per-soundfile volume control format for unitdefs
sounds = {
ok = 'oksound',
cancel = {
select = {
{ file = 'selsound1', volume = 2.0 },
{ file = 'selsound2', volume = 2.5 },
- Features have new tag "reclaimTime" defining how long they take to reclaim,
default is metal+energy.
- Added tags:
transportUnloadMethod = <integer>; // 0 - land unload, 1 - flyover drop, 2 - land flood
fallSpeed = <float>
unitFallSpeed = <float>
These dictate the speed of units being dropped from the transport.
fallSpeed is used on the transports FBI file, to dictate the speed of all
units it drops, unitFallSpeed is used on each transported unit to override
- Added flighttime functionality to cannons.
- Added flighttime to bombdroppers.
- Added FBI tag cantBeTransported=0|1, if set to 1 no transport can load this unit.
- Added FBI tag minTransportSize=int, determines the smallest size footprint
that the transport can load
- Added FBI tag minTransportMass=float, determines the smallest mass unit that
the transport can load.
- Removed the check for Air movetype for holdSteady FBI tag, so now ground
transports can use it too.
- New FBI tag for transports; float unloadSpread: Controls the spacing between
units in an area unload command, works as a multiple, default is 1.
- Added the 'decloakSpherical' unitDef tag (defaults to true).
- Added optional 3D ranging for all builder operations.
(build, repair, reclaim, etc...) (per-unitdef buildRange3D=true)
- New unitDef parameters:
int flankingBonusMode
float flankingBonusMax
float flankingBonusMin
float flankingBonusMobilityAdd
float3 flankingBonusDir
- Added the "canSelfDestruct = true" unitDef tag.
- Enable CEGs to be tied to pieces of exploding units
(CEG replaces the default smoke if used, but not the miniscule fire-effect)
- Added CEG opcodes y, x, a, p and q. Except for p those operate on a set of 16
buffers that store a float value each.
y# - Yank: Stores the running value in the buffer # and returns 0.
x# - Multiply: Multiplies the value with the contents of buffer #.
a# - Add: Adds the contents of buffer #.
p# - Pow: Returns the #th power of the value.
q# - Buffer Pow: Like Pow but uses the contents of buffer # as the exponent.
- Add a tag "factoryHeadingTakeoff" (on request of the SWS folks to prevent some
clipping issues) which controls the takeoff behavior of TAAirMoveType aircraft.
True (default) means planes start matching their factory's heading right after
taking off from the pad, false means they maintain the heading of the pad
until reaching wantedHeight.
- Added [CONSTRUCTION] section to Modruless.tdf:
constructionDecay (bool, default true): Should constructions decay if noone is working on them?
constructionDecayTime (float, default 6.66): How long until the decay starts?
constructionDecaySpeed (float, default 0.03): The speed of the decay,
whereby buildTime*decaySpeed = time for a total decay so higher = slower decay
- Added unit FBI collide tag (boolean, default: 1), currently affects only planes:
If set to 0 the plane will not collide with any other unit. Most notably this
saves the CPU-heavy collision checks every frame (big performance boost!) and
avoids the damage planes normally take from bumping into each other.
Projectiles will still collide with the units normally.
Weapon definition tags:
- Added heightBoostFactor - a float tag that gives control of cannon height
range boost (more than 1 means increased range, 0 means the cannon has fixed
range regardless of height difference to target. default is a magic value
calculated on weapon init, based on range tag and theoretical max range.)
- Added heightMod tag (height difference is multiplied by this value before
checking range), default 0.8 for Cannon weapon type, 0.2 for everything else
(i.e. stays as it was). Beamlasers have heightmod=1 by default so they use
pure spherical targeting.
- Added GroundBounce, WaterBounce, NumBounce, BounceSlip, BounceRebound, and
bounceExplosionGenerator tags.
- New tags beamttl (default: 0) and beamdecay (default: 1) for the beamlaser.
Beamttl defines the time (in frames) the beam will stay after being fired and
beamdecay defines the speed of the fadeout (each frame the beam's intensity is
multiplied with that value). This applies to the single-frame beams the weapon
emits, if it has a beamtime it will emit one such beam every frame, which is
only useful if the source of the beam moves a lot (gives a cool trail effect).
It's primarily intended for beams with a beamtime of one frame (which often
simulate very fast shots instead of constant streams, e.g. railguns) so they
don't disappear immediately.
- Added fixedLauncher tag (bool) for missiles, starburst missiles and torpedoes,
this makes the projectile spawn with the orientation of the shooting piece
instead of their normal orientation. The weapon will not properly check if
allies are in the way so make sure you align the launchers in a way that
won't hammer right into your own forces and perhaps use collideFriendly=0.
FixedLauncher conflicts with trajectoryHeight and IMO combining them is
pointless anyway so don't use both on a weapon.
- Added projectiles tag (int), each time a weapon fires this many projectiles
are spawned (on the same frame). Make sure you put them on different
trajectories somehow (sprayangle or different firepoints) because otherwise
they'll all be clumped in one shot. Can be set to 0 as well for script trigger
weapons and can be combined with burst.
- Missiles and starburst missiles now obey smoketrail, set it to 0 to disable
the smoke. To get a missile without smoketrail you have to define the weapon
as a missile with WeaponType=MissileLauncher in the tdf.
- Missiles, starburst missiles and torpedoes now use flighttime if present
instead of the hardcoded formula (which is still used if flighttime is not
- Added SubMissile tag (bool) for TorpedoLaunchers, if set to 1 the torpedo will
travel like a missile outside of water. It will not emit a smoketrail, though.
When fired from a plane it will behave the same way but the plane will
probably be considered a fighter, not a bomber.
- Added fireSubmersed tag (bool), defaults to the value of waterweapon. If set
the weapon can fire underwater, if not then not. Use it for weapons that
cannot fire underwater but can hit underwater targets. Works even for
- Starburst missiles now obey turnrate for the turn at the peak of their flight
(if supplied, otherwise the old value is used).
- All weapons (save for the Rifle which noone uses anyway) can now attack
underwater targets if they have waterweapon=1 set.
- Bombs can use manually defined burst and burstrate values instead of
autogenerated ones by using the new manualBombSettings tag (bool). Keep in
mind that (roughly) burst*burstrate defines the area in which the bomber is
willing to drop the bomb so if you make it too small the bomber might miss
the drop area and not drop any bomb.
- Added myGravity tag (float) for ballistic weapons (Cannon and Bomb), it
overrides the map gravity if used. Regular map gravity is around 0.2.
- Bombs now obey Accuracy and SprayAngle.
- Added ShieldStartingPower tag (float) for shields, if set the shield starts
with this much power instead of 0.
- Renamed flareEfficency -> flareEfficiency.
- Added the weaponDef 'cameraShake' tag.
- Added the dance tag for missilelaunchers that makes the missile move around
randomly. Unlike wobble it doesn't rotate the missile and it prevents the
missile from going too far off course so a dancing swarm will remain coherent.
- Beamlasers ignore beamtime if new tag "beamburst" is set. (for emulating
weapons that do damage in bursts)
- New weapon FBI tags:
WaterBounce and GroundBounce: (default: false)
Boolean to allow a projectile to bounce off of a surface.
BounceSlip: (default: 1)
Amount of lateral speed kept by the projectile after it bounces.
BounceRebound: (default: 1)
Amount of vertical speed keeps and reverses.
NumBounce: (default: -1)
The number of bounces a weapon will make. -1 indicates no limit.
- Added the ability to bounce for Torpedos, Missiles, Lasers, Cannons, and Emgs.
- Added bounceExplosionGenerator tag, which defines an explosion generator to
run when a projectile bounces.
- Added the tag "hardStop" (bool, default 0) which, if used, makes the laser not
fade if it doesn't hit before hitting its range limit and instead has the
laser stop immediately and contract, as if it had hit something. This looks
better with really long lasers, especially those that are longer than their range.
- Weapon projectiles can now spawn a CEG at their position every frame using
the cegTag weapon tag.
- ProximityPriority tag - acts as a multiplier for the distance to the target
in the priority calculation. Note that negative values make weapons prefer
distant targets.
- Adds three opcodes to the CEG definitions:
- m (modulo or sawtooth wave) returns the remainder of the running value
divided by m's parameter (100 m24 returns 4),
- s (sine) returns the sine of the running value with the parameter acting as
the amplitude,
- k (discrete) returns the running value floored to an integral multiple of
the parameter.
- All weapon projectiles that have a TTL now supply their remaining ttl-value as
the damage param to their trail CEG (Flame projectiles use curTime instead).
- Added alwaysVisible weapon tag, makes the projectile visible, even without LOS.
- Added the weapon tag leadLimit that limits the maximum distance a unit will
lead a target (default is -1 which means infinite).
- Added the weapon tag leadbonus which is multiplied with the unit's experience
and added to the lead limit.
- Added the weapon tag predictBoost (default 0 for non-burnblow, 0.5 for
burnblow weapons).