diff --git a/OpenSim/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs
index c78af058dc..9cd80992e1 100644
--- a/OpenSim/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs
+++ b/OpenSim/OpenSim.Terrain.BasicTerrain/TerrainEngine.cs
@@ -149,6 +149,24 @@ namespace OpenSim.Terrain
tainted++;
}
+ ///
+ /// Swaps the two heightmap buffers (the 'revert map' and the heightmap)
+ ///
+ public void swapRevertMaps()
+ {
+ Channel backup = heightmap.copy();
+ heightmap = revertmap;
+ revertmap = backup;
+ }
+
+ ///
+ /// Saves the current heightmap into the revertmap
+ ///
+ public void saveRevertMap()
+ {
+ revertmap = heightmap.copy();
+ }
+
///
/// Processes a terrain-specific command
///
@@ -175,8 +193,19 @@ namespace OpenSim.Terrain
resultText += "terrain erode aerobic \n";
resultText += "terrain erode thermal \n";
resultText += "terrain multiply - multiplies a terrain by \n";
+ resultText += "terrain revert - reverts the terrain to the stored original";
+ resultText += "terrain bake - saves the current terrain into the revert map";
return false;
+ case "revert":
+ swapRevertMaps();
+ saveRevertMap();
+ break;
+
+ case "bake":
+ saveRevertMap();
+ break;
+
case "seed":
setSeed(Convert.ToInt32(args[1]));
break;
@@ -222,7 +251,7 @@ namespace OpenSim.Terrain
break;
case "img":
- resultText = "Error - IMG mode is presently unsupported.";
+ heightmap.loadImage(args[2]);
return false;
default: