@@ -63,7 +63,7 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge_) {
63
63
// amount of elements to skip for the next index
64
64
// for noise/height/biome maps (not vmanip)
65
65
this ->ystride = csize.X ;
66
- this ->zstride = csize.X * csize.Y ;
66
+ this ->zstride = csize.X * ( csize.Y + 2 ) ;
67
67
68
68
this ->biomemap = new u8[csize.X * csize.Z ];
69
69
this ->heightmap = new s16[csize.X * csize.Z ];
@@ -78,11 +78,11 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge_) {
78
78
noise_height = new Noise (&sp->np_height , seed, csize.X , csize.Z );
79
79
80
80
// 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 );
86
86
87
87
// Biome noise
88
88
noise_heat = new Noise (bmgr->np_heat , seed, csize.X , csize.Z );
@@ -291,8 +291,8 @@ void MapgenV5::makeChunk(BlockMakeData *data) {
291
291
292
292
// Calculate lighting
293
293
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);
296
296
297
297
this ->generating = false ;
298
298
}
@@ -301,7 +301,7 @@ void MapgenV5::makeChunk(BlockMakeData *data) {
301
301
void MapgenV5::calculateNoise () {
302
302
// TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
303
303
int x = node_min.X ;
304
- int y = node_min.Y ;
304
+ int y = node_min.Y - 1 ;
305
305
int z = node_min.Z ;
306
306
307
307
noise_filler_depth->perlinMap2D (x, z);
@@ -352,7 +352,7 @@ void MapgenV5::generateBaseTerrain() {
352
352
u32 index2d = 0 ;
353
353
354
354
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++) {
356
356
u32 i = vm->m_area .index (node_min.X , y, z);
357
357
for (s16 x=node_min.X ; x<=node_max.X ; x++, i++, index ++, index2d++) {
358
358
if (vm->m_data [i].getContent () != CONTENT_IGNORE)
@@ -366,6 +366,7 @@ void MapgenV5::generateBaseTerrain() {
366
366
float h = water_level + noise_height->result [index2d];
367
367
float d1 = contour (noise_cave1->result [index ]);
368
368
float d2 = contour (noise_cave2->result [index ]);
369
+
369
370
if (noise_ground->result [index ] * f < y - h) {
370
371
if (y <= water_level)
371
372
vm->m_data [i] = MapNode (c_water_source);
@@ -389,7 +390,7 @@ void MapgenV5::generateBlobs() {
389
390
u32 index = 0 ;
390
391
391
392
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++) {
393
394
u32 i = vm->m_area .index (node_min.X , y, z);
394
395
for (s16 x=node_min.X ; x<=node_max.X ; x++, i++, index ++) {
395
396
content_t c = vm->m_data [i].getContent ();
@@ -431,7 +432,7 @@ void MapgenV5::generateBiomes() {
431
432
Biome *biome = (Biome *)bmgr->get (biomemap[index ]);
432
433
s16 dfiller = biome->depth_filler + noise_filler_depth->result [index ];
433
434
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;
435
436
436
437
s16 nplaced = 0 ;
437
438
u32 i = vm->m_area .index (x, node_max.Y , z);
@@ -495,7 +496,7 @@ void MapgenV5::dustTopNodes() {
495
496
if (biome->c_dust == CONTENT_IGNORE)
496
497
continue ;
497
498
498
- s16 y = node_max.Y ;
499
+ s16 y = node_max.Y + 1 ;
499
500
u32 vi = vm->m_area .index (x, y, z);
500
501
for (; y >= node_min.Y ; y--) {
501
502
if (vm->m_data [vi].getContent () != CONTENT_AIR)
@@ -506,12 +507,13 @@ void MapgenV5::dustTopNodes() {
506
507
507
508
content_t c = vm->m_data [vi].getContent ();
508
509
if (c == biome->c_water && biome->c_dust_water != CONTENT_IGNORE) {
509
- if (y < node_min.Y )
510
+ if (y < node_min.Y - 1 )
510
511
continue ;
511
512
512
513
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 )
515
517
continue ;
516
518
517
519
vm->m_area .add_y (em, vi, 1 );
0 commit comments