@@ -363,10 +363,7 @@ void MapgenV7::calculateNoise()
363
363
noise_ridge_uwater->perlinMap2D (x, z);
364
364
}
365
365
366
- if ((spflags & MGV7_MOUNTAINS) && node_max.Y >= MOUNTAIN_BASE) {
367
- noise_mountain->perlinMap3D (x, y, z);
368
- noise_mount_height->perlinMap2D (x, z);
369
- }
366
+ // Mountain noises are calculated in generateMountainTerrain()
370
367
371
368
noise_filler_depth->perlinMap2D (x, z);
372
369
noise_heat->perlinMap2D (x, z);
@@ -397,7 +394,7 @@ Biome *MapgenV7::getBiomeAtPoint(v3s16 p)
397
394
}
398
395
399
396
// needs to be updated
400
- float MapgenV7::baseTerrainLevelAtPoint (int x, int z)
397
+ float MapgenV7::baseTerrainLevelAtPoint (s16 x, s16 z)
401
398
{
402
399
float hselect = NoisePerlin2D (&noise_height_select->np , x, z, seed);
403
400
hselect = rangelim (hselect, 0.0 , 1.0 );
@@ -430,15 +427,15 @@ float MapgenV7::baseTerrainLevelFromMap(int index)
430
427
}
431
428
432
429
433
- bool MapgenV7::getMountainTerrainAtPoint (int x, int y, int z)
430
+ bool MapgenV7::getMountainTerrainAtPoint (s16 x, s16 y, s16 z)
434
431
{
435
432
float mnt_h_n = NoisePerlin2D (&noise_mount_height->np , x, z, seed);
436
433
float mnt_n = NoisePerlin3D (&noise_mountain->np , x, y, z, seed);
437
434
return mnt_n * mnt_h_n >= (float )y;
438
435
}
439
436
440
437
441
- bool MapgenV7::getMountainTerrainFromMap (int idx_xyz, int idx_xz, int y)
438
+ bool MapgenV7::getMountainTerrainFromMap (int idx_xyz, int idx_xz, s16 y)
442
439
{
443
440
float mounthn = noise_mount_height->result [idx_xz];
444
441
float mountn = noise_mountain->result [idx_xyz];
@@ -483,26 +480,30 @@ void MapgenV7::carveRivers() {
483
480
484
481
int MapgenV7::generateTerrain ()
485
482
{
486
- int ymax = generateBaseTerrain ();
483
+ s16 stone_surface_min_y;
484
+ s16 stone_surface_max_y;
485
+
486
+ generateBaseTerrain (&stone_surface_min_y, &stone_surface_max_y);
487
487
488
- if (spflags & MGV7_MOUNTAINS)
489
- ymax = generateMountainTerrain (ymax );
488
+ if (( spflags & MGV7_MOUNTAINS) && stone_surface_min_y < node_max. Y )
489
+ stone_surface_max_y = generateMountainTerrain (stone_surface_max_y );
490
490
491
491
if (spflags & MGV7_RIDGES)
492
492
generateRidgeTerrain ();
493
493
494
- return ymax ;
494
+ return stone_surface_max_y ;
495
495
}
496
496
497
497
498
- int MapgenV7::generateBaseTerrain ()
498
+ void MapgenV7::generateBaseTerrain (s16 *stone_surface_min_y, s16 *stone_surface_max_y )
499
499
{
500
500
MapNode n_air (CONTENT_AIR);
501
501
MapNode n_stone (c_stone);
502
502
MapNode n_water (c_water_source);
503
503
504
- int stone_surface_max_y = -MAP_GENERATION_LIMIT;
505
504
v3s16 em = vm->m_area .getExtent ();
505
+ s16 surface_min_y = MAP_GENERATION_LIMIT;
506
+ s16 surface_max_y = -MAP_GENERATION_LIMIT;
506
507
u32 index = 0 ;
507
508
508
509
for (s16 z = node_min.Z ; z <= node_max.Z ; z++)
@@ -513,8 +514,11 @@ int MapgenV7::generateBaseTerrain()
513
514
heightmap[index ] = surface_y;
514
515
ridge_heightmap[index ] = surface_y;
515
516
516
- if (surface_y > stone_surface_max_y)
517
- stone_surface_max_y = surface_y;
517
+ if (surface_y < surface_min_y)
518
+ surface_min_y = surface_y;
519
+
520
+ if (surface_y > surface_max_y)
521
+ surface_max_y = surface_y;
518
522
519
523
u32 i = vm->m_area .index (x, node_min.Y - 1 , z);
520
524
for (s16 y = node_min.Y - 1 ; y <= node_max.Y + 1 ; y++) {
@@ -530,14 +534,15 @@ int MapgenV7::generateBaseTerrain()
530
534
}
531
535
}
532
536
533
- return stone_surface_max_y;
537
+ *stone_surface_min_y = surface_min_y;
538
+ *stone_surface_max_y = surface_max_y;
534
539
}
535
540
536
541
537
- int MapgenV7::generateMountainTerrain (int ymax)
542
+ int MapgenV7::generateMountainTerrain (s16 ymax)
538
543
{
539
- if (node_max. Y < MOUNTAIN_BASE)
540
- return ymax ;
544
+ noise_mountain-> perlinMap3D (node_min. X , node_min. Y - 1 , node_min. Z );
545
+ noise_mount_height-> perlinMap2D (node_min. X , node_min. Z ) ;
541
546
542
547
MapNode n_stone (c_stone);
543
548
u32 j = 0 ;
@@ -848,7 +853,7 @@ void MapgenV7::addTopNodes()
848
853
#endif
849
854
850
855
851
- void MapgenV7::generateCaves (int max_stone_y)
856
+ void MapgenV7::generateCaves (s16 max_stone_y)
852
857
{
853
858
if (max_stone_y >= node_min.Y ) {
854
859
u32 index = 0 ;
0 commit comments