/
changelog.txt
6532 lines (5834 loc) · 330 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Spring changelog
(since 85.0: "!" prefix indicate backward compatibility broke)
(numbers in brackets normally mean the mantis ticket ID)
-- 104.0 --------------------------------------------------------
Major:
- Add LuaMenu - an unsynced stripped down Lua environment that starts before the game is loaded and persists through reload
this environment receives the Draw{Genesis,Screen,ScreenPost} callins as well as
a special AllowDraw FPS limiter which enables these if true is returned from it
(otherwise they are called once every 30 seconds)
! make GL3.0 the minimum required OpenGL version; Intel G45's and other relics are now banned
(any driver that claims support for this *and* shaders is allowed to run Spring unimpeded)
- improve memory management so Spring.Reload can be safely called multiple times in a row
- kill various desyncs that slipped into 103.0
Misc:
- Assorted bugfixes and optimisations
- Implement VFS modes - VFS.MOD, VFS.MAP & VFS.BASE now actually work. Added VFS.MENU
! base archives now have modtype of 4 and menu archive have modtype of 5
! one letter command-line flags (e.g. -g instead of --game) are removed
- generally more detailed error-logging
- continued internal cleanup and C++11 adoption to reduce unnecessary data copying and allocing
- don't load-then-immediately-free the LuaGaia handler if neither (synced or unsynced) entrypoint exists
- don't record non-essential profile data in the background if not in /debug mode; reset profiler on reload
- replace dozens of STL containers with faster custom alternatives
- use pooled memory allocations in several engine components
- recycle audio-stream buffer memory
- recycle demo-streams across reloads
- write demos before destroying game on shutdown in case the latter CTD's
- do not spawn VFS initialization threads if WorkerThreadCount=0
- rebase ThreadPool on a lock-free taskqueue; make IO-bound work unable to block execution of other tasks
- reduce ThreadPool worker-count right after VFS initialization
- take screenshots via ThreadPool
- use pcall in LuaUtils::Echo
- catch all exceptions in Game::Load and make it non-interruptable
- turn LoadDefs content_error exceptions into clean exits
- set modType to an integer (not string) value in base-content modinfo.lua's
- do not auto-add springcontent dependency to non-game "mod" archives
- downgrade non-writeable springsettings files to a warning
- allow maps to not supply a type-map; one fewer exception to worry about
- improve RNG statistical quality; sampled ints can now also exceed 0x7fff
- make the *nix CrashHandler compile on ARM; do not use cpuid on non-x86 builds
- enable compilation without streflop
- change ForceShaders to ForceDisableShaders (which does the opposite)
- add UseLuaMemPools config-option
- add ForceCoreContext config-option
- add ForceSwapBuffers config-option
- add ForceDisableClipCtrl config-option
- add NETMSG_LOGMSG for synced logging
- netlog Lua memory allocation failures
- netlog SHA512 digests over cached path-estimator data
- log 'Warning: Dropping packet from unknown IP' only once per IP
- filter out consecutive duplicated log-messages; add LogRepeatLimit config-option
- fix inverted los-test logic in AI GetProperty callback (patch by rlcevg)
- fix memleak in generated C++ AI interface (patch by rlcevg)
- fix ResourceHandler memleak (patch by rlcevg)
- save SkirmishAI data in separate streams (patch by rlcevg)
- wrecks in water emit bubbles instead of smoke (patch by Sprunk)
- store path-estimator cache files as map.pe-hash.zip; forces a refresh
- delete cached path-estimator data which can not be opened or read successfully
- integrate custom selection volumes; also support subtable-based {col,sel}volume definitions
- refactor the object death-dependency system
- trim unused AssParser root-piece transform overrides;
'rotAxisSigns' and 'rotAxisMap' from 95.0 are also gone
- rip out DynamicSun
much more convincing day / night cycles can be completely and more cleanly
(re-)implemented in Lua with Spring.SetSunLighting, Spring.SetSunDirection,
and Spring.SetAtmosphere
Sim:
! Sonar will now detect ships/hovers - this is since los can't raycast through water.
note that wobble still exists without LoS.
- add 'collideFireBase' weapondef flag
- allow manually sharing nano-frames (patch by Sprunk)
- share unfinished buildees if factory changes team (patch by Sprunk)
- prevent building from dead factories (patch by CommanderSpice)
- restore randomized circling behavior for air-constructors (patch by CommanderSpice)
- UnitExperience is called based on regular exp difference, not limExp (patch by Sprunk)
- set defBaseRadarErrorMult back to 2 instead of 20 (patch by Sprunk)
- expand CEG underground-test lenience from 1 to 20 elmos (patch by Sprunk)
- allow but do not enable staggered LOS updates
- do not hard-assign floatOnWater=true for hovers and ships
checks for this property now first query a unit's MoveDef
(if any) so that ship->tank and similar substitutions via
MoveCtrl.SetMoveDef behave as expected
- make Spring.CreateUnit smarter (patch by Sprunk)
if a builderID parameter is passed to Spring.CreateUnit, the new unit
will consider that its solo-builder if it has canBeAssisted=false set
- EMGCannon now obeys flightTime override (patch by Sprunk)
- allow setting runtime/initial firestate to 3 [FIREATNEUTRAL] from COB and unitdefs (patch by Sprunk)
- change a weapon reaiming-tolerance constant from 20 radians to 20 degrees (patch by Sprunk)
- experiment with larger medium-resolution PFS blocksize (16*SQUARE_SIZE vs 8*SQUARE_SIZE)
- bump the default unloadSpread multiplier from 1 to 5
Lua:
! Undeprecate {unit,feature}def.modelname and add .modeltype and .modelpath to
allow reading these without loading the model. Removed def.model.{name,type,path}
so they aren't used accidentally.
! The callins GameStart and GamePreload won't be called when a saved game is loaded
- Add VFS.AbortDownload(id) - returns whether the download was found&removed from the queue
- Add Spring.Get{Game,Menu}Name to LuaUnsyncedRead, so LuaMenu and unsynced Lua handles know about each other
- Add new callins (LuaMenu only):
ActivateMenu() that is called whenever LuaMenu is on with no game loaded.
ActivateGame() that is called whenever LuaMenu is on with a game loaded.
AllowDraw() if it returns false, the next draw call is skipped (only active when a game isn't running)
- Add Spring.{Set,Get}VideoCapturingMode() - this doesn't actually record the game in any way,
it just regulates the framerate and interpolations.
- add Engine and Platform global tables currently containing the following keys:
Engine.version: string
Engine.versionFull: string
Engine.versionPatchSet: string
Engine.buildFlags: string
Engine.wordSize: number
Platform.gpu: string, full GPU device name
Platform.gpuVendor: string, one of "Nvidia", "Intel", "ATI", "Mesa", "Unknown"
Platform.gpuMemorySize: number, size of total GPU memory in MBs; only available for "Nvidia", (rest are 0)
Platform.glVersionShort: string, major.minor.buildNumber
Platform.glslVersionShort: string, major.minor
Platform.glVersion: string, full version
Platform.glVendor: string
Platform.glRenderer: string
Platform.glslVersion: string, full version
Platform.glewVersion: string
Platform.sdlVersionCompiledMajor: number
Platform.sdlVersionCompiledMinor: number
Platform.sdlVersionCompiledPatch: number
Platform.sdlVersionLinkedMajor: number
Platform.sdlVersionLinkedMinor: number
Platform.sdlVersionLinkedPatch: number
Platform.glSupportNonPowerOfTwoTex: boolean
Platform.glSupportTextureQueryLOD: boolean
Platform.glSupport24bitDepthBuffer: boolean
Platform.glSupportRestartPrimitive: boolean
Platform.glSupportClipSpaceControl: boolean
Platform.glSupportFragDepthLayout: boolean
Platform.osName: string, full name of the OS
Platform.osFamily: string, one of "Windows", "Linux", "MacOSX", "FreeBSD", "Unknown"
! Game.{version,versionFull,versionPatchSet,buildFlags} now reside in the Engine table
Engine.wordSize indicates the build type and is either 32 or 64 (or 0 in synced code)
- Spring.SetWaterParams() can now be used without /cheat for modifying unsynced values.
- Implemented gl.GetWaterRendering() to expose access to water rendering variables.
! Removed water rendering parameters from LuaConstGame, as they're no longer const.
- Added Spring.SetMapRenderingParams() for modifying splatTexMults, splatTexScales, voidWater and voidGround.
- Implemented gl.GetMapRendering() to expose access to the map rendering variables.
! Removed voidWater and voidGround constant parameters from LuaConstGame, as they're no longer const.
- add Spring.{Set,Get}{Unit,Feature}SelectionVolumeData callouts
! remove Spring.SetSunParameters and Spring.SetSunManualControl
! remove gl.Smoothing
- add gl.SwapBuffers callout for LuaMenu
- add Game.envDamageTypes table containing {def}IDs of environmental-damage sources (patch by Sprunk)
- add Spring.{Get,Set}ConfigFloat callouts
- add Spring.{Set,Get}{Unit,Feature}SelectionVolumeData callouts
- add Spring.SpawnExplosion callout
- add Spring.SpawnSFX callout
equal to the *UnitScript versions of EmitSFX, but
takes position and direction arguments (in either
unit- or piece-space) instead of a piece index
- add DrawScreenPost callin (patch by ivand/lhog)
Similar to DrawScreenEffects, this can be used to alter the contents of a
frame after it has been completely rendered (i.e. World, MiniMap, Menu, UI).
- add DrawWorldPreParticles callin
- add start- and hit-position (x,y,z) arguments to ShieldPreDamaged callin
- math.random is now available during execution of defs.lua
(math.randomseed also exists, but will always be a no-op)
- allow gl.BlitFBO blitting from/to the default FB with userdata FBO's
- bump gl.UniformArray length restriction from 32 to 1024
- add Spring.SetFeatureResources(number metal, number energy [, number reclaimTime [, number reclaimLeft]])
- add Spring.SetUnitPieceMatrix(number unitID, number pieceNum, table matrix)
sets the local (i.e. parent-relative) matrix of the given piece if any of the
first three elements are non-zero, and also blocks all script animations from
modifying it until {0, 0, 0} is passed
(matrix should be an array of 16 floats, but is not otherwise sanity-checked)
- add LUS ChangeHeading callin
- add LUS {Start,Stop}Skidding callins; called when a (ground) unit reacts to an impulse
make the start-skidding threshold ('sqSkidSpeedMult') configurable via MoveCtrl.SetGroundMoveTypeData
- make MoveCtrl.Set*MoveTypeData recognize the 'waterline' key (patch by SanguinarioJoe)
- make Spring.ClearUnitGoal cancel raw movement by default
! reorder AllowStartPosition callin parameters and add teamID
old: clampedX, clampedY, clampedZ, playerID, readyState, rawX, rawY, rawZ
new: playerID, teamID, readyState, clampedX, clampedY, clampedZ, rawX, rawY, rawZ
- expose weapon salvo vars to {Get,Set}UnitWeaponState (patch by Sprunk)
- extend Spring.SetFeatureResurrect
old API: arg #2 was parsed as unitdef-name if string
new API: arg #2 is parsed as unitdef-name if string OR unitdef-id if number; arg #4 is parsed as resurrect-progress
- make Spring.SetFeatureResurrect ignore nil for its second arg and allow unsetting the resurrect-target if id=-1
! extend Spring.GetUnitWeaponHaveFreeLineOfFire to take aiming-from coors
old API: Spring.GetUnitWeaponHaveFreeLineOfFire(unitID, weaponNum, targetID | [ tgtPosX [, tgtPosY [, tgtPosZ ]]]])
new API: Spring.GetUnitWeaponHaveFreeLineOfFire(unitID, weaponNum, targetID | [srcPosX [, srcPosY [, srcPosZ [, tgtPosX [, tgtPosY [, tgtPosZ]]]]]])
(if the srcPos* arguments are all nil, the default aiming location is used as before)
- block getting NoAccessTeam's LoS-state (patch by Sprunk)
- block Spring.GetRadarErrorParams for enemy allyteams (patch by Sprunk)
- implement Path.GetPathNodeCosts
- Spring.GetMouseState now returns a sixth value indicating if the cursor is offscreen
Rendering
- add new terrain-mesh renderer (faster than existing code, but does not respect cliffs well)
- draw bindpose models non-recursively
- setup alpha-masking for 3DO shadows
- bump ROAM node-pool size for more demanding maps
- limit number of ground-scar decals to 4096
- fix jagged shadows on maps with oblique sun-directions
- fix grass not receiving shadows; unify groundShadowDensity application
- fix grass being rendered black outside LOS
- use clip-control (when possible) to improve depthbuffer precision
- micro-optimize LuaMatBinSet sorting
- make shader-flag handling more lightweight
- do not parse info-textures bound to shaders every single frame
- nuke {point,line}-smoothing options; selected primitive AA is obsolete with multisampling
- outsource vsync regulation to SDL2
UI:
- Add FPSClampPos config for whether the engine should verify the camera doesn't hit ground/go too far
this and other FPS camera configs can be changed midgame and will affect the next frame drawn.
- Add OverheadMaxHeightFactor config - a float multiplier for maximum overhead camera height.
- show warning if VMware Mesa drivers are installed
- avoid "Invalid thread number 0" if window creation fails
- rename the 'minimised' CLI flag to 'hidden'
- prevent window from being considered unresponsive during startup
- make shift+esc drop to LuaMenu from PreGame
! fix window-state restoration
the WindowState config-setting is gone, a maximized
non-fullscreen window now gets restored by checking
if the resolution previously written is maximal (for
minimized windows the state is not saved, as before)
- fix VRAM size detection
- coax more information out of systems that fail OpenGL context-creation
- add fallbacks for common context-creation failures; catch inadequate
desktop video-modes; turn exceptions during {window,context}-creation
into friendlier popups
- downgrade from throwing exception to warning for missing scar-textures
- extend and organize the information shown in /debug
! rename '/roam' to '/mapmeshdrawer' which cycles through the renderers
- add '/debugglerrors' command (enables per-frame glGetError reporting)
- add '/debuggl x y z' command (requires DebugGL=1) where x=source,y=type,z=severity
- add '/wire{model,sky,tree,water}' debug commands
Bugfixes:
- fix LuaParser thread-safety
- fix ProfileDrawer thread-safety
- fix ScopedMtTimer thread-safety
- fix LosMap thread-safety
- fix PathTexture thread-safety
- fix race-condition between screenshot counter and libIL
- fix sound-thread occasionally accessing a deleted pointer on exit
- fix double-free in CBitmap's move-ctor for DDS images
- fix wrong number of pool-threads being spawned on reload
- fix runaway Text::WrapInPlace string-allocation
- fix FarTextureHandler performance-stalls
- fix potential segfault in SolidObjectDef::GetModelRadius
- fix degenerate GroundFlash quads
- fix ExploSpike projectiles instantly disappearing if they collided with anything on creation
- fix potential gsRNG.Next*() eval-order desync
- fix OOB memory-read in GameSetup::LoadTeams
- fix map-damage explosions being processed twice
- fix explosions causing terraform-spikes on certain maps
- fix UnitDamaged events following UnitDestroyed
- fix BuilderCAI crash when parsing invalid build-commands
- fix canBeAssisted-check in Builder::StartBuild
- fix ATI driver crash with BumpWater (on any map without a coastline) in TextureAtlas generation
- fix crash in AdvTreeDrawer on ARB-only junkware
- fix crash in InfoTextureHandler on ARB-only junkware
- fix PlayerRoster causing memory corruption on reload
- fix random WaitingDamage memory corruption
- fix Light::ClearDeathDependencies memory corruption
- fix CollisionHander::MouseHit not taking relMidPos translation into account
- fix LosHandler::UnitLoaded removing LOS from non-stunned units
- fix calling alSourcePlay even if alSourceQueueBuffers produced an error
- fix CheckEnlargeDrawArray for VA_TYPE's larger than 10 floats
- fix crash if unit is assigned an empty COB-script
- do not bitshift negative values (undefined behavior)
- catch invalid CmdDesc indices in GuiHandler::DrawButtons
- insert missing eventHandler.RemoveClient call in RoamMeshDrawer
- fix #5630 (free line-of-fire detection failure)
- fix #5287 (help units in firebases with a collideFireBase weapondef flag)
- fix #2970 ("pushResistant" is now accepted by MoveCtrl.SetGroundMoveTypeData)
- fix #3515 (better error-messages for the /team command)
- fix #5200 (broken ctrl+mousewheel tilt transitions with 'Spring' camera)
- fix #5258 (custom selection volumes)
- fix #5632 (show a slightly more interesting black screen on startup)
- fix #5629 (make footprint-terraforming respect buildee's actual facing)
- fix #4447 (FPS-mode locking onto out-of-LOS units)
- fix #4074 (equalize UnitDamaged parameters for LuaUI and LuaRules)
- fix #2855 #5092 #5180 (jagged terrain shadows)
- fix #5619 (area-commands not drawn on minimap)
- fix #5617 (enable non-binary alpha-testing for unit icons)
- fix #4164 (shield{Good,Bad}Color are RGBA float4's now)
- fix #5587 (units in sharp holes sinking underground)
- fix #4723 (EmitSfx crash when referencing effect not defined in unitdef)
- fix #4940 ("Recompressing Map Tiles with ETC1" load-stage triggering watchdog)
- fix #5403 (extra ShieldPreDamaged parameters)
- fix #5056 (let Spring.GetUnitWeaponHaveFreeLineOfFire take firing location as an argument)
- fix #5188 (units refusing to move if ordered to non-reachable locations from factory)
- fix #5639 (stunned transports not updating the position of their cargo)
- fix #5304 (invisible collada models if no secondary texture provided)
- fix #5358 (theoretical desync with std::{strtod,atof})
- fix #5457 (TargetBorder broken for non-box collision volumes)
- fix #5411 (PFS not finding optimal paths on maps with extreme speed-modifiers)
- fix #5501 (PFS ignoring obstacles higher up or lower down cliffs)
- fix #5469 (overflow-FPE in GetHeadingFromVectorF)
- fix #5476 (assertion-failure with broken springcontent installation)
- fix #5434 (add logging to detect unicode-aware libIL)
- fix #5387 (GroundDecalHandler crash on exit)
- fix #5421 (Spring.SendCommands("ctrlpanel") crash if sent inside a callin)
- fix #5412 (GameRulesParams persisting through Spring.Reload)
- fix #5493 (crash while reloading with LoadingMT=1)
- fix #5463 (failing to connect to server sends user back to LuaMenu)
- fix #5468 (classified)
- fix #5461 (classified)
- fix #5404 (MoveCtrl.SetGunshipMoveTypeData crash if called for a non-gunship unit)
- fix #5483 (glDeleteList called from multiple threads)
- fix #5423 (random number generation in defs.lua)
- fix #5396 (units lacking sensors on fire-platforms)
- fix #5339 (crash when placing a geothermal)
- fix #5338 (grid-patterns in unsynced heightmap)
- fix #5644 (send BuggerOff notes from opened-but-blocked factories again)
- fix #4745 (broken transport-unloading with non-zero unloadSpread)
- fix #4481 (check MoveDef maxSlope for units built by mobile constructors)
-- 103.0 --------------------------------------------------------
General:
- Fix & Improve performace
- Add 'allowTake' modoption (default: true) to enable/disable /take (by lamer)
- Add onlyLocal boolean value to modinfo.lua (default false)
If true, spring won't listen for incoming connections when running
this game unless GAME\OnlyLocal is specified in the start script.
Sim:
- Add new UnitDef tag "buildingMask" and LuaSyncedCtrl function "SetSquareBuildingMask". (by ivand)
Both used in conjunction to allow/disallow construction of certain unit types (via setting buildingMask)
on certain tiles (via SetSquareBuildingMask). By default all tiles and buildings have mask of 1
Rendering:
- Ghosted buildings are now consistent when changing specTeam/specFullView
Bugfixes:
- Fix #5301 (Units with restricted firearcs do not turn to aim)
- Fix #5302 (extreme slowdown)
-- 102.0 --------------------------------------------------------
General:
- Fix & Improve LoS performance
! remove LuaModUICtrl config setting
! remove ClassicGroundMoveType
! remove SpringLobby from spring installer
- update model matrices on demand instead of once per frame
Sim:
! allow units to unstuck themselves from an unpathable square
into an adjacent pathable one
! COB: deprecate unit/team/allyteam/global vars. Use lua functions instead
- prevent accidental friendly fire from direct line of fire weapons
Lua:
- Add {Set,Get}FeatureRulesParam(s)
! Get{Game,Team,Unit,Feature}RulesParams will now return { paramName = value, ... }
- You can now delete RulesParams by calling Set{Game,Team,Unit,Feature}RulesParam with no value argument or a nil one.
- Add new Spring.ClearUnitGoal(unitID) callout.
- add GamePaused and GameProgress callins to base gadget-handler
- extend builtin uniform binding for custom Lua materials
SEE "fix LuaMaterial uniform management" BELOW FOR THE
LIST OF NEW LOCATION KEYS THAT ARE RECOGNIZED AS OF 102
- Add Spring.GetFrameTimer(bool synced) to get a timer for the start of the frame
this should give better results for camera interpolations.
- Add an optional weaponNum argument to SetUnitTarget.
- Update shader errorlog even if compilation was successful
- Remove updateMatrix argument in Spring.UnitScript.{Move,Turn} as matrices will be automatically updated if necessary.
- Add new Spring.Start callout for launching a new Spring instance without terminating the existing one. See Spring.Restart for parameters.
- Add new VFS.GetAvailableAIs([gameName] [, mapName])->{ai1, ai2, ...} callout for getting a list of all Spring AIs. The optional gameName and mapName parameters can be used to include game/map specific LuaAIs in the list.
Save/Load:
! remove UseCREGSaveLoad and add /LuaSave which generates .slsf files
! compress creg saves
- SaveFile can be specified in start script in order to start from a save
Rendering:
- reduce number of team-color updates for custom shaders
- use frame-extrapolation for smoother feature movement
- draw all model nanoframe stages with shaders by default
- skip drawing icons for void-space units
- disable BumpWaterRefraction = 2 for now.
AI:
- make skirmishAiCallback_Unit_getResource{Use,Make} not round their return values to ints
- RulesParams are now accessible through skirmishAiCallback_{Game,Unit,Team,Feature}_getRulesParamValue{String,Float}
Misc:
- make the time server spends in sleep calls configurable (for dedicated hosts)
- rename the 'ReflectiveWater' config-key to 'Water' (to match the command)
- set the 'GroundDetail' config-val only when it changes, not on shutdown
- add '/GroundDetail <val>' text command to modify ground detail on the fly
- auto-normalize normals and tangents for all AssImp-loaded models
- add a gameDeferredDraw=5 drawMode value (handy for Draw{Unit,Feature} to know)
Bugfixes:
- fix invisible OBJ models
- fix gl.DeleteShader allowing repeated deletion
- fix drawing of being-built units during deferred pass
- fix invisible ground on voidwater maps when AdvMapShading=0 (in L-view)
- fix Spring.SetSunLighting crash when AdvMapShading=0
- fix Spring.ValidUnitID to accept nils again
- fix wreckage jumping from large *horizontal* impulse
- fix landed HoverAirMoveType aircraft behavior when given a command within their build range
! fix LuaMaterial uniform management for materials with standard and deferred shaders
material tables are now expected to contain subtables defining the uniforms; instead of
"material = {shader = ..., cameraposloc = 123, texunits = ..., ...}"
say
"material = {shader = ..., uniforms = {cameraposloc = 123, ...}, texunits = ..., ...}"
for a material that has both types of shader, supply "standardshader",
"deferredshader", "standarduniforms", and "deferreduniforms" as keys
new keys for these uniform subtables can be
"viewmatrixloc" // synonym for "cameraloc"
"projmatrixloc" // camera projection
"viprmatrixloc" // camera view-projection
"viewmatrixinvloc" // synonym for "camerainvloc"
"projmatrixinvloc" // camera inverse projection
"viprmatrixinvloc" // camera inverse view-projection
"shadowmatrixloc" // synonym for "shadowloc"
"cameradirloc" // camera forward direction
"sundirloc" // synonym for "sunposloc"
"rndvecloc" // random 3-vector with length in [0, 1)
"simframeloc" // current simulation frame
"visframeloc" // current renderer frame
- fix #5182 (unwanted sun-texture reflections)
- fix #5175 (microscopic FarTexture impostors)
- fix #5166 (wrecks buried underground on maps with negative hardness)
- fix #5165 (rare crash on exit or reload)
- fix #5161 (Spring.IsUnitAllied always returning true in unsynced gadgets)
- fix #5160 (Spring.SetSunLighting not working if applied in *get:Initialize and crashing when AdvMapShading=0)
- fix #5157 (skirmishAiCallback_Unit_get{Pos,Vel} broken with cheats enabled)
- fix #5155 (MoveCtrl.SetRotation not matching Spring.GetUnitRotation)
- fix #5149 (EVENT_ENEMY* AI events not being sent)
- fix #5148 (assertion failure with custom shaders)
- fix #5146 (missing wreckage healthbars)
- fix #5141 (glitchy tree rendering)
- fix #5136 (texture corruption with custom Lua materials)
- fix #5135 (missing SFX.FIRE and SFX.SMOKE effects)
- fix #5134 (broken zoom in track-mode with Spring camera)
- fix #5084 (allow LuaUI self-disabling)
- fix #5131 (order-lines visualization)
- fix #5130 (put projectiles created by Spring.SpawnProjectile in Gaia team)
- fix #5127 (icon-transparency over water)
- fix #5181 (aircraft sometimes fail to land)
- fix #5177 (stack-buffer-overflow in TextWrap.cpp)
- fix #5172 (segfault on assimp loading)
- fix #5173 (air transports fail to pick up units)
- fix #5174 (hover move type tend to exactly land on top of each other)
- fix #5176 (crash in CobThread)
- fix #5106 (Strafe planes dont land when reaching target or on 'stop' command)
- fix #5152 (heap-use-after-free when loading a game)
- fix wrong radar icons when switching specfullview
- fix #5216 Spring.GetVisibleUnits
- fix #5219 pink features & units
- fix #5223 buffer-overflow when using /water
-- 101.0 --------------------------------------------------------
Major:
- LoS (sim) overhaul
- SSMF Splat Detail Normal Textures (by Beherith)
- many new Lua rendering related features (custom feature shaders, map shaders, ...)
- many Lua additions
- Lua pr-downloader API
- removal of airbases & fuel
- transport overhaul
- 64bit windows builds
General:
! change default screenshot file type to jpg. to create png use /screenshot png
! pr-downloader dependency is now mandatory (statically linked with spring)
! demo files are now compressed with gzip (and the suffix is .sdfz)
- improve data locality even further with respect to 100.0
- fix memory leaks and misc. crashes (some related to LoadingMT)
- ignore /give commands issued via autohost interface (needs an actual player)
LoS:
! ModInfo: remove losMul & airLosMul -> always handle los ranges in elmos in the _whole_ engine
WARNING: this also rescales the returned values in Lua UnitDefs!
! ModInfo: make `radarMipLevel` configurable
! change default airMipLevel 2->1 & radarMipLevel 3->2
! ModInfo: add new sensors.alwaysVisibleOverridesCloaked (default _off_! before was always on)
! modrules.lua: add new `separateJammers` tag (breaks backward compatibility!)
default true (old behaviour is false)
when enabled each allyTeam only jams their own units
! get rid of los radius limit (you can now create units that cover the whole map and more)
- speed ups in general
- reduced lags introduced by LoS
- multithread LoS updating
- reduced memory usage
! fix various bugs related to unit/feature movement not registered
! update LoS on terrain changes
! correctly handle the height of the emitter (before radarEmitHeight was always from ground height & similar units on a spot shared their emitHeight)
! make LoS much smoother (now really gets called per-gameframe when the emitter moves)
- better circle algo
- add Spring.SetGlobalLos(int allyTeamID, bool globallos)
Sim:
! start simulation at frame 0, not at 1
- features now have a non-animated LocalModel and can use per-piece collision volumes
- RockUnit and HitByWeapon script callins now take vectors in unit-space
- fix acceleration rates and turn-speed limits for reversing units
- fix units occasionally zipping across the map after being unloaded
- fix unloaded units being non-colliding if transporter script attached them to piece -1
- fix various aircraft landing/midair-vibrating bugs
- fix builders sometimes ignoring their commands if they were issued without shift
- set better default radii for objects (and use same logic in all model parsers)
- make ground-unit reversing logic configurable via Spring.SetGroundMoveTypeData
- fix ground-units forever trying to move along their final waypoint direction in rare cases
- COB: always use the return value of the Killed thread to determine wreck level (none if omitted)
! remap SFX.RECURSIVE piece flag from 1<<8 to 1<<14
! removed hardcoded logic to zombify (stun+immobilize) a unit on death
! airbases and fuel were removed, use custom commands in combination with
Spring.SetUnitLandGoal(unitID, x, y, z [, radius]) and the new transport changes
to implement this functionality in lua.
Transports:
- every unit can now have other units attached to it using:
- Spring.UnitAttach(transporterID, passengerID, pieceNum)
- Spring.UnitDetach(passengerID)
- Spring.UnitDetachFromAir(passengerID)
- units with transportCapacity > 0 and transportMass > 0 will retain backward compatibility
- added Spring.SetUnitLoadingTransport(passengerID, transportID) which disables collisions
between the two units to allow colvol intersection during the approach.
GUI/Sound:
! fix default drawInMap keyshortcut on german keyboards
- fix displayed tooltip elevation when over minimap
- fix Ready button ignoring clicks after setting startpos and rejoining
- fix potential infinite loop during sound initialization
Rendering:
- new Shatter animation (SFX.Explode in Cob/LUS)
- break the piece into parts and not triangles
- much faster (in creation & render time)
- change the trail drawing of some missile projectiles
- add support for SSMF Splat Detail Normal Textures (by Beherith)
- add deferred pass for features; note that these are drawn into
the same buffer as units (overwriting it, unless the new config
variable AllowDeferredModelBufferClear is set to false [default])
- allow custom shaders for being-built units
- allow custom Lua map shaders
- fix metal->los info texture switching visual harshness
- apply anisotropic filtering to all mipmapped SSMF textures
- fix shadow-pass (and general) terrain/model visibility culling
- fix environment reflections (broken in four different ways)
- fix DynamicWater artifacts at large viewing distances
- fix RefractiveWater not showing submerged objects with DualScreenMinimapOnLeft
- fix truncation of deferred model normals
- do not disable model shaders during world alpha-pass
- do not disable model shaders during water ref{le,ra}ction passes
- always draw water surface during alpha-pass
- kill shadows for fully alpha-faded features
- kill impostors for fully alpha-faded features
- write extraColor to the specTex target on the deferred side of ModelFragProg
- use groundSpecularColor when no specularTex exists (i.e. on basic SMF maps)
- shift ground decals visually so they are always aligned with objects
- render all types of decals with shaders
- draw custom commands that have two parameters
! nuke support for "special" Spring{Radius,Height} pieces in assimp models
GameServer:
- speedup gameserver exiting (reduced some io/net related sleeps)
Pathing:
- fix cases where either no path was returned or an incorrect one
- switch to octile heuristic to reduce number of explored nodes
- increase high-resolution search range
- fix diagonal movement cost estimation
- handle PathCache crc failures
- make QTPFS neighbor updates a bit faster
AI:
- plug several memory leaks in engine interface and wrappers
- bring ghost model drawing in a usable state again
- add sensor map callbacks
- add shield state callbacks
- add ground info callbacks
- make feature callbacks respect cheats
Lua Callins:
! GameID callin now gets the ID string encoded in hex.
! new Lua callin RenderUnitDestroyed is now called just before a unit is
invalid, after it finishes its death animation.
! ShieldPreDamaged will now be called for LightningCannon and BeamLaser.
Two new arguments were added: beamCarrierWeaponNum and beamCarrierUnitID.
These will be populated in place of the first argument (projID).
! The following callins will now have 1-based weapon index arguments:
DrawShield,
ShieldPreDamaged,
AllowWeaponTargetCheck,
AllowWeaponTarget,
AllowWeaponInterceptTarget,
StockpileChanged
! UnitCommand and UnitCmdDone argument order changed to be consistent with
each other and with CommandFallback & AllowCommand: (unitID,
unitDefID, unitTeam, cmdId, cmdParams, cmdOpts, cmdTag)
Note that UnitCommand will now receive cmdOpts as a table and not as a number
- new callin UnitReverseBuilt, called when a living unit becomes a nanoframe again
- add new callins DrawGroundPreForward and DrawGroundPreDeferred
these run at the start of their respective passes when a custom
map shader has been assigned via Spring.SetMapShader (convenient
for setting uniforms)
- add new callin DrawGroundPostDeferred; this runs at the end of its
respective deferred pass and allows proper frame compositing (with
ground flashes/decals/foliage/etc, which are drawn between it and
DrawWorldPreUnit) via gl.CopyToTexture
- add new callins DrawUnitsPostDeferred and DrawFeaturesPostDeferred
these run at the end of their respective deferred passes to inform
Lua code it should make use of the $model_gbuffer_* textures before
another pass overwrites them (and to allow proper blending with e.g.
cloaked objects which are drawn between these events and DrawWorld
via gl.CopyToTexture)
NOTE: the *PostDeferred events are only sent (and only have a real
purpose) if forward drawing is disabled, whereas the DrawGroundPre*
events are only sent if the map has a custom shader!
LuaDefs:
! los related UnitDefTags are now in elmos
! Lua{Feature,Unit}Defs:
make the "model" subtable available (as it is for LuaUnitDefs)
move the {min,max,mid}{x,y,z} values to this table (these can now be accessed
using e.g. *Defs[i].model.midx)
deprecate *Defs[i].modelname, use *Defs[i].model.path instead
Lua (lighting):
! Game.fogColor constant is no longer available, use gl.GetAtmosphere("fogColor")
! Game.groundAmbientColor, Game.groundSpecularColor and Game.groundSunColor
are no longer available, use gl.GetSun() instead with appropriate parameters
- add unsynced callout Spring.SetSunLighting(table params) -> nil
It can be used to modify the following sun lighting parameters:
{ground,unit}{Ambient,Diffuse,Specular}Color and specularExponent
example usage: Spring.SetSunLighting({
groundAmbientColor = {1, 0.1, 1},
groundDiffuseColor = {1, 0.1, 1},
})
- add unsynced callout Spring.SetAtmosphere(table params) -> nil
It can be used to modify the following atmosphere parameters:
fog{Start,End}, {sun,sky,cloud}Color
example usage: Spring.SetAtmosphere({
fogStart = 0,
fogEnd = 0.5,
fogColor = { 0.7, 0.2, 0.2, 1 },
})
- add unsyced callout gl.GetAtmosphere(name) -> number | number r, number g, number b
Works similar to gl.GetSun(), and can be used to extract atmosphere parameters.
See Spring.SetAtmosphere for details.
Lua (projectiles):
- new Spring.DeleteProjectile(projID) for silently removing projectiles (no explosion).
- new Spring.{Get,Set}UnitWeaponDamages similar to *UnitWeaponState but for damage and explosion values.
- new Spring.{Get,Set}ProjectileDamages similar to the above, for projectiles in flight.
! Weapons with tracking will use a radar dot position unless
Spring.SetProjectileIgnoreTrackingError(projID, bool ignore) is called.
Lua (model rendering):
! reading from gl_TextureEnvColor[0] in custom shaders to set team color
will no longer work, declare a uniform vec4 named "teamColor" instead
(the engine will fill this in for you)
! gl.UnitShape and gl.FeatureShape now take three extra boolean arguments
and set their relevant GL state internally (so that calling only these
functions is enough to get correctly rendered models; pass in 'false'
for the [new] THIRD argument to get the fixed behavior, omit it or pass
in 'true' [default] to render with your own custom state instead)
NOTE:
the [new] FOURTH argument should be 'true' if in DrawScreen and 'false'
(default) if in DrawWorld; any transforms for these two functions *MUST*
include a gl.LoadIdentity call when argument #3 is false (whether they
are used in DrawWorld or in DrawScreen)
the [new] FIFTH argument determines whether the model is drawn opaque
('true' [default]) or with translucency ('false'); only has an effect
when argument #3 is false
- add callouts Spring.Preload{Feature,Unit}DefModel allowing the engine
to load the unit's model (and texture) in a background thread.
wreckages and buildOptions of a unit are automatically preloaded.
- new Spring.SetFeatureFade(featureID, bool) to control whether a feature will fade or not when zoomed out.
- add Spring.FeatureRendering API; allows custom shaders (technically,
materials) for features as its Spring.UnitRendering counterpart does
for units
note: the following two functions exist but are no-ops
Spring.UnitRendering.SetFeatureLuaDraw
Spring.FeatureRendering.SetUnitLuaDraw
- add callouts
gl.{Unit,Feature}Textures(number objID, boolean enable) -> nil
gl.{Unit,Feature}ShapeTextures(number defID, boolean enable) -> nil
these are primarily intended to be used in conjunction with
gl.{Unit,Feature}(objID, ..., raw=true)
gl.{Unit,Feature}Shape(defID, ..., raw=true)
and apply a model's default textures; easier than gl.Texture("$%...")
Lua:
- fix LuaUI crash if a widget caused an error in its GetConfigData callin
- fix GadgetHandler miscounting if RemoveGadget was invoked during a callin
- allow custom commands to be non-queueing (handy for state toggles)
- LuaUI can now reload itself via Spring.SendCommands
- allow /lua{rules,gaia} reloading on frame 0
- allow Lua{Rules,Gaia} chat actions before frame 0
- extend Spring.TraceScreenRay to intersect a user-given plane
- add unitSpecularColor to the set of values returned by gl.GetSun
- fix typo in maphelper/setupopts.lua breaking several default options
! do not start camera transitions from Spring.SetCameraState
! LuaSyncedRead::GetAIInfo now returns "UNKNOWN" for non-local AI's, not "UKNOWN"
! {Set,Get}UnitPieceCollisionVolumeData now receive 1-based piece index argument (was 0-based).
! fix a desync related to printf/number2string conversion
! Lua: fix bug that some TransformMatrix functions were revealing the true position of radar dots
! fix Spring.GetUnitPieceDirection() (returns now same dir as GetEmitDirPos)
! Spring.GetUnitPieceInfo() will now set "[null]" as the parent name of the root piece instead of ""
- add Spring.SetGlobalLos(int allyTeamID, bool globallos)
- add Spring.IsUnitIn[Los, AirLos, ...]
Note this is _not_ equal with Spring.IsPosInLos with the unit's pos!
I.e. the ground maybe in radar range, but the unit is jammed and so not visible
- add Spring.GetUnitFeatureSeparation(unitID, featureID[, dist2D])
- add Spring.GetFeatureSeparation(featureID1, featureID2[, dist2D])
- new Spring.GetUICommands function to obtain a list of all UI commands (e.g. /luaui reload)
- new VFS.CalculateHash function that calculates hash (in base64 form) of a given string (with md5 support initially)
- new Spring.{Get,Set}{Unit,Feature}Mass functions
- new Spring.SetFeatureMoveCtrl(featureID [, boolean enable [, number* args]]) to control feature movement
the number* arguments are parsed as follows and all optional
if enable is true:
[, velVector(x,y,z) -- initial velocity for feature
[, accVector(x,y,z) -- acceleration added every frame
]]
if enable is false:
[, velocityMask(x,y,z) -- dimensions in which velocity is allowed to build when not using MoveCtrl
[, impulseMask(x,y,z) -- dimensions in which impulse is allowed to apply when not using MoveCtrl
[, movementMask(x,y,z) -- dimensions in which feature is allowed to move when not using MoveCtrl
]]]
- add callouts (see their Unit equivalents for documentation)
Spring.{Get,Set}FeatureRotation
Spring.{Get,Set}FeaturePieceCollisionVolumeData
Spring.GetFeatureLastAttackedPiece
Spring.GetFeaturePieceMap
Spring.GetFeaturePieceList
Spring.GetFeaturePieceInfo
Spring.GetFeaturePiecePosition
Spring.GetFeaturePieceDirection
Spring.GetFeaturePiecePosDir
Spring.GetFeaturePieceMatrix
Spring.SetFeatureNoDraw
Spring.GetFeatureNoDraw
gl.FeatureRaw
gl.FeatureMultMatrix
gl.FeaturePiece
gl.FeaturePieceMatrix
gl.FeaturePieceMultMatrix
- add unsynced callout SetSkyBoxTexture(string texName) -> nil
example usage: Spring.SetSkyBoxTexture("myskybox.dds")
- add unsynced callout Spring.SetMapShadingTexture(string texType, string texName) -> boolean
example usage: Spring.SetMapShadingTexture("$ssmf_specular", "name_of_my_shiny_texture")
- add unsynced callout Spring.SetMapShader(
number standardShaderID,
number deferredShaderID
) -> nil
(the ID's must refer to valid programs returned by gl.CreateShader;
passing in a value of 0 will cause the respective shader to revert
back to its engine default)
custom map shaders that declare a uniform ivec2 named "texSquare"
can sample from the default diffuse texture(s), which are always
bound to TU 0
- extend the signatures of the Spring.SetDraw{Ground,Models}Deferred
callouts; allows disabling the forward {Unit,Feature,Ground}Drawer
passes
Spring.SetDrawGroundDeferred(
boolean drawGroundDeferred
[, boolean drawGroundForward]
)
Spring.SetDrawModelsDeferred(
boolean drawUnitsDeferred,
boolean drawFeaturesDeferred
[, boolean drawUnitsForward
[, boolean drawFeaturesForward ]]
)
expose the following $named textures to LuaOpenGL
"$map_reflection" (same as "$reflection")
"$sky_reflection" (defined for SSMF maps that have a skyReflectModTex)
"$detail"
"$normals" (auto-generated)
"$ssmf_normals"
"$ssmf_specular"
"$ssmf_splat_distr"
"$ssmf_splat_detail"
"$ssmf_splat_normals" or "$ssmf_splat_normals:X"
"$ssmf_sky_refl"
"$ssmf_emission"
"$ssmf_parallax"
'X' can be a value between 0 and 3, defaults to 0 if ":X" is omitted
Lua pr-downloader API:
callouts:
- VFS.DownloadArchive(name, category)
callins:
- DownloadStarted(id)
- DownloadFinished(id)
- DownloadFailed(id, errorID)
- DownloadProgress(id, downloaded, total)
-- 100.0 --------------------------------------------------------
Major:
- bugfixes
InfoTexture:
! Added radar2 los colour for colouring the inside of the radar edge.
- it is changeable through SetLosViewColors (see Lua changes)
WeaponDefs:
- fix visibleShieldHitFrames not read from shield subtable
! scale flighttime with GAME_SPEED and not 32
- warn on unknown tags (so you can de-TA-ism your weapondefs finally)
- weapondefs_post.lua: set legacy weapontype tags to nil, so they don't cause engine warnings
LOS:
- make little bit more accurate
Lua:
! 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
NetProtocol:
- handle rejected connection attempts (when version differs)
Pathing:
- make path cache part of synced state -> player desyncs right from the start when got an invalid one
ConfigTags:
- make "MaxParticles" & "MaxNanoParticles" runtime changeable
Misc:
- 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 ---------------------------------------------------------
Major:
- 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
Cameras:
! 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)
SpringSettings.cfg:
! don't read old config file locations any more:
AppData\Local\springsettings.cfg
~/.springrc
! add dedicatedValue & headlesValue to confighandler:
! make spring-dedicated listen at 0.0.0.0 as default again
! add headless values from springrc-tempate-headless.txt
- print user's config to infolog
System:
! 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
(G)UI:
- 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)
Sim:
- 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
! change TEAM_SLOWUPDATE_RATE to 30 / UNIT_SLOWUPDATE_RATE to 15
- fix aircraft in groups (e.g. brawlers) not being able to attack the target and landing instead at target pos
Pathing:
! 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)
Collisions:
- fix #4592: broken per-piece coldet
- fix #4602 and improve CQuadField::GetUnitsAndFeaturesColVol
- speed up UnitCollisions
Units:
- base automatic attack commands for idle units on weapon priorities
Weapons:
- 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)
WeaponDefs:
- 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).
UnitDefs:
- add new tag attackSafetyDistance used by airplanes (by springraaar)
Projectiles:
- 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]
Rendering:
- 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)
Map:
- allow to override the following InfoMaps via mapinfo.lua: (by enetheru)
- metalmapTex
- typemapTex
- grassmapTex
- minimapTex
- allow to load dds as detailtex
Lua:
- 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
StartScript:
- support rapid tags