@@ -524,6 +524,10 @@ MapgenBasic::~MapgenBasic()
524
524
525
525
MgStoneType MapgenBasic::generateBiomes ()
526
526
{
527
+ // can't generate biomes without a biome generator!
528
+ assert (biomegen);
529
+ assert (biomemap);
530
+
527
531
v3s16 em = vm->m_area .getExtent ();
528
532
u32 index = 0 ;
529
533
MgStoneType stone_type = MGSTONE_STONE;
@@ -546,6 +550,8 @@ MgStoneType MapgenBasic::generateBiomes()
546
550
bool river_water_above = c_above == c_river_water_source;
547
551
bool water_above = c_above == c_water_source || river_water_above;
548
552
553
+ biomemap[index ] = BIOME_NONE;
554
+
549
555
// If there is air or water above enable top/filler placement, otherwise force
550
556
// nplaced to stone level by setting a number exceeding any possible filler depth.
551
557
u16 nplaced = (air_above || water_above) ? 0 : U16_MAX;
@@ -560,11 +566,19 @@ MgStoneType MapgenBasic::generateBiomes()
560
566
// 1. At the surface of stone below air or water.
561
567
// 2. At the surface of water below air.
562
568
// 3. When stone or water is detected but biome has not yet been calculated.
563
- if ((c == c_stone && (air_above || water_above || !biome))
564
- || ((c == c_water_source || c == c_river_water_source)
565
- && (air_above || !biome))) {
569
+ bool is_stone_surface = (c == c_stone) &&
570
+ (air_above || water_above || !biome);
571
+
572
+ bool is_water_surface =
573
+ (c == c_water_source || c == c_river_water_source) &&
574
+ (air_above || !biome);
575
+
576
+ if (is_stone_surface || is_water_surface) {
566
577
biome = biomegen->getBiomeAtIndex (index , y);
567
578
579
+ if (biomemap[index ] == BIOME_NONE && is_stone_surface)
580
+ biomemap[index ] = biome->index ;
581
+
568
582
depth_top = biome->depth_top ;
569
583
base_filler = MYMAX (depth_top +
570
584
biome->depth_filler +
0 commit comments