Skip to content

Commit fcdb1a8

Browse files
paramatkwolekr
authored andcommittedNov 21, 2014
Mgv5 1 up 1 down overgeneration for biome surface continuity
1 parent d39887d commit fcdb1a8

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed
 

‎src/mapgen_v5.cpp

+18-16
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge_) {
6363
// amount of elements to skip for the next index
6464
// for noise/height/biome maps (not vmanip)
6565
this->ystride = csize.X;
66-
this->zstride = csize.X * csize.Y;
66+
this->zstride = csize.X * (csize.Y + 2);
6767

6868
this->biomemap = new u8[csize.X * csize.Z];
6969
this->heightmap = new s16[csize.X * csize.Z];
@@ -78,11 +78,11 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge_) {
7878
noise_height = new Noise(&sp->np_height, seed, csize.X, csize.Z);
7979

8080
// 3D terrain noise
81-
noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y, csize.Z);
82-
noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y, csize.Z);
83-
noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y, csize.Z);
84-
noise_crumble = new Noise(&sp->np_crumble, seed, csize.X, csize.Y, csize.Z);
85-
noise_wetness = new Noise(&sp->np_wetness, seed, csize.X, csize.Y, csize.Z);
81+
noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
82+
noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
83+
noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
84+
noise_crumble = new Noise(&sp->np_crumble, seed, csize.X, csize.Y + 2, csize.Z);
85+
noise_wetness = new Noise(&sp->np_wetness, seed, csize.X, csize.Y + 2, csize.Z);
8686

8787
// Biome noise
8888
noise_heat = new Noise(bmgr->np_heat, seed, csize.X, csize.Z);
@@ -291,8 +291,8 @@ void MapgenV5::makeChunk(BlockMakeData *data) {
291291

292292
// Calculate lighting
293293
if (flags & MG_LIGHT)
294-
calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
295-
node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
294+
calcLighting(node_min - v3s16(0, 1, 0) - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
295+
node_max + v3s16(0, 1, 0) + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
296296

297297
this->generating = false;
298298
}
@@ -301,7 +301,7 @@ void MapgenV5::makeChunk(BlockMakeData *data) {
301301
void MapgenV5::calculateNoise() {
302302
//TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
303303
int x = node_min.X;
304-
int y = node_min.Y;
304+
int y = node_min.Y - 1;
305305
int z = node_min.Z;
306306

307307
noise_filler_depth->perlinMap2D(x, z);
@@ -352,7 +352,7 @@ void MapgenV5::generateBaseTerrain() {
352352
u32 index2d = 0;
353353

354354
for(s16 z=node_min.Z; z<=node_max.Z; z++) {
355-
for(s16 y=node_min.Y; y<=node_max.Y; y++) {
355+
for(s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {
356356
u32 i = vm->m_area.index(node_min.X, y, z);
357357
for(s16 x=node_min.X; x<=node_max.X; x++, i++, index++, index2d++) {
358358
if(vm->m_data[i].getContent() != CONTENT_IGNORE)
@@ -366,6 +366,7 @@ void MapgenV5::generateBaseTerrain() {
366366
float h = water_level + noise_height->result[index2d];
367367
float d1 = contour(noise_cave1->result[index]);
368368
float d2 = contour(noise_cave2->result[index]);
369+
369370
if(noise_ground->result[index] * f < y - h) {
370371
if(y <= water_level)
371372
vm->m_data[i] = MapNode(c_water_source);
@@ -389,7 +390,7 @@ void MapgenV5::generateBlobs() {
389390
u32 index = 0;
390391

391392
for(s16 z=node_min.Z; z<=node_max.Z; z++) {
392-
for(s16 y=node_min.Y; y<=node_max.Y; y++) {
393+
for(s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {
393394
u32 i = vm->m_area.index(node_min.X, y, z);
394395
for(s16 x=node_min.X; x<=node_max.X; x++, i++, index++) {
395396
content_t c = vm->m_data[i].getContent();
@@ -431,7 +432,7 @@ void MapgenV5::generateBiomes() {
431432
Biome *biome = (Biome *)bmgr->get(biomemap[index]);
432433
s16 dfiller = biome->depth_filler + noise_filler_depth->result[index];
433434
s16 y0_top = biome->depth_top;
434-
s16 y0_filler = biome->depth_filler + biome->depth_top + dfiller;
435+
s16 y0_filler = biome->depth_top + dfiller;
435436

436437
s16 nplaced = 0;
437438
u32 i = vm->m_area.index(x, node_max.Y, z);
@@ -495,7 +496,7 @@ void MapgenV5::dustTopNodes() {
495496
if (biome->c_dust == CONTENT_IGNORE)
496497
continue;
497498

498-
s16 y = node_max.Y;
499+
s16 y = node_max.Y + 1;
499500
u32 vi = vm->m_area.index(x, y, z);
500501
for (; y >= node_min.Y; y--) {
501502
if (vm->m_data[vi].getContent() != CONTENT_AIR)
@@ -506,12 +507,13 @@ void MapgenV5::dustTopNodes() {
506507

507508
content_t c = vm->m_data[vi].getContent();
508509
if (c == biome->c_water && biome->c_dust_water != CONTENT_IGNORE) {
509-
if (y < node_min.Y)
510+
if (y < node_min.Y - 1)
510511
continue;
511512

512513
vm->m_data[vi] = MapNode(biome->c_dust_water);
513-
} else if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE) {
514-
if (y == node_max.Y)
514+
} else if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE
515+
&& c != biome->c_dust) {
516+
if (y == node_max.Y + 1)
515517
continue;
516518

517519
vm->m_area.add_y(em, vi, 1);

0 commit comments

Comments
 (0)
Please sign in to comment.