File: changelog.txt

package info (click to toggle)
spring 98.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 41,928 kB
  • ctags: 60,665
  • sloc: cpp: 356,167; ansic: 39,434; python: 12,228; java: 12,203; awk: 5,856; sh: 1,719; xml: 997; perl: 405; php: 253; objc: 194; makefile: 72; sed: 2
file content (5501 lines) | stat: -rw-r--r-- 283,927 bytes parent folder | download
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
Spring changelog
(since 85.0: "!" prefix indicate backward compability broke)
(numbers in brackets normally mean the mantis ticket ID)

-- 98.0 ---------------------------------------------------------
Major:
 - 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

GameServer:
 - rename BypassScriptPasswordCheck to AllowSpectatorJoin and default to true

Lua:
 - 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)

Rendering:
 - glFont: make inlined colorcodes reuse current set alpha value

Pather:
 - 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)

CEG:
 ! fixed booleans in CEGs (sometimes they were randomly overriden with random data)

Weapons:
 - Beamlasers respect repulser-shields' armorclass (pullrequest by sprunk)
 ! 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

Sim:
 - GroundBlocking: don't align immobile objects to even squares
 - reduce load in Collisions handling (by doing blocked ground squares scans only every 2nd frame)

Misc:
 - 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)

Bugfixes:
 - 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)

AI:
 - fixed return-type and value of Pathing::GetApproximateLength (pullrequest by rlcevg)

Buildprocess:
 - fixes for CMake 3.0
 - heavily reduced files which are compiled multiple times
 ! add check for gcc >=4.7 at configure


-- 97.0 ---------------------------------------------------------
Major:
 - 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

Misc:
 - 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

Buildprocess:
 - fix freetype not found on windows / mingw
 ! add check for gcc >=4.6 at configure
 - optional fontconfig support
 ! SDL2 dependency

Rendering:
 - `DebugGL` configtag works now (cause of SDL2 switch)

KeyBindings/uikeys.txt:
 ! 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)

LuaDefs:
 - the parser now checks the returned tables for NaNs & Infs and prints a warning if it finds some (they are sources of desyncs!)

UnitDefs:
 - 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)

Lua:
 - 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 ... SYNCED.foo[i] ... end
   - good:   local foo = SYNCED.foo; for i=1,100 do ... foo[i] ... end
  ! SYNCED. can't be localized in global scope anymore:
   - bad:    local foo = SYNCED.foo;    function gadget:DrawWorld() ... foo ... end
   - good:   function gadget:DrawWorld() local foo = SYNCED.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 lobby.springrts.com:8200 by luasocket as default

LUS:
 - SetUnitValue now accepts booleans, too

Demos:
 - fixed desync checker

StartScript:
 - 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

Installer:
 ! disallow to install spring over existing installations / ask for uninstall first
 - don't associate .sdf with spring.exe any more

Linux:
 ! new BlockCompositing configtag (default true). Disables kwin compositing to fix tearing.


-- 96.0 ---------------------------------------------------------

Major:
 - 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

Misc:
 - 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

Sim:
 - Rifle weapons can hit features too now and apply impulse to the target

Lua:
 - 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
     themselves)

     "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

Bugfixes:
 - 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 ---------------------------------------------------------

Major:
 ! new datadir structure: http://springrts.com/phpbb/viewtopic.php?f=12&t=30044 & http://springrts.com/dl/buildbot/default/master/95.0/manpages/spring.6.html
 ! 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)

Performance:
 - 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

Misc:
 - 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:
     PNG, JPG, TGA, DDS, BMP
 ! 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)
   NOTE THAT THIS IS DISABLED BY DEFAULT ON WINDOWS BUILDS (cf. UseHighResTimer)
 - copied a lot config descriptions from wiki to the engine (thx for all the wiki'ers)
 - http://springrts.com/wiki/Springsettings.cfg 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

Sim:
 - 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
     THIS APPLIES TO ALL UNIT TYPES (AIR AND GROUND), TEST YOUR SCRIPTS
 ! 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

Lua:
 ! 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:
       isTransport
       isImmobile
       isBuilding
       isBuilder
       isMobileBuilder
       isStaticBuilder
       isFactory
       isExtractor
       isGroundUnit
       isAirUnit
       isStrafingAirUnit
       isHoveringAirUnit
       isFighterAirUnit
       isBomberAirUnit
     fully deprecate the following UnitDef keys:
     after 95.0 these will all become nil, beware
       .builder
       .floater
       .canDGun
       .canCrash
       .isCommander
       .moveData
       .type
       .maxSlope

 ! LuaUnitDefs: deprecate canHover (check moveDef.family 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
       FeatureDamaged(
         number featureID, number featureDefID, number featureTeam,
         number damage
         [, number weaponDefID, number projectileID
         [, number attackerID, number attackerDefID, number attackerTeam ]]
       )
       FeaturePreDamaged(
         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
     UPDATE YOUR GAME'S UNIT_SCRIPT.LUA IF IT HAS LUA-SCRIPTED
     UNITS AND YOU ARE NOT USING SPRING'S (BASECONTENT) VERSION

 ! 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

     Set{Unit,Feature}Blocking(
       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 http://springrts.com/wiki/Lua_MathExtra

Rendering:
 - 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"


Buildprocess:
 ! updated gentoo overlay url to https://github.com/springlobby/overlay
 - 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
    see http://springrts.com/wiki/Building_Spring_on_Windows
 ! 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

Bugfixes:
 ! 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:

     AllowStartPosition(
       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)
       PLAYER_RDYSTATE_FAILED  = 3

     ! 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

Sound:
 - don't automaticly set "MaxSounds"
 - try to fix "[Sound] Error: CSoundSource::Play: Unknown Internal Error" on Mac

AI:
 - removed unused AI_UnpauseAfterInit config setting

UnitSync:
 - add DeleteSpringConfigKey(const char* name)



-- 94.1 ---------------------------------------------------------
 - bump path cache version


-- 94.0 ---------------------------------------------------------
Misc:
 - 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

Rendering:
 - automatic runtime recompression of groundtextures to ETC1 (future MESA drivers should support ETC)

Bugfixes:
 - 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

Lua:
 - 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 ---------------------------------------------------------
Bugfixes:
 - 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 ---------------------------------------------------------
Bugfixes:
 - 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


Misc:
 - 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'

Pr-Downloader:
 - workaround CVE-2013-0249 (disable all protocols expect http/https)
 - reduce log messages
 - fix invalid timeout
 - fix ignored depends in http-downloads

Assimp:
 ! 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 http://springrts.com/wiki/Mapgen for details)
 - some new sim/weapon features

AI:
 - Shard update
 - AAI: refactor / fixes
 - AAI: add BAR config
 - AAI: update XTA config, to work with XTA > 9.71
 - fix bug in /aikill

pr-download:
 - new --download-engine
 - fixes / speedups
 - add c-api to shared lib & use it for pr-downloader

Unitsync:
 ! 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

Lua:
 ! 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


CollisionVolumes:
 ! 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
    THIS WILL CAUSE BALANCE CHANGES, BE PREPARED
 ! 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
   right
    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

Pathing:
 - 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
    results: www.youtube.com/watch?v=4rycY4JfLGs
 ! 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

UnitScripts:
 ! 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 http://gw.gd/Zaae.

Models/Assimp:
 - support a 2nd texcoord
 - auto-calc midPos
 - read texture filepaths from modelfile if available
 - extended auto-finding of textures

Weapons/WeaponDefs:
 ! 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)

FeatureDefs:
 ! remove "nodrawundergray" now that there is a proper "floating" tag

GameServer:
 - 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

Misc:
 - 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

Rendering:
 - 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 (http://springrts.com/phpbb/viewtopic.php?p=529204#p529204)
 - 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

Bugfixes:
 - 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 benchmark.data parsable by gnuplot

OS:
 - 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

Buildprocess:
 - boost 1.50 compatibility
 - detect ld.gold and compress debugsymbols
 - update 7z to v9.22
 - use tcmalloc when found (new USE_TCMALLOC use-flag)
 - add target headercheck

Windows:
 - 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:
 - Linux's ctrl+c: `hardkill` after 10sec (and 5 seconds softkill)
 - workaorund issue in FOSS ati drivers with NPOT cursors


-- 91.0 ---------------------------------------------------------
Bugfixes:
 - fix Linux sync errors
 - fix QTPFS deadlocks


-- 90.0 ---------------------------------------------------------
Bugfixes:
 - 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

Sim:
 - make target locking optional via meta-key

GameServer:
 - 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)

UnitDefs:
 - make cloakCostMoving default to cloakCost

WeaponDefs:
 - 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)

FeatureDefs:
 - add explicit `floating` featureDef tag (before it was implicit via nodrawundergray and failing a lot)

Lua:
 - add Spring.SetUnitDirection(unitid, x,y,z)
 - add `ignoreLOS` tag to Spring.UpdateMapLight
 - LuaRules: add DrawProjectile to complete the Draw* quartet

ModInfo:
 - add `allowAircraftToHitGround` tag (3199)

Rendering:
 - runtime create missing DDS mipmaps when supported by the hardware

Windows:
 - 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)

Changes:
 - 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 http://springrts.com/wiki/Spring_on_a_LAN )
 ! 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%)

Bugfixes:
 - 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

Simulation:
 - 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 www.youtube.com/watch?v=mRtePUdVk2o 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

Pathing:
 - 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

Lua:
 ! some config values are now write protected (Spring.SetConfig*)
 - added luasocket support for widgets, see http://springrts.com/wiki/LuaSocket
 - 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()

Rendering:
 - 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

UI:
 - 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)

Sound:
 ! 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')

Windows:
 - set IMAGE_FILE_LARGE_ADDRESS_AWARE (increased >2GB memory limit)

Linux:
 ! 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

OSX:
 - fix stack corruption in sound code


-- 88.0 ---------------------------------------------------------
Changes:
 ! 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)

Unitsync:
 ! allow to list files with unsolveable depends
 - warn about usage of deprecated functions in unitsync

Lua:
 - 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

Bugfixes:
 - fixed multiple crashes
 - fixed SPRING_ISOLATED=1
 - 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)

Installer:
 ! add vcredist_x86.exe to the installer / remove MSVCR71.dll from mingwlibs
 - fixed safemode shortcuts


-- 87.0 ---------------------------------------------------------
Bugfixes:
 ! 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 ---------------------------------------------------------
Changes:
 - 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)

Simulation:
 - make globalLOS a per-allyteam variable
   /globallos <n> --> toggle for allyteam <n>, no argument --> toggle for all

Pathing:
 - QTPFS:
     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*
     units:
       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
         else:
           depthScale = MAX(0.01, MIN(depthModParams.maxScale, (a * h * h) + (b * h) + c))
           depthMod = 1 / depthScale
       where
         h = unit's absolute height below water surface
         a = depthModParams.quadraticCoeff
         b = depthModParams.linearCoeff
         c = depthModParams.constantCoeff

unitsync:
 - reload IsolatedMode & Dir via the EnvVar on Init() calls
 - warn about invalid version numbers
 - add python bindings for unitsync

MacOSX:
 - fix signal handling
 - use native DialogBoxes

Rendering:
 - cleanup and extend SSMF shader, now includes a parallax-mapping stage

Lua:
 - 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

Bugfixes:
 - 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)

CommandLine:
 - 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>

Rendering:
 - 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

Internal/Bugfixes:
 - 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

(G)UI:
 - 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"

Sim:
 - 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

Pathing/MoveType:
 - 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

CEG:
 - 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

Sound:
 - limit UnitReplies to max one concurrent playback
 - play most unit sounds (activate, ...) only if unit is in LOS

UnitDef:
 ! 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.)

FeatureDef
 - added new tag "crushResistance" (defaults to feature's mass)

WeaponDef:
 - added new "craterAreaOfEffect" float tag (defaults to the value of areaOfEffect)

modrules.lua:
 - added "movement.allowCrushingAlliedUnits" (default false)
 - added "movement.allowUnitCollisionDamage" (default false)
 - added "system.pathFinderSystem" (defaults to 0, 1 is QTPFS)

Lua:
 ! 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

Buildbot:
 - create spring_${VERSION}_minimal-portable+dedicated.zip

UnitSync:
 - 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)

Engine:
 - 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 "lobby.springrts.com"
 - use http://springrts.com/ 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 http://springrts.com/mantis/changelog_page.php (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 (www.youtube.com/watch?v=H5je8TKDfNA)
 - 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:
 - 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

Unitsync:
 - implemented GetDataDirectoryCount() and GetDataDirectory(int index)
 - add support for retrieving non-string info value types (string, integer, float, bool)
 - introduce GetPrimaryModInfoCount
 - fix OpenArchiveFile

Installer:
 - 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 http://springrts.com/wiki/Read_Me_First


-- 0.82.7.1 ---------------------------------------------------------
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

Unitsync:
 - add new function GetSpringVersionPatchset() (return "1" for a spring version of "0.82.7.1"
 - remove accidentially added third paramter to Init()

Installer:
 - fix: do not check for running .exe in silent-mode
 - Zero-K: desktop-shortcut: rename & add icon

AI:
 - 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"

AI:
 - 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

Stack-Trace-Translator:
 - fixed for main binary (.exe, windows)

Installer:
 - do not check for .Net when installing Zero-K
 - delete all files that were installed
 - add Tobis rapid client

-- 0.82.6.1 --------------------------------------
Engine / General:
 - prevent false hang detection trigger

Engine / Rendering:
 - fix occasional ATI crash

Installer:
 - 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

Unitsync:
 - fix mapname/mapfilename conflicts

Installer:
 - add portable install option (default: disabled)
 - add Python AI Interface to the windows installer

Repository:
 - remove SelectionEditor

-- 0.82.5.1 --------------------------------------
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

Lua
 - 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

Lua
 - 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

Unitsync:
 - add support for more then 16 start positions

Installer:
 - fix checks for installed .Net version
 - add SpringDownloader desktop shortcut

CMake:
 - fix _make install-spring_ to work after initial configure
 - fix windows linking (related to -lws2_32)

Documentation:
 - 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 i965_dri.so 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

AI:
 - RAI: log files are now under _log/_ sub-dir
 - AAI: added config for BA 7.14
 - E323AI: added config for BA 7.14

Installer:
 - 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 (http://springrts.com/phpbb/viewtopic.php?f=9&t=22635)
 - support specular lighting, multiple blendable detail textures, and sky reflections on SMF maps ("SSMF")
     http://springrts.com/phpbb/viewtopic.php?f=13&t=21951
     http://springrts.com/phpbb/viewtopic.php?f=13&t=22564 (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)

Sound:
 - 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

Unitsync:
 - 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 " ")

FontRendering:
 - 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
      font:Print("\255\255\000\000red\255\000\255\000green\008blue");

Lua:
 - LuaLobby:
   callouts:
   - 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()
   callins:
   - 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.

Interface:
 - 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

AIs:
 - 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)

Bugfixes:
 - 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


-- 0.81.2.1 --------------------------------------
Engine:
 - 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

AIs:
 - AAI: removed obsolete map config files
 - AAI: added BA 7.12 config file
 - KAIK: removed dependence on TEDClass


-- 0.81.2 --------------------------------------
Engine:
 - 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

AIs:
 - E323AI 3.18.1
 - AAI: Doesn't use minkowski metric for retreat distances anymore
 - AAI: Fixed some NaNs


-- 0.81.1.3 --------------------------------------
Engine:
 - 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

AIs:
- 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

AIs:
 - E323AI: CPU performance improvements & bug fixes
 - KAIK: better D-Gun handling


-- 0.80.5.2 --------------------------------------
Bugfixes:
 - 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

Changes:
 - 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


-- 0.80.5.1 --------------------------------------
Bugfixes:
 - 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 --------------------------------------
Bugfixes:
 - 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

Gui:
 - 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

Sim:
 - lua unit scripts major rework
 - some sources of desync fixed

Misc:
 - fix some compiling problems related to boost 1.40
 - some fixes for OS X


-- 0.80.4.2 --------------------------------------
Bugfixes:
 - 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


-- 0.80.4.1 --------------------------------------
Bugfixes:
 - 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


-- 0.80.4.0 --------------------------------------
Bugfixes:
 - don't reclaim dragonteeth with area-reclaim
 - lua unit script framework respects script tag


-- 0.80.3.0 --------------------------------------
Bugfixes:
 - 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

Lua:
 - 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
 b49928454225f19f5c439c908c0a8cad775fb7ed)
 - unit script: removed Create (framework handles it)
 -


-- 0.80.2.0 --------------------------------------
Bugfixes:
 - fix creation of DDS textures
 - Unbreak transports when loadingRadius <= some magic number

Lua:
 - 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


-- 0.80.1.0 --------------------------------------
Bugfixes:
 - 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


-- 0.80.0.0 --------------------------------------
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...)

AIs:
 - 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)


-- 0.79.1.1 --------------------------------------
Bugfixes:
 - 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 --------------------------------------
Bugfixes:
 - 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

-- 0.78.2.1 --------------------------------------
Bugfixes:
 - 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

Engine:
 - 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)

Lua:
 - 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)

Installer:
 - add RAI to installer
 - allow the user to close TASClient / downloader during install


-- 0.78.1.1 --------------------------------------
 - 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))
Crashes:
 - 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

Engine:
 - 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

Lua:
 - 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

Unitsync:
 - 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)

Installer:
 - 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 --------------------------------------
Installer:
 - 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

Crashes:
 - 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

Engine:
 - 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

Random:
 - lots of fixes to CMake and dedicated server (already released)
 - minor KAIK stability fixes


-- 0.77b4 --------------------------------------
Crashes:
 - 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

 Engine:
 - 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

0.77b3:
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:
   GroundLODScaleReflection
   GroundLODScaleUnitReflection
   (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
   icontypes.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:
 - 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)

COB:
 - 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):
    LUA_COMPAT_GETN
    LUA_COMPAT_VARARG
    LUA_COMPAT_MOD
    LUA_COMPAT_LSTR
    LUA_COMPAT_GFIND
    LUA_COMPAT_OPENLIB
 - 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
  - FLOAT32/LUMINANCE format, NEAREST/NEAREST filtering
  - 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
      building.)
   - 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(),
         Spring.SetSoundStreamVolume(number)
 - 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
    "alpha"        SRC_ALPHA    ONE_MINUS_SRC_ALPHA   true
    "reset"        SRC_ALPHA    ONE_MINUS_SRC_ALPHA   true
    "disable"      SRC_ALPHA    ONE_MINUS_SRC_ALPHA   false
    "color"        SRC_COLOR    ONE_MINUS_SRC_COLOR   true
    "modulate"     DST_COLOR    ZERO                  true
 - Added Picking support:
     gl.RenderMode()
     gl.SelectBuffer()
     gl.SelectBufferData()
     gl.InitNames()
     gl.PushName()
     gl.PopName()
     gl.LoadName()
 - 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
   use the ALL_UNITS, ALLY_UNITS, ENEMY_UNITS, and MY_UNITS values.
 - '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

AI:
 - Added new ai value AIVAL_SCRIPT returning start script text.
 - Removed ABIC AI stuff that no-one is using.
 - Added AIHCGetUnitDefById, AIHCGetWeaponDefById, AIHCGetFeatureDefById

Unitsync:
 - 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

Bugfixes:
 - 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 --------------------------------------

Installer:
- 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):
  -Gundam
  -Kernel Panic
  -Evolution
  -Spring: 1944
  -Simbase
- 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
  unitsync.
- 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:
    edit_return
    edit_escape
    edit_complete
    edit_backspace
    edit_delete
    edit_home
    edit_end
    edit_prev_line
    edit_next_line
    edit_prev_char
    edit_next_char
    edit_prev_word
    edit_next_word
- 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:
    [FIREATDEAD]
    {
      fireAtKilled=0;
      fireAtCrashing=0;
    }
  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):
    [DISTANCE] {
      builderUse2D=0;
    }
    [EXPERIENCE] {
      powerScale=1.0;
      healthScale=0.7;
      reloadScale=0.4;
    }
- 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 = {
        'cancel1',
        'cancel2',
      },
      select = {
        { file = 'selsound1', volume = 2.0 },
        { file = 'selsound2', volume = 2.5 },
        etc...
      },
    }
- 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
  fallSpeed.
- 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
  present)
- 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
  torpedoes.
- 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).


Bugfixes:

- Fixed cannons not able to shoot as far from high ground as they should.
- Fixed infinite lower cylinder when cylindertargetting is active.
- Loaded air transports no longer land on stop command .
- Fixes in glBallisticCircle. (use heightmod also in drawing range circles.)
- Spring now returns 0 when started with -V, -h or -p.
- Fix random start positions. (positions are handed out before gaia team is added)
- CMD_REMOVE also works for idle factories (with move/patrol queues)
- Changed Cannon::GetRange2D so it uses something closer to real-world physics.
- Fixed Melee weapon always aiming west.
- Do not allow commands with out-of-map destinations.
- "Connecting to server" message now does not pop up when starting without startscript.
- Commandline is now parsed before the filesystemhandler starts up (speedup
  starting with arguments like -V or -h).
- Fixed builders with area reclaim sometimes going out of their designated circle
- Bombs now obey Accuracy and SprayAngle.
- Fixed lightning weapons having a hardcoded inaccuracy, made it obey accuracy
  and sprayangle tag instead.
- Fixed Lightning weapons not doing damage to shields.
- Possible fix for the disappearing healthbars.
- Fixed crashbug when exiting the GroupAI, sharing and quit boxes in an unusual way.
- Fixed starburst missiles so they stop their engines after they travel out of range.
- Fixed a possible load/save bug.
- Fixed crash in DamageArray() copying constructor.
- Don't say 'content error' if modrules.tdf isn't found.
- Improved error reporting in GetTDFName and LoadMap.
- Fixed replays.
- Fixed savefiles on non-Windows OSes.
- Fixed the run-time Spring.MakeFont() call-out.
- Fixed beamlasers so they don't ignore CollideFriendly.
- Fixed both CollideFeature and CollideFriendly for weapontype=Rifle.
- Fixed unloading of aircraft.
- Fixed crash when sharing units with a GroupAI other player doesn't have.
- Fixed .team, .setminspeed and .setmaxspeed when playing a demo locally.
- Fix groundscars turning white after using LOS overlays or enabling shadows.
- Better error reporting in case of global AI version mismatch.
- Fix SM3 when resizing windows.
- Don't profile the water renderer on voidwater maps.
- Weapons now use AimFromWeapon to determine the part to aim from, this prevents
  waggling and failing to aim at close ranges. To simulate the old behaviour
  make AimFromWeapon return the same piece as QueryWeapon does.
- Melee weapon now reports a proper angle to AimWeapon.
- Made starburst missiles obey startvelocity and weaponacceleration.
- Try to minimize damage caused by LuaUI crashes until cause is found by
  disabling LuaUI after several errors happen.
- Hackish fix for units sometimes not going to factory designated rally point
- Install the game/fonts/*.ttf files to fonts/.
- Handle a missing argument to .skip a little better.
- Fix error message for missing font.
- Take screenshot of entire window (rather than left half only) in dual-screen mode.
- Lua stack was changed to fix some segfaults.
- Prohibit spectators (except for the host) from changing the gamespeed unless
  cheating is enabled.
- Fix an exploit where partially reclaimed corpses that are turned into wreckage
  end up being worth more than the remaining value of the corpse itself.
- Fix weaponAcceleration typo causing major bugs with nukes and vlaunch weapons et al.
- Fix two "unknown net msg" errors in CPreGame when playing certain demos.
- Fixed a crash bug  (lastColWarning == NULL) in TAAirMoveType.
- Fixed a crash in AirMoveType.cpp.
- Removed the automatic 'userInputPrefix' tracking for incoming messages
- Fixed the unitsync GetUnitFullName().
- Ignore used writing keypresses  (for bindings like:  'bind a+u edit_next_word')
- fixes a bug in LuaUnsyncedRead::TraceScreenRay() when using dualscreen mode
  and minimap is on left.
- Unit pieces inherit alpha threshold from owner.
- Fixed jittery falling units.
- Fix timeout while loading / pathing
- CommandFallback was broken wrt return values, fixed.
- Improved dgun responsiveness. (still not perfect, but at least shoots through
  features now)
- Construct a proper orthonormal basis for muzzle-flame bitmaps.
- Gracefully handle missing script failure.
- Fixed speed and pause in replay.
- Fix for teleporting units when area-unloading out of map.
- Fix for uadded tracking of PushMatrix and PopMatrix Lua call-ins to reduce
  number of gl errors.
- Fix ghosted buildings always being drawn with default facing.
- Fixed weapon TDF 'fireStarter' tag, for all weapon types.
- Units, when they are within range, but unable to hit the target of an attack
  command, will move sideways.
- Fixed the bug where laserprojectiles had weird garbage on the front if the
  projectile was within lod distance.
- Fixed set HEADING COB variable so it updates unit direction.
- Fixed giving commands while recording a video.
- Fixed bug where after load all moving ground units stops with message
  "Can't reach destination".
- Fix for patrolling builders repairing stuff that's being reclaimed
- In the tooltip displayed on mouseover, deconstructing nanoframes didn't show
  how much metal they are producing on mouseover.
- Don't set the default shareTeam to a dead team ever.
- Fixed random mod.
- Made glPrintOutlined() almost 50% faster by lowering quality.
- Reclaimers list is now saved.
- Now error messages are broadcast to all clients.
- Paralyzers no longer damage features.
- Fixed the wait/teleport factory bug.
- Fix flying/underground units bug.
- Unhide the gaia team, and colorize by allegiance.
- Made demo not found / demo corrupt / format outdated exceptions instead of logOutput-warnings
- /quit will now quit immediately if you are the only active player.
- Fixed a 'bad team' segv in Spring.CreateUnit().
- Added the ScopedMapLoader helper to unitsync.
- Paralyzers no longer shake the camera.
- Fixed the missile and starburst texture2 only applying to the first segment of
  the smoketrail (the segment that's still part of the projectile, not a
  CSmokeTrailProjectile). Now the entire trail uses the texture.
- Fix possible segmentation faults after loading a shared object failed.
- Fixed bug where server dont send remaining data (including NETMSG_QUIT) to server
- Set ACTIVATION issues CMD_ONOFF instead of activating/deactivating, fixing
  issues with on/off not showing correct state.
- Added a check for weapon 'slavedTo' values  (content_error).
- Fixed some bugs in gl.TexEnv / gl.MultiTexEnv / gl.TexGen / gl.MultiTexGen
- Used the decoyDef ghost building models when appropriate.
- Fixed CAirMoveType planes not rotating on factory pads.
- Fixed CTAAirMoveType planes always taking off from labs facing south.
- Fixed missile-gunships from being unable to force-attack ground.
- Fixed CTRL-MOVE group orders causing units to move at snail's pace.
- Fixed mid-air explosions that occur over water triggering a water splash effect.
- Fixed the isAttackCapable() check.
- Prevent CMissileProjectile weapons with trajectoryHeight from over- or
  undershooting when firing at targets below or above attack position.
  Based the angular correction factor on missile speed.
- Not being able to lock the config file on linux is not a fatal error anymore.
- Remove the (bestDist < radius) bugs.
- Make sure the (paralyzeDamageTime >= 0).
- Added bestDist method for all area searches.
- Added a check for immobile builders that will stop internal.
  commands for when the unit has moved out of the build range.
- Fixed FlareProjectile. (flare projectile was always removed after one Update.)
- Allow for "non-decloakable" units.
- CGameHelper::GetClosestEnemyUnitNoLosTest() now includes the target's radius
  for spherical tests.
- Stunned factories don't open, build, or close.
- Players from demo once again can't change speed / pause.
- Factored out some glGetDoublev() calls (may be faster on certain GPU architectures)
- Fixed issue that some people can only get sound when hosting.
- Fixed bug in map damage loading from savegame.
- Fixed possible bug in explosions map damage.
- Fixed crash with saving after nuke was intercepted.
- Fixed ground-transports being unable to unload units on certain maps.
- Units that are still inside a non-firebase transport do not destun.
- Fixed units whose state is floating but are not in water taking water-damage.
- Print "spectator <name> left" rather than "player <name> left" if the guy
  leaving is a spectator.
- Added serializing for InMapDraw.
- Fixed bug with saving builders that terraform ground.
- Fixed stunned units being unhittable if pushed.
- Made a seperate update thread while the game loads to prevent network timeouts
  on slow computers. (thread is joined when loading finished.)
- CCobInstance::RealCall now checks if stack is big enough before getting
  arguments from stack.
- made StartBuilding measure the pitch from the center of the unit instead of
  the base to deal with units with large vertical offset.
- Put CMinimap always on back so it does not draw over the user interface.
- Moved the QueryNanoPiece COB call into synced code to hopefully fix a desync.
- Fixed the bug where a repair order on a construction whose terraforming is
  incomplete will start construction anyway.
- Fixed units terraforming the ground under units being built by factories.
- Added some protection against .wav's whose headers contain a garbage datalen.
  (was causing SEGV's with XTA 9.2)
- Change lots of printf calls to logOutput.Print().
- Don't send NETMSG_GAMEOVER when watching a demo with only 1 allyteam left.
- Throw content_error if a mod/map archive can not be found instead of only
  printing a warning in the log.  This should stop the 'missing default cursor'
  message actually meaning 'missing a mod archive'.
- Added minimap ping on game start and set lastMsgPos to something meaningful.
  Notably this fixes F3 zooming to top left corner before something interesting
  happens.
- Fixed crash when singlestep was executed in client mode.
- Spring and ArchiveMover.exe requires administrative privileges now on Windows,
  as a workaround until user directories can be specified as data directories.
- "Can't reach destination" message spam should be reduced a bit.

Lua:
- Added call-in gl.Smoothing(point, line, polygon).
- Added Spring.GetViewSizes() to LuaOpenGL.
- Added the SetLosViewColors()    call-in.
- Added the StockpileChanged()    call-in.
- Added the DefaultCommand()      call-in.
- Added the LuaUI WorldTooltip()  call-in.
- Added the LuaUI GameSetup()     call-in.
- Added GetUnitHeight()           call-out.
- Added GetFeatureHeight()        call-out.
- Added GetFeatureRadius()        call-out.
- Added GetFeatureResurrect()     call-out.
- Added SetTeamColor()            call-out.
- Added GetTeamColor()            call-out.
- Added GetTeamOrigColor()        call-out.
- Added the Spring.SetDrawSky()   call-out.
- Added the Spring.SetDrawWater() call-out.
- Added the Spring.SetDrawGroud() call-out.
- Added the gl.UnitMultMatrix()   call-out.
- Added the GetLuaAIDesc() call.
- Added the Spring.AddUnitDamage(
   number unitID,
   number damage,
   number paralyzeTime,
   number attackerID,
   number weaponID,
   number impulseX, number impulseXY, number impulseZ) lua call-out.
- Added the gl.UnitPieceMultMatrix() lua call-out.
- Added the gl.EdgeFlag() lua call-out.
- Added the Spring.GetCameraFOV()       lua call-out.
- Added the Spring.GetCameraDirection() lua call-out.
- Added unit count protection to Spring.CreateUnit().
- Added the DrawUnit() LuaRules unsynced call-in.  (for SetUnitLuaDraw())
- Added the Spring.SetUnitLuaDraw() LuaRules call-out.
- Added the GameFrame() call-in to LuaUI.
- Added the AICallIn() LuaRules unsynced call-in.  (for CallLuaRules())
- Added the Spring.GetTeamLuaAI() lua call-out.
- Added LuaUI Spring.GetGatherMode().
- Added LuaUI Spring.GetInvertQueueKey().
- Added Spring.SetUnitLineage(unitID, teamID[, bool isRoot]).
- Added Spring.GetBuildFacing() for LuaUI.
- Added Spring.GetBuildSpacing() for LuaUI.
- Removed the color info from GetTeamInfo().
- Added GetHasLag(), returns true if currently lagging behind host.
- Added PlaySoundStream and StopSoundStream for OggVorbis audio.
- Added the rank parameter to GetPlayerInfo().  (arg 7)
- Added 'autoland' to GetUnitStates().
- Added the UnitCmdDone()   call-in.
- Added the UnitCloaked()   call-in.
- Added the UnitDecloaked() call-in.
- Adedd the MapDrawCmd()    call-in.  (only for LuaUI)
- Added the unsynced Spring.GetVisibleUnits([teamID] [,radius] [,useIcons]) call-out
- Added the following to both UnitDefs[] and FeatureDefs[]
    height, radius
    minx, midx, maxx
    miny, midy, maxy
    minz, midz, maxz
- Disabled the lua DrawScreen() call-in when the interface is hidden. (note that
  the DrawScreenEffects() call-in remains active.)
- The majority of mod files are now loaded via LuaParsers, which can be edited
  to load different types of files. The default LuaParsers simply load the
  normal style files with improved error checking and speed.
- Game.armorTypes[] was changed to a bidirectional map.
- WeaponDefs[x].damages.damages[] was replaced with WeaponDefs[x].damages[index]
  (starts at 0 for the default armorType)
- Added the 'teamcolors.lua' local team recoloring LuaParser script.
- Added the gui_game_setup.lua GameSetup widget.
- Added 'ghostedBuildings' to Game[].
- Changed Game.modName to use the humanName value.
- UnitDef names are always lower case now.
- Added on-the-fly lua font texture / specfile generation.
- Added localization support in the lua tooltips and ctrlpanel.
- Generated local speed-ups for some of the installed widgets.
- Created FeatureDefNames and WeaponDefNames for LuaUI.
- Added Spring.SetUnitNeutral(unitID, bool) and Spring.GetUnitNeutral(unitID).
- Neutral units (mainly for gaia and fake features), will not be attacked.
  automatic when the attacker to be has its fireState set to "Fire At Will".
- Added a hidden fourth fireState level (3) that will shoot at neutrals.
- Added SetCustomCommandDrawData.
- Added 'extractorRadius' to the LUA Game table.
- Added Spring.IsGodModeEnabled() to LuaSyncedRead.
- Added the "gamedata/LockLuaUI.txt" check for LuaUI. If this file exists in
  the mod, then LuaUI can only load its gui.lua" file from the archive
  filesystem, thus putting the mod in full control of what LuaUI can be used
  to do  (including disabling all user widgets).
- LuaAI is now supported.
- Added custom mod / map options via Lua:
 - MapOptions.lua is to be used with LuaGaia, and belongs in the map archive,
 - ModOptions.lua is to be used with LuaRules, and belongs in the mod archive.
- Renamed cmdDesc  iconname  -> texture  for LuaUI LayoutButtons() input.
- Renamed cmdDesc  mouseicon -> cursor   for LuaUI LayoutButtons() input.
- Changed the cmdDesc double texture format to:
   '&<xscale>x<yscale>&<tex1>&<tex2>'
 (both textures can use either the named textures or '#<unitDefID>' format)
- * Added the Spring.RequestPath() lua call-out
 - RequestPath(<number moveID | string moveName>,
     startX, startY, startZ, endX, endY, endZ [, goalRadius]) -> nil | path
 - it returns a lua userdata or nil
 - the userdata has the following calls:
   path:Next([currX, currY, currZ[, minDist]]) -> nil | x, y, z
   path:GetEstimatedPath() ->
                        {[1] = {x,y,z}, [2] = {x,y,z}, etc... }, -- waypoints
     {[1] = index,   [2] = index,   etc... }  -- resolution start points
- Added Spring.GetUnitEstimatedPath() -- same return as path:GetEstimatedPath()
- Added GetEstimatedPoints() to CPathManager
- Added the NETMSG_LUAMSG net packet type
- Added the following calls to LuaUI:
   Spring.SendLuaUIMsg(msg [,mode = ''|'a'|'allies'|'s'|'specs'])
   Spring.SendLuaCobMsg(msg)
   Spring.SendLuaGaiaMsg(msg)
   Spring.SendLuaRulesMsg(msg)
- Added the RecvLuaMsg(msg, playerID) call-in to all lua scripts
- Added the weaponID to the lua UnitDamaged() for fullRead scripts
- Removed imageSizeX and imageSizeY  (potential desync). The gl.TextureInfo() call can be used instead
- Made decloakDistance a per-unit property, and made it accessible to
  synced lua scripts as the third parameter to SetUnitCloak().
- Added GetModOptions() and GetMapOptions()
- Added UnitSeismicPing()  (with a sound)
- Added the ability to set the stockpile percent
- Added the Spring.SetUnitTarget(unitID, targetID | <x,y,z>, bool userTarget) call-out
- Added the Spring.SetExperienceGrade(number) call-out (sets the experience
  steps that will trigger the UnitExperience() call-in, based on the
  limExperience varible value  (exp / (exp + 1)))
- Added the UnitExperience() lua call-in
- Added VFS.UseArchive(filename, function(...) ... end, ...)
 - allows for packaged widgets (source, textures, sounds, etc...)
 - currently only works for raw filesystem access (limited to LuaUI)
- Added the following lua call-outs to allow unsynced read access to COB global variables:
   GetCOBUnitVar(unitID, varID)
   GetCOBTeamVar(teamID, varID)
   GetCOBAllyTeamVar(allyTeamID, varID)
   GetCOBGlobalVar(varID)
 (varIDs start at 0)
- Added FBO objects to lua GL, with MRT (multiple render targets) capability, and blitting
- Added RBO objects to lua GL, which should allow for depth + stencil format
- Added lua Scream objects, which can call a function when they are garbage collected
- Added VFS.SubDirs(), to get a list of subdirectories
- Spring.SendMessage() and friends can now be used by unsynced lua code
- added Lua SyncedCtrl function Spring.SetUnitMoveGoal(unitID, posX, posY, posZ[, radius[, speed]]),
  this makes the unit move closer to the target location, to a distance of <radius> (default 0).
  This is mostly for custom commands that should have the unit moving into range,
  it doesn't affect the order queue. It's marked as unsafe.
- New Lua call-out (SyncedCtrl): Spring.SetUnitWeaponState(unitID, weaponNum, stateTable)
  StateTable is a table containing one or more of reloadstate, reloadtime (this time in seconds),
  accuracy, sprayangle, range, projectilespeed. Obviously the values will be assigned to the
  variables the keys refer to.
- Added the Spring.GetMapList() call-out to the mod ValidMaps.lua script
- Added the Spring.GetMapInfo() call-out for the ValidMaps.lua script
- Added mapSizeX and mapSizeZ to the lua Game table
- Fix GetCmdDescIndex()
- Added a seventh parameter to AllowCommand, "synced". It's a bool that is true
  when the command was sent by either a Spring-internal action or synced Lua and
  it's false if the command came from the user or LuaUI. This should facilitate
  preventing user commands to a unit while allowing LuaRules commands.
- Removed the third return value of Spring.GetTeamInfo (active) since it was broken.

COB
- Give a COB error instead of crashing for invalid explosion generator indices
  or weapon indices in emit-sfx. #
- Added COB call to "ShotX" that happens shortly before weaponX uses
  QueryWeaponX, use this for switching firepoints in bursts or when using
  multiple projectiles.
- StartBuilding now supplies the pitch as the second parameter to help with
  custom build FX.
- Fixed cob bitwise not operator (was logical not.)
- Added a MOD COB opcode for modulo division
- Introduces the COB get/set variable 103, ALPHA_THRESHOLD. It ranges from 0-255
  and changes the glAlphaFunc to use that alpha value as its minimum. In
  practice this allows disintegration-style effects or the reverse for build animations.
- Transport AI now calls the cob function 'StartUnload' which is called once
  when transport starts to lower during land flood method.
- Dropped units call the cob functions 'falling' and 'landed' so that you may
  start and stop a parachute animation.
- Added the 'cobID' unitDef tag, and the COB_ID (100) COB GET type
- Added the BlockShot#(unitID, block) COB call-in  - set block to non-zero to
  block the unit firing at unitID
- Added the cob GET/SET STEALTH command  (96)
- Added CRASHING (97) get/set constant to COB. Can be used to get/set whether an
  aircraft is crashing. Is ignored for non-CAirMoveType units.
  (including CTAAirMoveType aircraft)
- Added global, team, and ally GET/SET variables to COB scripts
    1024 - 2047:  1024 global variables
    2048 - 2175:  128  variables per team      (the COB script unit's team)
    2176 - 2303:  128  variables per allyteam  (the COB script unit's allyteam)
- Added 8 shared per-unit variables   (example: GET UNIT_VAR_START -unitID value)
- Added the SET_WEAPON_UNIT_TARGET (106) and SET_WEAPON_GROUND_TARGET (107)
  COB GET codes  (used GET because of its extra parameters)
   -  GET  SET_WEAPON_UNIT_TARGET    weaponID  unitID          userTarget
   -  GET  SET_WEAPON_GROUND_TARGET  weaponID  xzCoord yCoord  userTarget
- Added TargetWeightX COB call-in and CHANGE_TARGET cob set var.
  COB call-in TargetWeightX(targetID, weight), weight defaults to 65536 which
  represents 1.0 and is multiplied with the target's value to determine priorities.
  Set CHANGE_TARGET to Y makes weaponY pick a new target.
- Adds the COB set constant CEG_DAMAGE (99), which defines the damage value for
  all CEGs triggered by emit-sfx 1024 + x to allow for some variability in the
  emitted effects (to e.g. make a charging energy ball grow larger or have smoke
  get progressively darker as the unit's HP decreases).
- Added a new get call, PLAY_SOUND, to play a sound that can be heard only by
  allies, enemy, in los, etc. GET PLAY_SOUND(sound number, volume,
  who hears the sound, where to play the sound) (see r4974 for full docs)
- Get health now allows a unit ID to be passed.
- Added COB and Lua access to some more weapon variables.
  New COB constants, all get-only (but not read-only):
  WEAPON_RELOADSTATE 125 (frame number of the next shot/burst)
  WEAPON_RELOADTIME 126 (in frames)
  WEAPON_ACCURACY 127
  WEAPON_SPRAY 128
  WEAPON_RANGE 129
  WEAPON_PROJECTILESPEED 130
  All of these use the first param (starting at 1) as the weapon index whereby positive
  means read and negative means write the second param to the value. In the latter case
  the previous value is returned.
- New COB GET/SETS
    FLANK_B_MODE         120 // set or get
    FLANK_B_DIR          121 // set or get, set is through get for multiple args
    FLANK_B_MOBILITY_ADD 122 // set or get
    FLANK_B_MAX_DAMAGE   123 // set or get
    FLANK_B_MIN_DAMAGE   124 // set or get


-- 0.75b2 --------------------------------------

- Fixed possible crash while waiting for connection to the host.
- Fixed unknown net msg in read ahead bugs when large UDP packets were received.
- Fixed a crash when empty network packets where destructed.

- Fixed rapier like units being unable to attack enemy units.
- TargetBorder now takes the correct vertical distance into account.
- ".kick" and ".kickbynum" now just kick the given player instead of kicking
  everyone including the host himself.
- Game end condition is now fixed to check allyteams instead of teams.

- Added gui_xray_shader.lua widget
- Added gui_team_platter.lua widget
- Added camera_smooth_move.lua widget

-- 0.75b1 --------------------------------------

Uncategorized:
- Added LuaCob, LuaGaia, LuaRules synchronized scripting:
  - LuaCob:   (mod)  provides access to lua functions for COB scripts
  - LuaGaia:  (map)  controls the Gaia team
  - LuaRules: (mod)  gives full read/ctrl to setup custom mod game rules
- Added LuaRules Spring.UnitRendering (LuaMaterials, unfinished).
- Merged the LuaUI code with the new lua library setup.
- Made LuaUI mod widgets possible.
- Added support for the Gaia team.
- Added SimpleGroundFlash to explosion generator.
- Added 'dds' and 'png' as default buildpic formats.
- Load/save now uses the creg serializer.
- Netcode has been refactored to be more readable.

AI:
- Added Load/Save interface for AIs.
- Load/save support for EconomyAI and MexUpgraderAI.
- Added GetStartPos to IAICallback.
- Fixed CCommandQueue in AI interface.
- Added AIVAL_UNITLIMIT enabling AIs to query the maximum number of units.
- Added the ability to unload a specific unit using the UNLOAD_UNIT command
  (the unitID should be added as the fourth parameter)
- Added AIVAL_STOCKPILED to query the amount of stockpiled ammo.
- Added AIVAL_STOCKPILE_QUED to query the amount of queued stockpile ammo.

Behavorial:
- Allow up to 16 pads per air base.
- Units can not build stuff on top of cloaked stuff anymore.
- Units guarding other units now properly repair the other unit if it's damaged.
- Units guarding factories prioritize repairing the factory instead of building
  new units.
- Stunned (and transported) units can not build anymore.
- Units (that are still paralyzed) are not un-stunned anymore during unloading.
- Changed the unit resource updates so that they occur even while stunned.
- Transporters can carry hovers and ships now.
- Transporters now check ground slope before unloading.
- Units on a slope steeper than their max slope will now skid down it.
- Disabled the ground flattening when building mobile units.
- Added paralyzed unit skipping for paralyzers.
  (use ALT to disable skipping, same modifier as for permanent area commands)
- Made a unit's ablity to slow itself relative to the angle of the slope.
- Improved aiming of Cannon type weapons. They will no longer over/under shoot
  due to large height differences.
- Weapons don't target dead and crashing units anymore.
- Mobile units under hold position in a temporary attack order don't move away
  from their patrol route anymore.
- Added ScriptMoveType (incomplete, but functional).
- Commander doesn't randomly D-gun buildings anymore when FPS mode is disabled.
- Missiles now honour SprayAngle weapon TDF tag.

Bugfixes:
- Removed the maximum 8 sides limit.
- Fixed incorrect searching order in the virtual file system.
- Fixed teamcolor for S3O and 3DO features.
- Fixed cloaked S3O units losing their texture.
- Fixed teamcolor rendering for MissileProjectile and WeaponProjectile.
- Fixed handling of .give so team unitlimit is respected.
- Dynamic and refractive water are now reinitialized after window resize.
- Fixed rendering of shadows of S3O models with transparency.
- Fixed rendering of underwater grass.
- Made LuaUI compatible with VFS access.
- Fixed SM3 shader for ATI x1* series.
- Fixed incorrect cancelling of rotated buildings build orders.
- And many more

Chat commands:
- Added an optional [0|1] parameter to the pause command.
- Added an optional [0|1] parameter to the showHealthBars command.
- Added an optional [0|1] parameter to the updatefov command.
- Added an optional [0|1] parameter to the drawtrees command.
- Added an optional [0|1] parameter to the dynamicsky command.
- Added an optional [0|1] parameter to the hideinterface command.
- Added ".editdefs [0|1]" to allow lua based UnitDef editing.
- Added ".reloadcob <unitName>" to reload cob scripts.
- Added ".skip <[+|f]seconds>" for in-game and replay fast-forwarding.
- Added "/safegl [0|1]" command for testing lua rendering overhead.
- Added "/buffertext <text>", copies text into the console history.
- Added dynamic "/vsync" control.
- Added the "/fpshud [0|1]" action.
- Added "endgraph [0|1]" action.
- Changed ".take" so that cheating must be enabled for spectators to use it.
- Added the ability to give features using ".give"
  (only if the unit name doesn't match, player's team is used)
- Added input text editing
  - backspace & delete
  - home & end  (or ALT+{left|right})
  - CTRL+{left|right} for word skipping
- Added the '//' -> '/' command prefix conversion syntax
- Added the following LuaUI widget handler commands:
   "/luaui togglewidget  <widgetname>"
   "/luaui enablewidget  <widgetname>"
   "/luaui disablewidget <widgetname>"
- Added the '/lodscale [shadow|reflection|refraction] <scale>' command.

COB:
- HitByWeaponId(z,x,id,damage) will be called instead of HitByWeapon if it exist
  in script.
- Implemented COB get/set constant STANDINGMOVEORDER (2)
- Implemented COB get/set constant STANDINGFIREORDER (3)
- Added a new COB query call, "QueryLandingPadCount".
  - if not defined, Spring will assume 16 as the maximum number of pads
  - it takes one argument, which is initially set to 16, the number
    returned in arg0 will be used as the maximum number of pads.
- Fixed logical XOR,AND,OR (they were implemented as binary XOR,AND,OR)
- Added COB get/set constant UPRIGHT (79)
- Added COB get constant POW (80) with 2 arguments x and y: it returns x^y.
- Added COB get constant PRINT (81) which prints it's 4 arguments to infolog.
- Added COB get constant HEADING (82)
- Added COB get constant TARGET_ID (83)
- Added COB get constant LAST_ATTACKER_ID (84)
- Added COB get/set constant LOS_RADIUS (85)
- Added COB get/set constant AIR_LOS_RADIUS (86)
- Added COB get/set constant RADAR_RADIUS (87)
- Added COB get/set constant JAMMER_RADIUS (88)
- Added COB get/set constant SONAR_RADIUS (89)
- Added COB get/set constant SONAR_JAM_RADIUS (90)
- Added COB get/set constant SEISMIC_RADIUS (91)
- Added COB get constant DO_SEISMIC_PING (92)
- Added COB get/set constant CURRENT_FUEL (93)
- Added COB get constant TRANSPORT_ID (94)
- Added COB get/set constant SHIELD_POWER (95)
- Added COB get/set constants LUA0-LUA9 (110-119)

Config:
- Added "SMFTexAniso" config parameter (default = 0, disabled)
  (application controlled anisotropic texture filtering for SMF maps)
- Removed "SM3MaxTextureStages", it's confusing and the fallback mode isnt
  really useful (still slow).
- Added config parameter MaximumTransmissionUnit. This can be used to control
  the maximum UDP packet size Spring uses. The default is 512, which should keep
  all UDP packets below the required minimum MTU of 576 bytes (512 payload).
  If the hypothese that many player drops are because of too big UDP packets is
  correct, then this may solve it.

Feature TDF tags:
- Added boolean feature TDF tag NoSelect. (default: 0)

Fixed exploits:
- Fixed exploit: UnitRestricted could be circumvented by making multiple
  factories and starting a build of the restricted unit in all factories at
  the same time.
- Fixed exploit: CanAssist could be circumvented if multiple builders were
  ordered an identical build at the same time out of their immediate range.
- Fixed exploit: Aircraft can not cross map boundaries anymore in FPS mode.

Game Setup:
- Added 'lineage' game mode (2). If the commander dies, all units directly or
  indirectly built by him die, regardless of the current owner of the unit.
- Added player 'CountryCode' tag for the gameSetup script.
- Added game setup script parameter 'Savefile'.
- SaveGame can also be loaded by command line: 'spring QuickSave.ssf' or
  'spring C:\Spring\Saves\QuickSave.ssf'
- Added NoHelperAIs tag: determines whether helper AIs are allowed.
- Added LuaGaia tag: is LuaGaia enabled this game?
- Added LuaRules tag: is LuaRules enabled this game?

GUI:
- Added land at 80% for aircraft.
- Better handling and display of widgets which are enabled, but not active.
- Disable unit tracking when using middle mouse button scrolling.
- Disable unit tracking when the viewport is set via the minimap.
- New unit selection filter "in hotkey group".
- Units being transported can not be selected anymore unless the transporter
  isfireplatform.
- Mobile units can be loaded onto a transport by clicking on the transport with
  the mobile unit selected.
- Added Free camera mode (to help make better videos). It's primarily intended
  to be used with keyboard input (CTRL/ALT/SHIFT/META behave differently then
  the normal camera modes). It's is not in the toggle list by default.
- Added CTRL+F5 default keybinding for free camera mode.
- Added text coloring for ally and spec message input.
- Changed unit sharing so that allied units do not clear their command
  queue, and cleaned up some more state for enemy transfers.
- Allowed build command descriptions to use text in the 4 corners of a button
  (0 = SW, 1 = NE, 2 = NW, 3 = SE)
- Added the "hotspot" command for the *.txt mouse cursor spec file
- Added side preference prefix for start pictures.
- Allow "allside_" start pictures to always be used (regardless of side).
- FPS mode now shows weapon names instead of numbers.
- Area build now builds every second row in the opposite direction.
- Perimeter build now builds everything in clockwise or counterclockwise order.
- Circle build now builds everything in clockwise or counterclockwise order.
- Circle build now works correctly when trying to use non-square buildings for
  circling anything.
- Improved QuitBox player selection visibility.
- Gunships and air builders now have a repair level switch.

Mapping:
- New ocean.jpg (public domain) comes from golgotha texture set and tiles better
  then original ocean.jpg.
- Changed default repeat settings so the new texture fits better (wrt. scale)
- Added "MAP\WATER\WaterRepeatX" and "MAP\WATER\WaterRepeatY" SMD tags, defining
  the amount of times the water texture should be repeated in X and Y direction.
- Aspect ratio of water texture is taken into account now.
- Added 'gamedata/resources_map.tdf' for gaia unit projectile textures.

Unit FBI tags:
- Added boolean FBI tag AirStrafe.  Only effective if HoverAttack=1.
  If AirStrafe=1, gunships and construction aircraft will strafe in a circle
  around the target. If AirStrafe=0, they will not strafe, they will sit
  stationary in the air firing their weapons. If set to 0 they sit at one place.
- Added string FBI tag Gaia.
- Added string FBI tag DecoyFor: the name of the unit this one is a decoy for.
- Added boolean FBI tag CanBeAssisted. (default: 1)
  - Disabling assists to factories should work well.
  - Builders have to die to release their hold on a unit being built,
    and once the unit is released, multiple builders can repair the unit.
- Added boolean FBI tag CanSelfRepair. (default: 0)
- Added boolean FBI tag TransportByEnemy. (default: 1)
- Added boolean FBI tag HoldSteady, causes transports to hold units such that
  their updirs are always aligned.
- Added boolean FBI tag ReleaseHeld for transports. When set to 1, the units
  carried by the transport will survive the destruction of the transport itself.
- Added float FBI tag SlideTolerance, multiplies the the max slope for
  determining when skidding should begin, due to slope. Values less than 1 will
  cause the unit to never start skidding due to slope. (default: 0)
- Added float FBI tag MinCollisionSpeed, indicating the minimum net impact speed
  that will cause damage to a unit.
- Added vector FBI tag CollisionSphereOffset
- Added float FBI tag LoadingRadius
- Added boolean FBI tag FullHealthFactory, controls whether or not a unit can
  leave the factory if it is not at full health. (default: 0)
- Added float FBI tag RepairSpeed (default: WorkerTime)
- Added float FBI tag ReclaimSpeed (default: WorkerTime)
- Added float FBI tag ResurrectSpeed (default: WorkerTime)
- Added float FBI tag CaptureSpeed (default: WorkerTime)
- Added float FBI tag TerraformSpeed (default: WorkerTime)
- Added boolean FBI tag DecloakOnFire (default: 1)
- Up to 8 ok, select and arrived sounds can now be defined.
  (use tags ok1, ok2, etc.)
- Added float FBI tag CollisionSphereScale, this is a scaling factor for the
  unit's collision sphere. (default: 0.5 for aircraft, 1 for other units)

Weapon TDF tags:

- Added weapon tdf command SweepFire, if 1 (default 0) it will make the weapon
  continue firing while it aims for a new target. Only works on continous beam
  lasers currently.
- Added boolean weapon TDF tag CanAttackGround. (default: 1)
- Added float weapon TDF tag float TargetBorder: if nonzero, targetting units
  will TryTarget at the edge of collision sphere (radius*tag_value, [-1;1])
  instead of its centre. Defaults to 1 for Melee type weapons, 0 otherwise.
- Added float weapon TDF tag CylinderTargetting: if greater than 0, range will
  be checked in a cylinder (half height=unitradius*cylinderTargetting) instead
  of a sphere. Defaults to 1 for Melee type weapons, 0 otherwise.
- Added float weapon TDF tag MinIntensity: for beamlasers - always hit with some
  minimum intensity (a damage coeffcient normally dependent on distance).
- Added float weapon TDF tag SizeDecay: how much a plasma particle is smaller
  than the previous within the same plasma shot. (default: 0)
- Added float weapon TDF tag AlphaDecay: how much a plasma particle is more
  transparent than the previous particle. (default: 1)
- Added float weapon TDF tag Separation: distance between each plasma particle.
  (default: 1)
- Added int weapon TDF tag Stages: number of particles used in one plasma shot.
  (default: 5)
- Added boolean weapon TDF tag NoGap: if set to 1, the distance between plasma
  particles is proportional to the size of the two particles. If set to 0, the
  distance between plasma particles will be proportional to the size of the
  first particle. (default: 1)
- Added the weapons TDF tag 'visibleShieldHitFrames' (defaults to 0 frames)
  - can be used along with  'visibleShieldHit'
  - the alpha value fades after the hit
- Added colormap for ballistic ('cannon' type) weapons.
- Added boolean weapon TDF tag AvoidFeature, this makes the weapon avoid
  features while targetting. (default: 1)
- Added float weapon TDF tag FallOffRate: rate at which the beamweapon fades out
  after it goes past its maximum range. 0 is never fade out, 1 is finish fading
  out exactly at max range, the default 0.5 is the previous behaviour.
- Added float weapon TDF tag LodDistance: minimum camera distance at which the
  default beamweapon projectile is simplified to rectangle. (default: 1000)
- Added float weapon TDF tag DynDamageExp: exponent of the damage formula, 0
  (the default) disables dynamic damage. 1 means linear scaling.
- Added float weapon TDF tag DynDamageMin: minimum damage value. (default: 0)
- Added boolean weapon TDF tag DynDamageInverted: inverts the damage curve.
- Added float weapon TDF tag DynDamageRange: if set it will use this value
  instead of the range value from the weapon in the calculation.

New projectile handler textures:
- sbtrailtexture         - default first section of starburst missile trail texture
- missiletrailtexture    - default first section of missile trail texture
- muzzleflametexture     - default muzzle flame texture
- repulsetexture         - texture of impact on repulsor
- dguntexture            - dgun texture
- flareprojectiletexture - texture used by flares that trick missiles
- sbflaretexture         - default first section of starburst missile trail texture
- missileflaretexture    - default first section of missile trail texture
- beamlaserflaretexture  - default beam laser flare texture
- bubbletexture          - torpedo trail texture
- gfxtexture             - nanospray texture
- projectiletexture      - appears to be unused
- repulsegfxtexture      - used by repulsor
- sphereparttexture      - sphere explosion texture
- wrecktexture           - smoking explosion part texture
- plasmatexture          - default plasma texture

Scons build system:
- Added debugdefines configure option: true by default, if it's set to false
  (debugdefines=no) then a debug build will be made with release preprocessor
  defines. This can be used to generate debugging symbols for release builds.
- Added dc_allowed configure option to enable/disable direct control.

Unitsync:
- Added GetSpringVersion() function to unitsync. This returns the Spring version.
- Deprecated InitArchiveScanner() unitsync function.
- Added java bindings to unitsync.
- Unitsync is now installed to libdir on Linux. It can be assumed this is
  either /usr/local/lib/spring/unitsync.so or /usr/lib/spring/unitsync.so.



-- 0.74b3 --------------------------------------

- Added LuaUI v0.1  (with widget management code, somewhat experimental)
  (requires the LuaUI setting to be on to be autoloaded,
   "/luaui disable"      to disable in-game
   "/luaui reload"       to load in-game
   "/luaui reload fresh" to load in-game, but with fresh state)

- Renamed docs/lua_ui_interface.txt to LuaUI/API.txt

- Added "/minimap slavemode [0|1]" and "/minimap draw" for use with LuaUI

- Added "/specfullview 2" spectator mode, where you can both view and select all units

- Added "/volume <fraction>" command  (0.0 to 1.0 range)

- Added "group <int> [ "set" | "add" | "selectadd" | "selectclear" | "selecttoggle" ]"
  action as an alternative to the group[0|9] commands  (note that the key modifiers can
  be setup differently from the default)

- Fixed FBI tag floater for planes,
- Added FBI tag canSubmerge for planes. The following rules apply:
    1) If a plane only has the 'floater' tag set to 1, it will land on the ocean surface.
    2) If a plane only has the 'canSubmerge' tag set to 1, it will land on the ocean floor.
    3) If a plane has both tags set to 1, it will obey rule 2.

- Fixed the factory cancelled-build delay bug.
- Fixed units get stuck while guarding factories bug.
- Fixed planes can't find landing pad on large maps bug.
- Fixed in game video creation (default binding F10).
- Fixed a bug causing much metal/energy to be lost instead of shared to allies.

- Smoothed LOS / Radar view.

-- 0.74b2 --------------------------------------

- Planes can land on water surface if FBI tag floater is set to true.

- Added GROUND_WATER_HEIGHT (78) to get in cob script.
  Same as GROUND_HEIGHT (16) but in water it returns negative water depth instead of 0.

- Units don't slowdown on intermediate waypoints anymore.

- Added mingw compatible crashhandler.

- Fixed sharebox and quitbox for 16 players.
- Fixed FPS mode aiming to the northwest.
- Fixed FPU control word assertion that made spring unplayable with some sound drivers.

- Added sorting options to "/info", you can use names or numbers:
  0 - "off",   disable display
  1 - "ally",  allies  (you, your team, your allyteam, your enemies, then spectators)
  2 - "team",  player team id
  3 - "name",  player name alphabetic sort
  4 - "cpu",   player cpu usage
  5 - "ping",  player ping time

- Added the "maxparticles <value>"       action
- Added the "minimap simplecolors [0|1]" action
- Added the "specfullview [0|1]"         action
  (setting it to 0 gives the same minimap and viewport visibility as the selected team)

- Added "OverheadTiltSpeed" config parameter

- Fixed the unit-limit vs. sharing bug

- Shadow mapping works for SM3

-- 0.74b1 --------------------------------------

- Linux vs Windows is now synced if binaries are built using gcc 4.0 or higher.

- Games with more then 10 players now work properly.
- Several improvements and fixes for autohosting, including a .kickbynum command.

- Added minimap commands (two modes, see the MiniMapFullProxy config param)

- Added "MiniMapGeometry" config parameter
- Added "TooltipGeometry" config parameter
- Added "TooltipOutlineFont" config parameter
- Added "InfoConsoleGeometry" config parameter

- Added "/resbar [0|1]" action
- Added "/tooltip [0|1]" action
- Added "/specteam <number>" action  (sets the spectator team)

- Added "newAttackMode" and friends to "ctrlpanel.txt"

- Added animated line stippling for queue rendering  (see cmdcolors.txt)

- Cursors can now use TGA and PNG file formats
- Added an optional cursor control file for easier timing/frame control

- Renamed the /layout command to /luaui
- Renamed the "ctrlpanel.lua" file to "gui.lua"

- Added "timewait [seconds] ["queued"]" action
- Added "deathwait ["queued"]" action
- Added "squadwait [count] ["queued"]" action
- Added "gatherwait" action
- Added "gathermode [0|1]" action

- Added a number of features to the LuaUI
  (see Documentation/lua_ui_interface.txt)

- Improved the outline font rendering speed

- numbers in .info list are now team numbers, so they match with '.team X' commands.
- names are now prefixed with 's:' 'a:' or 'e:' for respectively spectators, allies and enemies.
- if spectating, an arrow is displayed in front of the team you are currently watching.

- added Shift and Alt/Meta group selection modifier features
  (Shift adds members to current selection, Alt/Meta toggles them)

- added the  "viewsave <name>"  and  "viewload <name>"  actions
- added GetCameraState() and SetCameraState() to the lua GUI interface

- added "selectcycle [restore]" action

- fixed queue build rendering (GL_DEPTH_TEST)

- added GetUnitHealth(), GetTeamResources(), and GetCommandQueue() to the lua GUI interface
- enabled loading the "ctrlpanel.lua" file from the VFS

- added "wait queued" and "selfd queued" to the default key bindings
- fixed WAIT behaviour for factories
- enabled queuing of Self Destruction commands
- added a pathetic SELFD cursor

- added "alwaysDrawQueue" and "buildBoxesOnShift" to cmdcolors.txt

- added the "invqueuekey [0|1]" action, and [InvertQueueKey=0] config parameter
- added mouse rocker gestures for immediate mode access when using inverted queue keying

- AIs can query a unit current fuelstorage via GetProperty() with property AIVAL_CURRENT_FUEL (2).
- AIs receive seismic pings via HandleEvent() function with message AI_EVENT_SEISMIC_PING (5).
- The icontype of enemy units is remembered if they are under continuous radar coverage.
- Ghosted buildings under continuous radar coverage don't have an error vector in their position anymore.
- Ghosted buildings also turn into unit icons when far away.

- Improved clickability of unit icons.

- Calling emit-sfx 2048 from a script will now allways fire the weapon. Emit-sfx 4096 will now take over the previous behavior of detonating the weapon at the piece position.

- Added unit FBI tag UnitRestricted to limit the number of a unit type allowed in a game.

- Added CLOAKED (76) and WANT_CLOAK (77) to get/set in cob script.

-- 0.73b1 --------------------------------------

- added the ability to layout the control panel widget layout with a LUA script
  (uses a file called "ctrlpanel.lua")
- added the "/layout" command for direct interaction with the layout lua script

- Map packs (ie. multiple maps in one archive) are officially unsupported now because of technical reasons.

- Added keyword "dir" to explosiongenerator, this is a vector and can be diferent depending on what created the explosion.
  If created at a weapon impac it is the direction of the impact.

- Added the abillity to call explosiongenerators and weaponfire from within script via emit-sfx command.
  Explosiongenerators to be called via script are defined in the unit TDF file in a section called SFXTypes, with tags explosiongenerator+n=some_explosion
  and then called via emit-sfx 1024+n.
  Weaponfire are called via emit-sfx 2048+weapon_to_fire.

- added "ctrlpanel.txt" configuration file to control how the Control Panel
  is rendered (x/y icons counts, sizes, positions, prev/next menu icon
  locations, etc...)
- added an option in "ctrlpanel.txt" to render some of the screen text with
  an outlined font. This is a hack, and can cause FPS decreases on slower
  computers (main factor is blended fill-rate)

- added an outline around the minimap

- fixed reclaim exploit where extra metal was gained if you destroyed the building just before it would finish reclaiming.

- added "cmdcolors.txt" settings file to configure control indicator rendering
  (this includes command queue lines and ranges, highlighted unit ranges, the
   mouse selection box, and the selected unit boxes)
- added line width specification for items in "cmdcolors.txt"
- added blending mode specification for items in "cmdcolors.txt"

- removed "NoSound" config parameter in favour of "MaxSounds=0"
- passthru to the NullSound driver if there is a sound driver error

- added a page number to the control panel
- added "buildiconsfirst" command to toggle the order of control panel icons
  (also set the control panel page number to the cmdcolors.txt build color
   when the build icons are being placed first)

- added build range circles for immobile builders when holding shift over them

- added the techLevel variable to UserDef, with automatic detection of the
  tech levels in a mod based on the information in the sidedata.tdf file
- added the "techlevels" action, to save the tech levels to techlevels.txt
  (as well as sending them to stdout)
- display a unit's TechLevel in the tooltip window when cheats are enabled

- key commands now work while the GUI interface is hidden, and the default
  command cursor icon is updated as well
- change the control panel page when a key command accesses an off-page icon
- change the tooltip to reflect the unit being built rather then the builder
  while selecting the build position
- added cycling for command actions when more then one is available
- added "iconpos <#>" action, for positional access to control panel icons
- added "firstmenu" action  (resets the control panel to its first page)

- added "keyset" command for named keysets
- added "keysym" command for custom key symbols
- added "fakemeta" key binding command to provide another modifier

- added SmoothLines and SmoothPoints config parameters  (anti-aliasing)
  (0 = off,  1 = fastest,  2 = don't care,  3 = nicest)

- changed GameInfo so that it always displays map name and mod name

- group AI code now permits multiple AIs per dll/so. This is handled by
  identifying group AIs by a new datatype, 'AIKey', rather than using just
  the dll name. Group AI dlls should now implement GetAiNameList to return an
  array of available AI names in string (const char*) form, terminated by NULL.
  The existing group AI interface functions GetNewAi, ReleaseAi, and
  IsUnitSuited now take an unsigned aiNumber as their first parameter: this
  is a zero-based AI index, matching the array returned by GetAiNameList.

- improved default command selection

- added "/water   [0-3]" to control water rendering in-game
  (the optional number is the mode; without the number, it cycles through the modes)
- added "/shadows [0-1]" to control shadow rendering in-game
  (the optional number means off/on; without the number, it toggles)

- Fix mouse-drag-move to make units spread across the front if it's big enough, also somewhat take into account unit sizes. Added CTRL-Move, CTRL-Mouse-Drag(front) move to make units move at the speed of slowest unit.
- [bugfix] Resource expendature now shows correct pull when economy is stalling.

- - Added transparency suport from texture2 in s3o drawing, requires advanced shading.
- added DualScreenMode and DualScreenMiniMapOnLeft configuration flags.
    This causes the game view width to be one half of the screen width, so the minimap can take the other half.
    You will need to spread your spring window across the 2 screens.
    Specifying DualScreenMiniMapOnLeft will place the minimap on the left hand screen, rather than the right (the default)
- geothermal vents with a geothermal unit on top will not create smoke.

- Added the following Unit FBI tags:
	canPatrol=1; Can the unit go on patrol
	canGuard=1; Can the unit guard things
	canAttack=1; Can the unit attack other units
	Reclaimable=1; Determines if a unit can be reclaimed by other units
	noAutoFire=0; (if set to 1, unit will fire once then switch to next target, and needs to be told to fire manually)
	canBuild (can the unit start new construction projects)
	canRepair (can the unit repair other things)
	canRestore (can the unit restore deformed ground)
	canReclaim (can the unit reclaim other things)
	canAssist (can the unit assist construction projects already started)

- added support for teamcolored nanospray (user option). Can be forced off by modder using gamedata/particles.tdf.
- new fbi tag shownanoframe: set to 0 to disable nanoframe while the unit is being built.
- new fbi tag shownanospray: set to 0 to disable nanospray.
- new fbi tag nanocolor: color of the nanospray and the nanoframe in red green blue format (white = 1 1 1).
  (These three fbi tags apply to the unit itself; not to the unit it's building.)

- linux vs linux is now synced, independently of the distribution & gcc version
- if host finishes loading before client executable is started spring no longer loses connection

- added the "say" action  (does work with the .give command)

- changed .clock and .info to local commands (/clock and /info now work as well)

- replaced key binding code with a more flexible solution:
  * can specify key for almost all commands (including unit builds)
  * can specify modifiers (Alt, Ctrl, Meta, Shift)
  * can bind the same key to more then one action
    (first available action is used, handy for build orders)

- added internal default bindings  (see rts/Game/UI/KeyBindings.cpp)
- added "unbindall"                command
- added "unbindKeyset    <keyset>" command
- added "unbindAction    <action>" command
- added "unbind <keyset> <action>" command
- added "bindbuildtype ..."        command  (aka: auto-binder)

- added "hotbind"   action for the control panel icons  (Ctrl+insert)
- added "hotunbind" action for the control panel icons  (Ctrl+delete)

- added /keysave and /keyload commands
  (keysave saves to "uikeys.tmp", not "uikeys.txt")
- added /keyprint, /keydebug, /keysyms, and /keycodes commands
  (these commands send information to stdout)

- added ability to specify item in icon mode buttons via its binding
  (ex:  "firestate 0" binding will set firestate to hold fire)

- added ability to specify item in combo box buttons via its binding
  (ex:  "aiselect Radar AI" binding will assign the selected units to the Radar AI)

- pseudo mouse actions now discard key repeats

- added command queue icons
- added build command queue directional lines
- added AreaAttack command queue area display

- added game info panel (with "gameinfo" and "gameinfoclose" actions)  (i)

- versionned the "archivecache.txt" filename (ex: "ArchiveCacheV4.txt")

- Quit and Share menus close when they receive ESC

- added "drawlabel" action  (avoid the double-click, and key repeats)

- added "screenshot png" action

- added "chatAll"        action
- added "chatSwitchAll"  action
- added "chatAlly"       action
- added "chatSwitchAlly" action
- added "chatSpec"       action
- added "chatSwitchSpec" action

- added tracked unit rotation
- added Average and Extents tracking modes
- added "trackoff"  action
- added "trackmode" action

- added "viewfps" action     (Ctrl+f1)
- added "viewta"  action     (Ctrl+f2)
- added "viewtw"  action     (Ctrl+f3)
- added "viewrot" action     (Ctrl+f4)

- added "firestate" action
- added "movestate" action
- added "prevmenu"  action   (,)
- added "nextmenu"  action   (.)
- added "buildunit_<name>" action
- added "deselect" action
- added "select <selection criteria>" action  (redundant)

- added new water rendering mode, refracting+reflecting but without the heavy dynamic simulation.
- Added '--quit=T', '/quit T' commandline option to auto-quit spring on game over or after T seconds.
- Added '--minimise', '/minimise' commandline option to start spring minimised.
- added gradual feature reclaiming, see mantis #262
- support for rotating buildings by 90 degrees, bind to "incbuildfacing" and "decbuildfacing" (bound to ']' and '[' by default)
- modified the ground attack command for queued attack and area attack patterns
  (the last queued attack position is repeated for backwards compatibility)
- removed the height factor from AirCAI ground attack command drawing
- added word completion, with dot commands, player names, and unit names
  (does partial match reporting, and the unit names are only active for .give commands)
	-> "/<tab>" will show local commands
	-> ".<tab>" will show remote commands
- added console input history buffer
- added [DoubleClickTime=200] config parameter
- added [WindowEdgeMove=1], for folks who run windowed with fullscreen size
  (ex: good with X11/icewm to allow moving between virtual screens,
       and to avoid display lockups during crashes)
- disabled rendering while inactive (minimized)
- added a null sound driver [NoSound=1]
- merged global synced/unsynced "drawdebug" variables
- added vsync for GLX
- windows users can use [VSync=-1] to use system default
- allow selection of vsync rate

- [feature] A new group AI, "MexUpgrader AI" has been added. See http://springrts.com/wiki/MexUpgrader_AI for more info.
- [feature] Custom unit icons are supported. See http://springrts.com/wiki/CustomUnitIcons for more info.
- [bugfix] 'Quit and Resign' dialog now also appears when you're hosting, and stays hidden when the game is over.
- [bugfix] Commands on enemy units (attack, reclaim) get canceled automatically when the unit leaves LOS / radar.
- [change] 'Quit and Resign' dialog now only gives everything to allies (and not enemies) if they are still alive.
- [change] The LOS drawing mode is remembered when you switch back and forth to others (e.g. metalmap, heightmap).
- [change] Radar and jammer range is shown by default if you press 'L'.
- [change] Radar and jammer toggle ';' happens instantly.

- New weapon tdf tag ColorMap, used for some weapon to define the color shift during their lifetime
	Used in flamethrower.
	Tag specify either a bitmap file, ex: "colormap = mycolormap.tga;"
	or defines the color directly in the weapon file in rgba order where 1 is full brightnes,
	ex: "colormap=1 0 0 1 0 0 0 1" start with red color and shift to black at the end.

- New weapon tdf tag rgbcolor2, used to make laser weapon have different color at the center, defaults to white.
- New weapon tdf tag corethickness, how thick the inner color of a laser is, this is a percentage value, default is 0.25
- New weapon tdf tag laserflaresize, size of the flare for laser weapons, multiplier for thickness, default 15.
- New weapon tdf tag LargeBeamLaser, if set to 1 a beamlaser uses an alternate graphics effect.
	New tags usable for a LargeBeamLaser is:
		tilelength: defines the length before the texture used is repeated (tiled).
		scrollspeed: how fast the beam apears to be moving towards it target.
		pulseSpeed: how fast the pulsating effect at the beam start is.

- Texture tag added to the explosiongenerator for HeatCloud and Dirt
- New weapon FBI tags, texture1, texture2, texture3, texture4, the texture must be defined in resources.tdf in the projectile section.
	MissileProjectile (standar rockets and guided missiles):
		texture1 = flare
		texture2 = smoke
	LaserProjectile:
		texture1 = laserbeam
		texture2 = Start and end of the beam (half of the texture used at either end.)
	BeamLaserProjectile:
		texture1 = laserbeam
		texture2 = Start and end of the beam (half of the texture used at either end.)
		texture3 = muzzle flare
	LargeBeamLaserProjectile:
		texture1 = laserbeam
		texture2 = Start and end of the beam (half of the texture used at either end.)
		texture3 = Extra graphical effect at the start of the beam.
		texture4 = muzzle flare
	StarBurstProjectile (starburst weaponry, like nukes):
		texture1 = flare
		texture2 = smoke
		texture3 = flame
	EmgProjectile
		texture1 = texture for the projectile
	LightningProjectile
		texture1 = texture for the lightning
	ExplosiveProjectile (used in most plasma cannons)
		texture1 = texture of the projectile, will be blended multiple times.


- tdf tag duration is used for laser weapons.
- tdf tag rgbcolor is used for EmgProjectile and ExplosiveProjectile.
- tdf tag intensity is used for EmgProjectile and ExplosiveProjectile.
- New weapon tdf tag soundstartvolume and soundhitvolume.
- New weapon tdf tag size, defines the visible size of projectiles.
- New weapon tdf tag CollisionSize, defines the physical size of projectiles, percentage of size for flamethrower and absolute value emg, plasma and laser.
- New weapon tdf tag sizegrowth, defines how fast flame projectiles will grow in size.
- New weapon tdf tag flamegfxtime, this makes the flame projectile stay alive as a graphical effect (doesnt do any damage) after it has reached maxrange.
	Default is 1.2 which makes it stay alive 20% beyond maxrange.
- New weapon tdf tag AvoidFriendly, if set to 0 units will not try to avoid friendly units in their line of fire.
- New weapon tdf tag CollideFriendly, if set to 0 this weapon will not hit friendly units.
- New weapon tdf tag ExplosionSpeed
- edgeEffectivness added for weapons

- Added limited fuel settings for units (only work for aircrafts so far, need a good mechanism for refueling other stuff)
-  New fbi tag MaxFuel, max fuel in seconds that the unit can carry, default 0 = unlimited
-  New fbi tag RefuelTime, how long time it takes to fully refuel the unit, default 5
-  New fbi tag MinAirBasePower, minimum build power an airbase unit must have for the aircraft to land on it, default 0
-  New fbi tag WeaponFuelUsage<1-16>, how much fuel in seconds that firing the weapon takes from the owning unit, default 0
-  New fbi tag SeismicDistance, give the unit a seismic sensor for detecting movement through the ground.
-  New fbi tag SeismicSignature, The magnitude of seismic disturbance when this unit is moving, default sqrt(mass/100).
- New COB "get"/"set" constant: 75 MAX_SPEED get/sets the max speed of the unit (multiplied with 64k)

- New archive format (for map/mod development): *.sdd. It is a directory, but it is treated as an archive just like *.sdz and *.sd7.
- New map format SM3, currently supported for testing purposes.


-- 0.72b1 --------------------------------------

- Bos/Cob script for units can now animate the death of the unit. Just have the Kill function return after a while instead of directly and return wreck level in return value instead of in function argument.
- Fixed the com dies, game ends exploit: sharing your com now kills you
- Fixed a bug causing clients not to quit when server quits
- Fixed crash bug normally resulting in dialog with "no rtti data"
- ".give" cheat command doesn't desync the game anymore
- Made "Team0() is no more" message customizable by modders (see XTA for an example).
- Added weapontag "paralyzetime", controls how long a unit can maximaly be paralyzed after being hit by this weapon, default 10
- Adds some new options in the settings program for scroll speeds
- Added new fbi tag "levelground" set this to 0 to prevent a building from leveling ground beneth it. Make sure that the model continue some way below ground so that they dont look like they float in air.
- Fixed torpedo aircrafts not being able to attack subs
- Added support for decals on ground below buildings
-  New fbi tag UseBuildingGroundDecal, set to 1 to enable decals for building
-  New fbi tag BuildingGroundDecalType, name of a bitmap in unittextures folder
-  New fbi tag BuildingGroundDecalSizeX,BuildingGroundDecalSizeY, size of decal (same scale as footprint for unit)
-  New fbi tag BuildingGroundDecalDecaySpeed, how fast the decal will fade out after the building has died, default 0.1 (fades out in 10s)
- New fbi tag ShowPlayerName, if set to 1 the tooltip shows the player name instead of the unit description
- Fbi tag HideDamage now actually works: set it to 1 to hide most details in the unit's tooltip from enemies
- New weapon tag "rgbcolor", overrides the old color1 and color2 tags if it exists, gives the color in red green blue format (1 1 1 = white).
- Removed old plasmarepulser system and replaced it with a more generalized shield system
-  New weapon tdf tag IsShield, if 1 mean the weapon is a shield and now a weapon
-  New weapon tdf tag shieldrepulser, 0=destroy projectile,1=repulse (bounce) projectile
-  New weapon tdf tag smartshield, 1=shield doesnt affect allies weapons
-  New weapon tdf tag exteriorshield, 1=shield doesnt affect weapons fired from within shield
-  New weapon tdf tag visibleshield, 1=see a visible shell representing the shield
-  New weapon tdf tag visibleshieldrepulse, 1=see a beam showing when shield repulses something
-  New weapon tdf tag shieldenergyuse, how much energy the shield use when repulsing/destroying something
-  New weapon tdf tag shieldforce, how hard shield can accelerate some sort of projectiles away
-  New weapon tdf tag shieldradius, size of shield effect
-  New weapon tdf tag shieldmaxspeed, maximum speed the shield can push some sort of projectiles away
-  New weapon tdf tag shieldpower, how much power the shield can store, power is drained by the affected weapons damage, 0=infinite
-  New weapon tdf tag shieldpowerregen, how fast the shield regenerates power
-  New weapon tdf tag shieldpowerregenenergy, how much energy the shield uses when regenerating power
-  New weapon tdf tag shieldintercepttype, which types of weapon the shield can affect (bitfield)
-  New weapon tdf tag interceptedbyshieldtype, which types of shields can affect this weapon, if (shieldInterceptType & interceptedByShieldType) is not zero the shield can affect the weapon, default 1 for plasma, 2 for laser, 4 for missiles, 0 for other
-  New weapon tdf tag shieldgoodcolor, color of shield when power is full
-  New weapon tdf tag shieldbadcolor, color of shield when power is empty
-  New weapon tdf tag shieldalpha, how visible the shield shell is with visibleshield=1
- Added auto zooming using scroll + Left ALT key  (patch from colorblind)
- Added simplified LOS drawing (patch from colorblind)
- Fixed mouse speed problems in windows with holding shift.
- Demo filenames with spaces in them work again.
- Changed non-positional sound behavior: only selected units give non-positional sound
- Missile weapons no longer tracks to exact position of non flying units (make missile units weaker against radar targets)
- Stun damage units now receives 1/10 of normal experience and no experience for attacking already stunned units
- Units no longer receive experience for "overkill" damage
- Adds support for using arbitary team colors, teamcolor textures for 3do need to be slightly changed to accomendate this (see the base texture archive to see how its done)
- Increased max camera zoom out (zooming to far can cause slowdowns/graphical glitches)
- Added Radar group AI from colorblind: It notifies the player of incoming enemy units.
- Added custom explosion generator: It can be enabled using "explosiongenerator=custom:SomeExplosionGeneratorName" in the weapon TDF. See the wiki page http://springrts.com/wiki/CustomExplosionGenerators for more info.
- Tab will now bring zoom out to show all map in any camera mode, tab again zooms back to the mouse cursor.
- Added GetGravity(), GetUnitDefHeight() and GetUnitDefRadius() to AI interface
- Mod can now be selected in the single player menu.
- Checksums of the map and mod are checked on game start.
- Mod can be selected when starting the spring exe directly.
- Various other small changes.

-- 0.71b1 --------------------------------------

- Added new water renderer
- Fixed lasers firing two projectiles at once, efficiently doing double damage.
- Fixed several exploits with FPS mode.
- Added new fbi variable CanLoopbackAttack, only affects fighter aircrafts, if 1 this will enable the player to set the aircraft to do an immelman turn after firing instead of overflying the target.
- Changed so units in maneuver mode will abort anything that moves them further than a certain distance from the patrol path
- Added statistics to the end game dialog
- Units with S3O models can explode into pieces.
- Added a " all" option to .give to give all units in loaded mod
- Fixed autoheal being about 4x to fast (or measuring heal per 0.25s depending on how one sees it)
- Improved exception handling and crashreport handling in windows.
- Added DateTime to the [VERSION] block in the demo recorder file
- Removes los from units being transported
- To disable terrain deformation:
   Mapmakers: Put 'NotDeformable=1' in the .smd.
   script.txt: Put 'DisableMapDamage=1' in with the other properties.
- VSync can be disabled with the settings application.
- Several other smaller fixes and improvements.
- Unit reply sounds are non-positional and have a seperate volume setting in the config application. Their volume is also affected by the global volume.

-- 0.70b3 --------------------------------------

- Shift/ctrl do not change rotation speed in rotating camera mode anymore.
- Submarines work again.
- Fixed attack claxxon.
- Fixed units getting stuck in buildings.
- Added possibility to bind mouse1, mouse2 and mouse3 to keyboard.
- Fixed shift+letter bug.
- Fixed Pathing Map (F2 view) bug.

-- 0.70b2 --------------------------------------

- Fixed some (debug) message colors.
- Fixed keyboard layout problems.
- Fixed repeat orders/high trajectory etc not indicating their current state correctly
- Fixed problem with reading hpi archives
- Added custom SDL.dll (1.2.9) with refresh rate patch from SDL CVS, should help with the 60hz issue
- Fixed right shift/ctrl while scrolling.
- Fixed shift/ctrl while middle click drag scrolling.
- Fixed map loading by less strict tdf parser.
- Don't crash on parse errors, but show an error message instead.

-- 0.70b1 --------------------------------------

- First use of crossplatform code! This required a lot of bugfixing and changes, which are not mentioned here.
  Among these changes are switches to using boost, SDL, freetype, instead of Win32 SDK + DirectX. For a full list of changes, see the subversion log.

- XTA Pimped Edition Version 3, a version of XTA with high detail models, is used as the default mod now.
- Binding for mouse button 4/5 added (defaults to Z and X), so you can set build spacing.
- You can enable advanced unit rendering without enabling shadow mapping (in the settings app).
- Various resource files are now read from gamedata/resources.tdf instead of hardcoded into the game exe.
- Added "dontland" unit tag, to specify aircraft that should not land. Don't use this on transport units!
- std::sort related bug fixed in projectile handler
- Fixed flipped features, they are now rendered exactly the same as units.
- A few new COB "get" constants:
   70 MAX_ID             returns maximum number of units - 1
   71 MY_ID              returns ID of current unit
   72 UNIT_TEAM	         returns team of unit given with parameter
   73 UNIT_BUILD_PERCENT_LEFT   basically BUILD_PERCENT_LEFT, but comes with a unit parameter
   74 UNIT_ALLIED        is unit given with parameter allied to the unit of the current COB script. 1=allied, 0=not allied
- Fixed login packets being sent every frame instead of once a second when trying to connect
- Fixed ghosted buildings option.
- Fixed isairbase=1 unit tag.

-- 0.67b3 --------------------------------------

-AI dll's can be used with startscripts again

-- 0.67b2 --------------------------------------

-Fixed black map bug
-Impulsefactor now affects ground damage

-- Lobby changes

- battle hosts can now use /ring <username> command on players participating in their battles
- fixed problem with notification dialog switching focus back to application
- added /rename command which will rename your account (so that people who wish to add clan tags
  in front of their names don't have to reregister and lose their ranks). Player names may now also
  contain "[" and "]" characters.
- fixed small bug in demo script parser
- added /mute, /unmute and /mutelist commands for admins/mods
- clients behind same NAT now get local IPs instead of external one (from the server).
  Note that some issues still exist with currently implemented nat traversal method,
  so players hosting battles are advised to forward their port nonetheless.

-- 0.67b1 --------------------------------------

-Catching AI exceptions can be disabled with the settings app.
-Fixed access-violation bug when creating sky.
-Fixed numerous division by zero bugs.
-Fixed default cursor for indestructible features.
-Beamlaser uses thickness value.
-COB support for Getting/Setting veteran level and unit speed.
	The returned veteran level is unit experience multiplied by 100
	Unit speed can be set to something nonzero only when the current speed is nonzero, it can always be set to zero.
-Overhead camera can be tilted with control key + mousewheel now.
-Debug message verbose level can now be set with the settings application. (Modified update by Alantai)
	This will only affect AI console messages.
-Ghosted buildings can now be disabled by the lobby. They are enabled by default.

-- 0.66b1 --------------------------------------

-Fixed transport units being able to load themself.
-Fixed gunship like aircraft always having the same altitude
-Fixed torpedo aircrafts now being able to attack underwater targets
-Support for upright, flammable and indestructible feature tags
-Fixed division-by-zero bug in bomb-dropper.
-Fixed access-violation bug in pathfinder.

-Added new s3o unit format


-Added new tags to .fbi file
	autoHeal	-	health per second that a unit allways will be autohealed for (default 0)
	idleAutoHeal	-	health per second that a unit will be autohealed for whenever its idling (default 10)
	idleTime	-	time in ticks without any action before a unit is considered idling (default 600)
-Added new tags to weaponfile file
	NoSelfDamage	-	Units take no splash damage from its own weapon
	impulsefactor	- 	Explosion impulse will be multiplied by this


-Added read access to the virtual filesystem for the AI
-Further AI interface updates will now be backwards compatible (old AI's will not break on a new spring release)
-Added user input functions from Alik to the AI interface
-The global AI will now be notified if a unit changes team.
-UnitDestroyed/EnemyDestroyed get the attacker unit id if any (by submarine)


-- 0.65b2 --------------------------------------

-Fixed crash with factories closing at the moment they die

-Fixed sync error on water maps
-Increased max players/teams to 32/16

-Added support for selecting which globalai-dll to use when starting spring.exe directly
-Added support for having more than one lua startscript. Put them in subfolder "startscripts".

-Added UnitMoveFailed to global AI interface. Called when ground units fail to move to their destination.

-- 0.65b1 --------------------------------------

-Fixed crash bug involving radars on non square maps
-Fixed crash bug involving gunships landing on repairpads that get destroyed
-Fixed crash bug involving large units exploding

-Fixed resurrected building not having a footprint
-Increased time to reclaim wreckages
-Fixed acceleration for units not being correctly set from fbi file
-Fixed slope of map not getting updated properly for craters
-Fixed sonar jamming
-Can now switch viewed team when spectating using keys 1-9
-Added faster reload speed for experienced units
-Added support for multiplayer replays where several players can watch a reply at once
-Added option for minimap to show colors only based on owned(green),ally(blue),enemy(red)

-Added new FBI tag TransportMass, this is the maximum weight a tranporter can transport, default 100000
-Added new FBI tag Mass, this is the weight of the unit, default is metalcost of unit
-Added new FBI tags to set the control variables for aircrafts
-Added new FBI tag OnlyTargetCategory<weaponnum>, sort of like badtargetcategory but the weapon can only target units with these categories,toairweapon in weaponfile is the same as OnlyTargetCategory=VTOL; default is all categories
-Added bindings for creating startscripts in lua. See testscript.lua for an example. Note that you can only have one script (must be called testscript.lua), and that it is possible that the interface will change.

-Fixed bugs in the AI interface GetMetal* and GetEnergy* functions, they returned the values of the human player.
-Moved shared functions in the GroupAI callback and GlobalAI callback to a new AICallback interface. For AI developers: This means a small adjustment of your current code will be required to get it compiled again.

-- 0.64b1 --------------------------------------

-Solved troublesome crash bug involving several pointers to a single object
-Fixed crash when calls such as get PIECE_XZ were used in the Create function of a unit

-SetSfxOccupy now updates correctly when unit is being transported
-Added support for aircrafts auto landing to repair when health gets low
-Removed autorepair while unit is flying
-When a unit has finished firing a burst the script function EndBurst<weaponnum> will now be called, use this instead of Fire<weaponnum> to switch pod/barrel etc to fire from to lessen friendly fire incidents
-Removed warning message when using transports

-New map smd tag map/voidwater, creates a void where there would normally be water, this is a purely graphical effect,default 0
-New command .give, .give <num> <unitname> gives you num units of type unitname, requires cheats to be on, only use in singleplayer
-Added support for aircrafts auto landing to repair when health gets low
-Added command .kick <playername> that server can use to kick out players from game
-Updated global AI interface with GetNumUnitDefs() and GetUnitDefList()

-- 0.63b2 --------------------------------------
-Fixed crash when using new formation move commands
-Script interpreter now warns about incorrect piecenames in scripts instead of crashing

-- 0.63b1 --------------------------------------

-Fixed multi delete error in LosHandler
-Fixed crash with features defined in mapfile

-Fixed problem with having more than one map in the same archive
-Pathmap display (F2) can now also show where selected building can be built (slow though, esp with large maps and buildings)
-Spring now remember the last a: etc prefix used in chat msgs
-Resurrecting a unit now cost half the energy of building it
-Changed so spring can keep several different path precalcs on disk for a single map, this will save recalculations for ppl switching mods a lot

-Added CMD_WAIT command to have units wait for a transport. Can be issued with the W key, can also be used to que up stuff and then releasing the unit to do it.
-Added tag "LIGHT\\SpecularSunColor" to smd file, modifies the color of the specular highlights on units, defaults to LIGHT\\UnitSunColor
-Added tag "isAirBase" to unit FBI file, sets if the units that are being transported will be stunned or not, defaults to 0.
-Spring can now use up to 16 weapons, use Weapon<1-16> and BadTargetCategory<1-16> in fbi file and QueryWeapon<1-16> AimWeapon<1-16> AimFromWeapon<1-16> FireWeapon<1-16> functions in scripts. Primary,secondary etc is aliased to weapon 1-3 but try not to mix old and new names in the same unit.
-Added new fbi tag WeaponSlaveTo<x>=y, this will force the weapon x to use the same target as weapon y (y must be a lower numbered weapon than x). Might be usefull for say a mech like unit with many different weapons that should target in the same direction.
-Added new fbi tags WeaponMainDir<1-16> and MaxAngleDif<1-16>. WeaponMainDir is a vector and defines the center direction of a cone in which the weapon can aim while MaxAngleDif defines how broad the cone is. Default WeaponMainDir = 0 0 1; (forward) and MaxAngleDif=360; (can fire everywhere)
-Added support for loading TA:K COB files and implemented the TA:K-specific opcode play-sound.
-Added some simple formation handling to the standard groups, hold alt on move to make them form an aproximate square and drag mouse to make them form up behind a front
-Added missile tdf tag wobble, this is in the same as turnrate except that it will turn in random directions instead of toward the target,default 0
-Added missile tdf tag trajectoryHeight, this sets in how high an arc the missile will move toward the target,0 = straight, 1=45 degree above, can be anything>=0, default 0
-New start file tag LimitDgun, if 1 it restricts dgunning to a radius around your startpos, size depending on mapsize, default 0
-New start file tags AllyTeam<x>/StartRect<Top.Bottom,Left,Right>, allows host to define where different allyteams might start on the map, given in the range 0-1 and scaled with map size

-- 0.62b1 --------------------------------------

-Fixed crash when units exploded

-Mines no longer block terrain and can be overun (and if you are crazy built on top of :) ), removed ability for mines to hold fire since they would be completly undetectable.
-Heightmap view (F1) now updates correctly when terrain changes
-Pathcost view (F2) now works in non cheating mode but will then only show terrain modifiers
-Fixed gunships being able to fly below ground when comming in on step slopes
-Auto sharing now starts at 99% instead of 100% at startup meaning that there is less chance of the team losing resources because someone forgets to set it

-Installer associates .sdf files with spring.exe
-Spring.exe now accepts a demo filename on the commandline and starts playing it directly
-Added tag "MAP\\DetailTex" to smd file to specifiy map specific detail texture, default is bitmap\detailtex2.bmp, map specific textures should be placed in maps directory.
-Added possibility for surface of units to be shiny/reflective by using the alpha channel of the textures
-Addded command .take, will take the units from all teams allied with you that is missing a player (due to disconnect etc) and transfer them to your team

-- 0.61b2 --------------------------------------

-Added tag "WATER\\WaterTexture" to smd file to specify another texture for the map than the default ocean.jpg (mapspecific water textures should be in the maps directory)
-Added tag "WATER\\WaterSurfaceColor" to smd file, changes the surface color of the water when using reflective water (default is 0.75 0.8 0.85 ).
-Fixed error msg while loading certain jpeg files
-Fixed spawn.txt not being readable from archives
-Fixed problem with reading large files from sd7 archives (such as skyboxes)

0.61b1 --------------------------------------

-Fixed crash in weapon aiming
-Fixed some other crashes
-Fixes some memory errors

-Fixed aircrafts landing outside map
-Fixed infinitly rotating starburst missiles
-Fixed different tracks getting superimposed on each other
-Plasma cannons should now detect mountains in the fire path better
-The generated path information for maps is now stored zipped in the subdirectory "paths"

-Added scar marks on map to explosions
-Can now control spacing when rowbuilding using the forward/back buttons (xButtons) on mouse
-Spring now attempts to find bmp or jpg files in bitmaps\loadpictures to use as background while loading
-Some messages now show their location on the minimap
-Moved spawn.txt into xta archive by default to allow replacements by other mods, and replaced it with "Storm Easy AI v1.0"
-New weapon tdf value, TargetMoveError, makes the weapon worse at hitting moving targets, default 0
-New weapon tdf value, MovingAccuracy, replaces the normal accuracy value while the unit is moving, defaults to normal accuracy of weapon
-New weapon tdf value, thickness, controls the thickensess of lasers, default 2
-New weapon tdf value, intensity, controls the alpha value of lasers, default 0.9
-New smd terraintype value, receivetracks, if this is 0 there wont be any tracks from units on this terrain type, default 1

-- 0.60b1 --------------------------------------
-Added tag SmoothAnim=0/1 to the fbi. If it is 1, unis will use animation interpolation
-Added MAP\\WATER\\WaterPlaneColor tag to maps to set the color of the waterplane beneath the ground
-Added MAP\\ATMOSPHERE\\SkyBox tag to maps to use a dds cubemap as a sky instead of the cloud rendering
-Added an optional BuildPic tag to the units so they can use other than pcx buildpics
-Fixed crash when unit closed in on their destination

-Slopes are now calculated differently
-Random start order should now be more random
-Fixed commiting delayed animations before using getunitval
-Radar now jams everyones radar including your own. We will see how this turns out.
-New map format, adds ability to read texture from external (shared) files and a new terrain type overlay map
-Made ballistic weapons range somewhat more dependent on relative height of weapon and target
-Paralyzer tag for weapons now work
-CanCapture tag for units now works
-HighTrajectory now requires a HighTrajectory tag in the unit file (0=only low, 1=only high,2=choose)
-Ground under DT/FW get same kind of protection as under buildings, we will see how it works out
-"Slow" explosions, stuff far away from big explosions will have their damage delayed a bit

-Added globalai interface and changed groupai interface a bit
-Added resurrection capability
-Added support for regular zip archives. Using extension "sdz" to avoid confusion.
-Added support for 7zip archives. (http://www.7-zip.org/). Using extension "sd7" to avoid confusion. Note that it is probably not a good idea to use solid archives since Spring does not access the files sequentially.
-Added beamlaser type weapon
-Added possibility of units leaving tracks on map
-Added some new options to the game start file
-Added new camera mode rotatable overhead camera
-Added Flare capability to units to decoy incoming missiles

-Added boot option for battleroom host
-Hopefully fixed unit sync and some other bugs in battleroom

-- 0.51b1 --------------------------------------
-Fixed a cob animation related crash
-Fixed crash using "simple formation ai"

-Fixed auto resource sharing, could share to enemies or not at all before
-Floating features now works
-Con air now stay within radius of build object better
-Spectators can no longer select start pos
-Yet more pathfinding/movement fixes
-Fixed timeout when host calculating paths
-New ingame command for host .nopause , prevents player from pausing game. Also harder to spam log with changespeed msgs now.
-Changed targeting calculations, now switch from badtargetcategory targets faster and never switch to them from other sort of targets even if those go out of los/radar
-Changed so several units cant reclaim a feature at once
-Flakker like units can now target fast units better

-- 0.50b2 --------------------------------------

-Changed default DamageModifier to be 1 instead of 0
-Fixed so units no longer can dip slightly into lava and explode
-Adds a random enemies script for those that really want to test in single player. The enemies are read from spawn.txt (frame/enemyname pairs) and spawns at startpos 1-3 randomly

-- 0.50b1 --------------------------------------

-Added support for set/get of unit variable ACTIVATION (allowing solars to close under attack for example)
-Added call to cob function SetMaxReloadTime for better ta unit compatibility
-Added stack boundary checking to cob interpreter
-Fixed buffer overrun problems in the sunparser
-Fixed threads contending over single global netbuf (hopefully no more netmsg errors)
-Now connects from the same udp port as connecting to (semi random before)

-Units can no longer move over infinite sloops
-Improved the pathfinder/movesystem
-Contruction units can no longer repair themselves
-Repair/Build/Reclaim now turn of cloak
-Unit paths are now only visible when cheats are enabled in debug mode
-F2 now shows the map from a pathfinding perspective if cheats are enabled
-Fixed grass not being drawn
-Previously visible buildings now stays on the map in a ghost state

-Added support for larger maps
-Added some more range circles
-Added keyboard bindings for mousewheel (pageup/down as default)
-Added guard order to aircrafts
-New .smd command MAP/WATER/WaterDamage. Indicates the amount of damage per second units take for being in "water". Make it >1000 to prevent ground units from entering water entirely, >10000 prevents hovers from moving over water.
-New in game commands for host .setmaxspeed .setminspeed sets the maximum and minimum game speeds

-- 0.41b1 --------------------------------------

-Removed log spam with Use of GetPieceDir..
-Fixed "Error looking up server from ip" errors when trying to connect
-Fixed zero size units bug
-Can no longer overflow network buffer with large build orders
-Non square maps no longer crash
-Fixed some random crash bugs
-Added more filtering to the server and clients to filter out invalid net msgs

-Host can now force start the game with ctrl+return if not everyone show up
-Fixed repeat order for factories
-Units can no longer move onto terrain they cant move off (boats on land etc)
-Units can no longer die due to getting outside map
-Changed the alignment on buildings, fixes two buildings qued beside each other ending up blocking each other
-Buildings no longer decay when builder has slow animation
-Radar/jammer units now correctly updated when changing team

-New .smd value, MAP/AutoShowMetal. Set it to 0 if you dont want players to switch to metalmap view when selecting an extractor. (because you have created visible metal deposits on the map)
-New .smd value, MAP/MapHardness. Set how hard it is to create craters in map, default 100.
-Made it slightly easier to build buildings on slopes
-Made it somewhat harder to dig deep holes

-- Lobby changes

-Added extended ascii support in chatrooms.  Can now use accent characters
-Added test button to battle host menu. It will tell the server to try and conncet to you on the port you specified, letting you know if others will be able to as well.
-Now can tell which battles are in progress, and which are still open
-Fixed bug that allowed more than the max number of players into a room
-Added ability to launch a browser when links are sent in a chatroom
-Added unit syncing.  Now if users have different units, the differences are disabled
-Fixed a bug that allowed invalid log in names to be submitted

-- 0.40b2 --------------------------------------

First public release