1
0

VillageGen rewritten using BFSPieceGenerator.

Piece composition is not good yet, the buildings aren't height-adjusted and the road pieces will need special processing. This is mainly for adjusting the per-piece params.
This commit is contained in:
madmaxoft 2014-05-15 00:14:06 +02:00
parent 3660ce6834
commit f5fdbdaf29
5 changed files with 406 additions and 412 deletions

View File

@ -25,6 +25,7 @@
#include "Noise3DGenerator.h"
#include "POCPieceGenerator.h"
#include "Ravines.h"
#include "VillageGen.h"
@ -32,6 +33,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cTerrainCompositionGen:
cTerrainCompositionGen * cTerrainCompositionGen::CreateCompositionGen(cIniFile & a_IniFile, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen, int a_Seed)
{
AString CompoGenName = a_IniFile.GetValueSet("Generator", "CompositionGen", "");
@ -404,6 +406,13 @@ void cComposableGenerator::InitFinishGens(cIniFile & a_IniFile)
{
m_FinishGens.push_back(new cStructGenTrees(Seed, m_BiomeGen, m_HeightGen, m_CompositionGen));
}
else if (NoCaseCompare(*itr, "Villages") == 0)
{
int GridSize = a_IniFile.GetValueSetI("Generator", "VillageGridSize", 256);
int MaxDepth = a_IniFile.GetValueSetI("Generator", "VillageMaxDepth", 7);
int MaxSize = a_IniFile.GetValueSetI("Generator", "VillageMaxSize", 128);
m_FinishGens.push_back(new cVillageGen(Seed, GridSize, MaxDepth, MaxSize, *m_BiomeGen, *m_HeightGen));
}
else if (NoCaseCompare(*itr, "WaterLakes") == 0)
{
int Probability = a_IniFile.GetValueSetI("Generator", "WaterLakesProbability", 25);

View File

@ -174,7 +174,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ ".......mmmmm",
// Connectors:
"",
"-1: 7, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -216,7 +216,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h: 64:12\n" /* wooddoorblock */
"i:102: 0\n" /* glasspane */
"j: 53: 2\n" /* woodstairs */
@ -288,7 +288,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".......",
// Connectors:
"",
"-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -330,7 +330,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@ -434,7 +434,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "...........",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -561,7 +561,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "..lgp..",
// Connectors:
"",
"-1: 3, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -725,7 +725,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "...............",
// Connectors:
"",
"-1: 7, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1016,7 +1016,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".......",
// Connectors:
"",
"-1: 3, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1087,7 +1087,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 8 */ "dmmmmmdmdmmmmmd",
// Connectors:
"",
"-1: 7, 0, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1134,7 +1134,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"i: 53: 1\n" /* woodstairs */
"j: 85: 0\n" /* fence */
"k: 53: 0\n" /* woodstairs */
"l: 64: 4\n" /* wooddoorblock */
"l: 64: 6\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */
"n: 64: 0\n" /* wooddoorblock */
"o:102: 0\n" /* glasspane */
@ -1238,7 +1238,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "mmkbimmmmm",
// Connectors:
"",
"-1: 1, 0, 5: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1281,22 +1281,23 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"e: 5: 0\n" /* wood */
"f: 67: 3\n" /* stairs */
"g: 17: 0\n" /* tree */
"h: 64: 5\n" /* wooddoorblock */
"i:102: 0\n" /* glasspane */
"j: 64:12\n" /* wooddoorblock */
"k: 53: 2\n" /* woodstairs */
"l: 53: 1\n" /* woodstairs */
"h: 64: 7\n" /* wooddoorblock */
"i: 64: 5\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n: 53: 7\n" /* woodstairs */
"o: 53: 6\n" /* woodstairs */
"p: 53: 3\n" /* woodstairs */
"q: 53: 0\n" /* woodstairs */
"r: 53: 5\n" /* woodstairs */
"s: 53: 4\n" /* woodstairs */
"t: 50: 3\n" /* torch */
"u: 50: 2\n" /* torch */
"v: 50: 4\n" /* torch */
"w: 50: 1\n" /* torch */,
"n: 53: 1\n" /* woodstairs */
"o: 53: 7\n" /* woodstairs */
"p: 53: 6\n" /* woodstairs */
"q: 53: 3\n" /* woodstairs */
"r: 53: 0\n" /* woodstairs */
"s: 53: 5\n" /* woodstairs */
"t: 53: 4\n" /* woodstairs */
"u: 50: 3\n" /* torch */
"v: 50: 2\n" /* torch */
"w: 50: 4\n" /* torch */
"x: 50: 1\n" /* torch */,
// Block data:
// Level 0
@ -1329,7 +1330,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".e............e."
/* 5 */ ".e............e."
/* 6 */ ".e............e."
/* 7 */ ".geeeeheg.....e."
/* 7 */ ".geeeeieg.....e."
/* 8 */ "mmmmmm.me.....e."
/* 9 */ "mmmmmmmme.....e."
/* 10 */ "mmmmmmmme.....e."
@ -1343,81 +1344,81 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
/* 1 */ ".geiieiigjgiieg."
/* 2 */ ".i............e."
/* 3 */ ".i............i."
/* 4 */ ".i............i."
/* 5 */ ".i............e."
/* 6 */ ".i............i."
/* 7 */ ".geiiejeg.....i."
/* 1 */ ".gejjejjgkgjjeg."
/* 2 */ ".j............e."
/* 3 */ ".j............j."
/* 4 */ ".j............j."
/* 5 */ ".j............e."
/* 6 */ ".j............j."
/* 7 */ ".gejjekeg.....j."
/* 8 */ "mmmmmm.me.....e."
/* 9 */ "mmmmmmmmi.....i."
/* 10 */ "mmmmmmmmi.....i."
/* 9 */ "mmmmmmmmj.....j."
/* 10 */ "mmmmmmmmj.....j."
/* 11 */ "mmmmmmmme.....e."
/* 12 */ "mmmmmmmmi.....i."
/* 13 */ "mmmmmmmmi.....i."
/* 14 */ "mmmmmmmmgiiiiig."
/* 12 */ "mmmmmmmmj.....j."
/* 13 */ "mmmmmmmmj.....j."
/* 14 */ "mmmmmmmmgjjjjjg."
/* 15 */ "mmmmmmmm........"
// Level 3
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "kkkkkkkkkkkkkkkl"
/* 1 */ "ngeeeeeegegeeegl"
/* 2 */ ".e............el"
/* 3 */ ".e............el"
/* 4 */ ".e............el"
/* 5 */ ".e............el"
/* 6 */ ".e............el"
/* 7 */ "ogeeeeeeg.....el"
/* 8 */ "pppppppqe.....el"
/* 9 */ "mmmmmmmqe.....el"
/* 10 */ "mmmmmmmqe.....el"
/* 11 */ "mmmmmmmqe.....el"
/* 12 */ "mmmmmmmqe.....el"
/* 13 */ "mmmmmmmqe.....el"
/* 14 */ "mmmmmmmqgeeeeegl"
/* 15 */ "mmmmmmmqr.....sl"
/* 0 */ "llllllllllllllln"
/* 1 */ "ogeeeeeegegeeegn"
/* 2 */ ".e............en"
/* 3 */ ".e............en"
/* 4 */ ".e............en"
/* 5 */ ".e............en"
/* 6 */ ".e............en"
/* 7 */ "pgeeeeeeg.....en"
/* 8 */ "qqqqqqqre.....en"
/* 9 */ "mmmmmmmre.....en"
/* 10 */ "mmmmmmmre.....en"
/* 11 */ "mmmmmmmre.....en"
/* 12 */ "mmmmmmmre.....en"
/* 13 */ "mmmmmmmre.....en"
/* 14 */ "mmmmmmmrgeeeeegn"
/* 15 */ "mmmmmmmrs.....tn"
// Level 4
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
/* 1 */ "kkkkkkkkkkkkkkk."
/* 2 */ "neeeeeeeeeeeeel."
/* 3 */ ".e.........t.el."
/* 4 */ ".e..........uel."
/* 5 */ ".e......v....el."
/* 6 */ "oeeeeeeeee...el."
/* 7 */ "ppppppppqew..el."
/* 8 */ "mmmmmmmmqe...el."
/* 9 */ "mmmmmmmmqe...el."
/* 10 */ "mmmmmmmmqe...el."
/* 11 */ "mmmmmmmmqe...el."
/* 12 */ "mmmmmmmmqe...el."
/* 13 */ "mmmmmmmmqe...el."
/* 14 */ "mmmmmmmmqeeeeel."
/* 15 */ "mmmmmmmmqr...sl."
/* 1 */ "lllllllllllllll."
/* 2 */ "oeeeeeeeeeeeeen."
/* 3 */ ".e.........u.en."
/* 4 */ ".e..........ven."
/* 5 */ ".e......w....en."
/* 6 */ "peeeeeeeee...en."
/* 7 */ "qqqqqqqqrex..en."
/* 8 */ "mmmmmmmmre...en."
/* 9 */ "mmmmmmmmre...en."
/* 10 */ "mmmmmmmmre...en."
/* 11 */ "mmmmmmmmre...en."
/* 12 */ "mmmmmmmmre...en."
/* 13 */ "mmmmmmmmre...en."
/* 14 */ "mmmmmmmmreeeeen."
/* 15 */ "mmmmmmmmrs...tn."
// Level 5
/* z\x* 111111 */
/* * 0123456789012345 */
/* 0 */ "................"
/* 1 */ "................"
/* 2 */ "kkkkkkkkkkkkkl.."
/* 3 */ "neeeeeeeeeeeel.."
/* 4 */ ".ew.........el.."
/* 5 */ "oeeeeeeeeee.el.."
/* 6 */ "pppppppppqe.el.."
/* 7 */ ".........qe.el.."
/* 8 */ "mmmmmmmm.qe.el.."
/* 9 */ "mmmmmmmm.qe.el.."
/* 10 */ "mmmmmmmm.qe.el.."
/* 11 */ "mmmmmmmm.qe.el.."
/* 12 */ "mmmmmmmm.qe.el.."
/* 13 */ "mmmmmmmm.qevel.."
/* 14 */ "mmmmmmmm.qeeel.."
/* 15 */ "mmmmmmmm.qr.sl.."
/* 2 */ "llllllllllllln.."
/* 3 */ "oeeeeeeeeeeeen.."
/* 4 */ ".ex.........en.."
/* 5 */ "peeeeeeeeee.en.."
/* 6 */ "qqqqqqqqqre.en.."
/* 7 */ ".........re.en.."
/* 8 */ "mmmmmmmm.re.en.."
/* 9 */ "mmmmmmmm.re.en.."
/* 10 */ "mmmmmmmm.re.en.."
/* 11 */ "mmmmmmmm.re.en.."
/* 12 */ "mmmmmmmm.re.en.."
/* 13 */ "mmmmmmmm.rewen.."
/* 14 */ "mmmmmmmm.reeen.."
/* 15 */ "mmmmmmmm.rs.tn.."
// Level 6
/* z\x* 111111 */
@ -1425,22 +1426,22 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "................"
/* 1 */ "................"
/* 2 */ "................"
/* 3 */ "kkkkkkkkkkkkk..."
/* 4 */ "eeeeeeeeeeeel..."
/* 5 */ "ppppppppppqel..."
/* 6 */ "mmmmmmmmmmqel..."
/* 7 */ "mmmmmmmmmmqel..."
/* 8 */ "mmmmmmmmmmqel..."
/* 9 */ "mmmmmmmmmmqel..."
/* 10 */ "mmmmmmmmmmqel..."
/* 11 */ "mmmmmmmmmmqel..."
/* 12 */ "mmmmmmmmmmqel..."
/* 13 */ "mmmmmmmmmmqel..."
/* 14 */ "mmmmmmmmmmqel..."
/* 15 */ "mmmmmmmmmmqel...",
/* 3 */ "lllllllllllll..."
/* 4 */ "eeeeeeeeeeeen..."
/* 5 */ "qqqqqqqqqqren..."
/* 6 */ "mmmmmmmmmmren..."
/* 7 */ "mmmmmmmmmmren..."
/* 8 */ "mmmmmmmmmmren..."
/* 9 */ "mmmmmmmmmmren..."
/* 10 */ "mmmmmmmmmmren..."
/* 11 */ "mmmmmmmmmmren..."
/* 12 */ "mmmmmmmmmmren..."
/* 13 */ "mmmmmmmmmmren..."
/* 14 */ "mmmmmmmmmmren..."
/* 15 */ "mmmmmmmmmmren...",
// Connectors:
"",
"-1: 9, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1506,7 +1507,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "..........",
// Connectors:
"",
"-1: 9, 0, 3: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1548,7 +1549,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 67: 2\n" /* stairs */
"e: 67: 1\n" /* stairs */
"f: 4: 0\n" /* cobblestone */
"g: 64: 1\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h: 53: 3\n" /* woodstairs */
"i: 53: 1\n" /* woodstairs */
"j: 85: 0\n" /* fence */
@ -1556,7 +1557,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n:102: 0\n" /* glasspane */
"o: 64: 8\n" /* wooddoorblock */
"o: 64:12\n" /* wooddoorblock */
"p: 50: 3\n" /* torch */
"q: 72: 0\n" /* woodplate */
"r: 50: 4\n" /* torch */
@ -1646,7 +1647,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "............",
// Connectors:
"",
"-1: 8, 1, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1689,19 +1690,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"e: 67: 3\n" /* stairs */
"f: 17: 0\n" /* tree */
"g: 5: 0\n" /* wood */
"h: 64: 5\n" /* wooddoorblock */
"i: 64: 7\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
"h: 64: 7\n" /* wooddoorblock */
"i:102: 0\n" /* glasspane */
"j: 64:12\n" /* wooddoorblock */
"k: 53: 2\n" /* woodstairs */
"l: 53: 7\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n: 53: 7\n" /* woodstairs */
"o: 17: 4\n" /* tree */
"p: 17: 8\n" /* tree */
"q: 50: 3\n" /* torch */
"r: 50: 4\n" /* torch */
"s: 53: 6\n" /* woodstairs */
"t: 53: 3\n" /* woodstairs */,
"n: 17: 4\n" /* tree */
"o: 17: 8\n" /* tree */
"p: 50: 3\n" /* torch */
"q: 50: 4\n" /* torch */
"r: 53: 6\n" /* woodstairs */
"s: 53: 3\n" /* woodstairs */,
// Block data:
// Level 0
@ -1727,46 +1727,46 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".f.......f."
/* 5 */ ".g.......g."
/* 6 */ ".g.......g."
/* 7 */ ".fggfifggf."
/* 7 */ ".fggfhfggf."
/* 8 */ "..........."
// Level 2
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ ".fjjfkfjjf."
/* 2 */ ".j.......j."
/* 3 */ ".j.......j."
/* 1 */ ".fiifjfiif."
/* 2 */ ".i.......i."
/* 3 */ ".i.......i."
/* 4 */ ".f.......f."
/* 5 */ ".j.......j."
/* 6 */ ".j.......j."
/* 7 */ ".fjjfkfjjf."
/* 5 */ ".i.......i."
/* 6 */ ".i.......i."
/* 7 */ ".fiifjfiif."
/* 8 */ "..........."
// Level 3
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "lllllllllll"
/* 1 */ "nfooooooofn"
/* 2 */ ".p..q.q..p."
/* 3 */ ".p.......p."
/* 4 */ ".p.......p."
/* 5 */ ".p.......p."
/* 6 */ ".p..r.r..p."
/* 7 */ "sfooooooofs"
/* 8 */ "ttttttttttt"
/* 0 */ "kkkkkkkkkkk"
/* 1 */ "lfnnnnnnnfl"
/* 2 */ ".o..p.p..o."
/* 3 */ ".o.......o."
/* 4 */ ".o.......o."
/* 5 */ ".o.......o."
/* 6 */ ".o..q.q..o."
/* 7 */ "rfnnnnnnnfr"
/* 8 */ "sssssssssss"
// Level 4
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "lllllllllll"
/* 2 */ "ngggggggggn"
/* 1 */ "kkkkkkkkkkk"
/* 2 */ "lgggggggggl"
/* 3 */ ".g.......g."
/* 4 */ ".g.......g."
/* 5 */ ".g.......g."
/* 6 */ "sgggggggggs"
/* 7 */ "ttttttttttt"
/* 6 */ "rgggggggggr"
/* 7 */ "sssssssssss"
/* 8 */ "..........."
// Level 5
@ -1774,11 +1774,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "lllllllllll"
/* 3 */ "ngggggggggn"
/* 2 */ "kkkkkkkkkkk"
/* 3 */ "lgggggggggl"
/* 4 */ ".g.......g."
/* 5 */ "sgggggggggs"
/* 6 */ "ttttttttttt"
/* 5 */ "rgggggggggr"
/* 6 */ "sssssssssss"
/* 7 */ "..........."
/* 8 */ "..........."
@ -1788,15 +1788,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "..........."
/* 3 */ "lllllllllll"
/* 3 */ "kkkkkkkkkkk"
/* 4 */ "ggggggggggg"
/* 5 */ "ttttttttttt"
/* 5 */ "sssssssssss"
/* 6 */ "..........."
/* 7 */ "..........."
/* 8 */ "...........",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2025,7 +2025,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 15 */ "mmmmmmmmmmmmmmm",
// Connectors:
"",
"-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2069,7 +2069,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 4: 0\n" /* cobblestone */
"g: 17: 0\n" /* tree */
"h: 5: 0\n" /* wood */
"i: 64: 5\n" /* wooddoorblock */
"i: 64: 7\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 64:12\n" /* wooddoorblock */
"l: 53: 2\n" /* woodstairs */
@ -2151,7 +2151,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ ".........",
// Connectors:
"",
"-1: 4, 1, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2193,7 +2193,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@ -2271,7 +2271,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
"",
"-1: 5, 0, 0: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2313,7 +2313,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@ -2422,7 +2422,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "mmmm..tfl..",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2464,7 +2464,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j: 53: 2\n" /* woodstairs */
@ -2571,7 +2571,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 10 */ "..kfl.....kfl..",
// Connectors:
"",
"-1: 7, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2613,7 +2613,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h: 53: 3\n" /* woodstairs */
"i: 85: 0\n" /* fence */
"j: 53: 2\n" /* woodstairs */
@ -2698,7 +2698,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2740,15 +2740,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"d: 4: 0\n" /* cobblestone */
"e: 17: 0\n" /* tree */
"f: 5: 0\n" /* wood */
"g: 64: 5\n" /* wooddoorblock */
"h: 53: 3\n" /* woodstairs */
"i: 85: 0\n" /* fence */
"j: 53: 2\n" /* woodstairs */
"k: 53: 1\n" /* woodstairs */
"l: 53: 0\n" /* woodstairs */
"g: 64: 7\n" /* wooddoorblock */
"h: 64: 5\n" /* wooddoorblock */
"i: 53: 3\n" /* woodstairs */
"j: 85: 0\n" /* fence */
"k: 53: 2\n" /* woodstairs */
"l: 53: 1\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n:102: 0\n" /* glasspane */
"o: 64:13\n" /* wooddoorblock */
"n: 53: 0\n" /* woodstairs */
"o:102: 0\n" /* glasspane */
"p: 64:12\n" /* wooddoorblock */
"q: 50: 3\n" /* torch */
"r: 72: 0\n" /* woodplate */
@ -2776,12 +2776,12 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ ".efffggfffe."
/* 1 */ ".efffghfffe."
/* 2 */ ".f........f."
/* 3 */ ".fh......hf."
/* 4 */ ".fi......if."
/* 5 */ ".fj......jf."
/* 6 */ ".f.kilkil.f."
/* 3 */ ".fi......if."
/* 4 */ ".fj......jf."
/* 5 */ ".fk......kf."
/* 6 */ ".f.ljnljn.f."
/* 7 */ ".effffffffe."
/* 8 */ "............"
@ -2789,19 +2789,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ ".ennfopfnne."
/* 2 */ ".n..q..q..n."
/* 3 */ ".n........n."
/* 1 */ ".eoofppfooe."
/* 2 */ ".o..q..q..o."
/* 3 */ ".o........o."
/* 4 */ ".fr......rf."
/* 5 */ ".n........n."
/* 6 */ ".n..r..r..n."
/* 7 */ ".ennfnnfnne."
/* 5 */ ".o........o."
/* 6 */ ".o..r..r..o."
/* 7 */ ".eoofoofooe."
/* 8 */ "............"
// Level 3
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "jjjjjjjjjjjj"
/* 0 */ "kkkkkkkkkkkk"
/* 1 */ "sffffffffffs"
/* 2 */ ".fttttttttf."
/* 3 */ ".f........f."
@ -2809,19 +2809,19 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 5 */ ".f........f."
/* 6 */ ".fttttttttf."
/* 7 */ "wffffffffffw"
/* 8 */ "hhhhhhhhhhhh"
/* 8 */ "iiiiiiiiiiii"
// Level 4
/* z\x* 11 */
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "jjjjjjjjjjjj"
/* 1 */ "kkkkkkkkkkkk"
/* 2 */ "sffffffffffs"
/* 3 */ ".fttttttttf."
/* 4 */ ".f........f."
/* 5 */ ".fttttttttf."
/* 6 */ "wffffffffffw"
/* 7 */ "hhhhhhhhhhhh"
/* 7 */ "iiiiiiiiiiii"
/* 8 */ "............"
// Level 5
@ -2829,11 +2829,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 012345678901 */
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "jjjjjjjjjjjj"
/* 2 */ "kkkkkkkkkkkk"
/* 3 */ "sffffffffffs"
/* 4 */ ".f........f."
/* 5 */ "wffffffffffw"
/* 6 */ "hhhhhhhhhhhh"
/* 6 */ "iiiiiiiiiiii"
/* 7 */ "............"
/* 8 */ "............"
@ -2843,15 +2843,15 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "............"
/* 1 */ "............"
/* 2 */ "............"
/* 3 */ "jjjjjjjjjjjj"
/* 3 */ "kkkkkkkkkkkk"
/* 4 */ "ffffffffffff"
/* 5 */ "hhhhhhhhhhhh"
/* 5 */ "iiiiiiiiiiii"
/* 6 */ "............"
/* 7 */ "............"
/* 8 */ "............",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -2895,19 +2895,18 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 2: 0\n" /* grass */
"g: 17: 0\n" /* tree */
"h: 5: 0\n" /* wood */
"i: 64: 5\n" /* wooddoorblock */
"i: 64: 7\n" /* wooddoorblock */
"j: 53: 3\n" /* woodstairs */
"k: 85: 0\n" /* fence */
"l: 53: 2\n" /* woodstairs */
"m: 19: 0\n" /* sponge */
"n: 64: 7\n" /* wooddoorblock */
"o:102: 0\n" /* glasspane */
"p: 64:12\n" /* wooddoorblock */
"q: 72: 0\n" /* woodplate */
"r: 53: 7\n" /* woodstairs */
"s: 50: 1\n" /* torch */
"t: 50: 2\n" /* torch */
"u: 53: 6\n" /* woodstairs */,
"n:102: 0\n" /* glasspane */
"o: 64:12\n" /* wooddoorblock */
"p: 72: 0\n" /* woodplate */
"q: 53: 7\n" /* woodstairs */
"r: 50: 1\n" /* torch */
"s: 50: 2\n" /* torch */
"t: 53: 6\n" /* woodstairs */,
// Block data:
// Level 0
@ -2937,7 +2936,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 4 */ ".h.e....lh."
/* 5 */ ".h.......h."
/* 6 */ ".h.......h."
/* 7 */ ".ghhhnhhhg."
/* 7 */ ".ghhhihhhg."
/* 8 */ "..k.....k.."
/* 9 */ "mmk.....kmm"
/* 10 */ "mmk.....kmm"
@ -2948,13 +2947,13 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ ".goohphoog."
/* 2 */ ".o.......o."
/* 3 */ ".o......qo."
/* 1 */ ".gnnhohnng."
/* 2 */ ".n.......n."
/* 3 */ ".n......pn."
/* 4 */ ".h.......h."
/* 5 */ ".o.......o."
/* 6 */ ".o.......o."
/* 7 */ ".goohphoog."
/* 5 */ ".n.......n."
/* 6 */ ".n.......n."
/* 7 */ ".gnnhohnng."
/* 8 */ "..........."
/* 9 */ "mm.......mm"
/* 10 */ "mm.......mm"
@ -2965,13 +2964,13 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* z\x* 1 */
/* * 01234567890 */
/* 0 */ "lllllllllll"
/* 1 */ "rhhhhhhhhhr"
/* 1 */ "qhhhhhhhhhq"
/* 2 */ ".h.......h."
/* 3 */ ".h.......h."
/* 4 */ ".hs.....th."
/* 4 */ ".hr.....sh."
/* 5 */ ".h.......h."
/* 6 */ ".h.......h."
/* 7 */ "uhhhhhhhhhu"
/* 7 */ "thhhhhhhhht"
/* 8 */ "jjjjjjjjjjj"
/* 9 */ "mm.......mm"
/* 10 */ "mm.......mm"
@ -2983,11 +2982,11 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* * 01234567890 */
/* 0 */ "..........."
/* 1 */ "lllllllllll"
/* 2 */ "rhhhhhhhhhr"
/* 2 */ "qhhhhhhhhhq"
/* 3 */ ".h.......h."
/* 4 */ ".h.......h."
/* 5 */ ".h.......h."
/* 6 */ "uhhhhhhhhhu"
/* 6 */ "thhhhhhhhht"
/* 7 */ "jjjjjjjjjjj"
/* 8 */ "..........."
/* 9 */ "mm.......mm"
@ -3001,9 +3000,9 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 0 */ "..........."
/* 1 */ "..........."
/* 2 */ "lllllllllll"
/* 3 */ "rhhhhhhhhhr"
/* 3 */ "qhhhhhhhhhq"
/* 4 */ ".h.......h."
/* 5 */ "uhhhhhhhhhu"
/* 5 */ "thhhhhhhhht"
/* 6 */ "jjjjjjjjjjj"
/* 7 */ "..........."
/* 8 */ "..........."
@ -3030,7 +3029,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ "mm.......mm",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -3279,7 +3278,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
"f: 5: 0\n" /* wood */
"g: 54: 4\n" /* chest */
"h:154: 4\n" /* hopper */
"i: 64: 6\n" /* wooddoorblock */
"i: 64: 4\n" /* wooddoorblock */
"j:102: 0\n" /* glasspane */
"k: 85: 0\n" /* fence */
"l: 64:12\n" /* wooddoorblock */
@ -3551,7 +3550,7 @@ const cPrefab::sDef g_PlainsVillagePrefabs[] =
/* 12 */ ".........",
// Connectors:
"",
"-1: 5, 0, 6: 5\n" /* Type -1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -3692,7 +3691,10 @@ const cPrefab::sDef g_PlainsVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
"",
"1: 1, 9, 3: 3\n" /* Type 1, direction Z+ */
"1: 2, 9, 0: 2\n" /* Type 1, direction Z- */
"1: 0, 9, 1: 4\n" /* Type 1, direction X- */
"1: 3, 9, 2: 5\n" /* Type 1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */

View File

@ -63,7 +63,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "d.....d.....d",
// Connectors:
"",
"-1: 6, 0, 8: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -103,7 +103,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -183,7 +183,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ "...........",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -223,7 +223,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -326,7 +326,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...........",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -366,7 +366,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -444,7 +444,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".............",
// Connectors:
"",
"-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -484,7 +484,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -587,7 +587,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".............",
// Connectors:
"",
"-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -627,7 +627,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -730,7 +730,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "...............",
// Connectors:
"",
"-1: 6, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -770,7 +770,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -873,7 +873,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ "................",
// Connectors:
"",
"-1: 9, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -913,7 +913,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -984,7 +984,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".......",
// Connectors:
"",
"-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1024,7 +1024,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 5\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
@ -1096,7 +1096,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ ".........",
// Connectors:
"",
"-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1136,9 +1136,9 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"b:128: 2\n" /* sandstonestairs */
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e: 64: 1\n" /* wooddoorblock */
"e: 64: 7\n" /* wooddoorblock */
"f:102: 0\n" /* glasspane */
"g: 64: 8\n" /* wooddoorblock */
"g: 64:12\n" /* wooddoorblock */
"h:128: 7\n" /* sandstonestairs */
"i: 50: 3\n" /* torch */
"j: 50: 4\n" /* torch */
@ -1232,7 +1232,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 8 */ ".........",
// Connectors:
"",
"-1: 4, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1273,17 +1273,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e:128: 3\n" /* sandstonestairs */
"f: 64: 5\n" /* wooddoorblock */
"g:102: 0\n" /* glasspane */
"h: 64:12\n" /* wooddoorblock */
"i:128: 7\n" /* sandstonestairs */
"j: 50: 3\n" /* torch */
"k: 50: 4\n" /* torch */
"l:128: 6\n" /* sandstonestairs */
"f: 64: 7\n" /* wooddoorblock */
"g: 64: 5\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j:128: 7\n" /* sandstonestairs */
"k: 50: 3\n" /* torch */
"l: 50: 4\n" /* torch */
"m: 19: 0\n" /* sponge */
"n:128: 5\n" /* sandstonestairs */
"o:128: 4\n" /* sandstonestairs */
"p: 50: 1\n" /* torch */,
"n:128: 6\n" /* sandstonestairs */
"o:128: 5\n" /* sandstonestairs */
"p:128: 4\n" /* sandstonestairs */
"q: 50: 1\n" /* torch */,
// Block data:
// Level 0
@ -1310,7 +1311,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 2 */ ".d..........d."
/* 3 */ ".d..........d."
/* 4 */ ".d..........d."
/* 5 */ ".ddddfddd...d."
/* 5 */ ".ddddgddd...d."
/* 6 */ "........d...d."
/* 7 */ "mmmmmmm.d...d."
/* 8 */ "mmmmmmm.d...d."
@ -1322,49 +1323,49 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ ".dggdggdhdggd."
/* 2 */ ".g..........g."
/* 3 */ ".g..........g."
/* 4 */ ".g..........d."
/* 5 */ ".dggdhdgg...g."
/* 6 */ "........g...g."
/* 1 */ ".dhhdhhdidhhd."
/* 2 */ ".h..........h."
/* 3 */ ".h..........h."
/* 4 */ ".h..........d."
/* 5 */ ".dhhdidhh...h."
/* 6 */ "........h...h."
/* 7 */ "mmmmmmm.d...d."
/* 8 */ "mmmmmmm.g...g."
/* 9 */ "mmmmmmm.g...g."
/* 10 */ "mmmmmmm.dgggd."
/* 8 */ "mmmmmmm.h...h."
/* 9 */ "mmmmmmm.h...h."
/* 10 */ "mmmmmmm.dhhhd."
/* 11 */ "mmmmmmm......."
// Level 3
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "bbbbbbbbbbbbbb"
/* 1 */ "iddddddddddddc"
/* 2 */ ".d.....j.j..dc"
/* 1 */ "jddddddddddddc"
/* 2 */ ".d.....k.k..dc"
/* 3 */ ".d..........dc"
/* 4 */ ".d..k.k.....dc"
/* 5 */ "ldddddddd...dc"
/* 4 */ ".d..l.l.....dc"
/* 5 */ "ndddddddd...dc"
/* 6 */ "eeeeeeead...dc"
/* 7 */ "mmmmmmmad...dc"
/* 8 */ "mmmmmmmad...dc"
/* 9 */ "mmmmmmmad...dc"
/* 10 */ "mmmmmmmadddddc"
/* 11 */ "mmmmmmman...oc"
/* 11 */ "mmmmmmmao...pc"
// Level 4
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ "bbbbbbbbbbbbb."
/* 2 */ "idddddddddddc."
/* 3 */ ".dp........dc."
/* 4 */ "lddddddddd.dc."
/* 2 */ "jdddddddddddc."
/* 3 */ ".dq........dc."
/* 4 */ "nddddddddd.dc."
/* 5 */ "eeeeeeeead.dc."
/* 6 */ "........ad.dc."
/* 7 */ "mmmmmmm.ad.dc."
/* 8 */ "mmmmmmm.ad.dc."
/* 9 */ "mmmmmmm.adkdc."
/* 9 */ "mmmmmmm.adldc."
/* 10 */ "mmmmmmm.adddc."
/* 11 */ "mmmmmmm.an.oc."
/* 11 */ "mmmmmmm.ao.pc."
// Level 5
/* z\x* 1111 */
@ -1383,7 +1384,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmmmm..adc..",
// Connectors:
"",
"-1: 8, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1424,19 +1425,18 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"c:128: 1\n" /* sandstonestairs */
"d: 24: 0\n" /* sandstone */
"e:128: 3\n" /* sandstonestairs */
"f: 64: 5\n" /* wooddoorblock */
"g: 64: 7\n" /* wooddoorblock */
"h:102: 0\n" /* glasspane */
"i: 64:12\n" /* wooddoorblock */
"j:128: 7\n" /* sandstonestairs */
"k: 50: 3\n" /* torch */
"l: 50: 2\n" /* torch */
"f: 64: 7\n" /* wooddoorblock */
"g:102: 0\n" /* glasspane */
"h: 64:12\n" /* wooddoorblock */
"i:128: 7\n" /* sandstonestairs */
"j: 50: 3\n" /* torch */
"k: 50: 2\n" /* torch */
"l: 50: 4\n" /* torch */
"m: 19: 0\n" /* sponge */
"n: 50: 4\n" /* torch */
"o:128: 6\n" /* sandstonestairs */
"p: 50: 1\n" /* torch */
"q:128: 5\n" /* sandstonestairs */
"r:128: 4\n" /* sandstonestairs */,
"n:128: 6\n" /* sandstonestairs */
"o: 50: 1\n" /* torch */
"p:128: 5\n" /* sandstonestairs */
"q:128: 4\n" /* sandstonestairs */,
// Block data:
// Level 0
@ -1465,7 +1465,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 4 */ ".d..........d."
/* 5 */ ".d..........d."
/* 6 */ ".d..........d."
/* 7 */ ".ddddgd.....d."
/* 7 */ ".ddddfd.....d."
/* 8 */ "......d.....d."
/* 9 */ "mmmmm.d.....d."
/* 10 */ "mmmmm.ddddddd."
@ -1475,49 +1475,49 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ ".dhhdidhhdhhd."
/* 2 */ ".h..........h."
/* 3 */ ".h..........h."
/* 1 */ ".dggdhdggdggd."
/* 2 */ ".g..........g."
/* 3 */ ".g..........g."
/* 4 */ ".d..........d."
/* 5 */ ".h..........h."
/* 6 */ ".h..........h."
/* 7 */ ".dhhdid.....d."
/* 8 */ "......h.....h."
/* 9 */ "mmmmm.h.....h."
/* 10 */ "mmmmm.dhhdhhd."
/* 5 */ ".g..........g."
/* 6 */ ".g..........g."
/* 7 */ ".dggdhd.....d."
/* 8 */ "......g.....g."
/* 9 */ "mmmmm.g.....g."
/* 10 */ "mmmmm.dggdggd."
/* 11 */ "mmmmm........."
// Level 3
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ "bbbbbbbbbbbbbb"
/* 1 */ "jddddddddddddc"
/* 2 */ ".d..k.k.....dc"
/* 1 */ "iddddddddddddc"
/* 2 */ ".d..j.j.....dc"
/* 3 */ ".d..........dc"
/* 4 */ ".d.........ldc"
/* 4 */ ".d.........kdc"
/* 5 */ ".d..........dc"
/* 6 */ ".d..n.n.....dc"
/* 7 */ "oddddddp...ldc"
/* 6 */ ".d..l.l.....dc"
/* 7 */ "nddddddo...kdc"
/* 8 */ "eeeeead.....dc"
/* 9 */ "mmmmmad.....dc"
/* 10 */ "mmmmmadddddddc"
/* 11 */ "mmmmmaq.....rc"
/* 11 */ "mmmmmap.....qc"
// Level 4
/* z\x* 1111 */
/* * 01234567890123 */
/* 0 */ ".............."
/* 1 */ "bbbbbbbbbbbbc."
/* 2 */ "jdddddddddddc."
/* 2 */ "idddddddddddc."
/* 3 */ ".d.........dc."
/* 4 */ ".d.........dc."
/* 5 */ ".d.........dc."
/* 6 */ "oddddddd...dc."
/* 6 */ "nddddddd...dc."
/* 7 */ "eeeeeead...dc."
/* 8 */ "......ad...dc."
/* 9 */ "mmmmm.ad...dc."
/* 10 */ "mmmmm.adddddc."
/* 11 */ "mmmmm.aq...rc."
/* 11 */ "mmmmm.ap...qc."
// Level 5
/* z\x* 1111 */
@ -1525,15 +1525,15 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 0 */ ".............."
/* 1 */ ".............."
/* 2 */ "bbbbbbbbbbbb.."
/* 3 */ "jddddddddddc.."
/* 3 */ "iddddddddddc.."
/* 4 */ ".d........dc.."
/* 5 */ "odddddddd.dc.."
/* 5 */ "ndddddddd.dc.."
/* 6 */ "eeeeeeeed.dc.."
/* 7 */ ".......ad.dc.."
/* 8 */ ".......ad.dc.."
/* 9 */ "mmmmm..ad.dc.."
/* 10 */ "mmmmm..adddc.."
/* 11 */ "mmmmm..aq.rc.."
/* 11 */ "mmmmm..ap.qc.."
// Level 6
/* z\x* 1111 */
@ -1552,7 +1552,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 11 */ "mmmmm...adc...",
// Connectors:
"",
"-1: 5, 0, 1: 2\n" /* Type -1, direction Z- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1619,7 +1619,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 6 */ "d........d",
// Connectors:
"",
"-1: 0, 0, 3: 4\n" /* Type -1, direction X- */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1661,8 +1661,8 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
"d: 50: 5\n" /* torch */
"e: 26:10\n" /* bedblock */
"f: 26: 2\n" /* bedblock */
"g: 64: 3\n" /* wooddoorblock */
"h: 64: 8\n" /* wooddoorblock */
"g: 64: 5\n" /* wooddoorblock */
"h: 64:12\n" /* wooddoorblock */
"m: 19: 0\n" /* sponge */,
// Block data:
@ -1712,7 +1712,7 @@ const cPrefab::sDef g_SandVillagePrefabs[] =
/* 5 */ ".....",
// Connectors:
"",
"-1: 2, 0, 4: 3\n" /* Type -1, direction Z+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */
@ -1853,7 +1853,10 @@ const cPrefab::sDef g_SandVillageStartingPrefabs[] =
/* 3 */ "bbbb",
// Connectors:
"",
"1: 2, 8, 0: 2\n" /* Type 1, direction Z- */
"1: 0, 8, 1: 4\n" /* Type 1, direction X- */
"1: 1, 8, 3: 3\n" /* Type 1, direction Z+ */
"1: 3, 8, 2: 5\n" /* Type 1, direction X+ */,
// AllowedRotations:
7, /* 1, 2, 3 CCW rotation allowed */

View File

@ -7,6 +7,7 @@
#include "VillageGen.h"
#include "Prefabs/PlainsVillagePrefabs.h"
#include "Prefabs/SandVillagePrefabs.h"
#include "PieceGenerator.h"
@ -19,18 +20,79 @@ the grid's cells. Each cell checks the biomes in an entire chunk around it, only
biomes are village-friendly. If yes, the entire village structure is built for that cell. If not, the cell
is left village-less.
A village is generated starting by its well. The well is placed in the grid's origin point. Then a set of
random lengths roads is generated - 4 roads going from the well, then at the end of each road another set of
roads, crossing them perpendicular, then at the end of those another set, up to a set maximum branching
depth. The roads are placed in a T or L shape, with the old road being the center stem of the T. Roads avoid
crossing each other and going further away from the well than the maximum block size of the village.
Finally, houses are places along the roads, avoiding collisions with already-existing items.
A village is generated using the regular BFS piece generator. The well piece is used as the starting piece,
the roads and houses are then used as the following pieces. Only the houses are read from the prefabs,
though, the roads are generated by code and their content is ignored. A special subclass of the cPiecePool
class is used, so that the roads connect to each other and to the well only in predefined manners.
When the village is about to be drawn into a chunk, it queries the heights for each item intersecting the
chunk. The prefabs are shifted so that their pivot points lie on the surface, and the roads are drawn
The well has connectors of type "1". The houses have connectors of type "-1". The roads have connectors of
both types, type "-1" at the far ends and type "1" on the long edges.
When the village is about to be drawn into a chunk, it queries the heights for each piece intersecting the
chunk. The pieces are shifted so that their pivot points lie on the surface, and the roads are drawn
directly by turning the surface blocks into gravel / sandstone.
*/
class cVillagePiecePool :
public cPrefabPiecePool
{
typedef cPrefabPiecePool super;
public:
cVillagePiecePool(
const cPrefab::sDef * a_PieceDefs, size_t a_NumPieceDefs,
const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs
) :
super(a_PieceDefs, a_NumPieceDefs, a_StartingPieceDefs, a_NumStartingPieceDefs)
{
// Add the road piece:
cBlockArea BA;
BA.Create(5, 1, 3, cBlockArea::baTypes | cBlockArea::baMetas);
BA.Fill(cBlockArea::baTypes | cBlockArea::baMetas, E_BLOCK_GRAVEL, 0);
cPrefab * RoadPiece = new cPrefab(BA, 7);
RoadPiece->AddConnector(0, 0, 1, BLOCK_FACE_XM, -1);
RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, -1);
RoadPiece->AddConnector(4, 0, 1, BLOCK_FACE_XP, 1);
RoadPiece->AddConnector(1, 0, 0, BLOCK_FACE_ZM, 1);
RoadPiece->AddConnector(3, 0, 0, BLOCK_FACE_ZM, 1);
RoadPiece->AddConnector(1, 0, 2, BLOCK_FACE_ZP, 1);
RoadPiece->AddConnector(3, 0, 2, BLOCK_FACE_ZP, 1);
RoadPiece->SetAddWeightIfSame(10000);
m_AllPieces.push_back(RoadPiece);
m_PiecesByConnector[-1].push_back(RoadPiece);
m_PiecesByConnector[1].push_back(RoadPiece);
}
// cPrefabPiecePool overrides:
virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override
{
// Only roads are allowed to connect to the well:
if ((a_PlacedPiece.GetDepth() == 0) && (a_NewPiece.GetSize().y != 1))
{
return 0;
}
// Roads cannot branch T-wise:
if (
(a_PlacedPiece.GetPiece().GetSize().y == 1) && // Connecting to a road
(
(a_ExistingConnector.m_Direction == BLOCK_FACE_ZP) ||
(a_ExistingConnector.m_Direction == BLOCK_FACE_ZM)
) && // Through the long-edge connector
(a_NewPiece.GetSize().y == 1) // And the new piece is a road
)
{
return 0;
}
return ((const cPrefab &)a_NewPiece).GetPieceWeight(a_PlacedPiece, a_ExistingConnector);
}
} ;
class cVillageGen::cVillage :
public cGridStructGen::cStructure
{
@ -53,44 +115,11 @@ public:
m_Prefabs(a_Prefabs),
m_HeightGen(a_HeightGen)
{
PlaceWell();
BuildRoads(a_MaxRoadDepth);
PlaceHouses();
cBFSPieceGenerator pg(m_Prefabs, a_Seed);
pg.PlacePieces(a_OriginX, 10, a_OriginZ, a_MaxRoadDepth + 1, m_Pieces);
}
protected:
class cItem
{
public:
/* The position of the item, X/Z-wise: */
int m_MinX, m_MaxX, m_MinZ, m_MaxZ;
/** The prefab to use. If NULL, this is a road. */
cPrefab * m_Prefab;
/** Number of rotations that should be applied to the prefab. */
int m_NumRotations;
/* The bottom of the prefab. Only valid if the item is a prefab, not valid for roads. */
int m_BaseY;
/** Creates a new item with the specified parameters.
m_BaseY is set to -1 and will be adjusted later on when drawing. */
cItem(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, cPrefab * a_Prefab, int a_NumRotations) :
m_MinX(a_MinX),
m_MaxX(a_MaxX),
m_MinZ(a_MinZ),
m_MaxZ(a_MaxZ),
m_Prefab(a_Prefab),
m_NumRotations(a_NumRotations),
m_BaseY(-1)
{
}
} ;
typedef SharedPtr<cItem> cItemPtr;
typedef std::vector<cItemPtr> cItemPtrs;
/** Seed for the random functions */
int m_Seed;
@ -109,61 +138,8 @@ protected:
/** The underlying height generator, used for placing the structures on top of the terrain. */
cTerrainHeightGen & m_HeightGen;
/** The items that are generated in the village (houses, roads). */
cItemPtrs m_Items;
/** Places the well at the center of the village */
void PlaceWell(void)
{
// Pick a prefab from the starting pieces:
cPieces StartingPieces = ((cPiecePool &)m_Prefabs).GetStartingPieces();
ASSERT(!StartingPieces.empty());
int TotalWeight = 0;
for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
{
TotalWeight += ((const cPrefab *)(*itr))->GetDefaultWeight();
}
ASSERT(TotalWeight > 0);
int rnd = (m_Noise.IntNoise2DInt(m_OriginX, m_OriginZ) / 7) % TotalWeight;
cPiece * WellPiece = StartingPieces[0];
for (cPieces::const_iterator itr = StartingPieces.begin(), end = StartingPieces.end(); itr != end; ++itr)
{
rnd -= ((const cPrefab *)(*itr))->GetDefaultWeight();
if (rnd <= 0)
{
WellPiece = *itr;
break;
}
}
ASSERT(WellPiece != NULL);
// Pick a rotation:
// TODO
int NumRotations = 0;
Vector3i Size = WellPiece->GetSize();
// Put the well in the placed items array:
m_Items.push_back(cItemPtr(new cItem(m_OriginX, m_OriginX + Size.x, m_OriginZ, m_OriginZ + Size.z, (cPrefab *)WellPiece, NumRotations)));
}
/** Places the roads going from the well outwards. */
void BuildRoads(int a_MaxRoadDepth)
{
/*
ASSERT(m_Items.size() == 1);
const cItem & Well = *m_Items[0];
*/
// TODO
}
/** Places houses along the roads. */
void PlaceHouses(void)
{
// TODO
}
/** The village pieces, placed by the generator. */
cPlacedPieces m_Pieces;
// cGrdStructGen::cStructure overrides:
@ -173,6 +149,11 @@ protected:
// Iterate over all items
// Each intersecting prefab is placed on ground (if not already placed), then drawn
// Each intersecting road is drawn by replacing top soil blocks with gravel / sandstone blocks
for (cPlacedPieces::const_iterator itr = m_Pieces.begin(), end = m_Pieces.end(); itr != end; ++itr)
{
const cPrefab & Prefab = (const cPrefab &)((*itr)->GetPiece());
Prefab.Draw(a_Chunk, *itr);
} // for itr - m_PlacedPieces[]
}
} ;
@ -183,15 +164,20 @@ protected:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cVillageGen:
cPrefabPiecePool cVillageGen::m_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
cPrefabPiecePool cVillageGen::m_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
/** The prefabs for the sand village. */
static cVillagePiecePool g_SandVillage (g_SandVillagePrefabs, g_SandVillagePrefabsCount, g_SandVillageStartingPrefabs, g_SandVillageStartingPrefabsCount);
/** The prefabs for the plains village. */
static cVillagePiecePool g_PlainsVillage(g_PlainsVillagePrefabs, g_PlainsVillagePrefabsCount, g_PlainsVillageStartingPrefabs, g_PlainsVillageStartingPrefabsCount);
cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
cVillageGen::cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen) :
super(a_Seed, a_GridSize, a_GridSize, a_MaxSize, a_MaxSize, 100),
m_MaxDepth(a_MaxDepth),
m_MaxSize(a_MaxSize),
m_BiomeGen(a_BiomeGen),
m_HeightGen(a_HeightGen)
{
@ -211,7 +197,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
// Check if all the biomes are village-friendly:
// If just one is not, no village is created, because it's likely that an unfriendly biome is too close
cPrefabPiecePool * VillagePrefabs = NULL;
cVillagePiecePool * VillagePrefabs = NULL;
for (size_t i = 0; i < ARRAYCOUNT(Biomes); i++)
{
switch (Biomes[i])
@ -220,7 +206,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biDesertM:
{
// These biomes allow sand villages
VillagePrefabs = &m_SandVillage;
VillagePrefabs = &g_SandVillage;
break;
}
case biPlains:
@ -229,7 +215,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
case biSunflowerPlains:
{
// These biomes allow plains-style villages
VillagePrefabs = &m_PlainsVillage;
VillagePrefabs = &g_PlainsVillage;
break;
}
default:
@ -245,7 +231,7 @@ cGridStructGen::cStructurePtr cVillageGen::CreateStructure(int a_OriginX, int a_
{
return cStructurePtr();
}
return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxRoadDepth, m_MaxSize, *VillagePrefabs, m_HeightGen));
return cStructurePtr(new cVillage(m_Seed, a_OriginX, a_OriginZ, m_MaxDepth, m_MaxSize, *VillagePrefabs, m_HeightGen));
}

View File

@ -21,19 +21,13 @@ class cVillageGen :
{
typedef cGridStructGen super;
public:
cVillageGen(int a_Seed, int a_GridSize, int a_MaxRoadDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
cVillageGen(int a_Seed, int a_GridSize, int a_MaxDepth, int a_MaxSize, cBiomeGen & a_BiomeGen, cTerrainHeightGen & a_HeightGen);
protected:
class cVillage; // fwd: VillageGen.cpp
/** The prefabs for the sand village. We're not exactly using the cPiecePool functionality, only the containment. */
static cPrefabPiecePool m_SandVillage;
/** The prefabs for the plains village. We're not exactly using the cPiecePool functionality, only the containment. */
static cPrefabPiecePool m_PlainsVillage;
/** Maximum number of roads generated one from another (tree depth). */
int m_MaxRoadDepth;
/** Maximum depth of the generator tree*/
int m_MaxDepth;
/** Maximum size, in X/Z blocks, of the village (radius from the origin) */
int m_MaxSize;