mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Biome API: Fix absent water decorations and dust, in deep water (#7470)
Previously, the biomemap was 'BIOME_NONE' for a mapchunk column if a stone surface was not found in it, causing water surface decorations and water surface dust to fail. Store the biome ID of the biome calculated at a water surface and add it to the biomemap if the biomemap is 'BIOME_NONE' for the mapchunk column. The biome calculated at a stone surface still has priority for the biomemap entry, as it should. Edit an incorrect comment.
This commit is contained in:
		@@ -655,6 +655,7 @@ void MapgenBasic::generateBiomes()
 | 
			
		||||
	for (s16 z = node_min.Z; z <= node_max.Z; z++)
 | 
			
		||||
	for (s16 x = node_min.X; x <= node_max.X; x++, index++) {
 | 
			
		||||
		Biome *biome = NULL;
 | 
			
		||||
		biome_t water_biome_index = 0;
 | 
			
		||||
		u16 depth_top = 0;
 | 
			
		||||
		u16 base_filler = 0;
 | 
			
		||||
		u16 depth_water_top = 0;
 | 
			
		||||
@@ -697,6 +698,11 @@ void MapgenBasic::generateBiomes()
 | 
			
		||||
				if (biomemap[index] == BIOME_NONE && is_stone_surface)
 | 
			
		||||
					biomemap[index] = biome->index;
 | 
			
		||||
 | 
			
		||||
				// Store biome of first water surface detected, as a fallback
 | 
			
		||||
				// entry for the biomemap.
 | 
			
		||||
				if (water_biome_index == 0 && is_water_surface)
 | 
			
		||||
					water_biome_index = biome->index;
 | 
			
		||||
 | 
			
		||||
				depth_top = biome->depth_top;
 | 
			
		||||
				base_filler = MYMAX(depth_top +
 | 
			
		||||
					biome->depth_filler +
 | 
			
		||||
@@ -763,6 +769,11 @@ void MapgenBasic::generateBiomes()
 | 
			
		||||
 | 
			
		||||
			VoxelArea::add_y(em, vi, -1);
 | 
			
		||||
		}
 | 
			
		||||
		// If no stone surface detected in mapchunk column and a water surface
 | 
			
		||||
		// biome fallback exists, add it to the biomemap. This avoids water
 | 
			
		||||
		// surface decorations failing in deep water.
 | 
			
		||||
 		if (biomemap[index] == BIOME_NONE && water_biome_index != 0)
 | 
			
		||||
			biomemap[index] = water_biome_index;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -194,9 +194,9 @@ BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr,
 | 
			
		||||
	humidmap = noise_humidity->result;
 | 
			
		||||
 | 
			
		||||
	biomemap = new biome_t[m_csize.X * m_csize.Z];
 | 
			
		||||
	// Initialise with the ID of the default biome so that cavegen can get
 | 
			
		||||
	// biomes when biome generation (which calculates the biomemap IDs) is
 | 
			
		||||
	// disabled.
 | 
			
		||||
	// Initialise with the ID of 'BIOME_NONE' so that cavegen can get the
 | 
			
		||||
	// fallback biome when biome generation (which calculates the biomemap IDs)
 | 
			
		||||
	// is disabled.
 | 
			
		||||
	memset(biomemap, 0, sizeof(biome_t) * m_csize.X * m_csize.Z);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user