#1108 changed BuildingInfo.WaterBound to a list of terraintypes. makes it possible to have buildings with custom terrain requirements

This commit is contained in:
Chris Forbes
2011-08-16 18:42:05 +12:00
parent 55ec88316a
commit 67b4ef3084
15 changed files with 27 additions and 84 deletions

View File

@@ -19,7 +19,6 @@ namespace OpenRA.FileFormats
public class TerrainTypeInfo public class TerrainTypeInfo
{ {
public string Type; public string Type;
public bool Buildable = true;
public bool AcceptSmudge = true; public bool AcceptSmudge = true;
public bool IsWater = false; public bool IsWater = false;
public Color Color; public Color Color;

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Buildings
public class BuildingInfo : ITraitInfo public class BuildingInfo : ITraitInfo
{ {
public readonly int Power = 0; public readonly int Power = 0;
public readonly bool WaterBound = false; public readonly string[] TerrainTypes = {};
public readonly int Adjacent = 2; public readonly int Adjacent = 2;
public readonly string Footprint = "x"; public readonly string Footprint = "x";
public readonly int2 Dimensions = new int2(1, 1); public readonly int2 Dimensions = new int2(1, 1);

View File

@@ -16,20 +16,17 @@ namespace OpenRA.Mods.RA.Buildings
{ {
public static class BuildingUtils public static class BuildingUtils
{ {
public static bool IsCellBuildable(this World world, int2 a, bool waterBound) public static bool IsCellBuildable(this World world, int2 a, BuildingInfo bi)
{ {
return world.IsCellBuildable(a, waterBound, null); return world.IsCellBuildable(a, bi, null);
} }
public static bool IsCellBuildable(this World world, int2 a, bool waterBound, Actor toIgnore) public static bool IsCellBuildable(this World world, int2 a, BuildingInfo bi, Actor toIgnore)
{ {
if (world.WorldActor.Trait<BuildingInfluence>().GetBuildingAt(a) != null) return false; if (world.WorldActor.Trait<BuildingInfluence>().GetBuildingAt(a) != null) return false;
if (world.ActorMap.GetUnitsAt(a).Any(b => b != toIgnore)) return false; if (world.ActorMap.GetUnitsAt(a).Any(b => b != toIgnore)) return false;
if (waterBound) return world.Map.IsInMap(a) && bi.TerrainTypes.Contains(world.GetTerrainType(a));
return world.Map.IsInMap(a.X,a.Y) && world.GetTerrainInfo(a).IsWater;
return world.Map.IsInMap(a.X, a.Y) && world.GetTerrainInfo(a).Buildable;
} }
public static bool CanPlaceBuilding(this World world, string name, BuildingInfo building, int2 topLeft, Actor toIgnore) public static bool CanPlaceBuilding(this World world, string name, BuildingInfo building, int2 topLeft, Actor toIgnore)
@@ -37,7 +34,7 @@ namespace OpenRA.Mods.RA.Buildings
var res = world.WorldActor.Trait<ResourceLayer>(); var res = world.WorldActor.Trait<ResourceLayer>();
return FootprintUtils.Tiles(name, building, topLeft).All( return FootprintUtils.Tiles(name, building, topLeft).All(
t => world.Map.IsInMap(t.X, t.Y) && res.GetResource(t) == null && t => world.Map.IsInMap(t.X, t.Y) && res.GetResource(t) == null &&
world.IsCellBuildable(t, building.WaterBound, toIgnore)); world.IsCellBuildable(t, building, toIgnore));
} }
public static IEnumerable<int2> GetLineBuildCells(World world, int2 location, string name, BuildingInfo bi) public static IEnumerable<int2> GetLineBuildCells(World world, int2 location, string name, BuildingInfo bi)
@@ -45,7 +42,7 @@ namespace OpenRA.Mods.RA.Buildings
int range = Rules.Info[name].Traits.Get<LineBuildInfo>().Range; int range = Rules.Info[name].Traits.Get<LineBuildInfo>().Range;
var topLeft = location; // 1x1 assumption! var topLeft = location; // 1x1 assumption!
if (world.IsCellBuildable(topLeft, bi.WaterBound)) if (world.IsCellBuildable(topLeft, bi))
yield return topLeft; yield return topLeft;
// Start at place location, search outwards // Start at place location, search outwards
@@ -60,7 +57,7 @@ namespace OpenRA.Mods.RA.Buildings
continue; continue;
int2 cell = topLeft + i * vecs[d]; int2 cell = topLeft + i * vecs[d];
if (world.IsCellBuildable(cell, bi.WaterBound)) if (world.IsCellBuildable(cell, bi))
continue; // Cell is empty; continue search continue; // Cell is empty; continue search
// Cell contains an actor. Is it the type we want? // Cell contains an actor. Is it the type we want?

View File

@@ -34,6 +34,7 @@ namespace OpenRA.Mods.RA
public readonly string Name = "Unnamed Bot"; public readonly string Name = "Unnamed Bot";
public readonly int SquadSize = 8; public readonly int SquadSize = 8;
public readonly int AssignRolesInterval = 20; public readonly int AssignRolesInterval = 20;
public readonly string RallypointTestBuilding = "fact"; // temporary hack to maintain previous rallypoint behavior.
string IBotInfo.Name { get { return this.Name; } } string IBotInfo.Name { get { return this.Name; } }
@@ -64,6 +65,7 @@ namespace OpenRA.Mods.RA
int ticks; int ticks;
Player p; Player p;
PowerManager playerPower; PowerManager playerPower;
readonly BuildingInfo rallypointTestBuilding; // temporary hack
int2 baseCenter; int2 baseCenter;
XRandom random = new XRandom(); //we do not use the synced random number generator. XRandom random = new XRandom(); //we do not use the synced random number generator.
@@ -76,6 +78,8 @@ namespace OpenRA.Mods.RA
public HackyAI(HackyAIInfo Info) public HackyAI(HackyAIInfo Info)
{ {
this.Info = Info; this.Info = Info;
// temporary hack.
this.rallypointTestBuilding = Rules.Info[Info.RallypointTestBuilding].Traits.Get<BuildingInfo>();
} }
enum BuildState enum BuildState
@@ -342,7 +346,9 @@ namespace OpenRA.Mods.RA
bool IsRallyPointValid(int2 x) bool IsRallyPointValid(int2 x)
{ {
return world.IsCellBuildable(x, false); // this is actually WRONG as soon as HackyAI is building units with a variety of
// movement capabilities. (has always been wrong)
return world.IsCellBuildable(x, rallypointTestBuilding);
} }
void SetRallyPointsForNewProductionBuildings(Actor self) void SetRallyPointsForNewProductionBuildings(Actor self)
@@ -366,7 +372,7 @@ namespace OpenRA.Mods.RA
//won't work for shipyards... //won't work for shipyards...
int2 ChooseRallyLocationNear(int2 startPos) int2 ChooseRallyLocationNear(int2 startPos)
{ {
var possibleRallyPoints = world.FindTilesInCircle(startPos, 8).Where(x => world.IsCellBuildable(x, false)).ToArray(); var possibleRallyPoints = world.FindTilesInCircle(startPos, 8).Where(IsRallyPointValid).ToArray();
if (possibleRallyPoints.Length == 0) if (possibleRallyPoints.Length == 0)
{ {
Game.Debug("Bot Bug: No possible rallypoint near {0}", startPos); Game.Debug("Bot Bug: No possible rallypoint near {0}", startPos);

View File

@@ -22,13 +22,14 @@ namespace OpenRA.Mods.RA.Orders
readonly Actor Producer; readonly Actor Producer;
readonly string Building; readonly string Building;
readonly IEnumerable<Renderable> Preview; readonly IEnumerable<Renderable> Preview;
BuildingInfo BuildingInfo { get { return Rules.Info[ Building ].Traits.Get<BuildingInfo>(); } } readonly BuildingInfo BuildingInfo;
Sprite buildOk, buildBlocked; Sprite buildOk, buildBlocked;
public PlaceBuildingOrderGenerator(Actor producer, string name) public PlaceBuildingOrderGenerator(Actor producer, string name)
{ {
Producer = producer; Producer = producer;
Building = name; Building = name;
BuildingInfo = Rules.Info[Building].Traits.Get<BuildingInfo>();
Preview = Rules.Info[Building].Traits.Get<RenderBuildingInfo>() Preview = Rules.Info[Building].Traits.Get<RenderBuildingInfo>()
.RenderPreview(Rules.Info[Building], producer.Owner); .RenderPreview(Rules.Info[Building], producer.Owner);
@@ -97,7 +98,7 @@ namespace OpenRA.Mods.RA.Orders
var res = world.WorldActor.Trait<ResourceLayer>(); var res = world.WorldActor.Trait<ResourceLayer>();
var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft); var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft);
foreach (var t in FootprintUtils.Tiles(Building, BuildingInfo, topLeft)) foreach (var t in FootprintUtils.Tiles(Building, BuildingInfo, topLeft))
cells.Add( t, isCloseEnough && world.IsCellBuildable(t, BuildingInfo.WaterBound) && res.GetResource(t) == null ); cells.Add( t, isCloseEnough && world.IsCellBuildable(t, BuildingInfo) && res.GetResource(t) == null );
} }
foreach( var c in cells ) foreach( var c in cells )

View File

@@ -147,7 +147,6 @@ namespace OpenRA.TilesetBuilder
var terraintype = new TerrainTypeInfo() var terraintype = new TerrainTypeInfo()
{ {
Type = "Clear", Type = "Clear",
Buildable = true,
AcceptSmudge = true, AcceptSmudge = true,
IsWater = false, IsWater = false,
Color = Color.White Color = Color.White

View File

@@ -207,6 +207,7 @@
Footprint: x Footprint: x
BuildSounds: constru2.aud, hvydoor1.aud BuildSounds: constru2.aud, hvydoor1.aud
SellSounds: cashturn.aud SellSounds: cashturn.aud
TerrainTypes: Clear,Road
SoundOnDamageTransition: SoundOnDamageTransition:
DamagedSound: xplos.aud DamagedSound: xplos.aud
DestroyedSound: xplobig4.aud DestroyedSound: xplobig4.aud
@@ -295,6 +296,7 @@
Footprint: x Footprint: x
BuildSounds: hvydoor1.aud BuildSounds: hvydoor1.aud
Adjacent: 7 Adjacent: 7
TerrainTypes: Clear,Road
TargetableBuilding: TargetableBuilding:
TargetTypes: Ground TargetTypes: Ground
Wall: Wall:

View File

@@ -7,58 +7,47 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 134, 95, 69 Color: 134, 95, 69
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 93, 165, 206 Color: 93, 165, 206
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 168, 123, 83 Color: 168, 123, 83
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 116, 90, 63 Color: 116, 90, 63
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 111, 132, 139 Color: 111, 132, 139
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Tiberium: TerrainType@Tiberium:
Type: Tiberium Type: Tiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 161, 226, 28 Color: 161, 226, 28
TerrainType@BlueTiberium: TerrainType@BlueTiberium:
Type: BlueTiberium Type: BlueTiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 84, 252, 252 Color: 84, 252, 252

View File

@@ -7,58 +7,47 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 40, 68, 40 Color: 40, 68, 40
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 116, 164 Color: 92, 116, 164
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 88, 116, 116 Color: 88, 116, 116
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 140, 180 Color: 92, 140, 180
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Tiberium: TerrainType@Tiberium:
Type: Tiberium Type: Tiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 161, 226, 28 Color: 161, 226, 28
TerrainType@BlueTiberium: TerrainType@BlueTiberium:
Type: BlueTiberium Type: BlueTiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 84, 252, 252 Color: 84, 252, 252

View File

@@ -7,58 +7,47 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 40, 68, 40 Color: 40, 68, 40
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 116, 164 Color: 92, 116, 164
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 88, 116, 116 Color: 88, 116, 116
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 140, 180 Color: 92, 140, 180
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Tiberium: TerrainType@Tiberium:
Type: Tiberium Type: Tiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 161, 226, 28 Color: 161, 226, 28
TerrainType@BlueTiberium: TerrainType@BlueTiberium:
Type: BlueTiberium Type: BlueTiberium
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 84, 252, 252 Color: 84, 252, 252

View File

@@ -174,6 +174,7 @@
Building: Building:
Dimensions: 1,1 Dimensions: 1,1
Footprint: x Footprint: x
TerrainTypes: Clear,Road
GivesBuildableArea: GivesBuildableArea:
Capturable: Capturable:
SoundOnDamageTransition: SoundOnDamageTransition:
@@ -205,6 +206,7 @@
Footprint: x Footprint: x
BuildSounds: placbldg.aud BuildSounds: placbldg.aud
Adjacent: 7 Adjacent: 7
TerrainTypes: Clear,Road
SoundOnDamageTransition: SoundOnDamageTransition:
DamagedSound: sandbag2.aud DamagedSound: sandbag2.aud
DestroyedSound: sandbag2.aud DestroyedSound: sandbag2.aud

View File

@@ -85,7 +85,7 @@ SPEN:
Footprint: xxx xxx xxx Footprint: xxx xxx xxx
Dimensions: 3,3 Dimensions: 3,3
Adjacent: 8 Adjacent: 8
WaterBound: yes TerrainTypes: Water
-GivesBuildableArea: -GivesBuildableArea:
Health: Health:
HP: 1000 HP: 1000
@@ -140,7 +140,7 @@ SYRD:
Footprint: xxx xxx xxx Footprint: xxx xxx xxx
Dimensions: 3,3 Dimensions: 3,3
Adjacent: 8 Adjacent: 8
WaterBound: yes TerrainTypes: Water
-GivesBuildableArea: -GivesBuildableArea:
Health: Health:
HP: 1000 HP: 1000
@@ -1046,7 +1046,7 @@ SYRF:
Footprint: xxx xxx xxx Footprint: xxx xxx xxx
Dimensions: 3,3 Dimensions: 3,3
Adjacent: 8 Adjacent: 8
WaterBound: yes TerrainTypes: Water
-GivesBuildableArea: -GivesBuildableArea:
Health: Health:
HP: 30 HP: 30
@@ -1066,7 +1066,7 @@ SPEF:
Footprint: xxx xxx xxx Footprint: xxx xxx xxx
Dimensions: 3,3 Dimensions: 3,3
Adjacent: 8 Adjacent: 8
WaterBound: yes TerrainTypes: Water
-GivesBuildableArea: -GivesBuildableArea:
Health: Health:
HP: 30 HP: 30

View File

@@ -7,53 +7,43 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 40, 68, 40 Color: 40, 68, 40
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 116, 164 Color: 92, 116, 164
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 88, 116, 116 Color: 88, 116, 116
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 140, 180 Color: 92, 140, 180
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Ore: TerrainType@Ore:
Type: Ore Type: Ore
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 148, 128, 96 Color: 148, 128, 96

View File

@@ -7,53 +7,43 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 196, 196, 196 Color: 196, 196, 196
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 116, 164 Color: 92, 116, 164
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 88, 116, 116 Color: 88, 116, 116
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 140, 180 Color: 92, 140, 180
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Ore: TerrainType@Ore:
Type: Ore Type: Ore
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 148, 128, 96 Color: 148, 128, 96

View File

@@ -7,53 +7,43 @@ General:
Terrain: Terrain:
TerrainType@Clear: TerrainType@Clear:
Type: Clear Type: Clear
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 40, 68, 40 Color: 40, 68, 40
TerrainType@Water: TerrainType@Water:
Type: Water Type: Water
IsWater: true IsWater: true
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 116, 164 Color: 92, 116, 164
TerrainType@Road: TerrainType@Road:
Type: Road Type: Road
Buildable: True
AcceptSmudge: True AcceptSmudge: True
Color: 88, 116, 116 Color: 88, 116, 116
TerrainType@Rock: TerrainType@Rock:
Type: Rock Type: Rock
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Tree: TerrainType@Tree:
Type: Tree Type: Tree
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 28, 32, 36 Color: 28, 32, 36
TerrainType@River: TerrainType@River:
Type: River Type: River
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 92, 140, 180 Color: 92, 140, 180
TerrainType@Rough: TerrainType@Rough:
Type: Rough Type: Rough
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 68, 68, 60 Color: 68, 68, 60
TerrainType@Wall: TerrainType@Wall:
Type: Wall Type: Wall
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 208, 192, 160 Color: 208, 192, 160
TerrainType@Beach: TerrainType@Beach:
Type: Beach Type: Beach
Buildable: False
AcceptSmudge: False AcceptSmudge: False
Color: 176, 156, 120 Color: 176, 156, 120
TerrainType@Ore: TerrainType@Ore:
Type: Ore Type: Ore
Buildable: False
AcceptSmudge: True AcceptSmudge: True
Color: 148, 128, 96 Color: 148, 128, 96