diff --git a/OpenRA.Mods.Common/MapGenerator/MultiBrush.cs b/OpenRA.Mods.Common/MapGenerator/MultiBrush.cs
index f2999f647c..d77e920e61 100644
--- a/OpenRA.Mods.Common/MapGenerator/MultiBrush.cs
+++ b/OpenRA.Mods.Common/MapGenerator/MultiBrush.cs
@@ -302,18 +302,24 @@ namespace OpenRA.Mods.Common.MapGenerator
public readonly byte MinIndex;
public readonly byte MaxIndex;
- public TileRange(ushort type, byte minIndex, byte maxIndex)
+ // Height is relative, so can be negative.
+ public readonly short HeightOffset;
+ public readonly byte Ramp;
+
+ public TileRange(ushort type, byte minIndex, byte maxIndex, short heightOffset, byte ramp)
{
Type = type;
MinIndex = minIndex;
MaxIndex = maxIndex;
+ HeightOffset = heightOffset;
+ Ramp = ramp;
}
- public TileRange(ushort type, byte index)
- : this(type, index, index) { }
+ public TileRange(ushort type, byte index, short heightOffset, byte ramp)
+ : this(type, index, index, heightOffset, ramp) { }
- public TileRange(TerrainTile tile)
- : this(tile.Type, tile.Index) { }
+ public TileRange(TerrainTile tile, short heightOffset, byte ramp)
+ : this(tile.Type, tile.Index, heightOffset, ramp) { }
/// Pick a non-randomized tile.
public TerrainTile DefaultTile => new(Type, MinIndex);
@@ -328,6 +334,12 @@ namespace OpenRA.Mods.Common.MapGenerator
return new TerrainTile(Type, (byte)random.Next(MinIndex, MaxIndex + 1));
}
+
+ /// Create a copy of this TileRange, adding an additional heightOffset.
+ public TileRange WithHeightOffset(short heightOffset)
+ {
+ return new(Type, MinIndex, MaxIndex, (short)(HeightOffset + heightOffset), Ramp);
+ }
}
public int Weight;
@@ -353,6 +365,11 @@ namespace OpenRA.Mods.Common.MapGenerator
///
public CVec FirstCell => GetShape()[0];
+ public IEnumerable<(CVec XY, short Height, byte Ramp)> GetHeightsAndRamps()
+ {
+ return tiles.Select(t => (t.XY, t.TileRange.HeightOffset, t.TileRange.Ramp));
+ }
+
public Replaceability Contract()
{
var hasTiles = tiles.Count != 0;
@@ -461,19 +478,32 @@ namespace OpenRA.Mods.Common.MapGenerator
/// default, it will be auto-offset such that the first tile is
/// under (0, 0).
///
- public MultiBrush WithTemplate(Map map, ushort templateId, CVec offset)
+ public MultiBrush WithTemplate(Map map, ushort templateId, CVec offset, short heightOffset = 0)
{
- var tileset = map.Rules.TerrainInfo as ITemplatedTerrainInfo;
- if (!tileset.Templates.TryGetValue(templateId, out var templateInfo))
- throw new ArgumentException($"Map's tileset does not contain template with ID {templateId}.");
- return WithTemplate(templateInfo, offset);
+ var itti = (ITemplatedTerrainInfo)map.Rules.TerrainInfo;
+ return WithTemplate(itti, templateId, offset, heightOffset);
}
- public MultiBrush WithTemplate(TerrainTemplateInfo templateInfo, CVec offset)
+ public MultiBrush WithTemplate(ITemplatedTerrainInfo itti, ushort templateId, CVec offset, short heightOffset = 0)
+ {
+ if (!itti.Templates.TryGetValue(templateId, out var templateInfo))
+ throw new ArgumentException($"Tileset does not contain template with ID {templateId}.");
+ return WithTemplate(templateInfo, offset, heightOffset);
+ }
+
+ public MultiBrush WithTemplate(TerrainTemplateInfo templateInfo, CVec offset, short heightOffset = 0)
{
if (templateInfo.PickAny)
{
- tiles.Add((offset, new(templateInfo.Id, 0, (byte)(templateInfo.TilesCount - 1))));
+ // Assume that single tiles have equal height.
+ tiles.Add((
+ offset,
+ new(
+ templateInfo.Id,
+ 0,
+ (byte)(templateInfo.TilesCount - 1),
+ (short)(templateInfo[0].Height + heightOffset),
+ templateInfo[0].RampType)));
}
else
{
@@ -482,7 +512,13 @@ namespace OpenRA.Mods.Common.MapGenerator
{
var i = y * templateInfo.Size.X + x;
if (templateInfo[i] != null)
- tiles.Add((new CVec(x, y) + offset, new(templateInfo.Id, (byte)i)));
+ tiles.Add((
+ new CVec(x, y) + offset,
+ new(
+ templateInfo.Id,
+ (byte)i,
+ (short)(templateInfo[i].Height + heightOffset),
+ templateInfo[i].RampType)));
}
}
@@ -494,9 +530,9 @@ namespace OpenRA.Mods.Common.MapGenerator
/// Add a single tile, optionally with a given offset. By default, it
/// will be positioned under (0, 0).
///
- public MultiBrush WithTile(TerrainTile tile, CVec offset)
+ public MultiBrush WithTile(TerrainTile tile, CVec offset, short heightOffset = 0, byte ramp = 0)
{
- tiles.Add((offset, new(tile)));
+ tiles.Add((offset, new(tile, heightOffset, ramp)));
shape = null;
return this;
}
@@ -518,7 +554,7 @@ namespace OpenRA.Mods.Common.MapGenerator
if (Area == 0)
throw new InvalidOperationException("No area");
foreach (var xy in shape)
- tiles.Add((xy, new(tile)));
+ tiles.Add((xy, new(tile, 0, 0)));
return this;
}
@@ -545,7 +581,7 @@ namespace OpenRA.Mods.Common.MapGenerator
/// Add the tiles and actors from another MultiBrush into this one at a given offset.
/// (Does not copy segments.)
///
- public void MergeFrom(MultiBrush other, CVec at, MapGridType mapGridType)
+ public void MergeFrom(MultiBrush other, CVec at, MapGridType mapGridType, short heightOffset = 0)
{
foreach (var original in other.actorPlans)
{
@@ -555,13 +591,14 @@ namespace OpenRA.Mods.Common.MapGenerator
}
foreach (var (xy, tile) in other.tiles)
- tiles.Add((xy + at, tile));
+ tiles.Add((xy + at, tile.WithHeightOffset(heightOffset)));
shape = null;
}
///
/// Paint tiles onto the map and/or add actors to actorPlans at the given location.
+ /// A specific height offset can be supplied, else one will be assumed from the map.
/// contract specifies whether tiles or actors are allowed to be painted.
/// An optional MersenneTwister can be provided to vary randomizable elements.
/// If nothing could be painted, throws ArgumentException.
@@ -570,9 +607,27 @@ namespace OpenRA.Mods.Common.MapGenerator
Map map,
List actorPlans,
CPos paintAt,
+ short? heightOffset,
Replaceability contract,
MersenneTwister random)
{
+ short finalHeightOffset = 0;
+ if (heightOffset.HasValue)
+ {
+ finalHeightOffset = heightOffset.Value;
+ }
+ else
+ {
+ foreach (var cpos in Shape)
+ {
+ if (map.Height.Contains(paintAt + cpos))
+ {
+ finalHeightOffset = map.Height[paintAt + cpos];
+ break;
+ }
+ }
+ }
+
switch (contract)
{
case Replaceability.None:
@@ -581,7 +636,7 @@ namespace OpenRA.Mods.Common.MapGenerator
if (this.actorPlans.Count == 0 && tiles.Count == 0)
throw new ArgumentException("Cannot paint: no tiles or actors");
- PaintTiles(map, paintAt, random);
+ PaintTiles(map, paintAt, finalHeightOffset, random);
PaintActors(map, actorPlans, paintAt);
break;
@@ -589,7 +644,7 @@ namespace OpenRA.Mods.Common.MapGenerator
if (tiles.Count == 0)
throw new ArgumentException("Cannot paint: no tiles");
- PaintTiles(map, paintAt, random);
+ PaintTiles(map, paintAt, finalHeightOffset, random);
PaintActors(map, actorPlans, paintAt);
break;
case Replaceability.Actor:
@@ -601,13 +656,17 @@ namespace OpenRA.Mods.Common.MapGenerator
}
}
- void PaintTiles(Map map, CPos paintAt, MersenneTwister random)
+ void PaintTiles(Map map, CPos paintAt, short heightOffset, MersenneTwister random)
{
foreach (var (xy, tile) in tiles)
{
var mpos = (paintAt + xy).ToMPos(map);
if (map.Tiles.Contains(mpos))
+ {
+ // map.Ramp does not need to be updated here.
map.Tiles[mpos] = tile.Pick(random);
+ map.Height[mpos] = (byte)Math.Clamp(tile.HeightOffset + heightOffset, byte.MinValue, byte.MaxValue);
+ }
}
}
@@ -633,7 +692,8 @@ namespace OpenRA.Mods.Common.MapGenerator
CellLayer replace,
IReadOnlyList availableBrushes,
MersenneTwister random,
- bool alwaysPreferLargerBrushes = false)
+ bool alwaysPreferLargerBrushes = false,
+ short? heightOffset = null)
{
var brushesByAreaDict = new Dictionary>();
foreach (var brush in availableBrushes)
@@ -745,7 +805,7 @@ namespace OpenRA.Mods.Common.MapGenerator
var paintAt = mpos.ToCPos(map) - brush.FirstCell;
var contract = ReserveShape(paintAt, brush.Shape, brush.Contract());
if (contract != Replaceability.None)
- brush.Paint(map, actorPlans, paintAt, contract, random);
+ brush.Paint(map, actorPlans, paintAt, heightOffset, contract, random);
remainingQuota -= brushArea;
if (remainingQuota <= 0)
@@ -763,7 +823,8 @@ namespace OpenRA.Mods.Common.MapGenerator
public EditorBlitSource ToEditorBlitSource(
WorldRenderer worldRenderer,
MersenneTwister random,
- PlayerReference defaultActorOwner = null)
+ PlayerReference defaultActorOwner = null,
+ short heightOffset = 0)
{
var world = worldRenderer.World;
var map = world.Map;
@@ -812,10 +873,10 @@ namespace OpenRA.Mods.Common.MapGenerator
tiles
.Where(t => map.Tiles.Contains(CPos.Zero + t.XY))
.DistinctBy(t => t.XY)
- .Select(t => (t.XY, Tile: t.TileRange.Pick(random)))
+ .Select(t => (t.XY, Tile: t.TileRange.Pick(random), t.TileRange.HeightOffset))
.ToDictionary(
t => CPos.Zero + t.XY,
- t => new BlitTile(t.Tile, default, null, map.Height[CPos.Zero + t.XY]));
+ t => new BlitTile(t.Tile, default, null, (byte)Math.Clamp(heightOffset + t.HeightOffset, byte.MinValue, byte.MaxValue)));
return new EditorBlitSource(
cellRegion,
diff --git a/OpenRA.Mods.Common/MapGenerator/Terraformer.cs b/OpenRA.Mods.Common/MapGenerator/Terraformer.cs
index 2d49309c3c..6e86212fc0 100644
--- a/OpenRA.Mods.Common/MapGenerator/Terraformer.cs
+++ b/OpenRA.Mods.Common/MapGenerator/Terraformer.cs
@@ -951,9 +951,10 @@ namespace OpenRA.Mods.Common.MapGenerator
/// Wrapper around MultiBrush.Paint for path tiling results.
public void PaintTiling(
MersenneTwister random,
- MultiBrush brush)
+ MultiBrush brush,
+ short? heightOffset = null)
{
- brush.Paint(Map, ActorPlans, CPos.Zero, MultiBrush.Replaceability.Any, random);
+ brush.Paint(Map, ActorPlans, CPos.Zero, heightOffset, MultiBrush.Replaceability.Any, random);
}
///
@@ -1591,13 +1592,15 @@ namespace OpenRA.Mods.Common.MapGenerator
/// If non-null, these MultiBrushes are painted over outside regions.
/// If non-null, these MultiBrushes are painted over inside regions.
/// Optional replaceability constraints for filling. Ignored for path tiling.
+ /// Optional explicit height to paint at. Otherwise a height is picked automatically.
public CellLayer PaintLoopsAndFill(
MersenneTwister random,
IReadOnlyList tilingPaths,
Side fallback,
IReadOnlyList outside,
IReadOnlyList inside,
- CellLayer replaceMask = null)
+ CellLayer replaceMask = null,
+ short? heightOffset = null)
{
CheckHasMapShapeOrNull(replaceMask);
@@ -1612,7 +1615,7 @@ namespace OpenRA.Mods.Common.MapGenerator
}
foreach (var tiling in tilings)
- tiling.Paint(Map, ActorPlans, CPos.Zero, MultiBrush.Replaceability.Any, random);
+ tiling.Paint(Map, ActorPlans, CPos.Zero, heightOffset, MultiBrush.Replaceability.Any, random);
if (inside == null && outside == null)
return null;
diff --git a/mods/ts/rules/world.yaml b/mods/ts/rules/world.yaml
index 2d6f09983c..30897dca7f 100644
--- a/mods/ts/rules/world.yaml
+++ b/mods/ts/rules/world.yaml
@@ -430,3 +430,7 @@ EditorWorld:
Palette: ra
Alpha: 0.35
MarkerLayerOverlay:
+ TilingPathTool:
+ DefaultStart: Clear
+ DefaultInner: Beach
+ DefaultEnd: Clear
diff --git a/mods/ts/tilesets/snow.yaml b/mods/ts/tilesets/snow.yaml
index 901407bd61..e83e486848 100644
--- a/mods/ts/tilesets/snow.yaml
+++ b/mods/ts/tilesets/snow.yaml
@@ -18894,3 +18894,1036 @@ Templates:
MaxColor: 99AAB8
ZOffset: -12
ZRamp: 0
+
+MultiBrushCollections:
+ Segmented:
+ MultiBrush@Cliff_60:
+ Template: 60
+ Segment:
+ Start: Cliff.L
+ End: Cliff.U
+ Points: 2,2, 1,2, 1,1, 0,1, 0,0
+ MultiBrush@Cliff_61:
+ Template: 61
+ Segment:
+ Start: Cliff.L
+ End: Cliff.U
+ Points: 1,1, 0,1, 0,0
+ MultiBrush@Cliff_62:
+ Template: 62
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Cliff_63:
+ Template: 63
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Cliff_64:
+ Template: 64
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_65:
+ Template: 65
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_66:
+ Template: 66
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_67:
+ Template: 67
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 1,1, 0,1
+ MultiBrush@Cliff_68:
+ Template: 68
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_69:
+ Template: 69
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_70:
+ Template: 70
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_71:
+ Template: 71
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_72:
+ Template: 72
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_73:
+ Template: 73
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_74:
+ Template: 74
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_75:
+ Template: 75
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_76:
+ Template: 76
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_77:
+ Template: 77
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1
+ MultiBrush@Cliff_78:
+ Template: 78
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_79:
+ Template: 79
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_80:
+ Template: 80
+ Segment:
+ Start: Cliff.R
+ End: Cliff.D
+ Points: 0,0, 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_81:
+ Template: 81
+ Segment:
+ Start: Cliff.R
+ End: Cliff.D
+ Points: 0,0, 1,0, 1,1
+ MultiBrush@Cliff_82:
+ Template: 82
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_83:
+ Template: 83
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_84:
+ Template: 84
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_85:
+ Template: 85
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0
+ MultiBrush@Cliff_86:
+ Template: 86
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,2, 0,1, 0,0, 1,0, 2,0
+ MultiBrush@Cliff_87:
+ Template: 87
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,2, 0,1, 1,1, 1,0, 2,0
+ MultiBrush@Cliff_88:
+ Template: 88
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_89:
+ Template: 89
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_90:
+ Template: 90
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_91:
+ Template: 91
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Cliff_92:
+ Template: 92
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,0
+ MultiBrush@Cliff_93_CornerLD:
+ Template: 93
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_93_CornerL:
+ Template: 93
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_93_CornerD:
+ Template: 93
+ Segment:
+ Start: Cliff.L
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_94:
+ Template: 94
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_95:
+ Template: 95
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_96:
+ Template: 96
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_97:
+ Template: 97
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,1, 0,0
+ MultiBrush@Cliff_98:
+ Template: 98
+ Segment:
+ Start: Cliff.U
+ End: Cliff.L
+ Points: 0,1
+ MultiBrush@Cliff_99:
+ Template: 99
+ Segment:
+ Start: Cliff.D
+ End: Cliff.R
+ Points: 1,0
+ MultiBrush@Cliff_Interface_FromCornerD:
+ Segment:
+ Start: Cliff.D
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 0,0
+ MultiBrush@Cliff_Interface_ToCornerL:
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.L
+ Inner: Cliff
+ Points: 0,0
+ MultiBrush@Shore_108:
+ Template: 108
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_109:
+ Template: 109
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_110:
+ Template: 110
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_111:
+ Template: 111
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 1,1, 0,1
+ MultiBrush@Shore_112:
+ Template: 112
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Shore_113:
+ Template: 113
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 1,2, 0,2
+ MultiBrush@Shore_114:
+ Template: 114
+ Segment:
+ Start: Shore.D
+ End: Shore.L
+ Points: 1,0, 1,1, 0,1
+ MultiBrush@Shore_115:
+ Template: 115
+ Segment:
+ Start: Shore.D
+ End: Shore.L
+ Points: 1,0, 1,1, 0,1
+ MultiBrush@Shore_116:
+ Template: 116
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_117:
+ Template: 117
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_118:
+ Template: 118
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_119:
+ Template: 119
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1
+ MultiBrush@Shore_120:
+ Template: 120
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 2,0, 2,1, 1,1, 1,2
+ MultiBrush@Shore_121:
+ Template: 121
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2, 2,2
+ MultiBrush@Shore_122:
+ Template: 122
+ Segment:
+ Start: Shore.R
+ End: Shore.D
+ Points: 0,1, 1,1, 1,2
+ MultiBrush@Shore_123:
+ Template: 123
+ Segment:
+ Start: Shore.R
+ End: Shore.D
+ Points: 0,1, 1,1, 1,2
+ MultiBrush@Shore_124:
+ Template: 124
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_125:
+ Template: 125
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_126:
+ Template: 126
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_127:
+ Template: 127
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1
+ MultiBrush@Shore_128:
+ Template: 128
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,2, 1,2, 1,1, 2,1
+ MultiBrush@Shore_129:
+ Template: 129
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 1,2, 2,2
+ MultiBrush@Shore_130:
+ Template: 130
+ Segment:
+ Start: Shore.U
+ End: Shore.R
+ Points: 1,2, 1,1, 2,1
+ MultiBrush@Shore_131:
+ Template: 131
+ Segment:
+ Start: Shore.U
+ End: Shore.R
+ Points: 1,2, 1,1, 2,1
+ MultiBrush@Shore_132:
+ Template: 132
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_133:
+ Template: 133
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_134:
+ Template: 134
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_135:
+ Template: 135
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,1, 1,0
+ MultiBrush@Shore_136:
+ Template: 136
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 2,2, 2,1, 1,1, 1,0
+ MultiBrush@Shore_137:
+ Template: 137
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 2,1, 2,0
+ MultiBrush@Shore_138:
+ Template: 138
+ Segment:
+ Start: Shore.L
+ End: Shore.U
+ Points: 2,1, 1,1, 1,0
+ MultiBrush@Shore_139:
+ Template: 139
+ Segment:
+ Start: Shore.L
+ End: Shore.U
+ Points: 2,1, 1,1, 1,0
+ MultiBrush@Shore_140:
+ Template: 140
+ Segment:
+ Start: Shore.L
+ End: Shore.D
+ Points: 2,1, 1,1, 1,2
+ MultiBrush@Shore_141:
+ Template: 141
+ Segment:
+ Start: Shore.L
+ End: Shore.D
+ Points: 2,1, 1,1, 1,2
+ MultiBrush@Shore_142:
+ Template: 142
+ Segment:
+ Start: Shore.D
+ End: Shore.R
+ Points: 1,0, 1,1, 2,1
+ MultiBrush@Shore_143:
+ Template: 143
+ Segment:
+ Start: Shore.D
+ End: Shore.R
+ Points: 1,0, 1,1, 2,1
+ MultiBrush@Shore_144:
+ Template: 144
+ Segment:
+ Start: Shore.R
+ End: Shore.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Shore_145:
+ Template: 145
+ Segment:
+ Start: Shore.R
+ End: Shore.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Shore_146:
+ Template: 146
+ Segment:
+ Start: Shore.U
+ End: Shore.L
+ Points: 1,2, 1,1, 0,1
+ MultiBrush@Shore_147:
+ Template: 147
+ Segment:
+ Start: Shore.U
+ End: Shore.L
+ Points: 1,2, 1,1, 0,1
+ MultiBrush@Shore_148:
+ Template: 148
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 5,1, 5,2, 4,2, 3,2, 2,2, 1,2, 1,3, 1,4
+ MultiBrush@Shore_149:
+ Template: 149
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 8,2, 8,3, 8,4, 7,4, 6,4, 5,4, 4,4, 4,3, 3,3, 3,4, 3,5
+ MultiBrush@WaterCliff_167:
+ Template: 167
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.U
+ Points: 2,2, 1,2, 1,1, 0,1, 0,0
+ MultiBrush@WaterCliff_168:
+ Template: 168
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.U
+ Points: 1,1, 0,1, 0,0
+ MultiBrush@WaterCliff_169:
+ Template: 169
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@WaterCliff_170:
+ Template: 170
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@WaterCliff_171:
+ Template: 171
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_172:
+ Template: 172
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_173:
+ Template: 173
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_174:
+ Template: 174
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 1,1, 0,1
+ MultiBrush@WaterCliff_175:
+ Template: 175
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_176:
+ Template: 176
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_177:
+ Template: 177
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_178:
+ Template: 178
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_179:
+ Template: 179
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_180:
+ Template: 180
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_181:
+ Template: 181
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_182:
+ Template: 182
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_183:
+ Template: 183
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_184:
+ Template: 184
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1
+ MultiBrush@WaterCliff_185:
+ Template: 185
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_186:
+ Template: 186
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_187:
+ Template: 187
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.D
+ Points: 0,0, 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_188:
+ Template: 188
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.D
+ Points: 0,0, 1,0, 1,1
+ MultiBrush@WaterCliff_82:
+ Template: 82
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_83:
+ Template: 83
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_84:
+ Template: 84
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_85:
+ Template: 85
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0
+ MultiBrush@WaterCliff_86:
+ Template: 86
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,2, 0,1, 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_87:
+ Template: 87
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,2, 0,1, 1,1, 1,0, 2,0
+ MultiBrush@WaterCliff_88:
+ Template: 88
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_89:
+ Template: 89
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_90:
+ Template: 90
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_91:
+ Template: 91
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@WaterCliff_92:
+ Template: 92
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.U
+ Points: 0,0
+ MultiBrush@WaterCliff_93_CornerLD:
+ Template: 93
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_93_CornerL:
+ Template: 93
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_93_CornerD:
+ Template: 93
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_94:
+ Template: 94
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_95:
+ Template: 95
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_96:
+ Template: 96
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_97:
+ Template: 97
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,1, 0,0
+ MultiBrush@WaterCliff_98:
+ Template: 98
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.L
+ Points: 0,1
+ MultiBrush@WaterCliff_99:
+ Template: 99
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.R
+ Points: 1,0
+ MultiBrush@WaterCliff_Interface_FromCornerD:
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 0,0
+ MultiBrush@WaterCliff_Interface_ToCornerL:
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.L
+ Inner: WaterCliff
+ Points: 0,0
+ MultiBrush@Cliff_403:
+ Template: 403
+ Segment:
+ Start: Clear.L
+ Inner: Cliff
+ End: Cliff.L
+ Points: 3,2, 2,2, 1,2, 0,2
+ MultiBrush@Cliff_404:
+ Template: 404
+ Segment:
+ Start: Cliff.L
+ Inner: Cliff
+ End: Clear.L
+ Points: 3,2, 2,2, 1,2, 0,2
+ MultiBrush@Cliff_405:
+ Template: 405
+ Segment:
+ Start: Clear.D
+ Inner: Cliff
+ End: Cliff.D
+ Points: 2,0, 2,1, 2,2, 2,3
+ MultiBrush@Cliff_406:
+ Template: 406
+ Segment:
+ Start: Cliff.D
+ Inner: Cliff
+ End: Clear.D
+ Points: 2,0, 2,1, 2,2, 2,3
+ MultiBrush@Cliff_407:
+ Template: 407
+ Segment:
+ Start: Cliff.R
+ Inner: Cliff
+ End: Clear.R
+ Points: 0,2, 1,2, 2,2, 3,2
+ MultiBrush@Cliff_408_409:
+ Template: 408
+ Template: 409
+ Offset: 1,2
+ Segment:
+ Start: Clear.R
+ Inner: Cliff
+ End: Cliff.R
+ Points: 0,2, 1,2, 2,2, 3,2
+ MultiBrush@Cliff_410:
+ Template: 410
+ Segment:
+ Start: Clear.U
+ Inner: Cliff
+ End: Cliff.U
+ Points: 2,3, 2,2, 2,1, 2,0
+ MultiBrush@Cliff_411_412:
+ Template: 411
+ Template: 412
+ Offset: 2,1
+ Segment:
+ Start: Cliff.U
+ Inner: Cliff
+ End: Clear.U
+ Points: 2,3, 2,2, 2,1, 2,0
+ MultiBrush@IceShore_WaterCliff_61_97_132_135_403:
+ Template: 61
+ Offset: 2,1
+ Template: 97
+ Offset: 2,0
+ Template: 639
+ Offset: 1,1
+ Template: 639
+ Offset: 1,2
+ Template: 403
+ Offset: 3,0
+ Segment:
+ Start: IceShore.U
+ End: WaterCliff.U
+ Points: 1,3, 1,2, 2,2, 2,1, 2,0
+ MultiBrush@IceShore_WaterCliff_111_192_405:
+ Template: 665
+ Offset: 3,2
+ Template: 637
+ Offset: 3,3
+ Template: 192
+ Offset: 1,3
+ Template: 405
+ Segment:
+ Start: IceShore.L
+ End: WaterCliff.L
+ Points: 4,3, 3,3, 2,3, 2,4, 1,4
+ MultiBrush@IceShore_WaterCliff_119_188_408_409:
+ Template: 633
+ Offset: 3,1
+ Template: 188
+ Offset: 3,2
+ Template: 408
+ Template: 409
+ Offset: 1,2
+ Segment:
+ Start: IceShore.D
+ End: WaterCliff.D
+ Points: 4,1, 4,2, 4,3
+ MultiBrush@IceShore_WaterCliff_88_127_410:
+ Template: 88
+ Offset: 2,0
+ Template: 632
+ Offset: 0,1
+ Template: 410
+ Offset: 0,1
+ Segment:
+ Start: IceShore.R
+ End: WaterCliff.R
+ Points: 0,1, 1,1, 2,1, 2,0, 3,0
+ MultiBrush@IceShore_WaterCliff_119_193_404:
+ Template: 651
+ Offset: 3,3
+ Template: 665
+ Offset: 2,3
+ Template: 193
+ Offset: 3,1
+ Template: 404
+ Segment:
+ Start: WaterCliff.D
+ End: IceShore.D
+ Points: 4,1, 4,2, 3,2, 3,3, 3,4
+ MultiBrush@IceShore_WaterCliff_81_85_124_127_406:
+ Template: 81
+ Offset: 1,2
+ Template: 85
+ Offset: 0,2
+ Template: 632
+ Offset: 1,1
+ Template: 632
+ Offset: 2,1
+ Template: 406
+ Offset: 0,3
+ Segment:
+ Start: WaterCliff.R
+ End: IceShore.R
+ Points: 0,2, 1,2, 2,2, 2,1, 3,1
+ MultiBrush@IceShore_WaterCliff_88_135_407:
+ Template: 88
+ Offset: 0,2
+ Template: 639
+ Offset: 1,0
+ Template: 407
+ Offset: 1,0
+ Segment:
+ Start: WaterCliff.U
+ End: IceShore.U
+ Points: 0,3, 0,2, 1,2, 1,1, 1,0
+ MultiBrush@IceShore_WaterCliff_111_168_411_412:
+ Template: 635
+ Offset: 1,3
+ Template: 168
+ Offset: 2,3
+ Template: 411
+ Template: 412
+ Offset: 2,1
+ Segment:
+ Start: WaterCliff.L
+ End: IceShore.L
+ Points: 3,4, 2,4, 1,4
+ MultiBrush@IceShore_632:
+ Template: 632
+ Segment:
+ Start: IceShore.R
+ End: IceShore.R
+ Points: 0,0, 1,0
+ MultiBrush@IceShore_633:
+ Template: 633
+ Segment:
+ Start: IceShore.D
+ End: IceShore.D
+ Points: 1,0, 1,1
+ MultiBrush@IceShore_634:
+ Template: 634
+ Segment:
+ Start: IceShore.R
+ End: IceShore.D
+ Points: 0,0, 1,0, 1,1
+ MultiBrush@IceShore_635:
+ Template: 635
+ Segment:
+ Start: IceShore.L
+ End: IceShore.L
+ Points: 1,1, 0,1
+ MultiBrush@IceShore_637:
+ Template: 637
+ Segment:
+ Start: IceShore.D
+ End: IceShore.L
+ Points: 1,0, 1,1, 0,1
+ MultiBrush@IceShore_640:
+ Template: 640
+ Segment:
+ Start: IceShore.U
+ End: IceShore.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@IceShore_643:
+ Template: 643
+ Segment:
+ Start: IceShore.L
+ End: IceShore.U
+ Points: 1,1, 0,1, 0,0
+ MultiBrush@IceShore_652:
+ Template: 652
+ Segment:
+ Start: IceShore.U
+ End: IceShore.U
+ Points: 0,1, 0,0
+ MultiBrush@IceShore_663:
+ Template: 663
+ Segment:
+ Start: IceShore.R
+ End: IceShore.U
+ Points: 0,0
+ MultiBrush@IceShore_664:
+ Template: 664
+ Segment:
+ Start: IceShore.D
+ End: IceShore.R
+ Points: 1,0
+ MultiBrush@IceShore_665:
+ Template: 665
+ Segment:
+ Start: IceShore.L
+ End: IceShore.D
+ Points: 1,1
+ MultiBrush@IceShore_666:
+ Template: 666
+ Segment:
+ Start: IceShore.U
+ End: IceShore.L
+ Points: 0,1
diff --git a/mods/ts/tilesets/temperate.yaml b/mods/ts/tilesets/temperate.yaml
index ac50f69812..63e8c011b0 100644
--- a/mods/ts/tilesets/temperate.yaml
+++ b/mods/ts/tilesets/temperate.yaml
@@ -20475,3 +20475,956 @@ Templates:
MaxColor: 585349
ZOffset: -12
ZRamp: 0
+
+MultiBrushCollections:
+ Segmented:
+ MultiBrush@Cliff_60:
+ Template: 60
+ Segment:
+ Start: Cliff.L
+ End: Cliff.U
+ Points: 2,2, 1,2, 1,1, 0,1, 0,0
+ MultiBrush@Cliff_61:
+ Template: 61
+ Segment:
+ Start: Cliff.L
+ End: Cliff.U
+ Points: 1,1, 0,1, 0,0
+ MultiBrush@Cliff_62:
+ Template: 62
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Cliff_63:
+ Template: 63
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Cliff_64:
+ Template: 64
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_65:
+ Template: 65
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_66:
+ Template: 66
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Cliff_67:
+ Template: 67
+ Segment:
+ Start: Cliff.L
+ End: Cliff.L
+ Points: 1,1, 0,1
+ MultiBrush@Cliff_68:
+ Template: 68
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_69:
+ Template: 69
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_70:
+ Template: 70
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@Cliff_71:
+ Template: 71
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_72:
+ Template: 72
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_73:
+ Template: 73
+ Segment:
+ Start: Cliff.MaybeCorner.D
+ End: Cliff.MaybeCorner.L
+ Inner: Cliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@Cliff_74:
+ Template: 74
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_75:
+ Template: 75
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_76:
+ Template: 76
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Cliff_77:
+ Template: 77
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1
+ MultiBrush@Cliff_78:
+ Template: 78
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_79:
+ Template: 79
+ Segment:
+ Start: Cliff.D
+ End: Cliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_80:
+ Template: 80
+ Segment:
+ Start: Cliff.R
+ End: Cliff.D
+ Points: 0,0, 1,0, 1,1, 2,1, 2,2
+ MultiBrush@Cliff_81:
+ Template: 81
+ Segment:
+ Start: Cliff.R
+ End: Cliff.D
+ Points: 0,0, 1,0, 1,1
+ MultiBrush@Cliff_82:
+ Template: 82
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_83:
+ Template: 83
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_84:
+ Template: 84
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@Cliff_85:
+ Template: 85
+ Segment:
+ Start: Cliff.R
+ End: Cliff.R
+ Points: 0,0, 1,0
+ MultiBrush@Cliff_86:
+ Template: 86
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,2, 0,1, 0,0, 1,0, 2,0
+ MultiBrush@Cliff_87:
+ Template: 87
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,2, 0,1, 1,1, 1,0, 2,0
+ MultiBrush@Cliff_88:
+ Template: 88
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_89:
+ Template: 89
+ Segment:
+ Start: Cliff.U
+ End: Cliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_90:
+ Template: 90
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@Cliff_91:
+ Template: 91
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Cliff_92:
+ Template: 92
+ Segment:
+ Start: Cliff.R
+ End: Cliff.U
+ Points: 0,0
+ MultiBrush@Cliff_93_CornerLD:
+ Template: 93
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_93_CornerL:
+ Template: 93
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_93_CornerD:
+ Template: 93
+ Segment:
+ Start: Cliff.L
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 1,1
+ MultiBrush@Cliff_94:
+ Template: 94
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_95:
+ Template: 95
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_96:
+ Template: 96
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@Cliff_97:
+ Template: 97
+ Segment:
+ Start: Cliff.U
+ End: Cliff.U
+ Points: 0,1, 0,0
+ MultiBrush@Cliff_98:
+ Template: 98
+ Segment:
+ Start: Cliff.U
+ End: Cliff.L
+ Points: 0,1
+ MultiBrush@Cliff_99:
+ Template: 99
+ Segment:
+ Start: Cliff.D
+ End: Cliff.R
+ Points: 1,0
+ MultiBrush@Cliff_Interface_FromCornerD:
+ Segment:
+ Start: Cliff.D
+ End: Cliff.MaybeCorner.D
+ Inner: Cliff
+ Points: 0,0
+ MultiBrush@Cliff_Interface_ToCornerL:
+ Segment:
+ Start: Cliff.MaybeCorner.L
+ End: Cliff.L
+ Inner: Cliff
+ Points: 0,0
+ MultiBrush@Shore_108:
+ Template: 108
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_109:
+ Template: 109
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_110:
+ Template: 110
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@Shore_111:
+ Template: 111
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 1,1, 0,1
+ MultiBrush@Shore_112:
+ Template: 112
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@Shore_113:
+ Template: 113
+ Segment:
+ Start: Shore.L
+ End: Shore.L
+ Points: 2,1, 1,1, 1,2, 0,2
+ MultiBrush@Shore_114:
+ Template: 114
+ Segment:
+ Start: Shore.D
+ End: Shore.L
+ Points: 1,0, 1,1, 0,1
+ MultiBrush@Shore_115:
+ Template: 115
+ Segment:
+ Start: Shore.D
+ End: Shore.L
+ Points: 1,0, 1,1, 0,1
+ MultiBrush@Shore_116:
+ Template: 116
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_117:
+ Template: 117
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_118:
+ Template: 118
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@Shore_119:
+ Template: 119
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1
+ MultiBrush@Shore_120:
+ Template: 120
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 2,0, 2,1, 1,1, 1,2
+ MultiBrush@Shore_121:
+ Template: 121
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 1,0, 1,1, 1,2, 2,2
+ MultiBrush@Shore_122:
+ Template: 122
+ Segment:
+ Start: Shore.R
+ End: Shore.D
+ Points: 0,1, 1,1, 1,2
+ MultiBrush@Shore_123:
+ Template: 123
+ Segment:
+ Start: Shore.R
+ End: Shore.D
+ Points: 0,1, 1,1, 1,2
+ MultiBrush@Shore_124:
+ Template: 124
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_125:
+ Template: 125
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_126:
+ Template: 126
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 2,1
+ MultiBrush@Shore_127:
+ Template: 127
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1
+ MultiBrush@Shore_128:
+ Template: 128
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,2, 1,2, 1,1, 2,1
+ MultiBrush@Shore_129:
+ Template: 129
+ Segment:
+ Start: Shore.R
+ End: Shore.R
+ Points: 0,1, 1,1, 1,2, 2,2
+ MultiBrush@Shore_130:
+ Template: 130
+ Segment:
+ Start: Shore.U
+ End: Shore.R
+ Points: 1,2, 1,1, 2,1
+ MultiBrush@Shore_131:
+ Template: 131
+ Segment:
+ Start: Shore.U
+ End: Shore.R
+ Points: 1,2, 1,1, 2,1
+ MultiBrush@Shore_132:
+ Template: 132
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_133:
+ Template: 133
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_134:
+ Template: 134
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 1,0
+ MultiBrush@Shore_135:
+ Template: 135
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,1, 1,0
+ MultiBrush@Shore_136:
+ Template: 136
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 2,2, 2,1, 1,1, 1,0
+ MultiBrush@Shore_137:
+ Template: 137
+ Segment:
+ Start: Shore.U
+ End: Shore.U
+ Points: 1,2, 1,1, 2,1, 2,0
+ MultiBrush@Shore_138:
+ Template: 138
+ Segment:
+ Start: Shore.L
+ End: Shore.U
+ Points: 2,1, 1,1, 1,0
+ MultiBrush@Shore_139:
+ Template: 139
+ Segment:
+ Start: Shore.L
+ End: Shore.U
+ Points: 2,1, 1,1, 1,0
+ MultiBrush@Shore_140:
+ Template: 140
+ Segment:
+ Start: Shore.L
+ End: Shore.D
+ Points: 2,1, 1,1, 1,2
+ MultiBrush@Shore_141:
+ Template: 141
+ Segment:
+ Start: Shore.L
+ End: Shore.D
+ Points: 2,1, 1,1, 1,2
+ MultiBrush@Shore_142:
+ Template: 142
+ Segment:
+ Start: Shore.D
+ End: Shore.R
+ Points: 1,0, 1,1, 2,1
+ MultiBrush@Shore_143:
+ Template: 143
+ Segment:
+ Start: Shore.D
+ End: Shore.R
+ Points: 1,0, 1,1, 2,1
+ MultiBrush@Shore_144:
+ Template: 144
+ Segment:
+ Start: Shore.R
+ End: Shore.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Shore_145:
+ Template: 145
+ Segment:
+ Start: Shore.R
+ End: Shore.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@Shore_146:
+ Template: 146
+ Segment:
+ Start: Shore.U
+ End: Shore.L
+ Points: 1,2, 1,1, 0,1
+ MultiBrush@Shore_147:
+ Template: 147
+ Segment:
+ Start: Shore.U
+ End: Shore.L
+ Points: 1,2, 1,1, 0,1
+ MultiBrush@Shore_148:
+ Template: 148
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 5,1, 5,2, 4,2, 3,2, 2,2, 1,2, 1,3, 1,4
+ MultiBrush@Shore_149:
+ Template: 149
+ Segment:
+ Start: Shore.D
+ End: Shore.D
+ Points: 8,2, 8,3, 8,4, 7,4, 6,4, 5,4, 4,4, 4,3, 3,3, 3,4, 3,5
+ MultiBrush@WaterCliff_167:
+ Template: 167
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.U
+ Points: 2,2, 1,2, 1,1, 0,1, 0,0
+ MultiBrush@WaterCliff_168:
+ Template: 168
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.U
+ Points: 1,1, 0,1, 0,0
+ MultiBrush@WaterCliff_169:
+ Template: 169
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@WaterCliff_170:
+ Template: 170
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,2, 1,2, 1,1, 0,1
+ MultiBrush@WaterCliff_171:
+ Template: 171
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_172:
+ Template: 172
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_173:
+ Template: 173
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 2,1, 1,1, 0,1
+ MultiBrush@WaterCliff_174:
+ Template: 174
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.L
+ Points: 1,1, 0,1
+ MultiBrush@WaterCliff_175:
+ Template: 175
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_176:
+ Template: 176
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_177:
+ Template: 177
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 2,0, 1,0, 1,1, 0,1, 0,2
+ MultiBrush@WaterCliff_178:
+ Template: 178
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_179:
+ Template: 179
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_180:
+ Template: 180
+ Segment:
+ Start: WaterCliff.MaybeCorner.D
+ End: WaterCliff.MaybeCorner.L
+ Inner: WaterCliff
+ Points: 1,0, 0,0, 0,1
+ MultiBrush@WaterCliff_181:
+ Template: 181
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_182:
+ Template: 182
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_183:
+ Template: 183
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 1,2
+ MultiBrush@WaterCliff_184:
+ Template: 184
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1
+ MultiBrush@WaterCliff_185:
+ Template: 185
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_186:
+ Template: 186
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.D
+ Points: 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_187:
+ Template: 187
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.D
+ Points: 0,0, 1,0, 1,1, 2,1, 2,2
+ MultiBrush@WaterCliff_188:
+ Template: 188
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.D
+ Points: 0,0, 1,0, 1,1
+ MultiBrush@WaterCliff_82:
+ Template: 82
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_83:
+ Template: 83
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_84:
+ Template: 84
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_85:
+ Template: 85
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.R
+ Points: 0,0, 1,0
+ MultiBrush@WaterCliff_86:
+ Template: 86
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,2, 0,1, 0,0, 1,0, 2,0
+ MultiBrush@WaterCliff_87:
+ Template: 87
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,2, 0,1, 1,1, 1,0, 2,0
+ MultiBrush@WaterCliff_88:
+ Template: 88
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_89:
+ Template: 89
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.R
+ Points: 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_90:
+ Template: 90
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0, 1,0
+ MultiBrush@WaterCliff_91:
+ Template: 91
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.U
+ Points: 0,1, 1,1, 1,0
+ MultiBrush@WaterCliff_92:
+ Template: 92
+ Segment:
+ Start: WaterCliff.R
+ End: WaterCliff.U
+ Points: 0,0
+ MultiBrush@WaterCliff_93_CornerLD:
+ Template: 93
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_93_CornerL:
+ Template: 93
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_93_CornerD:
+ Template: 93
+ Segment:
+ Start: WaterCliff.L
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 1,1
+ MultiBrush@WaterCliff_94:
+ Template: 94
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_95:
+ Template: 95
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_96:
+ Template: 96
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,2, 0,1, 0,0
+ MultiBrush@WaterCliff_97:
+ Template: 97
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.U
+ Points: 0,1, 0,0
+ MultiBrush@WaterCliff_98:
+ Template: 98
+ Segment:
+ Start: WaterCliff.U
+ End: WaterCliff.L
+ Points: 0,1
+ MultiBrush@WaterCliff_99:
+ Template: 99
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.R
+ Points: 1,0
+ MultiBrush@WaterCliff_Interface_FromCornerD:
+ Segment:
+ Start: WaterCliff.D
+ End: WaterCliff.MaybeCorner.D
+ Inner: WaterCliff
+ Points: 0,0
+ MultiBrush@WaterCliff_Interface_ToCornerL:
+ Segment:
+ Start: WaterCliff.MaybeCorner.L
+ End: WaterCliff.L
+ Inner: WaterCliff
+ Points: 0,0
+ MultiBrush@Cliff_403:
+ Template: 403
+ Segment:
+ Start: Clear.L
+ Inner: Cliff
+ End: Cliff.L
+ Points: 3,2, 2,2, 1,2, 0,2
+ MultiBrush@Cliff_404:
+ Template: 404
+ Segment:
+ Start: Cliff.L
+ Inner: Cliff
+ End: Clear.L
+ Points: 3,2, 2,2, 1,2, 0,2
+ MultiBrush@Cliff_405:
+ Template: 405
+ Segment:
+ Start: Clear.D
+ Inner: Cliff
+ End: Cliff.D
+ Points: 2,0, 2,1, 2,2, 2,3
+ MultiBrush@Cliff_406:
+ Template: 406
+ Segment:
+ Start: Cliff.D
+ Inner: Cliff
+ End: Clear.D
+ Points: 2,0, 2,1, 2,2, 2,3
+ MultiBrush@Cliff_407:
+ Template: 407
+ Segment:
+ Start: Cliff.R
+ Inner: Cliff
+ End: Clear.R
+ Points: 0,2, 1,2, 2,2, 3,2
+ MultiBrush@Cliff_408_409:
+ Template: 408
+ Template: 409
+ Offset: 1,2
+ Segment:
+ Start: Clear.R
+ Inner: Cliff
+ End: Cliff.R
+ Points: 0,2, 1,2, 2,2, 3,2
+ MultiBrush@Cliff_410:
+ Template: 410
+ Segment:
+ Start: Clear.U
+ Inner: Cliff
+ End: Cliff.U
+ Points: 2,3, 2,2, 2,1, 2,0
+ MultiBrush@Cliff_411_412:
+ Template: 411
+ Template: 412
+ Offset: 2,1
+ Segment:
+ Start: Cliff.U
+ Inner: Cliff
+ End: Clear.U
+ Points: 2,3, 2,2, 2,1, 2,0
+ MultiBrush@Shore_WaterCliff_61_97_132_135_403:
+ Template: 61
+ Offset: 2,1
+ Template: 97
+ Offset: 2,0
+ Template: 132
+ Offset: 0,1
+ Template: 135
+ Template: 403
+ Offset: 3,0
+ Segment:
+ Start: Shore.U
+ End: WaterCliff.U
+ Points: 1,3, 1,2, 2,2, 2,1, 2,0
+ MultiBrush@Shore_WaterCliff_111_192_405:
+ Template: 111
+ Offset: 3,2
+ Template: 192
+ Offset: 1,3
+ Template: 405
+ Segment:
+ Start: Shore.L
+ End: WaterCliff.L
+ Points: 4,3, 3,3, 2,3, 2,4, 1,4
+ MultiBrush@Shore_WaterCliff_119_188_408_409:
+ Template: 119
+ Offset: 3,1
+ Template: 188
+ Offset: 3,2
+ Template: 408
+ Template: 409
+ Offset: 1,2
+ Segment:
+ Start: Shore.D
+ End: WaterCliff.D
+ Points: 4,1, 4,2, 4,3
+ MultiBrush@Shore_WaterCliff_88_127_410:
+ Template: 88
+ Offset: 2,0
+ Template: 127
+ Template: 410
+ Offset: 0,1
+ Segment:
+ Start: Shore.R
+ End: WaterCliff.R
+ Points: 0,1, 1,1, 2,1, 2,0, 3,0
+ MultiBrush@Shore_WaterCliff_119_193_404:
+ Template: 119
+ Offset: 2,3
+ Template: 193
+ Offset: 3,1
+ Template: 404
+ Segment:
+ Start: WaterCliff.D
+ End: Shore.D
+ Points: 4,1, 4,2, 3,2, 3,3, 3,4
+ MultiBrush@Shore_WaterCliff_81_85_124_127_406:
+ Template: 81
+ Offset: 1,2
+ Template: 85
+ Offset: 0,2
+ Template: 124
+ Offset: 1,0
+ Template: 127
+ Template: 406
+ Offset: 0,3
+ Segment:
+ Start: WaterCliff.R
+ End: Shore.R
+ Points: 0,2, 1,2, 2,2, 2,1, 3,1
+ MultiBrush@Shore_WaterCliff_88_135_407:
+ Template: 88
+ Offset: 0,2
+ Template: 135
+ Template: 407
+ Offset: 1,0
+ Segment:
+ Start: WaterCliff.U
+ End: Shore.U
+ Points: 0,3, 0,2, 1,2, 1,1, 1,0
+ MultiBrush@Shore_WaterCliff_111_168_411_412:
+ Template: 111
+ Offset: 1,3
+ Template: 168
+ Offset: 2,3
+ Template: 411
+ Template: 412
+ Offset: 2,1
+ Segment:
+ Start: WaterCliff.L
+ End: Shore.L
+ Points: 3,4, 2,4, 1,4