@@ -58,7 +58,7 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
58
58
// // amount of elements to skip for the next index
59
59
// // for noise/height/biome maps (not vmanip)
60
60
this ->ystride = csize.X ;
61
- this ->zstride = csize.X * csize.Y ;
61
+ this ->zstride = csize.X * ( csize.Y + 2 ) ;
62
62
63
63
this ->biomemap = new u8[csize.X * csize.Z ];
64
64
this ->heightmap = new s16[csize.X * csize.Z ];
@@ -77,10 +77,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
77
77
noise_ridge_uwater = new Noise (&sp->np_ridge_uwater , seed, csize.X , csize.Z );
78
78
79
79
// // 3d terrain noise
80
- noise_mountain = new Noise (&sp->np_mountain , seed, csize.X , csize.Y , csize.Z );
81
- noise_ridge = new Noise (&sp->np_ridge , seed, csize.X , csize.Y , csize.Z );
82
- noise_cave1 = new Noise (&sp->np_cave1 , seed, csize.X , csize.Y , csize.Z );
83
- noise_cave2 = new Noise (&sp->np_cave2 , seed, csize.X , csize.Y , csize.Z );
80
+ noise_mountain = new Noise (&sp->np_mountain , seed, csize.X , csize.Y + 2 , csize.Z );
81
+ noise_ridge = new Noise (&sp->np_ridge , seed, csize.X , csize.Y + 2 , csize.Z );
82
+ noise_cave1 = new Noise (&sp->np_cave1 , seed, csize.X , csize.Y + 2 , csize.Z );
83
+ noise_cave2 = new Noise (&sp->np_cave2 , seed, csize.X , csize.Y + 2 , csize.Z );
84
84
85
85
// // Biome noise
86
86
noise_heat = new Noise (¶ms->np_biome_heat , seed, csize.X , csize.Z );
@@ -314,7 +314,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
314
314
updateLiquid (&data->transforming_liquid , full_node_min, full_node_max);
315
315
316
316
if (flags & MG_LIGHT)
317
- calcLighting (node_min, node_max);
317
+ calcLighting (node_min - v3s16 (0 , 1 , 0 ), node_max + v3s16 (0 , 1 , 0 ),
318
+ full_node_min, full_node_max);
319
+
318
320
// setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
319
321
// node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
320
322
@@ -326,7 +328,7 @@ void MapgenV7::calculateNoise()
326
328
{
327
329
// TimeTaker t("calculateNoise", NULL, PRECISION_MICRO);
328
330
int x = node_min.X ;
329
- int y = node_min.Y ;
331
+ int y = node_min.Y - 1 ;
330
332
int z = node_min.Z ;
331
333
332
334
noise_terrain_persist->perlinMap2D (x, z);
@@ -489,8 +491,8 @@ int MapgenV7::generateBaseTerrain()
489
491
if (surface_y > stone_surface_max_y)
490
492
stone_surface_max_y = surface_y;
491
493
492
- u32 i = vm->m_area .index (x, node_min.Y , z);
493
- for (s16 y = node_min.Y ; y <= node_max.Y ; y++) {
494
+ u32 i = vm->m_area .index (x, node_min.Y - 1 , z);
495
+ for (s16 y = node_min.Y - 1 ; y <= node_max.Y + 1 ; y++) {
494
496
if (vm->m_data [i].getContent () == CONTENT_IGNORE) {
495
497
if (y <= surface_y)
496
498
vm->m_data [i] = n_stone;
@@ -516,7 +518,7 @@ int MapgenV7::generateMountainTerrain(int ymax)
516
518
u32 j = 0 ;
517
519
518
520
for (s16 z = node_min.Z ; z <= node_max.Z ; z++)
519
- for (s16 y = node_min.Y ; y <= node_max.Y ; y++) {
521
+ for (s16 y = node_min.Y - 1 ; y <= node_max.Y + 1 ; y++) {
520
522
u32 vi = vm->m_area .index (node_min.X , y, z);
521
523
for (s16 x = node_min.X ; x <= node_max.X ; x++) {
522
524
int index = (z - node_min.Z ) * csize.X + (x - node_min.X );
@@ -549,7 +551,7 @@ void MapgenV7::generateRidgeTerrain()
549
551
float width = 0.2 ; // TODO: figure out acceptable perlin noise values
550
552
551
553
for (s16 z = node_min.Z ; z <= node_max.Z ; z++)
552
- for (s16 y = node_min.Y ; y <= node_max.Y ; y++) {
554
+ for (s16 y = node_min.Y - 1 ; y <= node_max.Y + 1 ; y++) {
553
555
u32 vi = vm->m_area .index (node_min.X , y, z);
554
556
for (s16 x = node_min.X ; x <= node_max.X ; x++, index ++, vi++) {
555
557
int j = (z - node_min.Z ) * csize.X + (x - node_min.X );
@@ -583,10 +585,6 @@ bool MapgenV7::generateBiomes(float *heat_map, float *humidity_map)
583
585
if (node_max.Y < water_level)
584
586
return false ;
585
587
586
- MapNode n_air (CONTENT_AIR);
587
- MapNode n_stone (c_stone);
588
- MapNode n_water (c_water_source);
589
-
590
588
v3s16 em = vm->m_area .getExtent ();
591
589
u32 index = 0 ;
592
590
bool desert_stone = false ;
@@ -608,16 +606,6 @@ bool MapgenV7::generateBiomes(float *heat_map, float *humidity_map)
608
606
for (s16 y = node_max.Y ; y >= node_min.Y ; y--) {
609
607
content_t c = vm->m_data [i].getContent ();
610
608
611
- // It could be the case that the elevation is equal to the chunk
612
- // boundary, but the chunk above has not been generated yet
613
- if (y == node_max.Y && c_above == CONTENT_IGNORE &&
614
- y == heightmap[index ] && c == c_stone) {
615
- int j = (z - node_min.Z ) * zstride +
616
- (y - node_min.Y ) * ystride +
617
- (x - node_min.X );
618
- have_air = !getMountainTerrainFromMap (j, index , y);
619
- }
620
-
621
609
if (c != CONTENT_IGNORE && c != CONTENT_AIR && (y == node_max.Y || have_air)) {
622
610
biome = bmgr->getBiome (heat_map[index ], humidity_map[index ], y);
623
611
dfiller = biome->depth_filler + noise_filler_depth->result [index ];
@@ -691,27 +679,25 @@ void MapgenV7::dustTopNodes()
691
679
if (biome->c_dust == CONTENT_IGNORE)
692
680
continue ;
693
681
694
- s16 y_full_max = full_node_max.Y ;
695
- u32 vi_full_max = vm->m_area .index (x, y_full_max, z);
696
- content_t c_full_max = vm->m_data [vi_full_max].getContent ();
682
+ u32 vi = vm->m_area .index (x, full_node_max.Y , z);
683
+ content_t c_full_max = vm->m_data [vi].getContent ();
697
684
s16 y_start;
698
685
699
686
if (c_full_max == CONTENT_AIR) {
700
- y_start = y_full_max - 1 ;
687
+ y_start = full_node_max. Y - 1 ;
701
688
} else if (c_full_max == CONTENT_IGNORE) {
702
- s16 y_max = node_max.Y ;
703
- u32 vi_max = vm->m_area .index (x, y_max, z);
704
- content_t c_max = vm->m_data [vi_max].getContent ();
689
+ vi = vm->m_area .index (x, node_max.Y + 1 , z);
690
+ content_t c_max = vm->m_data [vi].getContent ();
705
691
706
692
if (c_max == CONTENT_AIR)
707
- y_start = y_max - 1 ;
693
+ y_start = node_max. Y ;
708
694
else
709
695
continue ;
710
696
} else {
711
697
continue ;
712
698
}
713
699
714
- u32 vi = vm->m_area .index (x, y_start, z);
700
+ vi = vm->m_area .index (x, y_start, z);
715
701
for (s16 y = y_start; y >= node_min.Y - 1 ; y--) {
716
702
if (vm->m_data [vi].getContent () != CONTENT_AIR)
717
703
break ;
@@ -831,7 +817,7 @@ void MapgenV7::generateCaves(int max_stone_y)
831
817
u32 index2d = 0 ;
832
818
833
819
for (s16 z = node_min.Z ; z <= node_max.Z ; z++) {
834
- for (s16 y = node_min.Y ; y <= node_max.Y ; y++) {
820
+ for (s16 y = node_min.Y - 1 ; y <= node_max.Y + 1 ; y++) {
835
821
u32 i = vm->m_area .index (node_min.X , y, z);
836
822
for (s16 x = node_min.X ; x <= node_max.X ;
837
823
x++, i++, index ++, index2d++) {
0 commit comments