Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix Mapgen Valleys getSpawnLevelAtPoint() (#7756)
  • Loading branch information
Treer authored and paramat committed Oct 2, 2018
1 parent dc94838 commit 84a5fa0
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions src/mapgen/mapgen_valleys.cpp
Expand Up @@ -393,18 +393,27 @@ float MapgenValleys::terrainLevelFromNoise(TerrainNoise *tn)
float MapgenValleys::adjustedTerrainLevelFromNoise(TerrainNoise *tn)
{
float mount = terrainLevelFromNoise(tn);
float result = mount;
s16 y_start = myround(mount);

for (s16 y = y_start; y <= y_start + 1000; y++) {
float fill =
float fill =
NoisePerlin3D(&noise_inter_valley_fill->np, tn->x, y_start, tn->z, seed);
bool is_ground = fill * *tn->slope >= y_start - mount;
s16 search_direction = is_ground ? 1 : -1;

for (s16 i = 1; i <= 1000; i++) {
s16 y = y_start + i * search_direction;
fill =
NoisePerlin3D(&noise_inter_valley_fill->np, tn->x, y, tn->z, seed);
if (fill * *tn->slope < y - mount) {
mount = std::fmax((float)(y - 1), mount);

bool was_ground = is_ground;
is_ground = fill * *tn->slope >= y - mount;
if (is_ground)
result = y;
if (is_ground != was_ground)
break;
}
}

return mount;
return result;
}


Expand All @@ -420,7 +429,8 @@ int MapgenValleys::getSpawnLevelAtPoint(v2s16 p)
level_at_point > water_level + 16)
return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point

return level_at_point;
// +1 to account for biome dust that can be 1 node deep
return level_at_point + 1;
}


Expand Down

0 comments on commit 84a5fa0

Please sign in to comment.