diff --git a/src/TSMapEditor/Config/Bridges.ini b/src/TSMapEditor/Config/Bridges.ini
index b1f5b325..abf2acde 100644
--- a/src/TSMapEditor/Config/Bridges.ini
+++ b/src/TSMapEditor/Config/Bridges.ini
@@ -6,8 +6,8 @@
[Bridges]
0=Low Bridge
-;1=High Bridge
-;2=Railroad Bridge
+1=High Bridge
+2=Railroad Bridge
[Low Bridge]
Kind=Low
diff --git a/src/TSMapEditor/Config/ConnectedOverlays.ini b/src/TSMapEditor/Config/ConnectedOverlays.ini
index ba0c9443..07070d6c 100644
--- a/src/TSMapEditor/Config/ConnectedOverlays.ini
+++ b/src/TSMapEditor/Config/ConnectedOverlays.ini
@@ -4,24 +4,17 @@
; Configuration for the connected overlay painting tool
[ConnectedOverlays]
-0=BRIK
-1=BRIK_DAMAGED
-2=SBAG
-3=SBAG_DAMAGED
-4=BARB
-5=BARB_DAMAGED
-6=FENC
-7=CYCL
-8=CYCL_DAMAGED
-9=WOOD
-10=WOOD_DAMAGED
-11=BRIK_NON_ISOMETRIC
-12=SBAG_NON_ISOMETRIC
-13=CYCL_NON_ISOMETRIC
-14=WOOD_NON_ISOMETRIC
-15=TRACKS
+0=GAWALL
+1=GAWALL_DAMAGED
+2=NAWALL
+3=NAWALL_DAMAGED
+4=GASAND
+5=TRACKS
+6=VEINS
; [Name]
+; UIName=Display name [OPTIONAL]
+; RelatedOverlays=Other connected overlays that this one can connect to [OPTIONAL]
; ConnectionMask=BitArray(8), whether the overlay can connect in those directions at all
; Order: NE, E, SE, S, SW, W, NW, N
; Frames=FrameCount
@@ -29,808 +22,273 @@
; FrameN.FrameIndex=Overlay frame to use
; FrameN.ConnectsTo=BitArray(8), what sides this particular frame is connected to
-[BRIK]
-UIName=Concrete Wall
-RelatedOverlays=BRIK_DAMAGED
+[GAWALL]
+UIName=GDI Wall
ConnectionMask=10101010
+RelatedOverlays=GAWALL_DAMAGED;,GAWALL_VERY_DAMAGED
Frames=16
-Frame0.Overlay=BRIK
+Frame0.Overlay=GAWALL
Frame0.FrameIndex=0
Frame0.ConnectsTo=00000000
-Frame1.Overlay=BRIK
+Frame1.Overlay=GAWALL
Frame1.FrameIndex=1
Frame1.ConnectsTo=10000000
-Frame2.Overlay=BRIK
+Frame2.Overlay=GAWALL
Frame2.FrameIndex=2
Frame2.ConnectsTo=00100000
-Frame3.Overlay=BRIK
+Frame3.Overlay=GAWALL
Frame3.FrameIndex=3
Frame3.ConnectsTo=10100000
-Frame4.Overlay=BRIK
+Frame4.Overlay=GAWALL
Frame4.FrameIndex=4
Frame4.ConnectsTo=00001000
-Frame5.Overlay=BRIK
+Frame5.Overlay=GAWALL
Frame5.FrameIndex=5
Frame5.ConnectsTo=10001000
-Frame6.Overlay=BRIK
+Frame6.Overlay=GAWALL
Frame6.FrameIndex=6
Frame6.ConnectsTo=00101000
-Frame7.Overlay=BRIK
+Frame7.Overlay=GAWALL
Frame7.FrameIndex=7
Frame7.ConnectsTo=10101000
-Frame8.Overlay=BRIK
+Frame8.Overlay=GAWALL
Frame8.FrameIndex=8
Frame8.ConnectsTo=00000010
-Frame9.Overlay=BRIK
+Frame9.Overlay=GAWALL
Frame9.FrameIndex=9
Frame9.ConnectsTo=10000010
-Frame10.Overlay=BRIK
+Frame10.Overlay=GAWALL
Frame10.FrameIndex=10
Frame10.ConnectsTo=00100010
-Frame11.Overlay=BRIK
+Frame11.Overlay=GAWALL
Frame11.FrameIndex=11
Frame11.ConnectsTo=10100010
-Frame12.Overlay=BRIK
+Frame12.Overlay=GAWALL
Frame12.FrameIndex=12
Frame12.ConnectsTo=00001010
-Frame13.Overlay=BRIK
+Frame13.Overlay=GAWALL
Frame13.FrameIndex=13
Frame13.ConnectsTo=10001010
-Frame14.Overlay=BRIK
+Frame14.Overlay=GAWALL
Frame14.FrameIndex=14
Frame14.ConnectsTo=00101010
-Frame15.Overlay=BRIK
+Frame15.Overlay=GAWALL
Frame15.FrameIndex=15
Frame15.ConnectsTo=10101010
-[BRIK_DAMAGED]
-UIName=Concrete Wall (Damaged)
-RelatedOverlays=BRIK
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=BRIK
-Frame0.FrameIndex=16
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=BRIK
-Frame1.FrameIndex=17
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=BRIK
-Frame2.FrameIndex=18
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=BRIK
-Frame3.FrameIndex=19
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=BRIK
-Frame4.FrameIndex=20
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=BRIK
-Frame5.FrameIndex=21
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=BRIK
-Frame6.FrameIndex=22
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=BRIK
-Frame7.FrameIndex=23
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=BRIK
-Frame8.FrameIndex=24
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=BRIK
-Frame9.FrameIndex=25
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=BRIK
-Frame10.FrameIndex=26
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=BRIK
-Frame11.FrameIndex=27
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=BRIK
-Frame12.FrameIndex=28
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=BRIK
-Frame13.FrameIndex=29
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=BRIK
-Frame14.FrameIndex=30
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=BRIK
-Frame15.FrameIndex=31
-Frame15.ConnectsTo=10101010
-
-[SBAG]
-UIName=Sandbags
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=SBAG
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=SBAG
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=SBAG
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=SBAG
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=SBAG
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=SBAG
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=SBAG
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=SBAG
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=SBAG
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=SBAG
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=SBAG
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=SBAG
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=SBAG
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=SBAG
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=SBAG
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=SBAG
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[SBAG_DAMAGED]
-UIName=Sandbags (Damaged)
-RelatedOverlays=SBAG
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=SBAG
-Frame0.FrameIndex=16
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=SBAG
-Frame1.FrameIndex=17
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=SBAG
-Frame2.FrameIndex=18
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=SBAG
-Frame3.FrameIndex=19
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=SBAG
-Frame4.FrameIndex=20
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=SBAG
-Frame5.FrameIndex=21
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=SBAG
-Frame6.FrameIndex=22
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=SBAG
-Frame7.FrameIndex=23
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=SBAG
-Frame8.FrameIndex=24
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=SBAG
-Frame9.FrameIndex=25
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=SBAG
-Frame10.FrameIndex=26
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=SBAG
-Frame11.FrameIndex=27
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=SBAG
-Frame12.FrameIndex=28
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=SBAG
-Frame13.FrameIndex=29
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=SBAG
-Frame14.FrameIndex=30
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=SBAG
-Frame15.FrameIndex=31
-Frame15.ConnectsTo=10101010
-[BARB]
-UIName=Barbed Wire
-RelatedOverlays=BARB_DAMAGED
+[GAWALL_DAMAGED]
+UIName=GDI Wall (Damaged)
ConnectionMask=10101010
+RelatedOverlays=GAWALL
Frames=16
-Frame0.Overlay=BARB
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=BARB
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=BARB
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=BARB
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=BARB
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=BARB
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=BARB
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=BARB
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=BARB
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=BARB
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=BARB
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=BARB
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=BARB
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=BARB
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=BARB
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=BARB
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[BARB_DAMAGED]
-UIName=Barbed Wire (Damaged)
-RelatedOverlays=BARB
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=BARB
+Frame0.Overlay=GAWALL
Frame0.FrameIndex=16
Frame0.ConnectsTo=00000000
-Frame1.Overlay=BARB
+Frame1.Overlay=GAWALL
Frame1.FrameIndex=17
Frame1.ConnectsTo=10000000
-Frame2.Overlay=BARB
+Frame2.Overlay=GAWALL
Frame2.FrameIndex=18
Frame2.ConnectsTo=00100000
-Frame3.Overlay=BARB
+Frame3.Overlay=GAWALL
Frame3.FrameIndex=19
Frame3.ConnectsTo=10100000
-Frame4.Overlay=BARB
+Frame4.Overlay=GAWALL
Frame4.FrameIndex=20
Frame4.ConnectsTo=00001000
-Frame5.Overlay=BARB
+Frame5.Overlay=GAWALL
Frame5.FrameIndex=21
Frame5.ConnectsTo=10001000
-Frame6.Overlay=BARB
+Frame6.Overlay=GAWALL
Frame6.FrameIndex=22
Frame6.ConnectsTo=00101000
-Frame7.Overlay=BARB
+Frame7.Overlay=GAWALL
Frame7.FrameIndex=23
Frame7.ConnectsTo=10101000
-Frame8.Overlay=BARB
+Frame8.Overlay=GAWALL
Frame8.FrameIndex=24
Frame8.ConnectsTo=00000010
-Frame9.Overlay=BARB
+Frame9.Overlay=GAWALL
Frame9.FrameIndex=25
Frame9.ConnectsTo=10000010
-Frame10.Overlay=BARB
+Frame10.Overlay=GAWALL
Frame10.FrameIndex=26
Frame10.ConnectsTo=00100010
-Frame11.Overlay=BARB
+Frame11.Overlay=GAWALL
Frame11.FrameIndex=27
Frame11.ConnectsTo=10100010
-Frame12.Overlay=BARB
+Frame12.Overlay=GAWALL
Frame12.FrameIndex=28
Frame12.ConnectsTo=00001010
-Frame13.Overlay=BARB
+Frame13.Overlay=GAWALL
Frame13.FrameIndex=29
Frame13.ConnectsTo=10001010
-Frame14.Overlay=BARB
+Frame14.Overlay=GAWALL
Frame14.FrameIndex=30
Frame14.ConnectsTo=00101010
-Frame15.Overlay=BARB
+Frame15.Overlay=GAWALL
Frame15.FrameIndex=31
Frame15.ConnectsTo=10101010
-[FENC]
-UIName=Barbed Wire Fence
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=FENC
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=FENC
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=FENC
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=FENC
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=FENC
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=FENC
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=FENC
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=FENC
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=FENC
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=FENC
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=FENC
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=FENC
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=FENC
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=FENC
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=FENC
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=FENC
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[CYCL]
-UIName=Chain Link
-RelatedOverlays=CYCL_DAMAGED
+[NAWALL]
+UIName=Nod Wall
ConnectionMask=10101010
+RelatedOverlays=NAWALL_DAMAGED
Frames=16
-Frame0.Overlay=CYCL
+Frame0.Overlay=NAWALL
Frame0.FrameIndex=0
Frame0.ConnectsTo=00000000
-Frame1.Overlay=CYCL
+Frame1.Overlay=NAWALL
Frame1.FrameIndex=1
Frame1.ConnectsTo=10000000
-Frame2.Overlay=CYCL
+Frame2.Overlay=NAWALL
Frame2.FrameIndex=2
Frame2.ConnectsTo=00100000
-Frame3.Overlay=CYCL
+Frame3.Overlay=NAWALL
Frame3.FrameIndex=3
Frame3.ConnectsTo=10100000
-Frame4.Overlay=CYCL
+Frame4.Overlay=NAWALL
Frame4.FrameIndex=4
Frame4.ConnectsTo=00001000
-Frame5.Overlay=CYCL
+Frame5.Overlay=NAWALL
Frame5.FrameIndex=5
Frame5.ConnectsTo=10001000
-Frame6.Overlay=CYCL
+Frame6.Overlay=NAWALL
Frame6.FrameIndex=6
Frame6.ConnectsTo=00101000
-Frame7.Overlay=CYCL
+Frame7.Overlay=NAWALL
Frame7.FrameIndex=7
Frame7.ConnectsTo=10101000
-Frame8.Overlay=CYCL
+Frame8.Overlay=NAWALL
Frame8.FrameIndex=8
Frame8.ConnectsTo=00000010
-Frame9.Overlay=CYCL
+Frame9.Overlay=NAWALL
Frame9.FrameIndex=9
Frame9.ConnectsTo=10000010
-Frame10.Overlay=CYCL
+Frame10.Overlay=NAWALL
Frame10.FrameIndex=10
Frame10.ConnectsTo=00100010
-Frame11.Overlay=CYCL
+Frame11.Overlay=NAWALL
Frame11.FrameIndex=11
Frame11.ConnectsTo=10100010
-Frame12.Overlay=CYCL
+Frame12.Overlay=NAWALL
Frame12.FrameIndex=12
Frame12.ConnectsTo=00001010
-Frame13.Overlay=CYCL
+Frame13.Overlay=NAWALL
Frame13.FrameIndex=13
Frame13.ConnectsTo=10001010
-Frame14.Overlay=CYCL
+Frame14.Overlay=NAWALL
Frame14.FrameIndex=14
Frame14.ConnectsTo=00101010
-Frame15.Overlay=CYCL
+Frame15.Overlay=NAWALL
Frame15.FrameIndex=15
Frame15.ConnectsTo=10101010
-[CYCL_DAMAGED]
-UIName=Chain Link (Damaged)
-RelatedOverlays=CYCL
+[NAWALL_DAMAGED]
+UIName=Nod Wall (Damaged)
ConnectionMask=10101010
+RelatedOverlays=NAWALL
Frames=16
-Frame0.Overlay=CYCL
+Frame0.Overlay=NAWALL
Frame0.FrameIndex=16
Frame0.ConnectsTo=00000000
-Frame1.Overlay=CYCL
+Frame1.Overlay=NAWALL
Frame1.FrameIndex=17
Frame1.ConnectsTo=10000000
-Frame2.Overlay=CYCL
+Frame2.Overlay=NAWALL
Frame2.FrameIndex=18
Frame2.ConnectsTo=00100000
-Frame3.Overlay=CYCL
+Frame3.Overlay=NAWALL
Frame3.FrameIndex=19
Frame3.ConnectsTo=10100000
-Frame4.Overlay=CYCL
+Frame4.Overlay=NAWALL
Frame4.FrameIndex=20
Frame4.ConnectsTo=00001000
-Frame5.Overlay=CYCL
+Frame5.Overlay=NAWALL
Frame5.FrameIndex=21
Frame5.ConnectsTo=10001000
-Frame6.Overlay=CYCL
+Frame6.Overlay=NAWALL
Frame6.FrameIndex=22
Frame6.ConnectsTo=00101000
-Frame7.Overlay=CYCL
+Frame7.Overlay=NAWALL
Frame7.FrameIndex=23
Frame7.ConnectsTo=10101000
-Frame8.Overlay=CYCL
+Frame8.Overlay=NAWALL
Frame8.FrameIndex=24
Frame8.ConnectsTo=00000010
-Frame9.Overlay=CYCL
+Frame9.Overlay=NAWALL
Frame9.FrameIndex=25
Frame9.ConnectsTo=10000010
-Frame10.Overlay=CYCL
+Frame10.Overlay=NAWALL
Frame10.FrameIndex=26
Frame10.ConnectsTo=00100010
-Frame11.Overlay=CYCL
+Frame11.Overlay=NAWALL
Frame11.FrameIndex=27
Frame11.ConnectsTo=10100010
-Frame12.Overlay=CYCL
+Frame12.Overlay=NAWALL
Frame12.FrameIndex=28
Frame12.ConnectsTo=00001010
-Frame13.Overlay=CYCL
+Frame13.Overlay=NAWALL
Frame13.FrameIndex=29
Frame13.ConnectsTo=10001010
-Frame14.Overlay=CYCL
+Frame14.Overlay=NAWALL
Frame14.FrameIndex=30
Frame14.ConnectsTo=00101010
-Frame15.Overlay=CYCL
+Frame15.Overlay=NAWALL
Frame15.FrameIndex=31
Frame15.ConnectsTo=10101010
-[WOOD]
-UIName=Wooden Fence
-RelatedOverlays=WOOD_DAMAGED
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=WOOD
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=WOOD
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=WOOD
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=WOOD
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=WOOD
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=WOOD
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=WOOD
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=WOOD
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=WOOD
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=WOOD
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=WOOD
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=WOOD
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=WOOD
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=WOOD
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=WOOD
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=WOOD
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[WOOD_DAMAGED]
-UIName=Wooden Fence (Damaged)
-RelatedOverlays=WOOD
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=WOOD
-Frame0.FrameIndex=16
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=WOOD
-Frame1.FrameIndex=17
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=WOOD
-Frame2.FrameIndex=18
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=WOOD
-Frame3.FrameIndex=19
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=WOOD
-Frame4.FrameIndex=20
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=WOOD
-Frame5.FrameIndex=21
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=WOOD
-Frame6.FrameIndex=22
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=WOOD
-Frame7.FrameIndex=23
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=WOOD
-Frame8.FrameIndex=24
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=WOOD
-Frame9.FrameIndex=25
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=WOOD
-Frame10.FrameIndex=26
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=WOOD
-Frame11.FrameIndex=27
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=WOOD
-Frame12.FrameIndex=28
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=WOOD
-Frame13.FrameIndex=29
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=WOOD
-Frame14.FrameIndex=30
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=WOOD
-Frame15.FrameIndex=31
-Frame15.ConnectsTo=10101010
-
-[BRIK_NON_ISOMETRIC]
-UIName=Concrete Wall (Non-Isometric)
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=BRIK2
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=BRIK2
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=BRIK2
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=BRIK2
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=BRIK2
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=BRIK2
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=BRIK2
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=BRIK2
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=BRIK2
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=BRIK2
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=BRIK2
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=BRIK2
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=BRIK2
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=BRIK2
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=BRIK2
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=BRIK2
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-
-[SBAG_NON_ISOMETRIC]
-UIName=Sandbags (Non-Isometric)
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=SBAG2
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=SBAG2
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=SBAG2
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=SBAG2
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=SBAG2
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=SBAG2
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=SBAG2
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=SBAG2
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=SBAG2
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=SBAG2
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=SBAG2
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=SBAG2
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=SBAG2
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=SBAG2
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=SBAG2
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=SBAG2
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[CYCL_NON_ISOMETRIC]
-UIName=Chain Link (Non-Isometric)
-ConnectionMask=10101010
-Frames=16
-Frame0.Overlay=CYCL2
-Frame0.FrameIndex=0
-Frame0.ConnectsTo=00000000
-Frame1.Overlay=CYCL2
-Frame1.FrameIndex=1
-Frame1.ConnectsTo=10000000
-Frame2.Overlay=CYCL2
-Frame2.FrameIndex=2
-Frame2.ConnectsTo=00100000
-Frame3.Overlay=CYCL2
-Frame3.FrameIndex=3
-Frame3.ConnectsTo=10100000
-Frame4.Overlay=CYCL2
-Frame4.FrameIndex=4
-Frame4.ConnectsTo=00001000
-Frame5.Overlay=CYCL2
-Frame5.FrameIndex=5
-Frame5.ConnectsTo=10001000
-Frame6.Overlay=CYCL2
-Frame6.FrameIndex=6
-Frame6.ConnectsTo=00101000
-Frame7.Overlay=CYCL2
-Frame7.FrameIndex=7
-Frame7.ConnectsTo=10101000
-Frame8.Overlay=CYCL2
-Frame8.FrameIndex=8
-Frame8.ConnectsTo=00000010
-Frame9.Overlay=CYCL2
-Frame9.FrameIndex=9
-Frame9.ConnectsTo=10000010
-Frame10.Overlay=CYCL2
-Frame10.FrameIndex=10
-Frame10.ConnectsTo=00100010
-Frame11.Overlay=CYCL2
-Frame11.FrameIndex=11
-Frame11.ConnectsTo=10100010
-Frame12.Overlay=CYCL2
-Frame12.FrameIndex=12
-Frame12.ConnectsTo=00001010
-Frame13.Overlay=CYCL2
-Frame13.FrameIndex=13
-Frame13.ConnectsTo=10001010
-Frame14.Overlay=CYCL2
-Frame14.FrameIndex=14
-Frame14.ConnectsTo=00101010
-Frame15.Overlay=CYCL2
-Frame15.FrameIndex=15
-Frame15.ConnectsTo=10101010
-
-[WOOD_NON_ISOMETRIC]
-UIName=Wooden Fence (Non-Isometric)
+[GASAND]
+UIName=Sandbags
ConnectionMask=10101010
Frames=16
-Frame0.Overlay=WOOD2
+Frame0.Overlay=GASAND
Frame0.FrameIndex=0
Frame0.ConnectsTo=00000000
-Frame1.Overlay=WOOD2
+Frame1.Overlay=GASAND
Frame1.FrameIndex=1
Frame1.ConnectsTo=10000000
-Frame2.Overlay=WOOD2
+Frame2.Overlay=GASAND
Frame2.FrameIndex=2
Frame2.ConnectsTo=00100000
-Frame3.Overlay=WOOD2
+Frame3.Overlay=GASAND
Frame3.FrameIndex=3
Frame3.ConnectsTo=10100000
-Frame4.Overlay=WOOD2
+Frame4.Overlay=GASAND
Frame4.FrameIndex=4
Frame4.ConnectsTo=00001000
-Frame5.Overlay=WOOD2
+Frame5.Overlay=GASAND
Frame5.FrameIndex=5
Frame5.ConnectsTo=10001000
-Frame6.Overlay=WOOD2
+Frame6.Overlay=GASAND
Frame6.FrameIndex=6
Frame6.ConnectsTo=00101000
-Frame7.Overlay=WOOD2
+Frame7.Overlay=GASAND
Frame7.FrameIndex=7
Frame7.ConnectsTo=10101000
-Frame8.Overlay=WOOD2
+Frame8.Overlay=GASAND
Frame8.FrameIndex=8
Frame8.ConnectsTo=00000010
-Frame9.Overlay=WOOD2
+Frame9.Overlay=GASAND
Frame9.FrameIndex=9
Frame9.ConnectsTo=10000010
-Frame10.Overlay=WOOD2
+Frame10.Overlay=GASAND
Frame10.FrameIndex=10
Frame10.ConnectsTo=00100010
-Frame11.Overlay=WOOD2
+Frame11.Overlay=GASAND
Frame11.FrameIndex=11
Frame11.ConnectsTo=10100010
-Frame12.Overlay=WOOD2
+Frame12.Overlay=GASAND
Frame12.FrameIndex=12
Frame12.ConnectsTo=00001010
-Frame13.Overlay=WOOD2
+Frame13.Overlay=GASAND
Frame13.FrameIndex=13
Frame13.ConnectsTo=10001010
-Frame14.Overlay=WOOD2
+Frame14.Overlay=GASAND
Frame14.FrameIndex=14
Frame14.ConnectsTo=00101010
-Frame15.Overlay=WOOD2
+Frame15.Overlay=GASAND
Frame15.FrameIndex=15
Frame15.ConnectsTo=10101010
@@ -898,3 +356,57 @@ Frame18.ConnectsTo=01000010
Frame19.Overlay=TRACKS12
Frame19.FrameIndex=0
Frame19.ConnectsTo=01001000
+
+[VEINS]
+UIName=Veins
+ConnectionMask=10101010
+Frames=16
+Frame0.Overlay=VEINS
+Frame0.FrameIndex=0
+Frame0.ConnectsTo=00000000
+Frame1.Overlay=VEINS
+Frame1.FrameIndex=3
+Frame1.ConnectsTo=10000000
+Frame2.Overlay=VEINS
+Frame2.FrameIndex=6
+Frame2.ConnectsTo=00100000
+Frame3.Overlay=VEINS
+Frame3.FrameIndex=9
+Frame3.ConnectsTo=10100000
+Frame4.Overlay=VEINS
+Frame4.FrameIndex=13
+Frame4.ConnectsTo=00001000
+Frame5.Overlay=VEINS
+Frame5.FrameIndex=15
+Frame5.ConnectsTo=10001000
+Frame6.Overlay=VEINS
+Frame6.FrameIndex=18
+Frame6.ConnectsTo=00101000
+Frame7.Overlay=VEINS
+Frame7.FrameIndex=23
+Frame7.ConnectsTo=10101000
+Frame8.Overlay=VEINS
+Frame8.FrameIndex=24
+Frame8.ConnectsTo=00000010
+Frame9.Overlay=VEINS
+Frame9.FrameIndex=27
+Frame9.ConnectsTo=10000010
+Frame10.Overlay=VEINS
+Frame10.FrameIndex=30
+Frame10.ConnectsTo=00100010
+Frame11.Overlay=VEINS
+Frame11.FrameIndex=34
+Frame11.ConnectsTo=10100010
+Frame12.Overlay=VEINS
+Frame12.FrameIndex=36
+Frame12.ConnectsTo=00001010
+Frame13.Overlay=VEINS
+Frame13.FrameIndex=41
+Frame13.ConnectsTo=10001010
+Frame14.Overlay=VEINS
+Frame14.FrameIndex=43
+Frame14.ConnectsTo=00101010
+Frame15.Overlay=VEINS
+Frame15.FrameIndex=49
+Frame15.ConnectsTo=10101010
+
diff --git a/src/TSMapEditor/Config/Constants.ini b/src/TSMapEditor/Config/Constants.ini
index 563a0d21..7a61186a 100644
--- a/src/TSMapEditor/Config/Constants.ini
+++ b/src/TSMapEditor/Config/Constants.ini
@@ -27,13 +27,13 @@ RenderPixelPadding=50
; Determines whether the world is flat.
; If set, disables some height-specific functionality
; that is not necessary when height levels are not used.
-IsFlatWorld=true
+IsFlatWorld=false
; Does Tiberium use the Theater palette instead of the Unit palette?
-TheaterPaletteForTiberium=true
+TheaterPaletteForTiberium=false
; Should Tiberium be affected by map lighting?
-TiberiumAffectedByLighting=true
+TiberiumAffectedByLighting=false
; Should Tiberium spawning terrain objects be affected by map lighting?
TiberiumTreesAffectedByLighting=false
@@ -46,13 +46,13 @@ VoxelsAffectedByLighting=false
; The file name of the executable that the map editor expects to find from the game directory.
; Used for the verification that the user has given us the correct game directory.
-ExpectedClientExecutableName=DTA.exe
+ExpectedClientExecutableName=TiberianSun.exe
; Specifies the path that we should check in the Windows registry to determine
; the game installation directory (if one hasn't been defined in the map editor settings file).
; We check a key "InstallPath" in the location to determine where the user has installed their game.
; The CnCNet Client has been programmed to write its installation path to the registry by default.
-GameRegistryInstallPath=SOFTWARE\DawnOfTheTiberiumAge
+GameRegistryInstallPath=SOFTWARE\TiberianSun
; If set to true, WAE will check for the installation path in the "Local Machine"
; part of the registry instead of the "Current User" part of the registry.
@@ -91,12 +91,11 @@ MapPreviewMaxHeight=300
; Paths to various files that the editor loads
[FilePaths]
-Rules=INI/Rules.ini
-Firestorm=INI/Enhance.ini
-Art=INI/Art.ini
-ArtFS=INI/ArtE.ini
-AI=INI/AI.ini
-AIE=INI/AIE.ini
-Tutorial=INI/Tutorial.ini
-Theme=INI/Theme.ini
-
+Rules=INI/rules.ini
+Firestorm=INI/firestrm.ini
+Art=INI/art.ini
+ArtFS=INI/artfs.ini
+AI=INI/ai.ini
+AIFS=INI/aifs.ini
+Tutorial=INI/tutorial.ini
+Theme=INI/theme.ini
diff --git a/src/TSMapEditor/Config/EditorRules.ini b/src/TSMapEditor/Config/EditorRules.ini
index 4ae7c67b..fd54407f 100644
--- a/src/TSMapEditor/Config/EditorRules.ini
+++ b/src/TSMapEditor/Config/EditorRules.ini
@@ -4,24 +4,20 @@
; Rules.ini overrides for the scenario editor.
; We don't want to render these animations in the editor
-[OILREFN_S]
-RenderInEditor=no
+; [OILREFN_S]
+; RenderInEditor=no
-[RAPOWR_S]
-RenderInEditor=no
+; [RAPOWR_S]
+; RenderInEditor=no
-[RAAPWR_S]
-RenderInEditor=no
+; [RAAPWR_S]
+; RenderInEditor=no
+
+[INBLULMP]
+LightGreenTint=0.01 ; WW typoed this in their Rules.ini
[ObjectOwnerOverrides]
-GDI1=GDI
-GDI2=GDI
-Nod1=Nod
-Nod2=Nod
-Allies1=Allies
-Allies2=Allies
-Soviet1=Soviet
-Soviet2=Soviet
+NOD=Nod ; no, WW... Nod is not an acronym
[ObjectCategoryOverrides]
@@ -30,29 +26,14 @@ Soviet2=Soviet
[ObjectCategoryPriorities]
GDI=0
Nod=1
-Allies=2
-Soviet=3
-Special Units=4
-Civilian Vehicles=5
-Lifeforms=6
-Trains=7
-Misc=9001
+Neutral=2
+Special=3
[Houses]
0=GDI
1=Nod
-2=Allies
-3=Soviet
-4=Neutral
-5=Special
-6=GDI1
-7=Nod1
-8=GDI2
-9=Nod2
-10=Allies1
-11=Allies2
-12=Soviet1
-13=Soviet2
+2=Neutral
+3=Special
50=Spawn1
51=Spawn2
52=Spawn3
@@ -65,34 +46,24 @@ Misc=9001
[SPHouses]
0=GDI
1=Nod
-2=Allies
-3=Soviet
-4=Neutral
-5=Special
-6=GDI1
-7=Nod1
-8=GDI2
-9=Nod2
-10=Allies1
-11=Allies2
-12=Soviet1
-13=Soviet2
+2=Neutral
+3=Special
[CoopHouses]
0=GDI
1=Nod
-2=Allies
-3=Soviet
-4=Neutral
-5=Special
-6=GDI1
-7=Nod1
-8=GDI2
-9=Nod2
-10=Allies1
-11=Allies2
-12=Soviet1
-13=Soviet2
+2=Neutral
+3=Special
+4=Fake4
+5=Fake5
+6=Fake6
+7=Fake7
+8=Fake8
+9=Fake9
+10=Fake10
+11=Fake11
+12=Fake12
+13=Fake13
14=Fake14
15=Fake15
16=Fake16
@@ -145,42 +116,12 @@ Color=Gold
[Nod]
Color=DarkRed
-[Allies]
-Color=DarkSky
-
-[Soviet]
-Color=DarkRed
-
[Neutral]
Color=LightGrey
[Special]
Color=White
-[GDI1]
-Color=Yellow
-
-[Nod1]
-Color=Red
-
-[GDI2]
-Color=Orange
-
-[Nod2]
-Color=Magenta ; "metalic"
-
-[Allies1]
-Color=Blue
-
-[Allies2]
-Color=LightSky
-
-[Soviet1]
-Color=DarkOrange
-
-[Soviet2]
-Color=LightOrange
-
[Spawn1]
Color=Orange
@@ -206,3 +147,55 @@ Color=Cyan
[Spawn8]
Color=DarkGreen
+
+; Hide certain terrain objects from the snow theater because
+; Westwood never gave them graphics in the snow theater,
+; hence placing them down causes the game to crash
+
+[BIGBLUE3]
+AllowedTheaters=Temperate
+
+[FONA01]
+AllowedTheaters=Temperate
+
+[FONA02]
+AllowedTheaters=Temperate
+
+[FONA03]
+AllowedTheaters=Temperate
+
+[FONA04]
+AllowedTheaters=Temperate
+
+[FONA05]
+AllowedTheaters=Temperate
+
+[FONA06]
+AllowedTheaters=Temperate
+
+[FONA07]
+AllowedTheaters=Temperate
+
+[FONA08]
+AllowedTheaters=Temperate
+
+[FONA09]
+AllowedTheaters=Temperate
+
+[FONA10]
+AllowedTheaters=Temperate
+
+[FONA11]
+AllowedTheaters=Temperate
+
+[FONA12]
+AllowedTheaters=Temperate
+
+[FONA13]
+AllowedTheaters=Temperate
+
+[FONA14]
+AllowedTheaters=Temperate
+
+[FONA15]
+AllowedTheaters=Temperate
diff --git a/src/TSMapEditor/Config/FileManagerConfig.ini b/src/TSMapEditor/Config/FileManagerConfig.ini
index 794f6eb4..d503bf44 100644
--- a/src/TSMapEditor/Config/FileManagerConfig.ini
+++ b/src/TSMapEditor/Config/FileManagerConfig.ini
@@ -12,18 +12,12 @@
; The editor WILL start even if none of them are found.
[PrimaryMIXFiles]
0=Cache.mix
-1=Local.mix
-2=Conquer.mix
+1=Conquer.mix
+2=$TSECACHE
+3=$EXPAND
; Specifies secondary MIX files.
; The editor will attempt to load these, but will start even if these are missing.
[SecondaryMIXFiles]
-0=ECache00.mix
-1=ECache01.mix
-2=ECache02.mix
-3=ECache03.mix
-4=ECache04.mix
-5=ECache05.mix
-6=RampaCache.mix
-
+0=marble.mix
diff --git a/src/TSMapEditor/Config/MapCode/Enable Blue Tiberium Spreader Lighting.ini b/src/TSMapEditor/Config/MapCode/Enable Blue Tiberium Spreader Lighting.ini
deleted file mode 100644
index 399274d6..00000000
--- a/src/TSMapEditor/Config/MapCode/Enable Blue Tiberium Spreader Lighting.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[$Editor]
-Confirmation=This script will enable blue lighting for blue tiberium spreaders. Continue?
-Success=Code for enabling blue tiberium spreader lighting has been added to the map.
-
-[TIBSPRDV]
-LightRedTint=0.0
-LightBlueTint=0.3
-LightGreenTint=0.0
-LightIntensity=0.003
-LightVisibility=1500
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Enable Green Tiberium Spreader Lighting.ini b/src/TSMapEditor/Config/MapCode/Enable Green Tiberium Spreader Lighting.ini
deleted file mode 100644
index a4e6a29a..00000000
--- a/src/TSMapEditor/Config/MapCode/Enable Green Tiberium Spreader Lighting.ini
+++ /dev/null
@@ -1,26 +0,0 @@
-[$Editor]
-Confirmation=This script will enable green lighting for green tiberium spreaders. Continue?
-Success=Code for enabling green tiberium spreader lighting has been added to the map.
-
-[TIBSPRDR]
-LightRedTint=0.0
-LightBlueTint=0.0
-LightGreenTint=0.35
-LightIntensity=0.003
-LightVisibility=1500
-
-[TIBSPRDRL]
-LightRedTint=0.0
-LightBlueTint=0.0
-LightGreenTint=0.35
-LightIntensity=0.003
-LightVisibility=1500
-
-[TIBSPRDRH]
-LightRedTint=0.0
-LightBlueTint=0.0
-LightGreenTint=0.35
-LightIntensity=0.003
-LightVisibility=1500
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Enable Ore Spreader Lighting.ini b/src/TSMapEditor/Config/MapCode/Enable Ore Spreader Lighting.ini
deleted file mode 100644
index 08f3e621..00000000
--- a/src/TSMapEditor/Config/MapCode/Enable Ore Spreader Lighting.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[$Editor]
-Confirmation=This script will enable yellow lighting for ore spreaders. Continue?
-Success=Code for enabling ore spreader lighting has been added to the map.
-
-[TIBSPRDA]
-LightRedTint=0.3
-LightBlueTint=0.0
-LightGreenTint=0.3
-LightIntensity=0.003
-LightVisibility=1500
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Enable Spreading Ore.ini b/src/TSMapEditor/Config/MapCode/Enable Spreading Ore.ini
deleted file mode 100644
index b5ed6c57..00000000
--- a/src/TSMapEditor/Config/MapCode/Enable Spreading Ore.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-[$Editor]
-Confirmation=This script will enable spreading ore for the map. Do not use this maps that have scrap debris placed on them. Continue?
-Success=Code for enabling spreading ore has been added to the map.
-
-[Tiberiums]
-0=Riparius
-1=Cruentus
-2=Vinifera
-3=Aboreus
-
-[Aboreus]
-Name=Ore
-Image=4
-Value=25
-Growth=1000
-GrowthPercentage=10
-Spread=1000
-SpreadPercentage=2
-Power=1
-Color=DarkGold
-Debris=VINCRYS1,VINCRYS2,VINCRYS3,VINCRYS4
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Mixed Gems Only Use Blue-Green Colors.ini b/src/TSMapEditor/Config/MapCode/Mixed Gems Only Use Blue-Green Colors.ini
deleted file mode 100644
index 3e2c94f7..00000000
--- a/src/TSMapEditor/Config/MapCode/Mixed Gems Only Use Blue-Green Colors.ini
+++ /dev/null
@@ -1,16 +0,0 @@
-[$Editor]
-Confirmation=This script will change the colors of the mixed gems to green/blue (note: the effects won't be visible in the map editor before you restart it or re-load the map). Continue?
-Success=Code for changing the image of the mixed gems has been added to the map.
-
-[GEMMIX01]
-Image=GEMGB01
-
-[GEMMIX02]
-Image=GEMGB02
-
-[GEMMIX03]
-Image=GEMGB03
-
-[GEMMIX04]
-Image=GEMGB04
-
diff --git a/src/TSMapEditor/Config/MapCode/Replace Tiberium With Ore.ini b/src/TSMapEditor/Config/MapCode/Replace Tiberium With Ore.ini
deleted file mode 100644
index c6c951e4..00000000
--- a/src/TSMapEditor/Config/MapCode/Replace Tiberium With Ore.ini
+++ /dev/null
@@ -1,66 +0,0 @@
-[$Editor]
-Confirmation=This script will change the appearance of green tiberium to ore (note: the effects won't be visible in the map editor until you reload the map). Continue?
-Success=Code for changing the image of green tiberium has been added to the map.
-
-[Tiberiums]
-0=Riparius
-1=Cruentus
-2=Vinifera
-3=Aboreus
-
-[Riparius]
-Name=Ore
-Power=0
-
-[OREMINE]
-TiberiumToSpawn=0
-
-;[OREMINEA]
-;TiberiumToSpawn=0
-
-[OREMINE2]
-TiberiumToSpawn=0
-
-[OREMINE3]
-TiberiumToSpawn=0
-
-[TIBSPRDA]
-Image=TIBSPRDR3
-
-[RTIB01]
-Image=ZORE01
-
-[RTIB02]
-Image=ZORE02
-
-[RTIB03]
-Image=ZORE03
-
-[RTIB04]
-Image=ZORE04
-
-[RTIB05]
-Image=ZORE01
-
-[RTIB06]
-Image=ZORE02
-
-[RTIB07]
-Image=ZORE03
-
-[RTIB08]
-Image=ZORE04
-
-[RTIB09]
-Image=ZORE01
-
-[RTIB10]
-Image=ZORE02
-
-[RTIB11]
-Image=ZORE03
-
-[RTIB12]
-Image=ZORE04
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Replace Tiberium With Snowy Ore.ini b/src/TSMapEditor/Config/MapCode/Replace Tiberium With Snowy Ore.ini
deleted file mode 100644
index 59132554..00000000
--- a/src/TSMapEditor/Config/MapCode/Replace Tiberium With Snowy Ore.ini
+++ /dev/null
@@ -1,56 +0,0 @@
-[$Editor]
-Confirmation=This script will change the appearance of green tiberium to snowy ore (note: the effects won't be visible in the map editor until you reload the map). Continue?
-Success=Code for changing the image of green tiberium has been added to the map.
-
-[Tiberiums]
-0=Riparius
-1=Cruentus
-2=Vinifera
-3=Aboreus
-
-[Riparius]
-Name=Ore
-Power=0
-
-[OREMINEA]
-TiberiumToSpawn=0
-
-[TIBSPRDA]
-Image=TIBSPRDR3
-
-[RTIB01]
-Image=ZORESNO01
-
-[RTIB02]
-Image=ZORESNO02
-
-[RTIB03]
-Image=ZORESNO03
-
-[RTIB04]
-Image=ZORESNO04
-
-[RTIB05]
-Image=ZORESNO01
-
-[RTIB06]
-Image=ZORESNO02
-
-[RTIB07]
-Image=ZORESNO03
-
-[RTIB08]
-Image=ZORESNO04
-
-[RTIB09]
-Image=ZORESNO01
-
-[RTIB10]
-Image=ZORESNO02
-
-[RTIB11]
-Image=ZORESNO03
-
-[RTIB12]
-Image=ZORESNO04
-
diff --git a/src/TSMapEditor/Config/MapCode/Snowy Mixed Gems.ini b/src/TSMapEditor/Config/MapCode/Snowy Mixed Gems.ini
deleted file mode 100644
index 24401796..00000000
--- a/src/TSMapEditor/Config/MapCode/Snowy Mixed Gems.ini
+++ /dev/null
@@ -1,41 +0,0 @@
-[$Editor]
-Confirmation=This script will change the appearance of the mixed gems to a snowy version (note: the effects won't be visible in the map editor until you reload the map). Continue?
-Success=Code for changing the image of the gems has been added to the map.
-
-[MIXGEM01]
-Image=GEMSRA01
-
-[MIXGEM02]
-Image=GEMSRA02
-
-[MIXGEM03]
-Image=GEMSRA03
-
-[MIXGEM04]
-Image=GEMSRA04
-
-[GRNGEM01]
-Image=GEMSRA01
-
-[GRNGEM02]
-Image=GEMSRA02
-
-[GRNGEM03]
-Image=GEMSRA03
-
-[GRNGEM04]
-Image=GEMSRA04
-
-[BLUGEM01]
-Image=GEMSRA01
-
-[BLUGEM02]
-Image=GEMSRA02
-
-[BLUGEM03]
-Image=GEMSRA03
-
-[BLUGEM04]
-Image=GEMSRA04
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Snowy Ore.ini b/src/TSMapEditor/Config/MapCode/Snowy Ore.ini
deleted file mode 100644
index 0aea0fd8..00000000
--- a/src/TSMapEditor/Config/MapCode/Snowy Ore.ini
+++ /dev/null
@@ -1,41 +0,0 @@
-[$Editor]
-Confirmation=This INI file will change the appearance of ore to a snowy version (note: the effects won't be visible in the map editor before you restart it or re-load the map). Continue?
-Success=Code for changing the image of ore has been added to the map.
-
-[ZORE01]
-Image=ZORESNO01
-
-[ZORE02]
-Image=ZORESNO02
-
-[ZORE03]
-Image=ZORESNO03
-
-[ZORE04]
-Image=ZORESNO04
-
-[ZORE05]
-Image=ZORESNO01
-
-[ZORE06]
-Image=ZORESNO02
-
-[ZORE07]
-Image=ZORESNO03
-
-[ZORE08]
-Image=ZORESNO04
-
-[ZORE09]
-Image=ZORESNO01
-
-[ZORE10]
-Image=ZORESNO02
-
-[ZORE11]
-Image=ZORESNO03
-
-[ZORE12]
-Image=ZORESNO04
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Snowy Smudges.ini b/src/TSMapEditor/Config/MapCode/Snowy Smudges.ini
deleted file mode 100644
index 7f8273f8..00000000
--- a/src/TSMapEditor/Config/MapCode/Snowy Smudges.ini
+++ /dev/null
@@ -1,215 +0,0 @@
-[$Editor]
-Confirmation=This script will change the appearance of smudges created by weapon impacts to a snowy version on this map. Continue?
-Success=Code for disabling normal smudges and enabling the snowy ones has been added to the map.
-
-[CR1A]
-Crater=no
-
-[CR1B]
-Crater=no
-
-[CR1C]
-Crater=no
-
-[CR1D]
-Crater=no
-
-[CR1E]
-Crater=no
-
-[CR2A]
-Crater=no
-
-[CR2B]
-Crater=no
-
-[CR2C]
-Crater=no
-
-[CR2D]
-Crater=no
-
-[CR2E]
-Crater=no
-
-[CR3A]
-Crater=no
-
-[CR3B]
-Crater=no
-
-[CR3C]
-Crater=no
-
-[CR3D]
-Crater=no
-
-[CR3E]
-Crater=no
-
-[CR4A]
-Crater=no
-
-[CR4B]
-Crater=no
-
-[CR4C]
-Crater=no
-
-[CR4D]
-Crater=no
-
-[CR4E]
-Crater=no
-
-[CR5A]
-Crater=no
-
-[CR5B]
-Crater=no
-
-[CR5C]
-Crater=no
-
-[CR5D]
-Crater=no
-
-[CR5E]
-Crater=no
-
-[CR6A]
-Crater=no
-
-[CR6B]
-Crater=no
-
-[CR6C]
-Crater=no
-
-[CR6D]
-Crater=no
-
-[CR6E]
-Crater=no
-
-[CRS1A]
-Crater=yes
-
-[CRS1B]
-Crater=yes
-
-[CRS1C]
-Crater=yes
-
-[CRS1D]
-Crater=yes
-
-[CRS1E]
-Crater=yes
-
-[CRS2A]
-Crater=yes
-
-[CRS2B]
-Crater=yes
-
-[CRS2C]
-Crater=yes
-
-[CRS2D]
-Crater=yes
-
-[CRS2E]
-Crater=yes
-
-[CRS3A]
-Crater=yes
-
-[CRS3B]
-Crater=yes
-
-[CRS3C]
-Crater=yes
-
-[CRS3D]
-Crater=yes
-
-[CRS3E]
-Crater=yes
-
-[CRS4A]
-Crater=yes
-
-[CRS4B]
-Crater=yes
-
-[CRS4C]
-Crater=yes
-
-[CRS4D]
-Crater=yes
-
-[CRS4E]
-Crater=yes
-
-[CRS5A]
-Crater=yes
-
-[CRS5B]
-Crater=yes
-
-[CRS5C]
-Crater=yes
-
-[CRS5D]
-Crater=yes
-
-[CRS5E]
-Crater=yes
-
-[CRS6A]
-Crater=yes
-
-[CRS6B]
-Crater=yes
-
-[CRS6C]
-Crater=yes
-
-[CRS6D]
-Crater=yes
-
-[CRS6E]
-Crater=yes
-
-[SC1]
-Burn=no
-
-[SC2]
-Burn=no
-
-[SC4]
-Burn=no
-
-[SC5]
-Burn=no
-
-[SC6]
-Burn=no
-
-[SCS1]
-Burn=yes
-
-[SCS2]
-Burn=yes
-
-[SCS4]
-Burn=yes
-
-[SCS5]
-Burn=yes
-
-[SCS6]
-Burn=yes
-
-
diff --git a/src/TSMapEditor/Config/MapCode/Snowy Tiberium.ini b/src/TSMapEditor/Config/MapCode/Snowy Tiberium.ini
deleted file mode 100644
index 36deec78..00000000
--- a/src/TSMapEditor/Config/MapCode/Snowy Tiberium.ini
+++ /dev/null
@@ -1,77 +0,0 @@
-[$Editor]
-Confirmation=This INI file will change the appearance of tiberium to a snowy version (note: the effects won't be visible in the map editor before you restart it or re-load the map). Continue?
-Success=Code for changing the image of tiberium has been added to the map.
-
-[RTIB01]
-Image=TIB1S_01
-
-[RTIB02]
-Image=TIB1S_02
-
-[RTIB03]
-Image=TIB1S_03
-
-[RTIB04]
-Image=TIB1S_04
-
-[RTIB05]
-Image=TIB1S_05
-
-[RTIB06]
-Image=TIB1S_06
-
-[RTIB07]
-Image=TIB1S_07
-
-[RTIB08]
-Image=TIB1S_08
-
-[RTIB09]
-Image=TIB1S_09
-
-[RTIB10]
-Image=TIB1S_10
-
-[RTIB11]
-Image=TIB1S_11
-
-[RTIB12]
-Image=TIB1S_12
-
-[QTIB01]
-Image=TIB2S_01
-
-[QTIB02]
-Image=TIB2S_02
-
-[QTIB03]
-Image=TIB2S_03
-
-[QTIB04]
-Image=TIB2S_04
-
-[QTIB05]
-Image=TIB2S_05
-
-[QTIB06]
-Image=TIB2S_06
-
-[QTIB07]
-Image=TIB2S_07
-
-[QTIB08]
-Image=TIB2S_08
-
-[QTIB09]
-Image=TIB2S_09
-
-[QTIB10]
-Image=TIB2S_10
-
-[QTIB11]
-Image=TIB2S_11
-
-[QTIB12]
-Image=TIB2S_12
-
-
diff --git a/src/TSMapEditor/Config/OverlayCollections.ini b/src/TSMapEditor/Config/OverlayCollections.ini
index 5240863d..6269abb2 100644
--- a/src/TSMapEditor/Config/OverlayCollections.ini
+++ b/src/TSMapEditor/Config/OverlayCollections.ini
@@ -6,93 +6,33 @@
[OverlayCollections]
0=GreenTiberium
1=BlueTiberium
-2=Ore
-3=ScrapMetal
-4=GreenGems
-5=BlueGems
-6=MixedGems
-7=AutumnGrass
[GreenTiberium]
Name=Green Tiberium
-OverlayType0=RTIB01
-OverlayType1=RTIB02
-OverlayType2=RTIB03
-OverlayType3=RTIB04
-OverlayType4=RTIB05
-OverlayType5=RTIB06
-OverlayType6=RTIB07
-OverlayType7=RTIB08
-OverlayType8=RTIB09
-OverlayType9=RTIB10
-OverlayType10=RTIB11
-OverlayType11=RTIB12
+OverlayType0=TIB01
+OverlayType1=TIB02
+OverlayType2=TIB03
+OverlayType3=TIB04
+OverlayType4=TIB05
+OverlayType5=TIB06
+OverlayType6=TIB07
+OverlayType7=TIB08
+OverlayType8=TIB09
+OverlayType9=TIB10
+OverlayType10=TIB11
+OverlayType11=TIB12
[BlueTiberium]
Name=Blue Tiberium
-OverlayType0=QTIB01
-OverlayType1=QTIB02
-OverlayType2=QTIB03
-OverlayType3=QTIB04
-OverlayType4=QTIB05
-OverlayType5=QTIB06
-OverlayType6=QTIB07
-OverlayType7=QTIB08
-OverlayType8=QTIB09
-OverlayType9=QTIB10
-OverlayType10=QTIB11
-OverlayType11=QTIB12
-
-[Ore]
-Name=Ore
-OverlayType0=ZORE01
-OverlayType1=ZORE02
-OverlayType2=ZORE03
-OverlayType3=ZORE04
-OverlayType4=ZORE05
-OverlayType5=ZORE06
-OverlayType6=ZORE07
-OverlayType7=ZORE08
-OverlayType8=ZORE09
-OverlayType9=ZORE10
-OverlayType10=ZORE11
-OverlayType11=ZORE12
-
-[ScrapMetal]
-Name=Scrap Metal
-OverlayType0=SCRAP01
-OverlayType1=SCRAP02
-OverlayType2=SCRAP03
-OverlayType3=SCRAP04
-
-[GreenGems]
-Name=Green Gems
-OverlayType0=GRNGEM01
-OverlayType1=GRNGEM02
-OverlayType2=GRNGEM03
-OverlayType3=GRNGEM04
-
-[BlueGems]
-Name=Blue Gems
-OverlayType0=BLUGEM01
-OverlayType1=BLUGEM02
-OverlayType2=BLUGEM03
-OverlayType3=BLUGEM04
-
-[MixedGems]
-Name=Mixed Gems
-OverlayType0=MIXGEM01
-OverlayType1=MIXGEM02
-OverlayType2=MIXGEM03
-OverlayType3=MIXGEM04
-
-; Demonstrates including optional overlay frames in the types of overlay to place.
-[AutumnGrass]
-Name=Small Autumn Grass
-OverlayType0=AJGRASS,0
-OverlayType1=AJGRASS,1
-OverlayType2=AJGRASS,2
-OverlayType3=AJGRASS,3
-OverlayType4=AJGRASS,4
-OverlayType5=AJGRASS,5
+OverlayType0=TIB2_02
+OverlayType1=TIB2_03
+OverlayType2=TIB2_04
+OverlayType3=TIB2_05
+OverlayType4=TIB2_06
+OverlayType5=TIB2_07
+OverlayType6=TIB2_08
+OverlayType7=TIB2_09
+OverlayType8=TIB2_10
+OverlayType9=TIB2_11
+OverlayType10=TIB2_12
diff --git a/src/TSMapEditor/Config/Scripts/Apply Animated Water.cs b/src/TSMapEditor/Config/Scripts/Apply Animated Water.cs
deleted file mode 100644
index 4cdbcde0..00000000
--- a/src/TSMapEditor/Config/Scripts/Apply Animated Water.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-// Script for replacing regular water with animated water
-// in Dawn of the Tiberium Age maps.
-
-// Using clauses.
-// Unless you know what's in the WAE code-base, you want to always include
-// these "standard usings".
-using System;
-using TSMapEditor;
-using TSMapEditor.Models;
-using TSMapEditor.CCEngine;
-using TSMapEditor.Rendering;
-using TSMapEditor.GameMath;
-
-namespace WAEScript
-{
- public class ApplyAnimatedWaterScript
- {
- ///
- /// Returns the description of this script.
- /// All scripts must contain this function.
- ///
- public string GetDescription() => "This script will replace all water on the map with animated water. Continue?";
-
- ///
- /// Returns the message that is presented to the user if running this script succeeded.
- /// All scripts must contain this function.
- ///
- public string GetSuccessMessage()
- {
- if (error == null)
- return "Successfully replaced water with animated water.";
-
- return error;
- }
-
- private string error;
-
- private TileSet waterTileSet;
-
- private const string AnimatedWaterTileSetName = "Animated Water";
- private const string WaterTileSetName = "Water";
-
- ///
- /// The function that actually does the magic.
- ///
- /// Map argument that allows us to access map data.
- public void Perform(Map map)
- {
- var animatedWaterTileSet = map.TheaterInstance.Theater.FindTileSet(AnimatedWaterTileSetName);
- if (animatedWaterTileSet == null)
- {
- error = "TileSet for animated water not found!";
- return;
- }
-
- waterTileSet = map.TheaterInstance.Theater.FindTileSet(WaterTileSetName);
- if (waterTileSet == null)
- {
- error = "TileSet for regular (non-animated) water not found!";
- return;
- }
-
- // Specifies the tiles to pick for each round.
- // If multiple tiles are specified for a round, one of them is selected
- // with RNG (there are multiple kinds of 2x2 and 1x1 animated water tiles).
- int[][] tileIndexesToPickFrom = new int[][]
- {
- new int[] { 9 }, // Big 10x10 animated water tile
- new int[] { 7, 8 }, // 5x5 animated water tiles
- new int[] { 6 }, // 4x4
- new int[] { 5 }, // 3x3
- new int[] { 0, 1, 2, 3, 4 }, // 2x2 tiles
- new int[] { 10, 11, 12, 13 } // 1x1 tiles
- };
-
- Random random = new Random();
-
- // 1st loop - loops through animated water tiles of different sizes
- for (int sizeTypeIndex = 0; sizeTypeIndex < tileIndexesToPickFrom.Length; sizeTypeIndex++)
- {
- // Fetch the animated water tile so we can fetch its size
-
- ITileImage tileImage = map.TheaterInstance.GetTile(animatedWaterTileSet.StartTileIndex + tileIndexesToPickFrom[sizeTypeIndex][0]);
- int tileWidth = tileImage.Width;
- int tileHeight = tileImage.Height;
-
- map.DoForAllValidTiles(mapCell =>
- {
- const int margin = 4;
-
- // As an animation, animated water slows down the game, so don't place it outside of the visible map area
- var pixelCoords = CellMath.CellTopLeftPointFromCellCoords(mapCell.CoordsToPoint(), map);
- if (pixelCoords.Y < Constants.CellSizeY * margin || pixelCoords.Y > map.Size.Y * Constants.CellSizeY - (Constants.CellSizeY * margin))
- return;
-
- if (pixelCoords.X < Constants.CellSizeX * margin || pixelCoords.X > map.Size.X * Constants.CellSizeX - (Constants.CellSizeX * margin))
- return;
-
- // Check whether this cell contains water
- if (!IsWaterTile(mapCell.TileIndex))
- return;
-
- // We know that we're on a water cell, check if we can fit the animated water tile here
- if (!CanFitAnimatedWaterTileHere(map, mapCell.X, mapCell.Y, tileWidth, tileHeight))
- return;
-
- // If we can fit the animated water tile here, then proceed to
- // randomly select a tile from the list of animated water tiles
- // of the current size
- int[] potentialTileIndexes = tileIndexesToPickFrom[sizeTypeIndex];
- tileImage = map.TheaterInstance.GetTile(animatedWaterTileSet.StartTileIndex + potentialTileIndexes[random.Next(potentialTileIndexes.Length)]);
-
- // Place the tile!
- map.PlaceTerrainTileAt(tileImage, mapCell.CoordsToPoint());
- });
- }
- }
-
- // Scripts can optionally also define helper methods to call.
-
- private bool IsWaterTile(int tileIndex)
- {
- if (tileIndex < waterTileSet.StartTileIndex || tileIndex >= waterTileSet.StartTileIndex + waterTileSet.TilesInSet)
- return false;
-
- return true;
- }
-
- private bool CanFitAnimatedWaterTileHere(Map map, int x, int y, int tileWidth, int tileHeight)
- {
- for (int cy = 0; cy < tileHeight; cy++)
- {
- for (int cx = 0; cx < tileWidth; cx++)
- {
- var mapCell = map.GetTile(x + cx, y + cy);
- if (mapCell == null)
- return false;
-
- if (!IsWaterTile(mapCell.TileIndex))
- return false;
- }
- }
-
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/src/TSMapEditor/Config/Scripts/Replace Autumn Grass With Tall Grass.cs b/src/TSMapEditor/Config/Scripts/Replace Autumn Grass With Tall Grass.cs
deleted file mode 100644
index 57bfa02c..00000000
--- a/src/TSMapEditor/Config/Scripts/Replace Autumn Grass With Tall Grass.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-// Using clauses.
-// Unless you know what's in the WAE code-base, you want to always include
-// these "standard usings".
-using System;
-using TSMapEditor;
-using TSMapEditor.Models;
-using TSMapEditor.CCEngine;
-using TSMapEditor.Rendering;
-using TSMapEditor.GameMath;
-
-namespace WAEScript
-{
- public class ReplaceAutumnGrassWithTallGrass
- {
- ///
- /// Returns the description of this script.
- /// All scripts must contain this function.
- ///
- public string GetDescription() => "This script replaces all autumn grass terrain with summer tall grass terrain. Continue?";
-
- ///
- /// Returns the message that is presented to the user if running this script succeeded.
- /// All scripts must contain this function.
- ///
- public string GetSuccessMessage()
- {
- return error ?? "Successfully replaced the terrain of " + count + " cells.";
- }
-
- int count = 0;
- string error = null;
-
- ///
- /// The function that actually does the magic.
- ///
- /// Map argument that allows us to access map data.
- public void Perform(Map map)
- {
- // Fetch the tile sets.
- var tallGrassTileSet = map.TheaterInstance.Theater.TileSets.Find(tileSet => tileSet.SetName == "Tall Grass");
- var tallGrassLATTileSet = map.TheaterInstance.Theater.TileSets.Find(tileSet => tileSet.SetName == "Tall/Short Grass LAT");
- var autumnGrassTileSet = map.TheaterInstance.Theater.TileSets.Find(tileSet => tileSet.SetName == "Autumn Grass");
- var autumnGrassLATTileSet = map.TheaterInstance.Theater.TileSets.Find(tileSet => tileSet.SetName == "Autumn Grass/Clear LAT");
-
- if (tallGrassTileSet == null)
- {
- error = "Failed to find tall grass TileSet!";
- return;
- }
-
- if (tallGrassLATTileSet == null)
- {
- error = "Failed to find tall grass LAT transition TileSet!";
- return;
- }
-
- if (autumnGrassTileSet == null)
- {
- error = "Failed to find autumn grass TileSet!";
- return;
- }
-
- if (autumnGrassLATTileSet == null)
- {
- error = "Failed to find autumn grass LAT transition TileSet!";
- return;
- }
-
- // Go through all cells on the map.
- map.DoForAllValidTiles(cell =>
- {
- // Check whether the cell in question has autumn grass.
- // If it does, replace its tile with tall grass.
- if (autumnGrassTileSet.ContainsTile(cell.TileIndex))
- {
- byte subTileIndex = 0; // LAT terrain does not use sub-tiles.
- cell.ChangeTileIndex(tallGrassTileSet.StartTileIndex, subTileIndex);
- count++;
- return;
- }
-
- // If the cell instead contains autumn-to-grass transition / LAT,
- // replace it with the respective tall-grass-to-grass transition tile.
- if (autumnGrassLATTileSet.ContainsTile(cell.TileIndex))
- {
- // Calculate the index of the tile within the LAT transition tileset.
- int indexWithinTileSet = cell.TileIndex - autumnGrassLATTileSet.StartTileIndex;
-
- // Based on the index above, calculate the new tile index.
- int newTileIndex = tallGrassLATTileSet.StartTileIndex + indexWithinTileSet;
-
- byte subTileIndex = 0; // LAT terrain does not use sub-tiles.
- cell.ChangeTileIndex(newTileIndex, subTileIndex);
- count++;
- }
- });
- }
- }
-}
\ No newline at end of file
diff --git a/src/TSMapEditor/Config/Scripts/Replace Autumn Jungle Grass With Summer Grass.cs b/src/TSMapEditor/Config/Scripts/Replace Autumn Jungle Grass With Summer Grass.cs
deleted file mode 100644
index 3f224aec..00000000
--- a/src/TSMapEditor/Config/Scripts/Replace Autumn Jungle Grass With Summer Grass.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-// Using clauses.
-// Unless you know what's in the WAE code-base, you want to always include
-// these "standard usings".
-using System;
-using TSMapEditor;
-using TSMapEditor.Models;
-using TSMapEditor.CCEngine;
-using TSMapEditor.Rendering;
-using TSMapEditor.GameMath;
-
-namespace WAEScript
-{
- public class ReplaceAutumnJungleGrassWithSummerGrass
- {
- ///
- /// Returns the description of this script.
- /// All scripts must contain this function.
- ///
- public string GetDescription() => "This script replaces all autumn grass overlay (AJGRASS) with summer jungle grass overlay (JGRASS). Continue?";
-
- ///
- /// Returns the message that is presented to the user if running this script succeeded.
- /// All scripts must contain this function.
- ///
- public string GetSuccessMessage()
- {
- return error ?? "Successfully replaced " + count + " AJGRASS overlay with JGRASS overlay.";
- }
-
- int count = 0;
- string error = null;
-
- ///
- /// The function that actually does the magic.
- ///
- /// Map argument that allows us to access map data.
- public void Perform(Map map)
- {
- // Fetch the JGRASS (jungle grass, summer version) overlay.
- var jungleGrassOverlayType = map.Rules.OverlayTypes.Find(ot => ot.ININame == "JGRASS");
-
- if (jungleGrassOverlayType == null)
- {
- error = "Failed to find jungle grass overlay type (JGRASS)!";
- return;
- }
-
- // Go through all cells on the map.
- map.DoForAllValidTiles(cell =>
- {
- // Skip cells that have no overlay.
- if (cell.Overlay == null)
- return;
-
- // Check whether the cell in question has AJGRASS overlay.
- // If it does, replace it with JGRASS overlay.
- if (cell.Overlay.OverlayType.ININame == "AJGRASS")
- {
- cell.Overlay.OverlayType = jungleGrassOverlayType;
- count++;
- }
- });
- }
- }
-}
\ No newline at end of file
diff --git a/src/TSMapEditor/Config/Scripts/Replace Autumn Trees With Summer Trees.cs b/src/TSMapEditor/Config/Scripts/Replace Autumn Trees With Summer Trees.cs
deleted file mode 100644
index d7bced60..00000000
--- a/src/TSMapEditor/Config/Scripts/Replace Autumn Trees With Summer Trees.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Using clauses.
-// Unless you know what's in the WAE code-base, you want to always include
-// these "standard usings".
-using System;
-using TSMapEditor;
-using TSMapEditor.Models;
-using TSMapEditor.CCEngine;
-using TSMapEditor.Rendering;
-using TSMapEditor.GameMath;
-
-namespace WAEScript
-{
- public class ReplaceAutumnTreesWithSummerTrees
- {
- ///
- /// Returns the description of this script.
- /// All scripts must contain this function.
- ///
- public string GetDescription() => "This script replaces all autumn trees with regular trees. Continue?";
-
- ///
- /// Returns the message that is presented to the user if running this script succeeded.
- /// All scripts must contain this function.
- ///
- public string GetSuccessMessage()
- {
- return "Replaced " + count + " terrain objects.";
- }
-
- int count = 0;
-
- ///
- /// The function that actually does the magic.
- ///
- /// Map argument that allows us to access map data.
- public void Perform(Map map)
- {
- // Go through all cells on the map.
- map.DoForAllValidTiles(cell =>
- {
- // Skip cells that have no terrain object.
- if (cell.TerrainObject == null)
- return;
-
- // Check if this cell has an autumn tree. Autumn tree terrain object types
- // begin their INI name with "AT".
- if (cell.TerrainObject.TerrainType.ININame.StartsWith("AT"))
- {
- // To get the name of the respective summer tree,
- // we simply remove the 'A' from the beginning of the terrain object type's INI name.
- string summerTreeININame = cell.TerrainObject.TerrainType.ININame.Substring(1);
-
- // Find the terrain object type of the summer tree.
- // If it is not found for some reason, bail.
- var terrainObjectType = map.Rules.TerrainTypes.Find(terrainType => terrainType.ININame == summerTreeININame);
- if (terrainObjectType == null)
- return;
-
- // Remove the original terrain object (the autumn tree).
- map.RemoveTerrainObject(cell.TerrainObject);
-
- // Place a new terrain object (the summer tree).
- var terrainObject = new TerrainObject(terrainObjectType, cell.CoordsToPoint());
- map.AddTerrainObject(terrainObject);
-
- count++;
- }
- });
- }
- }
-}
\ No newline at end of file
diff --git a/src/TSMapEditor/Config/Scripts/Smoothen Water.cs b/src/TSMapEditor/Config/Scripts/Smoothen Water.cs
new file mode 100644
index 00000000..4a715f79
--- /dev/null
+++ b/src/TSMapEditor/Config/Scripts/Smoothen Water.cs
@@ -0,0 +1,178 @@
+// Script for smoothing water in vanilla Tiberian Sun maps.
+
+// Using clauses.
+// Unless you know what's in the WAE code-base, you want to always include
+// these "standard usings".
+using System;
+using TSMapEditor;
+using TSMapEditor.Models;
+using TSMapEditor.CCEngine;
+using TSMapEditor.Rendering;
+using TSMapEditor.GameMath;
+
+namespace WAEScript
+{
+ public class ApplyAnimatedWaterScript
+ {
+ ///
+ /// Returns the description of this script.
+ /// All scripts must contain this function.
+ ///
+ public string GetDescription() => "This script will smoothen the water on the map. Continue?";
+
+ ///
+ /// Returns the message that is presented to the user if running this script succeeded.
+ /// All scripts must contain this function.
+ ///
+ public string GetSuccessMessage()
+ {
+ if (error == null)
+ return "Water successfully smoothened.";
+
+ return error;
+ }
+
+ private string error;
+
+ private TileSet waterTileSet;
+
+ private const string WaterTileSetName = "Water";
+
+ ///
+ /// The function that actually does the magic.
+ ///
+ /// Map argument that allows us to access map data.
+ public void Perform(Map map)
+ {
+ waterTileSet = map.TheaterInstance.Theater.FindTileSet(WaterTileSetName);
+ if (waterTileSet == null)
+ {
+ error = "TileSet for water not found!";
+ return;
+ }
+
+ // The algorithm works as follows:
+ // 1. Go through all cells on the map. The following steps are repeated for every cell.
+ // 2. Check to make sure that we have not processed this cell yet.
+ // 3. Check whether the cell contains water.
+ // 4. If the cell contains water, try to fit a 2x2 water cell there.
+ // If it fits, place a random 2x2 water cell on the position.
+ // If it fails to fit, then replace the cell with a 1x1 water cell.
+ // In both cases, mark the cell as processed.
+
+ // Create an array that holds information on
+ // which cells we have already processed.
+ const int maxCoord = 512; // 512 is the theoretical maximum coord of a cell (in a 256x256 map).
+ bool[][] processedCellsMap = new bool[maxCoord][];
+ for (int i = 0; i < processedCellsMap.Length; i++)
+ {
+ processedCellsMap[i] = new bool[maxCoord];
+ }
+
+ // Specifies the tiles to pick for each round.
+ // If multiple tiles are specified for a round, one of them is selected
+ // with RNG (there are multiple kinds of 2x2 and 1x1 animated water tiles).
+ // All tiles of one group are assumed to be of the same size!
+ int[][] tileIndexesToPickFrom = new int[][]
+ {
+ new int[] { 0, 1, 2, 3, 4, 5 }, // 2x2 water tiles that do not contain rocks
+ new int[] { 8, 9, 10, 11, 12 }, // 1x1 water tiles that do not contain rocks
+ };
+
+ // Create a random number generator.
+ Random random = new Random();
+
+ // Go through all cells on the map.
+ // If we find water on a cell, replace it with the 1x1 water tile.
+ // This gives us a clean "baseline" to work with.
+ map.DoForAllValidTiles(mapCell =>
+ {
+ // Check whether we have processed this cell before.
+ // If yes, skip it.
+ if (processedCellsMap[mapCell.Y][mapCell.X])
+ return;
+
+ // Check whether this cell contains water
+ if (!IsWaterTile(mapCell.TileIndex))
+ return;
+
+ // Go through the tile groups.
+ for (int sizeTypeIndex = 0; sizeTypeIndex < tileIndexesToPickFrom.Length; sizeTypeIndex++)
+ {
+ int[] potentialTileIndexes = tileIndexesToPickFrom[sizeTypeIndex];
+
+ // Fetch the first tile from this group so we can fetch its size.
+ ITileImage tileImage = map.TheaterInstance.GetTile(waterTileSet.StartTileIndex + potentialTileIndexes[0]);
+ int tileWidth = tileImage.Width;
+ int tileHeight = tileImage.Height;
+
+ // We know that we're on a water cell, check if we can fit a tile from the "current group" here
+ // without overriding non-water cells or cells that we have already processed.
+ if (!CanFitWaterTileHere(map, mapCell.X, mapCell.Y, tileWidth, tileHeight, processedCellsMap))
+ continue; // If not, try with another group if possible.
+
+ // We can fit the tile here, fetch a random tile from our group and place it here!
+ int randomizedArrayIndex = random.Next(potentialTileIndexes.Length);
+ tileImage = map.TheaterInstance.GetTile(waterTileSet.StartTileIndex + potentialTileIndexes[randomizedArrayIndex]);
+ map.PlaceTerrainTileAt(tileImage, mapCell.CoordsToPoint());
+
+ // Mark the affected cell(s) as processed.
+ // For 1x1 tiles we'll only mark 1 cell, for 2x2 tiles we'll mark 4 cells.
+ for (int cy = 0; cy < tileHeight; cy++)
+ {
+ for (int cx = 0; cx < tileWidth; cx++)
+ {
+ processedCellsMap[mapCell.Y + cy][mapCell.X + cx] = true;
+ }
+ }
+
+ // Continue to another cell.
+ break;
+ }
+ });
+ }
+
+
+ // **********************************************************
+ // Scripts can optionally also define helper methods to call.
+ // **********************************************************
+
+
+ ///
+ /// Checks whether a cell contains water.
+ ///
+ private bool IsWaterTile(int tileIndex)
+ {
+ if (tileIndex < waterTileSet.StartTileIndex || tileIndex >= waterTileSet.StartTileIndex + waterTileSet.TilesInSet)
+ return false;
+
+ return true;
+ }
+
+ ///
+ /// Checks whether an area around a cell contains water so
+ /// that a water tile of a given size could fit there.
+ ///
+ private bool CanFitWaterTileHere(Map map, int x, int y, int tileWidth, int tileHeight, bool[][] processedCellsMap)
+ {
+ for (int cy = 0; cy < tileHeight; cy++)
+ {
+ for (int cx = 0; cx < tileWidth; cx++)
+ {
+ var mapCell = map.GetTile(x + cx, y + cy);
+ if (mapCell == null)
+ return false;
+
+ // Do not allow placing over processed cells
+ if (processedCellsMap[mapCell.Y][mapCell.X])
+ return false;
+
+ if (!IsWaterTile(mapCell.TileIndex))
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/TSMapEditor/Config/SmudgeCollections.ini b/src/TSMapEditor/Config/SmudgeCollections.ini
index efbf0cee..fb2be8ac 100644
--- a/src/TSMapEditor/Config/SmudgeCollections.ini
+++ b/src/TSMapEditor/Config/SmudgeCollections.ini
@@ -5,92 +5,56 @@
[SmudgeCollections]
0=Craters
-1=Burns
-2=SnowyCraters
-3=SnowyBurns
+1=SmallCraters
+2=LargeCraters
+3=Burns
[Craters]
Name=Random Crater
-SmudgeType0=CR1E ; first entry is used for the texture on the sidebar,
- ; so we want it to use a big crater
-SmudgeType1=CR1B
-SmudgeType2=CR1C
-SmudgeType3=CR1D
-SmudgeType4=CR1A
-SmudgeType5=CR2A
-SmudgeType6=CR2B
-SmudgeType7=CR2C
-SmudgeType8=CR2D
-SmudgeType9=CR2E
-SmudgeType10=CR3A
-SmudgeType11=CR3B
-SmudgeType12=CR3C
-SmudgeType13=CR3D
-SmudgeType14=CR3E
-SmudgeType15=CR4A
-SmudgeType16=CR4B
-SmudgeType17=CR4C
-SmudgeType18=CR4D
-SmudgeType19=CR4E
-SmudgeType20=CR5A
-SmudgeType21=CR5B
-SmudgeType22=CR5C
-SmudgeType23=CR5D
-SmudgeType24=CR5E
-SmudgeType25=CR6A
-SmudgeType26=CR6B
-SmudgeType27=CR6C
-SmudgeType28=CR6D
-SmudgeType29=CR6E
+SmudgeType0=CRATER12 ; first entry is used for the texture on the sidebar,
+ ; so we want it to use a big crater
+SmudgeType1=CRATER11
+SmudgeType2=CRATER10
+SmudgeType3=CRATER09
+SmudgeType4=CRATER08
+SmudgeType5=CRATER07
+SmudgeType6=CRATER06
+SmudgeType7=CRATER05
+SmudgeType8=CRATER04
+SmudgeType9=CRATER03
+SmudgeType10=CRATER02
+SmudgeType11=CRATER01
-[Burns]
-Name=Random Burn
-SmudgeType0=SC1
-SmudgeType1=SC2
-SmudgeType2=SC3
-SmudgeType3=SC4
-SmudgeType4=SC5
-SmudgeType5=SC6
+[SmallCraters]
+Name=Random 1x1 Crater
+SmudgeType0=CRATER10
+SmudgeType1=CRATER09
+SmudgeType2=CRATER08
+SmudgeType3=CRATER07
+SmudgeType4=CRATER06
+SmudgeType5=CRATER05
+SmudgeType6=CRATER04
+SmudgeType7=CRATER03
+SmudgeType8=CRATER02
+SmudgeType9=CRATER01
-[SnowyCraters]
-Name=Random Snowy Crater
-SmudgeType0=CRS1E ; first entry is used for the texture on the sidebar,
- ; so we want it to use a big crater
-SmudgeType1=CRS1B
-SmudgeType2=CRS1C
-SmudgeType3=CRS1D
-SmudgeType4=CRS1A
-SmudgeType5=CRS2A
-SmudgeType6=CRS2B
-SmudgeType7=CRS2C
-SmudgeType8=CRS2D
-SmudgeType9=CRS2E
-SmudgeType10=CRS3A
-SmudgeType11=CRS3B
-SmudgeType12=CRS3C
-SmudgeType13=CRS3D
-SmudgeType14=CRS3E
-SmudgeType15=CRS4A
-SmudgeType16=CRS4B
-SmudgeType17=CRS4C
-SmudgeType18=CRS4D
-SmudgeType19=CRS4E
-SmudgeType20=CRS5A
-SmudgeType21=CRS5B
-SmudgeType22=CRS5C
-SmudgeType23=CRS5D
-SmudgeType24=CRS5E
-SmudgeType25=CRS6A
-SmudgeType26=CRS6B
-SmudgeType27=CRS6C
-SmudgeType28=CRS6D
-SmudgeType29=CRS6E
+[LargeCraters]
+Name=Random 2x2 Crater
+SmudgeType0=CRATER12
+SmudgeType1=CRATER11
-[SnowyBurns]
-Name=Random Snowy Burn
-SmudgeType0=SCS1
-SmudgeType1=SCS2
-SmudgeType2=SCS3
-SmudgeType3=SCS4
-SmudgeType4=SCS5
-SmudgeType5=SCS6
+[Burns]
+Name=Random Burn
+SmudgeType0=BURNT12 ; first entry is used for the texture on the sidebar,
+ ; so we want it to use a big crater
+SmudgeType1=BURNT11
+SmudgeType2=BURNT10
+SmudgeType3=BURNT09
+SmudgeType4=BURNT08
+SmudgeType5=BURNT07
+SmudgeType6=BURNT06
+SmudgeType7=BURNT05
+SmudgeType8=BURNT04
+SmudgeType9=BURNT03
+SmudgeType10=BURNT02
+SmudgeType11=BURNT01
diff --git a/src/TSMapEditor/Config/TerrainGeneratorPresets.ini b/src/TSMapEditor/Config/TerrainGeneratorPresets.ini
index e8675a1d..485e6558 100644
--- a/src/TSMapEditor/Config/TerrainGeneratorPresets.ini
+++ b/src/TSMapEditor/Config/TerrainGeneratorPresets.ini
@@ -7,266 +7,226 @@
; TerrainTypeGroupX=OpenChance,OccupiedChance,TerrainObject1,TerrainObject2,...
; TileGroupX=OpenChance,OccupiedChance,Tile Set Name,Tile1Index,Tile2Index,.... (defaults to all tiles in set if no tile indexes specified)
-; *************************
-; TEMPERATE THEATER PRESETS
-; *************************
-
-[SemiRoughConiferForest]
-Name=Detailed Conifer Forest
-TerrainTypeGroup0=0.125,0.0,TC01,TC02,TC03,TC04,TC05
-TerrainTypeGroup1=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.02,0.02,Debris/Dirt
-TileGroup3=0.6,0.3,Tall Grass
-Theater=Temperate
-Color=0,200,0
-
-[ConiferForestNoGroups]
-Name=Conifer Forest (no groups)
-TerrainTypeGroup0=0.3,0.3,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.02,0.02,Debris/Dirt
-TileGroup3=0.6,0.3,Tall Grass
-Theater=Temperate
-Color=0,200,0
-
-[ConiferForestNoGroupsSparse]
-Name=Conifer Forest (sparse, no tall grass)
-TerrainTypeGroup0=0.1,0.0,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.1,0.0,Pebbles
-TileGroup1=0.01,0.0,Small Rocks
-TileGroup2=0.02,0.02,Debris/Dirt
-Theater=Temperate
-Color=0,200,0
-
-[ConiferForestNoGroupsVerySparse]
-Name=Conifer Forest (very sparse)
-TerrainTypeGroup0=0.01,0.0,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.05,0.0,Pebbles
-TileGroup1=0.00005,0.0,Small Rocks
-TileGroup2=0.005,0.005,Debris/Dirt,0,1,4,5,6,7,8,9,10
-Theater=Temperate
-Color=0,200,0
-
-[LeafyForest]
-Name=Leafy Forest (thick)
-TerrainTypeGroup0=0.02,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.1,0.1,BR1,BR2,JBR01,JBR02,JBR03,JBR06,JBR07,JBR08,JBR09,JBR10
-TerrainTypeGroup2=0.3,0.3,T03,T10,T11,T12,T13,T14,T15,T17
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.6,0.3,Tall Grass
-Theater=Temperate
-Color=0,255,0
-
-[LeafyForestSparse]
-Name=Leafy Forest (sparse)
-TerrainTypeGroup0=0.01,0.0,BR1,BR2,JBR01,JBR02,JBR03,JBR06,JBR07,JBR08,JBR09,JBR10
-TerrainTypeGroup1=0.05,0.0,T03,T10,T11,T12,T13,T14,T15,T17
-TileGroup0=0.2,0.0,Pebbles
-TileGroup1=0.5,0.0,Tall Grass
-Theater=Temperate
-Color=0,255,0
-
-[Swampy]
-Name=Swampy (no conifers)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.3,0.3,BR1,BR2,JBR01,JBR02,JBR03,JBR06,JBR07,JBR08,JBR09,JBR10
-TerrainTypeGroup2=0.3,0.3,T03,T10,T11,T12,T13,T14,T15,T17
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Tall Grass
-OverlayGroup0=0.3,0.2,JGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=0,255,0
-
-[SwampyLimitedConifers]
-Name=Swampy (limited conifers)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.3,0.3,BR1,BR2,JBR01,JBR02,JBR03,JBR06,JBR07,JBR08,JBR09,JBR10
-TerrainTypeGroup2=0.3,0.3,T03,T10,T11,T12,T13,T14,T15,T17
-TerrainTypeGroup3=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Tall Grass
-OverlayGroup0=0.3,0.2,JGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=0,255,0
-
-[SwampyConiferGroups]
-Name=Swampy (conifer groups)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.10,0.0,TC01,TC02,TC03,TC04,TC05
-TerrainTypeGroup2=0.3,0.3,BR1,BR2,JBR01,JBR02,JBR03,JBR06,JBR07,JBR08,JBR09,JBR10
-TerrainTypeGroup3=0.3,0.3,T03,T10,T11,T12,T13,T14,T15,T17
-TerrainTypeGroup4=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Tall Grass
-OverlayGroup0=0.3,0.2,JGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=0,255,0
-
-[DirtGround]
-Name=Dirt + Pebbles/Rough Ground
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.6,0.0,Dirt LAT
-TileGroup2=0.03,0.0,Small Rocks
-Theater=Temperate
-Color=200,200,150
-
-[SnowyConiferForest]
-Name=Snowy Conifer Forest
-TerrainTypeGroup0=0.05,0.0,STC01,STC02,STC03,STC04,STC05
-TerrainTypeGroup1=0.15,0.15,ST01,ST02,ST05,ST06,ST07,ST08,ST16
-TileGroup0=0.05,0.3,~~~Pebbles
-Theater=Temperate
-Color=200,200,255
-
-[SnowryLeafyForest]
-Name=Snowy Leafy Forest
-TerrainTypeGroup0=0.3,0.0,ST03,ST10,ST11,ST12,ST13,ST14,ST15,ST17
-TileGroup0=0.2,0.5,~~~Pebbles
-Theater=Temperate
-Color=200,200,255
-
-[AutumnLeafyForest]
-Name=Autumn Leafy Forest (thick)
-TerrainTypeGroup0=0.3,0.0,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TileGroup0=0.2,0.5,Pebbles
-TileGroup1=0.7,0.3,Autumn Grass
-OverlayGroup0=0.3,0.2,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-OverlayGroup1=0.1,0.75,ALEAVES,0,1,2,3,4,5,6,7
-Theater=Temperate
-Color=255,200,0
-
-[AutumnLeafyForestSparse]
-Name=Autumn Leafy Forest (sparse)
-TerrainTypeGroup0=0.08,0.0,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TileGroup0=0.1,0.2,Pebbles
-TileGroup1=0.03,0.0,Small Rocks
-TileGroup2=0.6,0.3,Autumn Grass
-OverlayGroup0=0.1,0.05,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-OverlayGroup1=0.1,0.75,ALEAVES,0,1,2,3,4,5,6,7
-Theater=Temperate
-Color=255,200,0
-
-[AutumnField]
-Name=Autumn Grass Field
-TerrainTypeGroup0=0.05,0.0,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TileGroup0=0.1,0.2,Pebbles
-TileGroup1=0.6,0.3,Autumn Grass
-TileGroup2=0.03,0.0,Small Rocks
-OverlayGroup0=0.1,0.05,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-OverlayGroup1=0.1,0.75,ALEAVES,0,1,2,3,4,5,6,7
-Theater=Temperate
-Color=255,200,0
-
-[MixedAutumnAndConiferForestSparse]
-Name=Mixed Autumn + Conifer Forest
-TerrainTypeGroup0=0.03,0.0,TC01,ATC02,TC03,TC04,ATC05
-TerrainTypeGroup1=0.08,0.0,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TerrainTypeGroup2=0.08,0.0,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.1,0.2,Pebbles
-TileGroup1=0.03,0.0,Small Rocks
-TileGroup2=0.7,0.35,Autumn Grass
-OverlayGroup0=0.1,0.05,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-OverlayGroup1=0.1,0.75,ALEAVES,0,1,2,3,4,5,6,7
-Theater=Temperate
-Color=255,200,0
-
-[SemiRoughConiferForestAutumn]
-Name=Detailed Conifer Forest (Autumn)
-TerrainTypeGroup0=0.125,0.0,TC01,ATC02,TC03,TC04,ATC05
-TerrainTypeGroup1=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.02,0.02,Debris/Dirt
-TileGroup3=0.6,0.3,Autumn Grass
-Theater=Temperate
-Color=255,200,0
-
-[SwampyAutumn]
-Name=Swampy (no conifers) (Autumn)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.04,0.04,BR1,BR2
-TerrainTypeGroup2=0.3,0.3,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Autumn Grass
-OverlayGroup0=0.3,0.2,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=255,200,0
-
-[SwampyLimitedConifersAutumn]
-Name=Swampy (limited conifers) (Autumn)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.04,0.04,BR1,BR2
-TerrainTypeGroup2=0.3,0.3,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TerrainTypeGroup3=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Autumn Grass
-OverlayGroup0=0.3,0.2,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=255,200,0
-
-[SwampyConiferGroupsAutumn]
-Name=Swampy (conifer groups) (Autumn)
-TerrainTypeGroup0=0.15,0.0,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.10,0.0,TC01,ATC02,TC03,TC04,ATC05
-TerrainTypeGroup2=0.04,0.04,BR1,BR2
-TerrainTypeGroup3=0.3,0.3,AT03,AT10,AT11,AT12,AT13,AT14,AT15,AT17
-TerrainTypeGroup4=0.15,0.15,T01,T02,T05,T06,T07,T08,T09,T16
-TileGroup0=0.3,0.25,Pebbles
-TileGroup1=0.05,0.0,Small Rocks
-TileGroup2=0.6,0.3,Autumn Grass
-OverlayGroup0=0.3,0.2,AJGRASS,0,1,2,3,4,5,6,7,8,9,10
-Theater=Temperate
-Color=255,200,0
-
-[IceFloes]
-Name=Ice Floes
-OverlayGroup0=0.3,0.0,ICEFLOES
-Theater=Temperate
-Color=200,200,255
-
-; *************************
-; DESERT THEATER PRESETS
-; *************************
-
-[DESRockyGround]
-Name=Very Rocky Ground
-TerrainTypeGroup0=0.04,0.0,SROCK01,SROCK02,SROCK03,SROCK04,SROCK05,SROCK06,SROCK07
-TileGroup0=0.4,0.0,Rocks
-TileGroup1=0.2,0.5,Pebbles,0
-TileGroup2=0.6,0.6,Gray Sand LAT tile
-Theater=Desert
-
-[DESRoughGround]
-Name=Rough Ground (Gray Sand + Pebbles)
-TileGroup0=0.3,0.0,Pebbles,0
-TileGroup1=0.1,0.0,Pebbles,1,2
-TileGroup2=0.6,0.6,Gray Sand LAT tile
-Theater=Desert
-
-[DESLightSandPebbles]
-Name=Light Sand + Small Pebbles
-TileGroup0=0.2,0.0,Pebbles,1,2
-TileGroup1=0.6,0.6,~~~Alt Clear
-Theater=Desert
-
-[DESDryBushesCacti]
-Name=Dry Bushes + Cacti
-TerrainTypeGroup0=0.2,0.0,BR1,BR2,BR6,BR7,BR8,BR9
-TerrainTypeGroup1=0.15,0.0,BR4,BR5
-Theater=Desert
-
-[DESHumidBushesGreen]
-Name=Humid Bushes + Green LAT
-TerrainTypeGroup0=0.2,0.0,JBR01,JBR02,JBR03,JBR04,JBR05,JBR06,JBR07,JBR08,JBR09,JBR10
-TileGroup0=0.2,0.2,Pebbles
-TileGroup1=0.6,0.6,Green LAT tile
-Theater=Desert
+[GreenForestThick]
+Name=Green Forest (Thick)
+TerrainTypeGroup0=0.25,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10
+TileGroup0=0.6,0.3,Green
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Temperate
+
+[GreenForestSparse]
+Name=Green Forest (Sparse)
+TerrainTypeGroup0=0.1,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10
+TileGroup0=0.4,0.2,Green
+OverlayGroup0=0.005,0,TROCK01
+OverlayGroup1=0.005,0,TROCK02
+OverlayGroup2=0.005,0,TROCK03
+OverlayGroup3=0.005,0,TROCK04
+OverlayGroup4=0.005,0,TROCK05
+Theater=Temperate
+
+[YellowForestThick]
+Name=Yellow Forest (Thick)
+TerrainTypeGroup0=0.25,0.0,TREE11,TREE12,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20
+TileGroup0=0.4,0.2,Green
+TileGroup1=0.4,0.2,Rough LAT tile
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Temperate
+
+[YellowForestSparse]
+Name=Yellow Forest (Sparse)
+TerrainTypeGroup0=0.1,0.0,TREE11,TREE12,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20
+TileGroup0=0.2,0.1,Green
+TileGroup1=0.2,0.1,Rough LAT tile
+OverlayGroup0=0.005,0,TROCK01
+OverlayGroup1=0.005,0,TROCK02
+OverlayGroup2=0.005,0,TROCK03
+OverlayGroup3=0.005,0,TROCK04
+OverlayGroup4=0.005,0,TROCK05
+Theater=Temperate
+
+[Beach]
+Name=Beach
+TileGroup0=0.9,0.0,Sand
+OverlayGroup0=0.005,0,SROCK01
+OverlayGroup1=0.005,0,SROCK02
+OverlayGroup2=0.005,0,SROCK03
+OverlayGroup3=0.005,0,SROCK04
+OverlayGroup4=0.005,0,SROCK05
+Theater=Temperate
+
+[GreenFonaForest]
+Name=Green Fona Forest
+TerrainTypeGroup0=0.2,0.0,FONA06,FONA07,FONA08,FONA09,FONA10,FONA11,FONA12,FONA13,FONA14,FONA15
+TileGroup0=0.6,0.3,Crystal LAT tile
+Theater=Temperate
+
+[BlueFonaForest]
+Name=Blue Fona Forest
+TerrainTypeGroup0=0.2,0.0,FONA01,FONA02,FONA03,FONA04,FONA05
+TileGroup0=0.6,0.3,Blue Mold
+Theater=Temperate
+
+[RoughGroundTemperate]
+Name=Rough Ground
+TileGroup0=0.15,0.0,Rough ground
+TileGroup1=0.8,0.0,Rough LAT tile
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Temperate
+
+[GreenTiberiumFieldTemperate]
+Name=Green Tiberium Field
+OverlayGroup0=0.12,0,TIB02
+OverlayGroup1=0.12,0,TIB03
+OverlayGroup2=0.12,0,TIB04
+OverlayGroup3=0.12,0,TIB05
+OverlayGroup4=0.12,0,TIB06
+OverlayGroup5=0.12,0,TIB07
+OverlayGroup6=0.12,0,TIB08
+OverlayGroup7=0.12,0,TIB09
+TileGroup0=0.6,0.0,Rough LAT tile
+Theater=Temperate
+
+[BlueTiberiumFieldTemperate]
+Name=Blue Tiberium Field
+OverlayGroup0=0.12,0,TIB2_02
+OverlayGroup1=0.12,0,TIB2_03
+OverlayGroup2=0.12,0,TIB2_04
+OverlayGroup3=0.12,0,TIB2_05
+OverlayGroup4=0.12,0,TIB2_06
+OverlayGroup5=0.12,0,TIB2_07
+OverlayGroup6=0.12,0,TIB2_08
+OverlayGroup7=0.12,0,TIB2_09
+TileGroup0=0.6,0.0,Rough LAT tile
+Theater=Temperate
+
+[SnowyForestThick]
+Name=Snowy Forest (Thick)
+TerrainTypeGroup0=0.25,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10,TREE11,TREE12
+TileGroup0=0.6,0.3,Rough lat
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Snow
+
+[SnowyForestSparse]
+Name=Snowy Forest (Sparse)
+TerrainTypeGroup0=0.1,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10,TREE11,TREE12
+TileGroup0=0.4,0.2,Rough lat
+OverlayGroup0=0.005,0,TROCK01
+OverlayGroup1=0.005,0,TROCK02
+OverlayGroup2=0.005,0,TROCK03
+OverlayGroup3=0.005,0,TROCK04
+OverlayGroup4=0.005,0,TROCK05
+Theater=Snow
+
+[ConiferForestThick]
+Name=Conifer Forest (Thick)
+TerrainTypeGroup0=0.25,0.0,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20,TREE21,TREE22,TREE23,TREE24,TREE25
+TileGroup0=0.6,0.3,Rough lat
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Snow
+
+[ConiferForestSparse]
+Name=Conifer Forest (Sparse)
+TerrainTypeGroup0=0.1,0.0,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20,TREE21,TREE22,TREE23,TREE24,TREE25
+TileGroup0=0.4,0.2,Rough lat
+OverlayGroup0=0.005,0,TROCK01
+OverlayGroup1=0.005,0,TROCK02
+OverlayGroup2=0.005,0,TROCK03
+OverlayGroup3=0.005,0,TROCK04
+OverlayGroup4=0.005,0,TROCK05
+Theater=Snow
+
+[MixedForestThickSnow]
+Name=Mixed Forest (Thick)
+TerrainTypeGroup0=0.125,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10,TREE11,TREE12
+TerrainTypeGroup1=0.125,0.0,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20,TREE21,TREE22,TREE23,TREE24,TREE25
+TileGroup0=0.6,0.3,Rough lat
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Snow
+
+[MixedForestSparseSnow]
+Name=Mixed Forest (Sparse)
+TerrainTypeGroup0=0.05,0.0,TREE01,TREE02,TREE03,TREE04,TREE05,TREE06,TREE07,TREE08,TREE09,TREE10,TREE11,TREE12
+TerrainTypeGroup1=0.05,0.0,TREE13,TREE14,TREE15,TREE16,TREE17,TREE18,TREE19,TREE20,TREE21,TREE22,TREE23,TREE24,TREE25
+TileGroup0=0.4,0.2,Rough lat
+OverlayGroup0=0.005,0,TROCK01
+OverlayGroup1=0.005,0,TROCK02
+OverlayGroup2=0.005,0,TROCK03
+OverlayGroup3=0.005,0,TROCK04
+OverlayGroup4=0.005,0,TROCK05
+Theater=Snow
+
+[RockyGround]
+Name=Rocky Ground
+TileGroup0=0.6,0.0,Rock LAT
+OverlayGroup0=0.008,0,TROCK01
+OverlayGroup1=0.008,0,TROCK02
+OverlayGroup2=0.008,0,TROCK03
+OverlayGroup3=0.008,0,TROCK04
+OverlayGroup4=0.008,0,TROCK05
+OverlayGroup5=0.008,0,SROCK01
+OverlayGroup6=0.008,0,SROCK02
+OverlayGroup7=0.008,0,SROCK03
+Theater=Snow
+
+[RoughGroundSnow]
+Name=Rough Ground
+TileGroup0=0.15,0.0,Rough ground
+TileGroup1=0.8,0.0,Rough lat
+OverlayGroup0=0.01,0,TROCK01
+OverlayGroup1=0.01,0,TROCK02
+OverlayGroup2=0.01,0,TROCK03
+OverlayGroup3=0.01,0,TROCK04
+OverlayGroup4=0.01,0,TROCK05
+Theater=Snow
+
+[GreenTiberiumFieldSnow]
+Name=Green Tiberium Field
+OverlayGroup0=0.12,0,TIB02
+OverlayGroup1=0.12,0,TIB03
+OverlayGroup2=0.12,0,TIB04
+OverlayGroup3=0.12,0,TIB05
+OverlayGroup4=0.12,0,TIB06
+OverlayGroup5=0.12,0,TIB07
+OverlayGroup6=0.12,0,TIB08
+OverlayGroup7=0.12,0,TIB09
+TileGroup0=0.6,0.0,Rough lat
+Theater=Snow
+
+[BlueTiberiumFieldSnow]
+Name=Blue Tiberium Field
+OverlayGroup0=0.12,0,TIB2_02
+OverlayGroup1=0.12,0,TIB2_03
+OverlayGroup2=0.12,0,TIB2_04
+OverlayGroup3=0.12,0,TIB2_05
+OverlayGroup4=0.12,0,TIB2_06
+OverlayGroup5=0.12,0,TIB2_07
+OverlayGroup6=0.12,0,TIB2_08
+OverlayGroup7=0.12,0,TIB2_09
+TileGroup0=0.6,0.0,Rough lat
+Theater=Snow
diff --git a/src/TSMapEditor/Config/TerrainObjectCollections.ini b/src/TSMapEditor/Config/TerrainObjectCollections.ini
index 4b9c4d8b..fbf100bd 100644
--- a/src/TSMapEditor/Config/TerrainObjectCollections.ini
+++ b/src/TSMapEditor/Config/TerrainObjectCollections.ini
@@ -4,85 +4,98 @@
; Specifies terrain object collections available in the sidebar.
[TerrainObjectCollections]
-0=TemperateConifers
-1=LeafyTrees
-2=AutumnTrees
-3=AltTerrainConifers
-4=AltTerrainLeafyTrees
-5=BurnedConifers
-6=BurnedLeafyTrees
+0=TemperateGreenTrees
+1=TemperateYellowTrees
+2=TemperateBlueFona
+3=TemperateGreenFona
+4=SnowNonSpruces
+5=SnowSpruces
-[TemperateConifers]
-Name=Random Temperate Conifer
-TerrainObjectType0=T01
-TerrainObjectType1=T02
-TerrainObjectType2=T05
-TerrainObjectType3=T06
-TerrainObjectType4=T07
-TerrainObjectType5=T08
-TerrainObjectType6=T09
-TerrainObjectType7=T16
+[TemperateGreenTrees]
+Name=Random Green Tree
+TerrainObjectType0=TREE01
+TerrainObjectType1=TREE02
+TerrainObjectType2=TREE03
+TerrainObjectType3=TREE04
+TerrainObjectType4=TREE05
+TerrainObjectType5=TREE06
+TerrainObjectType6=TREE07
+TerrainObjectType7=TREE08
+TerrainObjectType8=TREE09
+TerrainObjectType9=TREE10
+AllowedTheaters=Temperate
-[LeafyTrees]
-Name=Random Leafy Tree
-TerrainObjectType0=T03
-TerrainObjectType1=T10
-TerrainObjectType2=T11
-TerrainObjectType3=T12
-TerrainObjectType4=T13
-TerrainObjectType5=T14
-TerrainObjectType6=T15
-TerrainObjectType7=T17
+[TemperateYellowTrees]
+Name=Random Yellow Tree
+TerrainObjectType0=TREE11
+TerrainObjectType1=TREE12
+TerrainObjectType2=TREE13
+TerrainObjectType3=TREE14
+TerrainObjectType4=TREE15
+TerrainObjectType5=TREE16
+TerrainObjectType6=TREE17
+TerrainObjectType7=TREE18
+TerrainObjectType8=TREE19
+TerrainObjectType9=TREE20
+TerrainObjectType10=TREE21
+TerrainObjectType11=TREE22
+TerrainObjectType12=TREE23
+TerrainObjectType13=TREE24
+TerrainObjectType14=TREE25
+AllowedTheaters=Temperate
-[AutumnTrees]
-Name=Random Autumn Tree
-TerrainObjectType0=AT03
-TerrainObjectType1=AT10
-TerrainObjectType2=AT11
-TerrainObjectType3=AT12
-TerrainObjectType4=AT13
-TerrainObjectType5=AT14
-TerrainObjectType6=AT15
-TerrainObjectType7=AT17
+[TemperateBlueFona]
+Name=Random Blue Fona
+TerrainObjectType0=FONA01
+TerrainObjectType1=FONA02
+TerrainObjectType2=FONA03
+TerrainObjectType3=FONA04
+TerrainObjectType4=FONA05
+AllowedTheaters=Temperate
-[AltTerrainConifers]
-Name=Random Alt. Conifer
-TerrainObjectType0=ST01
-TerrainObjectType1=ST02
-TerrainObjectType2=ST05
-TerrainObjectType3=ST06
-TerrainObjectType4=ST07
-TerrainObjectType5=ST08
-TerrainObjectType6=ST16
+[TemperateGreenFona]
+Name=Random Green Fona
+TerrainObjectType0=FONA06
+TerrainObjectType1=FONA07
+TerrainObjectType2=FONA08
+TerrainObjectType3=FONA09
+TerrainObjectType4=FONA10
+TerrainObjectType5=FONA11
+TerrainObjectType6=FONA12
+TerrainObjectType7=FONA13
+TerrainObjectType8=FONA14
+TerrainObjectType9=FONA15
+AllowedTheaters=Temperate
-[AltTerrainLeafyTrees]
-Name=Random Alt. Leafy Tree
-TerrainObjectType0=ST03
-TerrainObjectType1=ST10
-TerrainObjectType2=ST11
-TerrainObjectType3=ST12
-TerrainObjectType4=ST13
-TerrainObjectType5=ST14
-TerrainObjectType6=ST15
-TerrainObjectType7=ST17
-
-[BurnedConifers]
-Name=Random Burned Conifer
-TerrainObjectType0=BT01
-TerrainObjectType1=BT02
-TerrainObjectType2=BT05
-TerrainObjectType3=BT06
-TerrainObjectType4=BT07
-TerrainObjectType5=BT16
-
-[BurnedLeafyTrees]
-Name=Random Burned Leafy Tree
-TerrainObjectType0=BT03
-TerrainObjectType1=BT10
-TerrainObjectType2=BT11
-TerrainObjectType3=BT12
-TerrainObjectType4=BT13
-TerrainObjectType5=BT14
-TerrainObjectType6=BT15
-TerrainObjectType7=BT17
+[SnowNonSpruces]
+Name=Random Snowy Tree
+TerrainObjectType0=TREE01
+TerrainObjectType1=TREE02
+TerrainObjectType2=TREE03
+TerrainObjectType3=TREE04
+TerrainObjectType4=TREE05
+TerrainObjectType5=TREE06
+TerrainObjectType6=TREE07
+TerrainObjectType7=TREE08
+TerrainObjectType8=TREE09
+TerrainObjectType9=TREE10
+TerrainObjectType10=TREE11
+TerrainObjectType11=TREE12
+AllowedTheaters=Snow
+[SnowSpruces]
+Name=Random Spruce
+TerrainObjectType0=TREE13
+TerrainObjectType1=TREE14
+TerrainObjectType2=TREE15
+TerrainObjectType3=TREE16
+TerrainObjectType4=TREE17
+TerrainObjectType5=TREE18
+TerrainObjectType6=TREE19
+TerrainObjectType7=TREE20
+TerrainObjectType8=TREE21
+TerrainObjectType9=TREE22
+TerrainObjectType10=TREE23
+TerrainObjectType11=TREE24
+TerrainObjectType12=TREE25
+AllowedTheaters=Snow
diff --git a/src/TSMapEditor/Config/TerrainTypeImpassability.ini b/src/TSMapEditor/Config/TerrainTypeImpassability.ini
index d0f39fae..1eea6106 100644
--- a/src/TSMapEditor/Config/TerrainTypeImpassability.ini
+++ b/src/TSMapEditor/Config/TerrainTypeImpassability.ini
@@ -3,128 +3,110 @@
; Specifies which cells of terrain objects should be marked as impassable.
-; ******************
-; Autumn Tree Groups
-; ******************
-
-[ATC02]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[ATC05]
-ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
-
-; ******
-; Bushes
-; ******
-
-[BR6]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[BR7]
-ImpassableCells=0,0|1,0|1,1
-
-[BR8]
-ImpassableCells=0,0|1,0|2,0|1,1
-
-[BR9]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-; *************
-; Autumn Bushes
-; *************
-
-[ABR6]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[ABR7]
-ImpassableCells=0,0|1,0|1,1
-
-[ABR8]
-ImpassableCells=0,0|1,0|2,0|1,1
-
-[ABR9]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-; ***************
-; Alt Tree Groups
-; ***************
-
-[STC01]
-ImpassableCells=0,0
-
-[STC02]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[STC03]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[STC04]
-ImpassableCells=0,0|0,-1|-1,0
-
-[STC05]
-ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
-
-; ******************
-; Burned Tree Groups
-; ******************
-
-[BTC01]
-ImpassableCells=0,0
-
-[BTC02]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[BTC03]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[BTC04]
-ImpassableCells=0,0|0,-1|-1,0
-
-[BTC05]
-ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
-
-; *******************
-; Regular Tree Groups
-; *******************
-
-[TC01]
-ImpassableCells=0,0
-
-[TC02]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[TC03]
-ImpassableCells=0,0|0,1|1,0|1,1
-
-[TC04]
-ImpassableCells=0,0|0,-1|-1,0
-
-[TC05]
-ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
-
-; **********
-; Sand Rocks
-; **********
-
-[SROCK01]
-ImpassableCells=0,0
-
-[SROCK02]
-ImpassableCells=0,0
-
-[SROCK03]
-ImpassableCells=0,0
-
-[SROCK04]
-ImpassableCells=0,0
-
-[SROCK05]
-ImpassableCells=0,0
-
-[SROCK06]
-ImpassableCells=0,0|1,0|0,1
-
-[SROCK07]
-ImpassableCells=0,0|1,0|0,1
-
-
+; ; ******************
+; ; Autumn Tree Groups
+; ; ******************
+;
+; [ATC02]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [ATC05]
+; ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
+;
+; ; ******
+; ; Bushes
+; ; ******
+;
+; [BR6]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [BR7]
+; ImpassableCells=0,0|1,0|1,1
+;
+; [BR8]
+; ImpassableCells=0,0|1,0|2,0|1,1
+;
+; [BR9]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; ; ***************
+; ; Alt Tree Groups
+; ; ***************
+;
+; [STC01]
+; ImpassableCells=0,0
+;
+; [STC02]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [STC03]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [STC04]
+; ImpassableCells=0,0|0,-1|-1,0
+;
+; [STC05]
+; ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
+;
+; ; ******************
+; ; Burned Tree Groups
+; ; ******************
+;
+; [BTC01]
+; ImpassableCells=0,0
+;
+; [BTC02]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [BTC03]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [BTC04]
+; ImpassableCells=0,0|0,-1|-1,0
+;
+; [BTC05]
+; ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
+;
+; ; *******************
+; ; Regular Tree Groups
+; ; *******************
+;
+; [TC01]
+; ImpassableCells=0,0
+;
+; [TC02]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [TC03]
+; ImpassableCells=0,0|0,1|1,0|1,1
+;
+; [TC04]
+; ImpassableCells=0,0|0,-1|-1,0
+;
+; [TC05]
+; ImpassableCells=0,0|0,-1|-1,0|1,0|1,1
+;
+; ; **********
+; ; Sand Rocks
+; ; **********
+;
+; [SROCK01]
+; ImpassableCells=0,0
+;
+; [SROCK02]
+; ImpassableCells=0,0
+;
+; [SROCK03]
+; ImpassableCells=0,0
+;
+; [SROCK04]
+; ImpassableCells=0,0
+;
+; [SROCK05]
+; ImpassableCells=0,0
+;
+; [SROCK06]
+; ImpassableCells=0,0|1,0|0,1
+;
+; [SROCK07]
+; ImpassableCells=0,0|1,0|0,1
diff --git a/src/TSMapEditor/Config/Theaters.ini b/src/TSMapEditor/Config/Theaters.ini
index 2a0d288c..de9fa102 100644
--- a/src/TSMapEditor/Config/Theaters.ini
+++ b/src/TSMapEditor/Config/Theaters.ini
@@ -6,7 +6,7 @@
[Theaters]
0=Temperate
-1=Desert
+1=Snow
[Temperate]
ConfigINIPath=INI/Temperat.ini
@@ -15,12 +15,12 @@ TerrainPaletteName=isotem.pal
UnitPaletteName=unittem.pal
;TiberiumPaletteName=
FileExtension=.tem
-NewTheaterBuildingLetter=A
-
-[Desert]
-ConfigINIPath=INI/Desert.ini
-ContentMIXName=IsoDes.mix
-TerrainPaletteName=isodes.pal
-UnitPaletteName=unitdes.pal
-FileExtension=.des
NewTheaterBuildingLetter=T
+
+[Snow]
+ConfigINIPath=INI/Snow.ini
+ContentMIXName=IsoSnow.mix
+TerrainPaletteName=isosno.pal
+UnitPaletteName=unitsno.pal
+FileExtension=.sno
+NewTheaterBuildingLetter=A
diff --git a/src/TSMapEditor/Config/Tiberiums.ini b/src/TSMapEditor/Config/Tiberiums.ini
index 83e5e6ee..26f8577b 100644
--- a/src/TSMapEditor/Config/Tiberiums.ini
+++ b/src/TSMapEditor/Config/Tiberiums.ini
@@ -4,7 +4,7 @@
; A list of overlays used by each Tiberium type.
[Tiberiums]
-Riparius=RTIB01,RTIB02,RTIB03,RTIB04,RTIB05,RTIB06,RTIB07,RTIB08,RTIB09,RTIB10,RTIB11,RTIB12
-Cruentus=BLUGEM01,BLUGEM02,BLUGEM03,BLUGEM04,GRNGEM01,GRNGEM02,GRNGEM03,GRNGEM04,MIXGEM01,MIXGEM02,MIXGEM03,MIXGEM04
-Vinifera=QTIB01,QTIB02,QTIB03,QTIB04,QTIB05,QTIB06,QTIB07,QTIB08,QTIB09,QTIB10,QTIB11,QTIB12
-Aboreus=ZORE01,ZORE02,ZORE03,ZORE04,ZORE05,ZORE06,ZORE07,ZORE08,ZORE09,ZORE10,ZORE11,ZORE12,SCRAP01,SCRAP02,SCRAP03,SCRAP04
+Riparius=TIB01,TIB02,TIB03,TIB04,TIB05,TIB06,TIB07,TIB08,TIB09,TIB10,TIB11,TIB12,TIB13,TIB14,TIB15,TIB16,TIB17,TIB18,TIB19,TIB20
+Cruentus=BTIB01,BTIB02,BTIB03,BTIB04,BTIB05,BTIB06,BTIB07,BTIB08,BTIB09,BTIB10,BTIB11,BTIB12
+Vinifera=TIB2_01,TIB2_02,TIB2_03,TIB2_04,TIB2_05,TIB2_06,TIB2_07,TIB2_08,TIB2_09,TIB2_10,TIB2_11,TIB2_12,TIB2_13,TIB2_14,TIB2_15,TIB2_16,TIB2_17,TIB2_18,TIB2_19,TIB2_20
+Aboreus=TIB3_01,TIB3_02,TIB3_03,TIB3_04,TIB3_05,TIB3_06,TIB3_07,TIB3_08,TIB3_09,TIB3_10,TIB3_11,TIB3_12,TIB3_13,TIB3_14,TIB3_15,TIB3_16,TIB3_17,TIB3_18,TIB3_19,TIB3_20
diff --git a/src/TSMapEditor/Config/UI/EditorControlsPanel.ini b/src/TSMapEditor/Config/UI/EditorControlsPanel.ini
index dd72d81f..580e4e99 100644
--- a/src/TSMapEditor/Config/UI/EditorControlsPanel.ini
+++ b/src/TSMapEditor/Config/UI/EditorControlsPanel.ini
@@ -13,7 +13,15 @@ $CC05=chkDrawMapWideOverlay:XNACheckBox
$CC06=btnPlaceWaypoint:EditorButton
$CC07=btnDeletionMode:EditorButton
$CC08=btnFrameworkMode:EditorButton
-$Width=max(getRight(chkAutoLAT), getRight(chkOnlyPaintOnClearGround), getRight(chkDrawMapWideOverlay)) + EMPTY_SPACE_SIDES
+$CC09=btn2DMode:EditorButton
+$CC10=btnRaiseGround:EditorButton
+$CC11=btnLowerGround:EditorButton
+$CC12=btnRaiseGroundSteep:EditorButton
+$CC13=btnLowerGroundSteep:EditorButton
+$CC14=btnRaiseCells:EditorButton
+$CC15=btnLowerCells:EditorButton
+$CC16=btnFlattenGround:EditorButton
+$Width=max(getRight(chkAutoLAT), getRight(chkOnlyPaintOnClearGround), getRight(chkDrawMapWideOverlay), getRight(btnLowerCells)) + EMPTY_SPACE_SIDES
$Height=getBottom(btnPlaceWaypoint) + EMPTY_SPACE_BOTTOM
@@ -28,8 +36,8 @@ $Y=getY(lblBrushSize) + ((getHeight(lblBrushSize) - getHeight(ddBrushSize)) / 2)
$Width=60
[LATPanel]
-$Width=330
-$Height=(24 * 2) + VERTICAL_SPACING
+$Width=400
+$Height=24
$Y=VERTICAL_SPACING / 2
$X=getRight(ddBrushSize) + HORIZONTAL_SPACING
DrawBorders=no
@@ -66,7 +74,63 @@ ToolTip=Deletion Mode
[btnFrameworkMode]
$X=getRight(btnDeletionMode) + HORIZONTAL_SPACING
$Y=getY(btnDeletionMode)
-$Width=getWidth(btnDeletionMode)
+$Width=getWidth(btnPlaceWaypoint)
ExtraTexture=ToolIcons/frameworkmode.png
ToolTip=Toggle Framework Mode (Marble Madness)
+[btn2DMode]
+$X=getRight(btnFrameworkMode) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/2dmode.png
+ToolTip=Toggle 2D Mode
+
+[btnRaiseGround]
+$X=getRight(btn2DMode) + (HORIZONTAL_SPACING * 2)
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/raiseground.png
+ToolTip=Raise Ground (Non-Steep Ramps / FinalSun Mode)
+
+[btnLowerGround]
+$X=getRight(btnRaiseGround) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/lowerground.png
+ToolTip=Lower Ground (Non-Steep Ramps / FinalSun Mode)
+
+[btnRaiseGroundSteep]
+$X=getRight(btnLowerGround) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/raiseground_steep.png
+ToolTip=Raise Ground (Steep Ramps)
+
+[btnLowerGroundSteep]
+$X=getRight(btnRaiseGroundSteep) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/lowerground_steep.png
+ToolTip=Lower Ground (Steep Ramps)
+
+[btnRaiseCells]
+$X=getRight(btnLowerGroundSteep) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/raisecells.png
+ToolTip=Raise Individual Cells
+
+[btnLowerCells]
+$X=getRight(btnRaiseCells) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/lowercells.png
+ToolTip=Lower Individual Cells
+
+[btnFlattenGround]
+$X=getRight(btnLowerCells) + HORIZONTAL_SPACING
+$Y=getY(btnPlaceWaypoint)
+$Width=getWidth(btnPlaceWaypoint)
+ExtraTexture=ToolIcons/flattenground.png
+ToolTip=Flatten Ground
+
diff --git a/src/TSMapEditor/Config/UI/Windows/CreateNewMapWindow.ini b/src/TSMapEditor/Config/UI/Windows/CreateNewMapWindow.ini
index 5530ab31..0eb515da 100644
--- a/src/TSMapEditor/Config/UI/Windows/CreateNewMapWindow.ini
+++ b/src/TSMapEditor/Config/UI/Windows/CreateNewMapWindow.ini
@@ -24,7 +24,7 @@ $X=150
$Width=getWidth(CreateNewMapWindow) - getX(ddTheater) - EMPTY_SPACE_SIDES
$Y=getBottom(lblHeader) + EMPTY_SPACE_TOP
Option0=TEMPERATE
-Option1=DESERT
+Option1=SNOW
[lblTheater]
$X=EMPTY_SPACE_SIDES
diff --git a/src/TSMapEditor/TSMapEditor.csproj b/src/TSMapEditor/TSMapEditor.csproj
index 141734b6..3ce37e01 100644
--- a/src/TSMapEditor/TSMapEditor.csproj
+++ b/src/TSMapEditor/TSMapEditor.csproj
@@ -26,13 +26,9 @@
editoricon.ico
-
-
-
-
-
+
@@ -410,6 +406,9 @@
PreserveNewest
+
+ PreserveNewest
+
@@ -423,7 +422,7 @@
-
+
PreserveNewest
@@ -435,18 +434,6 @@
PreserveNewest
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
diff --git a/src/TSMapEditor/marble.mix b/src/TSMapEditor/marble.mix
new file mode 100644
index 00000000..98360b29
Binary files /dev/null and b/src/TSMapEditor/marble.mix differ