Browse Source

Adds cleanup of material and terrain material objects when creating a new asset of the respective type to avoid collisions when we immediately properly init the asset on creation
Reorganizes the terrainMaterialDlg to use a split container for better usability, fixed some minor layout issues, and added in FX material fields to be able to edit those directly via the terrain mat editor
Updated the terrainMaterialDlg save logic to better sequence the steps for saving to allow stable in-place creation of asset for stub materials due to missing references
Updated the terrainMaterialDlg save logic to properly save out all the material effects stuff like footstep flags, effect colors, or sounds.

JeffR 3 years ago
parent
commit
85bb4cbff3

+ 3 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript

@@ -21,6 +21,9 @@ function AssetBrowser::createMaterialAsset(%this)
    
    TamlWrite(%asset, %tamlpath);
    
+   //cleanup before proper init'ing
+   %assetName.delete();
+   
    %moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 

+ 4 - 0
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/terrainMaterial.tscript

@@ -48,6 +48,10 @@ function AssetBrowser::createTerrainMaterialAsset(%this)
    
    TamlWrite(%asset, %tamlpath);
    
+   //cleanup before proper init'ing
+   %matDef.delete();
+   %fxMatDef.delete();
+   
    %moduleDef = ModuleDatabase.findModule(%moduleName, 1);
 	AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
 	

+ 222 - 1250
Templates/BaseGame/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui

@@ -1,1922 +1,894 @@
 //--- OBJECT WRITE BEGIN ---
 $guiContent = new GuiControl(TerrainMaterialDlg,EditorGuiGroup) {
-   position = "0 0";
    extent = "1024 768";
-   minExtent = "8 2";
-   horizSizing = "right";
-   vertSizing = "bottom";
    profile = "ToolsGuiDefaultNonModalProfile";
-   visible = "1";
-   active = "1";
    tooltipProfile = "ToolsGuiToolTipProfile";
-   hovertime = "1000";
    isContainer = "1";
-   canSave = "1";
    canSaveDynamicFields = "1";
 
    new GuiWindowCtrl() {
       text = "Terrain Materials Editor";
-      resizeWidth = "1";
-      resizeHeight = "1";
-      canMove = "1";
-      canClose = "1";
       canMinimize = "0";
       canMaximize = "0";
-      canCollapse = "0";
       closeCommand = "TerrainMaterialDlg.dialogCancel();";
       edgeSnap = "0";
       docking = "None";
       margin = "4 4 4 4";
-      padding = "0 0 0 0";
       anchorTop = "0";
-      anchorBottom = "0";
       anchorLeft = "0";
-      anchorRight = "0";
-      position = "315 118";
-      extent = "394 532";
+      position = "222 59";
+      extent = "457 639";
       minExtent = "358 452";
       horizSizing = "center";
       vertSizing = "center";
       profile = "ToolsGuiWindowProfile";
-      visible = "1";
-      active = "1";
       tooltipProfile = "ToolsGuiToolTipProfile";
-      hovertime = "1000";
-      isContainer = "1";
-      canSave = "1";
-      canSaveDynamicFields = "0";
+
+      new GuiSplitContainer() {
+         splitPoint = "182 100";
+         position = "3 27";
+         extent = "450 579";
+         horizSizing = "width";
+         profile = "ToolsGuiDefaultProfile";
+         tooltipProfile = "GuiToolTipProfile";
+
+         new GuiPanel() {
+            docking = "Client";
+            extent = "180 579";
+            profile = "ToolsGuiDefaultProfile";
+            tooltipProfile = "GuiToolTipProfile";
+            internalName = "Panel1";
 
       new GuiContainer() {
-         margin = "0 0 0 0";
-         padding = "0 0 0 0";
-         anchorTop = "1";
-         anchorBottom = "0";
-         anchorLeft = "1";
-         anchorRight = "0";
-         position = "6 25";
-         extent = "189 64";
-         minExtent = "8 2";
+               position = "6 -2";
+               extent = "179 18";
          horizSizing = "width";
-         vertSizing = "bottom";
          profile = "inspectorStyleRolloutDarkProfile";
-         visible = "1";
-         active = "1";
          tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "1";
-         canSave = "1";
-         canSaveDynamicFields = "0";
 
          new GuiTextCtrl() {
             text = "Terrain Materials";
-            maxLength = "1024";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "5 0";
             extent = "91 18";
-            minExtent = "8 2";
-            horizSizing = "right";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "GuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiBitmapButtonCtrl() {
-            bitmapAsset = "ToolsModule:new_n_image";
-            bitmapMode = "Stretched";
-            autoFitExtents = "0";
-            useModifiers = "0";
-            useStates = "1";
-            masked = "0";
-            groupNum = "-1";
-            buttonType = "PushButton";
-            useMouseEvents = "0";
-            position = "160 2";
+                  BitmapAsset = "ToolsModule:new_n_image";
+                  position = "150 3";
             extent = "15 15";
-            minExtent = "8 2";
             horizSizing = "left";
             vertSizing = "top";
             profile = "ToolsGuiButtonProfile";
-            visible = "1";
-            active = "1";
             command = "TerrainMaterialDlg.newMat();";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiBitmapButtonCtrl() {
-            bitmapAsset = "ToolsModule:delete_n_image";
-            bitmapMode = "Stretched";
-            autoFitExtents = "0";
-            useModifiers = "0";
-            useStates = "1";
-            masked = "0";
-            groupNum = "-1";
-            buttonType = "PushButton";
-            useMouseEvents = "0";
-            position = "173 2";
+                  BitmapAsset = "ToolsModule:delete_n_image";
+                  position = "163 3";
             extent = "15 15";
-            minExtent = "8 2";
             horizSizing = "left";
             vertSizing = "top";
             profile = "ToolsGuiButtonProfile";
-            visible = "1";
-            active = "1";
             command = "TerrainMaterialDlg.deleteMat();";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
       };
+            new GuiControl() {
+               position = "6 26";
+               extent = "177 545";
+               horizSizing = "width";
+               vertSizing = "height";
+               profile = "ToolsGuiDefaultProfile";
+               tooltipProfile = "ToolsGuiToolTipProfile";
+               isContainer = "1";
+
+               new GuiScrollCtrl() {
+                  hScrollBar = "dynamic";
+                  vScrollBar = "dynamic";
+                  extent = "174 549";
+                  horizSizing = "width";
+                  vertSizing = "height";
+                  profile = "ToolsGuiScrollProfile";
+                  tooltipProfile = "ToolsGuiToolTipProfile";
+
+                  new GuiTreeViewCtrl() {
+                     itemHeight = "21";
+                     mouseDragging = "0";
+                     multipleSelections = "0";
+                     deleteObjectAllowed = "0";
+                     dragToItemAllowed = "0";
+                     showRoot = "0";
+                     showObjectIds = "0";
+                     showClassNames = "0";
+                     showObjectNames = "0";
+                     position = "1 1";
+                     extent = "224 42";
+                     profile = "ToolsGuiTreeViewProfile";
+                     tooltipProfile = "ToolsGuiToolTipProfile";
+                     internalName = "matLibTree";
+                     class = "TerrainMaterialTreeCtrl";
+                  };
+               };
+            };
+         };
+         new GuiPanel() {
+            docking = "Client";
+            position = "184 0";
+            extent = "266 579";
+            profile = "ToolsGuiDefaultProfile";
+            tooltipProfile = "GuiToolTipProfile";
+            internalName = "panel2";
+
       new GuiContainer() {
-         margin = "0 0 0 0";
-         padding = "0 0 0 0";
-         anchorTop = "1";
-         anchorBottom = "0";
-         anchorLeft = "1";
-         anchorRight = "0";
-         position = "202 26";
-         extent = "185 463";
-         minExtent = "8 2";
-         horizSizing = "left";
+               position = "-7 0";
+               extent = "274 577";
+               horizSizing = "width";
          vertSizing = "height";
          profile = "inspectorStyleRolloutProfile";
-         visible = "1";
-         active = "1";
          tooltipProfile = "ToolsGuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "1";
          internalName = "matSettingsParent";
-         canSave = "1";
-         canSaveDynamicFields = "0";
 
          new GuiBitmapCtrl() {
-            bitmap = "ToolsModule:separator_v_image";
-            color = "White";
-            wrap = "0";
+                  BitmapAsset = "ToolsModule:separator_v_image";
             position = "1 0";
-            extent = "183 2";
-            minExtent = "8 2";
+                  extent = "271 2";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiTextCtrl() {
             text = "Name";
-            maxLength = "1024";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "8 22";
             extent = "44 17";
-            minExtent = "8 2";
-            horizSizing = "right";
-            vertSizing = "bottom";
             profile = "ToolsGuiTextProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiDefaultProfile";
-            hovertime = "1000";
             isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiTextEditCtrl() {
-            historySize = "0";
-            tabComplete = "0";
-            sinkAllKeyEvents = "0";
-            password = "0";
-            passwordMask = "*";
-            maxLength = "1024";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "39 21";
-            extent = "143 18";
-            minExtent = "8 2";
-            horizSizing = "right";
-            vertSizing = "bottom";
+                  extent = "227 18";
             profile = "ToolsGuiTextEditProfile";
-            visible = "1";
-            active = "1";
             altCommand = "TerrainMaterialDlg.setMaterialName( $ThisControl.getText() );";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
             isContainer = "0";
             internalName = "matNameCtrl";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiTextCtrl() {
             text = "Material Properties";
-            maxLength = "1024";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "8 0";
             extent = "117 16";
-            minExtent = "8 2";
-            horizSizing = "right";
-            vertSizing = "bottom";
             profile = "ToolsGuiInspectorTitleTextProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
             isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiContainer(DiffuseMapContainer) {
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "6 43";
-            extent = "185 75";
-            minExtent = "8 2";
+                  extent = "261 75";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
 
             new GuiCheckBoxCtrl() {
                text = " Use Side Projection";
-               groupNum = "-1";
-               buttonType = "ToggleButton";
-               useMouseEvents = "0";
                position = "55 54";
                extent = "119 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiCheckBoxProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "sideProjectionCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapCtrl() {
-               bitmapAsset = "ToolsModule:unknownImage_image";
-               color = "255 255 255 255";
-               wrap = "0";
+                     BitmapAsset = "ToolsModule:unknownImage_image";
                position = "1 1";
                extent = "47 47";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "texDiffuseMap";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
+                     BitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
                position = "1 1";
                extent = "48 48";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the Active Diffuse Map for this layer";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Diffuse";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 -3";
                extent = "39 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "EditorTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "None";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 16";
-               extent = "116 17";
-               minExtent = "8 2";
+                     extent = "205 17";
                horizSizing = "width";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "diffuseMapAssetId";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiButtonCtrl() {
                text = "Edit";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "116 0";
+                     position = "204 0";
                extent = "40 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiButtonProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:delete_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "159 0";
+                     BitmapAsset = "ToolsModule:delete_n_image";
+                     position = "247 0";
                extent = "16 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.clearTextureMap(\"DiffuseMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Size";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "132 35";
                extent = "39 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "200";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "94 34";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "baseSizeCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
          };
          new GuiBitmapCtrl() {
-            bitmapAsset = "ToolsModule:separator_v_image";
-            color = "255 255 255 255";
-            wrap = "0";
+                  BitmapAsset = "ToolsModule:separator_v_image";
             position = "6 116";
-            extent = "175 2";
-            minExtent = "8 2";
+                  extent = "266 2";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiContainer(DetailMapContainer) {
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "6 122";
-            extent = "185 100";
-            minExtent = "8 2";
+                  extent = "261 75";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
 
             new GuiBitmapCtrl() {
-               bitmapAsset = "ToolsModule:unknownImage_image";
-               color = "255 255 255 255";
-               wrap = "0";
+                     BitmapAsset = "ToolsModule:unknownImage_image";
                position = "1 1";
                extent = "47 47";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "texDetailMap";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
+                     BitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
                position = "1 1";
                extent = "48 48";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"DetailMap\");";
                tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the active Detail Map for this layer.";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Detail";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 -3";
                extent = "30 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "EditorTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "None";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 16";
-               extent = "116 17";
-               minExtent = "8 2";
+                     extent = "205 17";
                horizSizing = "width";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "detailMapAssetId";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiButtonCtrl() {
                text = "Edit";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "116 0";
+                     position = "204 0";
                extent = "40 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiButtonProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"DetailMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:delete_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "159 0";
+                     BitmapAsset = "ToolsModule:delete_n_image";
+                     position = "247 0";
                extent = "16 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.clearTextureMap(\"DetailMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Size";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "132 33";
                extent = "39 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "2";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "94 32";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "detSizeCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Strength";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "39 54";
                extent = "46 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "1";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "1 53";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "detStrengthCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Distance";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "132 54";
                extent = "45 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "50";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "94 53";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "detDistanceCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
          };
          new GuiBitmapCtrl() {
-            bitmapAsset = "ToolsModule:separator_v_image";
-            color = "255 255 255 255";
-            wrap = "0";
+                  BitmapAsset = "ToolsModule:separator_v_image";
             position = "6 198";
-            extent = "175 2";
-            minExtent = "8 2";
+                  extent = "266 2";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiContainer(NormalMapContainer) {
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "6 205";
-            extent = "185 100";
-            minExtent = "8 2";
+                  extent = "261 100";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
 
             new GuiBitmapCtrl() {
-               bitmapAsset = "ToolsModule:unknownImage_image";
-               color = "255 255 255 255";
-               wrap = "0";
+                     BitmapAsset = "ToolsModule:unknownImage_image";
                position = "1 1";
                extent = "47 47";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "texNormalMap";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Normal";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 -3";
                extent = "39 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "EditorTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
+                     BitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
                position = "1 1";
                extent = "48 48";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"NormalMap\");";
                tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the active Normal Map for this layer.";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "None";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 15";
-               extent = "116 17";
-               minExtent = "8 2";
+                     extent = "205 17";
                horizSizing = "width";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "normalMapAssetId";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiButtonCtrl() {
                text = "Edit";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "116 0";
+                     position = "204 0";
                extent = "40 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiButtonProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"NormalMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:delete_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "159 0";
+                     BitmapAsset = "ToolsModule:delete_n_image";
+                     position = "247 0";
                extent = "16 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.clearTextureMap(\"NormalMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Parallax Scale";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "92 34";
                extent = "77 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "0";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "55 33";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "parallaxScaleCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiSliderCtrl(TerrainMaterialDlgBlendHeightBaseSlider) {
                range = "-0.5 0.5";
                ticks = "0";
-               snap = "0";
                value = "0";
-               useFillBar = "0";
-               fillBarColor = "255 255 255 255";
-               renderTicks = "1";
                position = "39 61";
                extent = "70 14";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiSliderProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "blendHeightBaseSliderCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Blend Height";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "115 61";
-               extent = "58 15";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
+                     extent = "68 15";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "1";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl(TerrainMaterialDlgBlendHeightBaseTextEdit) {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "0";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "1 59";
                extent = "35 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "blendHeightBaseTextEditCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiSliderCtrl(TerrainMaterialDlgBlendHeightContrastSlider) {
                range = "0 5";
                ticks = "0";
-               snap = "0";
                value = "1";
-               useFillBar = "0";
-               fillBarColor = "255 255 255 255";
-               renderTicks = "1";
                position = "39 81";
                extent = "70 14";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiSliderProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "blendHeightContrastSliderCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Blend Contrast";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "115 81";
-               extent = "58 15";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
+                     extent = "76 15";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "1";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl(TerrainMaterialDlgBlendHeightContrastTextEdit) {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "1";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "1 79";
                extent = "35 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "blendHeightContrastTextEditCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
          };
          new GuiBitmapCtrl() {
-            bitmapAsset = "ToolsModule:separator_v_image";
-            color = "255 255 255 255";
-            wrap = "0";
+                  BitmapAsset = "ToolsModule:separator_v_image";
             position = "6 307";
-            extent = "175 2";
-               minExtent = "8 2";
+                  extent = "266 2";
             horizSizing = "width";
-               vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
          new GuiContainer(ORMMapContainer) {
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
             position = "6 314";
-            extent = "185 64";
-               minExtent = "8 2";
+                  extent = "261 64";
                horizSizing = "width";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "1";
-               canSave = "1";
-               canSaveDynamicFields = "0";
 
                new GuiBitmapCtrl() {
-                  bitmapAsset = "ToolsModule:unknownImage_image";
-                  color = "255 255 255 255";
-                  wrap = "0";
+                     BitmapAsset = "ToolsModule:unknownImage_image";
                   position = "1 1";
                   extent = "47 47";
-                  minExtent = "8 2";
-                  horizSizing = "right";
-                  vertSizing = "bottom";
                   profile = "ToolsGuiDefaultProfile";
-                  visible = "1";
-                  active = "1";
                   tooltipProfile = "ToolsGuiToolTipProfile";
-                  hovertime = "1000";
-                  isContainer = "0";
                internalName = "texORMConfigMap";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "ORM Config";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 -3";
                extent = "64 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "EditorTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
                };
                new GuiBitmapButtonCtrl() {
-                  bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
-                  bitmapMode = "Stretched";
-                  autoFitExtents = "0";
-                  useModifiers = "0";
-                  useStates = "1";
-                  masked = "0";
-                  groupNum = "-1";
-                  buttonType = "PushButton";
-                  useMouseEvents = "0";
+                     BitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
                   position = "1 1";
                   extent = "48 48";
-                  minExtent = "8 2";
-                  horizSizing = "right";
-                  vertSizing = "bottom";
                   profile = "ToolsGuiDefaultProfile";
-                  visible = "1";
-                  active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"ORMConfigMap\");";
                   tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the active ORM Config Map for this layer.";
-                  hovertime = "1000";
-                  isContainer = "0";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
                };
                new GuiTextCtrl() {
                   text = "None";
-                  maxLength = "1024";
-                  margin = "0 0 0 0";
-                  padding = "0 0 0 0";
-                  anchorTop = "1";
-                  anchorBottom = "0";
-                  anchorLeft = "1";
-                  anchorRight = "0";
                position = "56 15";
-               extent = "116 17";
-                  minExtent = "8 2";
+                     extent = "205 17";
                   horizSizing = "width";
-                  vertSizing = "bottom";
                   profile = "ToolsGuiTextProfile";
-                  visible = "1";
-                  active = "1";
                   tooltipProfile = "ToolsGuiToolTipProfile";
-                  hovertime = "1000";
                   isContainer = "0";
                internalName = "ORMMapAssetId";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
                };
                new GuiButtonCtrl() {
                   text = "Edit";
-                  groupNum = "-1";
-                  buttonType = "PushButton";
-                  useMouseEvents = "0";
-               position = "116 0";
+                     position = "205 0";
                   extent = "40 16";
-                  minExtent = "8 2";
                   horizSizing = "left";
-                  vertSizing = "bottom";
                   profile = "ToolsGuiButtonProfile";
-                  visible = "1";
-                  active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"OrmConfigMap\");";
                   tooltipProfile = "ToolsGuiToolTipProfile";
-                  hovertime = "1000";
-                  isContainer = "0";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
                };
                new GuiBitmapButtonCtrl() {
-                  bitmapAsset = "ToolsModule:delete_n_image";
-                  bitmapMode = "Stretched";
-                  autoFitExtents = "0";
-                  useModifiers = "0";
-                  useStates = "1";
-                  masked = "0";
-                  groupNum = "-1";
-                  buttonType = "PushButton";
-                  useMouseEvents = "0";
-               position = "159 0";
+                     BitmapAsset = "ToolsModule:delete_n_image";
+                     position = "248 0";
                   extent = "16 16";
-                  minExtent = "8 2";
                   horizSizing = "left";
-                  vertSizing = "bottom";
                   profile = "ToolsGuiDefaultProfile";
-                  visible = "1";
-                  active = "1";
                command = "TerrainMaterialDlg.clearTextureMap(\"ORMConfigMap\");";
                   tooltipProfile = "ToolsGuiToolTipProfile";
-                  hovertime = "1000";
-                  isContainer = "0";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
                };
             new GuiCheckBoxCtrl() {
                text = " Is sRGB";
-               groupNum = "-1";
-               buttonType = "ToggleButton";
-               useMouseEvents = "0";
                position = "55 32";
                extent = "119 16";
-                  minExtent = "8 2";
-               horizSizing = "right";
-                  vertSizing = "bottom";
                profile = "ToolsGuiCheckBoxProfile";
-                  visible = "1";
-                  active = "1";
                   tooltipProfile = "ToolsGuiToolTipProfile";
-                  hovertime = "1000";
-                  isContainer = "0";
-               internalName = "isSRGB";
-                  canSave = "1";
-                  canSaveDynamicFields = "0";
+                     internalName = "IsSRGB";
                };
             new GuiCheckBoxCtrl() {
                text = " Invert Roughness";
-               groupNum = "-1";
-               buttonType = "ToggleButton";
-               useMouseEvents = "0";
                position = "55 48";
                extent = "119 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiCheckBoxProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               internalName = "invertRoughness";
-               canSave = "1";
-               canSaveDynamicFields = "0";
+                     internalName = "InvertRoughness";
             };
          };
          new GuiBitmapCtrl() {
-            bitmapAsset = "ToolsModule:separator_v_image";
-            color = "255 255 255 255";
-            wrap = "0";
+                  BitmapAsset = "ToolsModule:separator_v_image";
             position = "6 381";
-            extent = "175 2";
-            minExtent = "8 2";
+                  extent = "266 2";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "0";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
          new GuiContainer(MacroMapContainer) {
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
             position = "6 388";
-            extent = "185 72";
-            minExtent = "8 2";
+                  extent = "261 72";
             horizSizing = "width";
-            vertSizing = "bottom";
             profile = "ToolsGuiDefaultProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
 
             new GuiBitmapCtrl() {
-               bitmapAsset = "ToolsModule:unknownImage_image";
-               color = "255 255 255 255";
-               wrap = "0";
+                     BitmapAsset = "ToolsModule:unknownImage_image";
                position = "1 1";
                extent = "47 47";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
                internalName = "texMacroMap";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
+                     BitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
                position = "1 1";
                extent = "48 48";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"MacroMap\");";
                tooltipProfile = "ToolsGuiDefaultProfile";
                tooltip = "Change the active Macro Map for this layer.";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Macro";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 -3";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "EditorTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "None";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
-               anchorTop = "1";
-               anchorBottom = "0";
-               anchorLeft = "1";
-               anchorRight = "0";
                position = "56 17";
-               extent = "116 17";
-               minExtent = "8 2";
+                     extent = "192 17";
                horizSizing = "width";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "macroMapAssetId";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiButtonCtrl() {
                text = "Edit";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "116 0";
+                     position = "204 0";
                extent = "40 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiButtonProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.updateTextureMap(\"MacroMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiBitmapButtonCtrl() {
-               bitmapAsset = "ToolsModule:delete_n_image";
-               bitmapMode = "Stretched";
-               autoFitExtents = "0";
-               useModifiers = "0";
-               useStates = "1";
-               masked = "0";
-               groupNum = "-1";
-               buttonType = "PushButton";
-               useMouseEvents = "0";
-               position = "159 0";
+                     BitmapAsset = "ToolsModule:delete_n_image";
+                     position = "247 0";
                extent = "16 16";
-               minExtent = "8 2";
                horizSizing = "left";
-               vertSizing = "bottom";
                profile = "ToolsGuiDefaultProfile";
-               visible = "1";
-               active = "1";
                command = "TerrainMaterialDlg.clearTextureMap(\"MacroMap\");";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Size";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "132 33";
                extent = "39 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "200";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "94 32";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "macroSizeCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Strength";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "39 54";
                extent = "46 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "0.7";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "1 53";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "macroStrengthCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextCtrl() {
                text = "Distance";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "132 54";
                extent = "45 16";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
             new GuiTextEditCtrl() {
-               historySize = "0";
-               tabComplete = "0";
-               sinkAllKeyEvents = "0";
-               password = "0";
-               passwordMask = "*";
                text = "500";
-               maxLength = "1024";
-               margin = "0 0 0 0";
-               padding = "0 0 0 0";
                anchorTop = "0";
-               anchorBottom = "0";
                anchorLeft = "0";
-               anchorRight = "0";
                position = "94 53";
                extent = "34 18";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
                profile = "ToolsGuiTextEditProfile";
-               visible = "1";
-               active = "1";
                tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
                isContainer = "0";
                internalName = "macroDistanceCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
             };
          };
+               new GuiContainer(TerrainEffectsContainer) {
+                  position = "6 460";
+                  extent = "265 97";
+                  horizSizing = "width";
+                  profile = "ToolsGuiDefaultProfile";
+                  tooltipProfile = "GuiToolTipProfile";
+
+                  new GuiBitmapCtrl() {
+                     BitmapAsset = "ToolsModule:separator_v_image";
+                     position = "2 2";
+                     extent = "276 2";
+                     horizSizing = "width";
+                     profile = "GuiDefaultProfile";
+                     tooltipProfile = "GuiToolTipProfile";
+                  };
+                  new GuiTextCtrl() {
+                     text = "Effect Colors[0:1]";
+                     position = "1 22";
+                     extent = "86 15";
+                     profile = "ToolsGuiDefaultProfile";
+                     tooltipProfile = "GuiToolTipProfile";
       };
-      new GuiControl() {
-         position = "6 42";
-         extent = "189 473";
-         minExtent = "8 2";
+                  new GuiSwatchButtonCtrl() {
+                     position = "89 22";
+                     extent = "16 16";
+                     tooltipProfile = "ToolsGuiToolTipProfile";
+                     command = "getColorF($ThisControl.color, \"TerrainMaterialDlg.updateEffectColor0\");";
+                     internalName = "effectColor0Swatch";
+                  };
+                  new GuiSwatchButtonCtrl() {
+                     position = "109 22";
+                     extent = "16 16";
+                     tooltipProfile = "ToolsGuiToolTipProfile";
+                     command = "getColorF($ThisControl.color, \"TerrainMaterialDlg.updateEffectColor1\");";
+                     internalName = "effectColor1Swatch";
+                  };
+                  new GuiCheckBoxCtrl() {
+                     text = "Show Footprints";
+                     position = "1 40";
+                     extent = "93 16";
+                     profile = "ToolsGuiCheckBoxProfile";
+                     tooltipProfile = "ToolsGuiDefaultProfile";
+                     tooltip = "Enables Player footprints on surfaces that use this Material.";
+                     internalName = "showFootprintsCheckbox";
+                  };
+                  new GuiCheckBoxCtrl() {
+                     text = "Show Dust";
+                     position = "110 40";
+                     extent = "68 16";
+                     profile = "ToolsGuiCheckBoxProfile";
+                     tooltipProfile = "ToolsGuiDefaultProfile";
+                     tooltip = "Enables dust particles on surfaces that use this Material.";
+                     internalName = "showDustCheckbox";
+                  };
+                  new GuiTextCtrl() {
+                     text = "Footstep sound";
+                     position = "1 59";
+                     extent = "77 15";
+                     profile = "ToolsGuiDefaultProfile";
+                     tooltipProfile = "GuiToolTipProfile";
+                  };
+                  new GuiPopUpMenuCtrl() {
+                     text = "None";
+                     position = "80 58";
+                     extent = "184 18";
          horizSizing = "width";
-         vertSizing = "height";
+                     profile = "ToolsGuiPopUpMenuProfile";
+                     tooltipProfile = "ToolsGuiToolTipProfile";
+                     tooltip = "Determines the footstep sound to use when the Player walks on this Material.";
+                     isContainer = "0";
+                     internalName = "footstepSoundPopup";
+                  };
+                  new GuiTextCtrl() {
+                     text = "Impact sound";
+                     position = "1 79";
+                     extent = "64 15";
          profile = "ToolsGuiDefaultProfile";
-         visible = "1";
-         active = "1";
-         tooltipProfile = "ToolsGuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "1";
-         canSave = "1";
-         canSaveDynamicFields = "0";
-
-         new GuiScrollCtrl() {
-            willFirstRespond = "1";
-            hScrollBar = "dynamic";
-            vScrollBar = "dynamic";
-            lockHorizScroll = "0";
-            lockVertScroll = "0";
-            constantThumbHeight = "0";
-            childMargin = "0 0";
-            mouseWheelScrollSpeed = "-1";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
-            position = "0 0";
-            extent = "189 454";
-            minExtent = "8 2";
+                     tooltipProfile = "GuiToolTipProfile";
+                  };
+                  new GuiPopUpMenuCtrl() {
+                     text = "None";
+                     position = "80 78";
+                     extent = "184 18";
             horizSizing = "width";
-            vertSizing = "height";
-            profile = "ToolsGuiScrollProfile";
-            visible = "1";
-            active = "1";
+                     profile = "ToolsGuiPopUpMenuProfile";
             tooltipProfile = "ToolsGuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
-            canSave = "1";
-            canSaveDynamicFields = "0";
-
-            new GuiTreeViewCtrl() {
-               tabSize = "16";
-               textOffset = "2";
-               fullRowSelect = "0";
-               itemHeight = "21";
-               destroyTreeOnSleep = "1";
-               mouseDragging = "0";
-               multipleSelections = "0";
-               deleteObjectAllowed = "0";
-               dragToItemAllowed = "0";
-               clearAllOnSingleSelection = "1";
-               showRoot = "0";
-               useInspectorTooltips = "0";
-               tooltipOnWidthOnly = "0";
-               showObjectIds = "0";
-               showClassNames = "0";
-               showObjectNames = "0";
-               showInternalNames = "1";
-               showClassNameForUnnamedObjects = "0";
-               compareToObjectID = "1";
-               canRenameObjects = "1";
-               renameInternal = "0";
-               position = "1 1";
-               extent = "136 147";
-               minExtent = "8 2";
-               horizSizing = "right";
-               vertSizing = "bottom";
-               profile = "ToolsGuiTreeViewProfile";
-               visible = "1";
-               active = "1";
-               tooltipProfile = "ToolsGuiToolTipProfile";
-               hovertime = "1000";
-               isContainer = "1";
-               internalName = "matLibTree";
-               class = "TerrainMaterialTreeCtrl";
-               canSave = "1";
-               canSaveDynamicFields = "0";
+                     tooltip = "Determines the impact sound to use when an object collides with this Material.";
+                     isContainer = "0";
+                     internalName = "impactSoundPopup";
+                  };
+                  new GuiTextCtrl() {
+                     text = "Effects";
+                     position = "2 4";
+                     extent = "38 18";
+                     profile = "EditorTextProfile";
+               tooltipProfile = "ToolsGuiToolTipProfile";
+                     isContainer = "0";
+                  };
+               };
             };
          };
       };
       new GuiButtonCtrl() {
          text = "Apply&Select";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "202 494";
+         position = "269 612";
          extent = "98 22";
-         minExtent = "8 2";
          horizSizing = "left";
          vertSizing = "top";
          profile = "ToolsGuiButtonProfile";
-         visible = "1";
-         active = "1";
          command = "TerrainMaterialDlg.dialogApply();";
          tooltipProfile = "ToolsGuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
       };
       new GuiButtonCtrl() {
          text = "Cancel";
-         groupNum = "-1";
-         buttonType = "PushButton";
-         useMouseEvents = "0";
-         position = "307 494";
+         position = "374 612";
          extent = "80 22";
-         minExtent = "8 2";
          horizSizing = "left";
          vertSizing = "top";
          profile = "ToolsGuiButtonProfile";
-         visible = "1";
-         active = "1";
          command = "TerrainMaterialDlg.dialogCancel();";
          tooltipProfile = "ToolsGuiToolTipProfile";
-         hovertime = "1000";
-         isContainer = "0";
-         canSave = "1";
-         canSaveDynamicFields = "0";
       };
       new GuiBitmapCtrl() {
-         bitmapAsset = "ToolsModule:inactive_overlay_image";
-         color = "255 255 255 255";
-         wrap = "0";
-         position = "199 23";
-         extent = "190 367";
-         minExtent = "8 2";
+         BitmapAsset = "ToolsModule:inactive_overlay_image";
+         position = "277 23";
+         extent = "190 474";
          horizSizing = "left";
          vertSizing = "height";
          profile = "ToolsGuiDefaultProfile";
          visible = "0";
-         active = "1";
          tooltipProfile = "GuiToolTipProfile";
-         hovertime = "1000";
          isContainer = "1";
          internalName = "inactiveOverlay";
          hidden = "1";
-         canSave = "1";
-         canSaveDynamicFields = "0";
 
          new GuiTextCtrl() {
             text = "Inactive";
-            maxLength = "1024";
-            margin = "0 0 0 0";
-            padding = "0 0 0 0";
-            anchorTop = "1";
-            anchorBottom = "0";
-            anchorLeft = "1";
-            anchorRight = "0";
-            position = "0 151";
+            position = "0 205";
             extent = "190 64";
-            minExtent = "8 2";
             horizSizing = "width";
             vertSizing = "center";
             profile = "ToolsGuiTextCenterProfile";
-            visible = "1";
-            active = "1";
             tooltipProfile = "GuiToolTipProfile";
-            hovertime = "1000";
-            isContainer = "1";
             internalName = "inactiveOverlayDlg";
-            canSave = "1";
-            canSaveDynamicFields = "0";
          };
       };
    };

+ 213 - 36
Templates/BaseGame/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.tscript

@@ -109,6 +109,31 @@ function TerrainMaterialDlg::onWake( %this )
    %item = %matLibTree.getFirstRootItem();
    %matLibTree.expandItem( %item );
    
+   //Sounds
+   %this-->footstepSoundPopup.clear();
+   %this-->impactSoundPopup.clear();
+
+   %sounds = "<None>" TAB "<Soft>" TAB "<Hard>" TAB "<Metal>" TAB "<Snow>";    // Default sounds
+
+   %assetQuery = new AssetQuery();
+   AssetDatabase.findAssetType(%assetQuery, "SoundAsset");
+   
+   %count = %assetQuery.getCount();   
+   // Get custom sound assets
+   for(%i=0; %i < %count; %i++)
+   {
+	   %assetId = %assetQuery.getAsset(%i);
+       %sounds = %sounds TAB %assetId;
+   }
+
+   %count = getFieldCount(%sounds);
+   for (%i = 0; %i < %count; %i++)
+   {
+      %name = getField(%sounds, %i);
+      %this-->footstepSoundPopup.add(%name);
+      %this-->impactSoundPopup.add(%name);
+   }
+   
    %this.activateMaterialCtrls( true );      
 }
 
@@ -150,18 +175,8 @@ function TerrainMaterialDlg::dialogApply( %this )
       %mat.delete();
    }
 
-   // Make sure we save any changes to the current selection.
-   %this.saveDirtyMaterial( %this.activeMat );
-   
-   // Delete the snapshot.
-   TerrainMaterialDlgSnapshot.delete();
 
-   // Remove ourselves from the canvas.
-   Canvas.popDialog( TerrainMaterialDlg ); 
-                            
-   call( %this.onApplyCallback, %this.activeMat, %this.matIndex );
-   
-   TerrainMaterialDlg.matDirty = false;
+   %this.prepSaveDirtyMaterial();
 }
 
 //-----------------------------------------------------------------------------
@@ -171,7 +186,7 @@ function TerrainMaterialDlg::dialogCancel( %this )
    if(TerrainMaterialDlg.matDirty)
    {
       toolsMessageBoxYesNo("Save Dirty Material?", "The current material has been modified. Do you wish save your changes?", 
-                           "TerrainMaterialDlg.saveDirtyMaterial(" @ %this-->matLibTree.getSelectedItem() @ ");TerrainMaterialDlg.closeDialog();", "TerrainMaterialDlg.closeDialog();");
+                           "TerrainMaterialDlg.prepSaveDirtyMaterial("@%this-->matLibTree.getSelectedItem()@");TerrainMaterialDlg.closeDialog();", "TerrainMaterialDlg.closeDialog();");
    }
    else
    {
@@ -380,13 +395,13 @@ function TerrainMaterialTreeCtrl::onSelect( %this, %item )
    if(TerrainMaterialDlg.matDirty)
    {
       toolsMessageBoxYesNo("Save Dirty Material?", "The current material has been modified. Do you wish save your changes?", 
-                           "TerrainMaterialDlg.saveDirtyMaterial(" @ TerrainMaterialDlg.previousMat @ ");TerrainMaterialDlg.setActiveMaterial(" @ %item @ ");", 
+                           "TerrainMaterialDlg.prepSaveDirtyMaterial(" @ TerrainMaterialDlg.previousMat @ ");TerrainMaterialDlg.setActiveMaterial(" @ %item @ ");", 
                            "TerrainMaterialDlg.setActiveMaterial(" @ %item @ ");");
    }
    else
    {
-   TerrainMaterialDlg.setActiveMaterial( %item );
-}
+      TerrainMaterialDlg.setActiveMaterial( %item );
+   }
 }
 
 //-----------------------------------------------------------------------------
@@ -461,6 +476,32 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
       %this-->isSRGB.setValue( %mat.isSRGB );
       %this-->invertRoughness.setValue( %mat.invertRoughness );
             
+      //FX material stuffs
+      if(AssetDatabase.isDeclaredAsset(%mat.internalName))
+      {
+         %asset = AssetDatabase.acquireAsset(%mat.internalName);
+         %fxMat = %asset.getFXMaterialDefinition();
+         if(isObject(%fxMat))
+         {
+            %this-->effectColor0Swatch.color = %fxMat.effectColor[0];
+            %this-->effectColor1Swatch.color = %fxMat.effectColor[1];
+            
+            %this-->showFootprintsCheckbox.setValue(%fxMat.showFootprints);
+            %this-->showDustCheckbox.setValue(%fxMat.showDust);
+            %this.updateSoundPopup("Footstep", %fxMat.footstepSoundId, %fxMat.customFootstepSound);
+            %this.updateSoundPopup("Impact", %fxMat.impactSoundId, %fxMat.customImpactSound);
+         }
+         else
+         {
+            %this-->effectColor0Swatch.color = "1 1 1 1";
+            %this-->effectColor1Swatch.color = "1 1 1 1";
+            %this-->showFootprintsCheckbox.setValue(0);
+            %this-->showFootprintsCheckbox.setValue(0);
+            %this.updateSoundPopup("Footstep", 0, "");
+            %this.updateSoundPopup("Impact", 0, "");
+         }
+      }
+            
       %this.activateMaterialCtrls( true );      
    }
    else
@@ -470,40 +511,133 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
    }
 }
 
-//-----------------------------------------------------------------------------
+function TerrainMaterialDlg::updateSoundPopup(%this, %type, %defaultId, %customName)
+{
+   %ctrl = TerrainMaterialDlg.findObjectByInternalName( %type @ "SoundPopup", true );
 
-function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
+   switch (%defaultId)
+   {
+      case 0:        %name = "<Soft>";
+      case 1:        %name = "<Hard>";
+      case 2:        %name = "<Metal>";
+      case 3:        %name = "<Snow>";
+      default:
+         if (%customName $= "")
+            %name = "<None>";
+         else
+            %name = %customName;
+   }
+
+   %r = %ctrl.findText(%name);
+   if (%r != -1)
+      %ctrl.setSelected(%r, false);
+   else
+      %ctrl.setText(%name);
+}
+
+function TerrainMaterialDlg::getBehaviorSound(%this, %type, %sound)
 {
-   //If we happen to have been handed an assetId, process it
-   if(AssetDatabase.isDeclaredAsset(%mat))
+   %defaultId = -1;
+   %customName = "";
+
+   switch$ (%sound)
    {
-      %assetDef = AssetDatabase.acquireAsset(%mat);
-      %mat = %assetDef.getMaterialDefinition();
+      case "<Soft>":    %defaultId = 0;
+      case "<Hard>":    %defaultId = 1;
+      case "<Metal>":   %defaultId = 2;
+      case "<Snow>":    %defaultId = 3;
+      default:          %customName = %sound;
    }
    
-   // Skip over obviously bad cases.
-   if (  !isObject( %mat ) || 
-         !%mat.isMemberOfClass( TerrainMaterial ) )
+   return %defaultId TAB %customName;
+}
+
+function TerrainMaterialDlg::updateEffectColor0(%this, %color)
+{
+   %this-->effectColor0Swatch.color = %color;
+}
+
+function TerrainMaterialDlg::updateEffectColor1(%this, %color)
+{
+   %this-->effectColor1Swatch.color = %color;
+}
+//-----------------------------------------------------------------------------
+function TerrainMaterialDlg::prepSaveDirtyMaterial(%this, %material)
+{
+   if(%material $= "")
+      %material = %this.activeMat;
+      
+   if(!isObject(%material))
+   {
+      error("TerrainMaterialDlg::prepSaveDirtyMaterial() - active material is not a valid object");
       return;
-            
-   //Lets validate it wasn't a generated stub. if so, we need to add an intermediate
-   //step to create the asset
-   %assetDef = AssetDatabase.acquireAsset(%mat.internalName);
-   if(%assetDef $= "")
-   {
-      %moduleSplit = strpos(%mat.internalName, ":");
-      %moduleName = getSubStr(%mat.internalName, 0, %moduleSplit);
-      %assetName = getSubStr(%mat.internalName, %moduleSplit+1, -1);
+   }
+   if(!AssetDatabase.isDeclaredAsset(%material.internalName))
+   {
+      //No valid asset, so we probably generated it as a stub due to a leftover
+      //reference. Let's generate a new asset
+      %assetId = %material.internalName;
+      
+      %moduleSplit = strpos(%material.internalName, ":");
+      %moduleName = getSubStr(%material.internalName, 0, %moduleSplit);
+      %assetName = getSubStr(%material.internalName, %moduleSplit+1, -1);
       if(ModuleDatabase.findModule(%moduleName) !$= "")
       {
          AssetBrowser.selectedModule = %moduleName;
       }
          
-      //we need to create an actual asset here
+      //Clear the stub
+      TerrainMaterialSet.remove(%material);
+      %material.delete();
+      
+      %oldMat = TerrainMaterialSet.findObjectByInternalName( %assetId );
+
       AssetBrowser.setupCreateNewAsset("TerrainMaterialAsset", AssetBrowser.selectedModule, "TerrainMaterialDlg.saveDirtyMaterial", %assetName); 
+   }
+   else
+   {
+      %assetDef = AssetDatabase.acquireAsset(%material.internalName);
+      
+      //If we somehow don't have an FX material, make one     
+      %fxMat = %assetDef.getFXMaterialDefinition();
+      if(!isObject(%fxMat))
+      {
+         %fxMat = new Material("TerrainFX_" @ %assetDef.assetName){
+            mapTo = %assetDef.assetName;
+         };
+         
+         %assetDef.add(%fxMat);
+      }
+   
+      // Make sure we save any changes to the current selection.
+      %this.saveDirtyMaterial( %material.internalName );
+   }
+}
+
+function TerrainMaterialDlg::saveDirtyMaterial( %this, %materialAssetId )
+{
+   %assetDef = "";
+   %mat = "";
+   
+   //If we happen to have been handed an assetId, process it
+   if(AssetDatabase.isDeclaredAsset(%materialAssetId))
+   {
+      %assetDef = AssetDatabase.acquireAsset(%materialAssetId);
+      %mat = %assetDef.getMaterialDefinition();
+   }
+   else
+   {
+      error("TerrainMaterialDlg::saveDirtyMaterial() - attempting to save invalid assetId: " @ %materialAssetId);
       return;
    }
             
+   // Skip over obviously bad cases.
+   if (  !isObject( %mat ) || 
+         !%mat.isMemberOfClass( TerrainMaterial ) )
+      return;
+      
+   %this.activeMat = %mat;
+            
    // Read out properties from the dialog.
    
    %newName = %this-->matNameCtrl.getText(); 
@@ -552,6 +686,17 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
    %isSRGB = %this-->isSRGB.getValue(); 
    %invertRoughness = %this-->invertRoughness.getValue(); 
    
+   //Effects
+   %effectColor0 = %this-->effectColor0Swatch.color;
+   %effectColor1 = %this-->effectColor1Swatch.color;
+   %showFootsteps = %this-->showFootprintsCheckbox.getValue();
+   %showDust = %this-->showDustCheckbox.getValue();
+   
+   %footstepSound = %this.getBehaviorSound("Footstep", %this-->footstepSoundPopup.getText());
+   %impactSound = %this.getBehaviorSound("Impact", %this-->impactSoundPopup.getText());
+   
+   %fxMat = %assetDef.getFXMaterialDefinition();   
+   
    // If no properties of this materials have changed,
    // return.
 
@@ -573,7 +718,15 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
          %mat.blendHeightBase == %blendHeightBase &&
          %mat.blendHeightContrast == %blendHeightContrast &&
          %mat.isSRGB == %isSRGB &&         
-         %mat.invertRoughness == %invertRoughness && false)               
+         %mat.invertRoughness == %invertRoughness &&
+         %fxMat.effectColor[0] == %effectColor0 &&
+         %fxMat.effectColor[1] == %effectColor1 &&
+         %fxMat.showFootprints == %showFootsteps &&
+         %fxMat.showDust == %showDust && 
+         %fxMat.footstepSoundId == getField(%footstepSound, 0) &&
+         %fxMat.customFootstepSound == getField(%footstepSound, 1) &&
+         %fxMat.impactSoundId == getField(%impactSound, 0) &&
+         %fxMat.customImpactSound == getField(%impactSound, 1) && false)               
       return;
    
    // Make sure the material name is unique.
@@ -614,11 +767,35 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
    %mat.isSRGB = %isSRGB;
    %mat.invertRoughness = %invertRoughness;
    
+   //effects
+   %fxMat.effectColor[0] = %effectColor0;
+   %fxMat.effectColor[1] = %effectColor1;
+   %fxMat.showFootprints = %showFootsteps;
+   %fxMat.showDust = %showDust; 
+   %fxMat.footstepSoundId = getField(%footstepSound, 0);
+   %fxMat.customFootstepSound = getField(%footstepSound, 1);
+   %fxMat.impactSoundId = getField(%impactSound, 0);
+   %fxMat.customImpactSound = getField(%impactSound, 1);
+   
    //Save the material asset
-   %assetDef = AssetDatabase.acquireAsset(%mat.internalName);
    %assetDef.saveAsset();
+   %this.schedule(32, "cleanupDirtyMaterial");
 }
 
+function TerrainMaterialDlg::cleanupDirtyMaterial(%this)
+{
+   // Delete the snapshot.
+   TerrainMaterialDlgSnapshot.delete();
+
+   // Remove ourselves from the canvas.
+   Canvas.popDialog( TerrainMaterialDlg ); 
+                            
+   call( %this.onApplyCallback, %this.activeMat, %this.matIndex );
+   
+   TerrainMaterialDlg.matDirty = false;
+   
+   //%this.setActiveMaterial(%this.activeMat);
+}
 //-----------------------------------------------------------------------------
 
 function TerrainMaterialDlg::snapshotMaterials( %this )