Browse Source

Treasure piles should always be accessible.
Boosted treasure value for better overview.

DjWarmonger 11 years ago
parent
commit
e4ea6727b7
2 changed files with 22 additions and 7 deletions
  1. 6 6
      config/rmg.json
  2. 16 1
      lib/rmg/CRmgTemplateZone.cpp

+ 6 - 6
config/rmg.json

@@ -10,7 +10,7 @@
 			{
 				"type" : "playerStart", "size" : 1, "owner" : 1,
 				"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
-				"treasure" : {"min" : 1000, "max": 3000}
+				"treasure" : {"min" : 1500, "max": 3000}
 			},
 			"2" :
 			{
@@ -33,7 +33,7 @@
 			"5" :
 			{
 				"type" : "treasure", "size" : 2, "terrainTypes" : [ "sand" ], "neutralTowns" : { "castles" : 1 },
-				"treasure" : {"min" : 5000, "max": 10000}
+				"treasure" : {"min" : 9000, "max": 10000}
 			}
 		},
 		"connections" :
@@ -65,7 +65,7 @@
 			"3" :
 			{
 				"type" : "treasure", "size" : 2, "neutralTowns" : { "towns" : 1 }, "townTypeLikeZone" : "1",
-				"treasure" : {"min" : 1500, "max": 4000}
+				"treasure" : {"min" : 2000, "max": 4000}
 			},
 			"4" :
 			{
@@ -75,7 +75,7 @@
 			"5" :
 			{
 				"type" : "treasure", "size" : 3, "neutralTowns" : { "castles" : 1 }, "terrainTypes" : [ "sand" ],
-				"treasure" : {"min" : 6000, "max": 12000}
+				"treasure" : {"min" : 11000, "max": 12000}
 			}
 		},
 		"connections" :
@@ -98,7 +98,7 @@
 			{
 				"type" : "playerStart", "size" : 3, "owner" : 1,
 				"playerTowns" : { "castles" : 1 },
-				"treasure" : {"min" : 300, "max": 3000}
+				"treasure" : {"min" : 1000, "max": 2000}
 			},
 			"2" :
 			{
@@ -118,7 +118,7 @@
 			"7" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "2", "treasureLikeZone" : 4 },
 			"8" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treasureLikeZone" : 4 },
 			"9" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treasureLikeZone" : 4 },
-			"10" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasure" : {"min" : 10000, "max": 25000} },
+			"10" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasure" : {"min" : 21000, "max": 25000} },
 			"11" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 },
 			"12" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 }
 		},

+ 16 - 1
lib/rmg/CRmgTemplateZone.cpp

@@ -543,9 +543,24 @@ bool CRmgTemplateZone::createTreasurePile (CMapGenerator* gen, int3 &pos)
 		{
 			placeObject(gen, treasure.second, treasure.first);
 		}
-		guardPos = *RandomGeneratorUtil::nextItem(boundary, gen->rand);
+
+		std::vector<int3> accessibleTiles; //we can't place guard in dead-end of zone, make sure that at least one neightbouring tile is possible and not blocked
+		for (auto tile : boundary)
+		{
+			bool possible = false;
+			gen->foreach_neighbour(tile, [gen, &accessibleTiles, &possible, boundary](int3 pos)
+			{
+				if (gen->isPossible(pos) && !vstd::contains(boundary, pos)) //do not check tiles that are going to be blocked
+					possible = true;
+			});
+			if (possible)
+				accessibleTiles.push_back(tile);
+		}
+		guardPos = *RandomGeneratorUtil::nextItem(accessibleTiles, gen->rand);
+
 		if (addMonster(gen, guardPos, currentValue))
 		{//block only if object is guarded
+
 			for (auto tile : boundary)
 			{
 				if (gen->isPossible(tile))