From fc89f467009822b5294967e3e58dbb2fd792bc44 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 13 Nov 2015 07:16:15 +0000 Subject: Decoration API: Fix missing low density decorations For a decoration count between 0 and 1 calculate a chance for 1 --- src/mg_decoration.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/mg_decoration.cpp') diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 1e50ba0de..5959af259 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -117,7 +117,15 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) float nval = (flags & DECO_USE_NOISE) ? NoisePerlin2D(&np, p2d_center.X, p2d_center.Y, mapseed) : fill_ratio; - u32 deco_count = area * MYMAX(nval, 0.f); + u32 deco_count = 0; + float deco_count_f = (float)area * nval; + if (deco_count_f >= 1.f) { + deco_count = deco_count_f; + } else if (deco_count_f > 0.f) { + // For low density decorations calculate a chance for 1 decoration + if (ps.range(1000) <= deco_count_f * 1000.f) + deco_count = 1; + } for (u32 i = 0; i < deco_count; i++) { s16 x = ps.range(p2d_min.X, p2d_max.X); -- cgit v1.2.3