diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index 5a4501693..beb457c0f 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -297,7 +297,11 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po // Carefully tune pseudorandom seed variation to avoid single node dither // and create larger scale blending patterns similar to horizontal biome // blend. - const u64 seed = pos.Y + (heat + humidity) * 0.9f; + // The calculation can be a negative floating point number, which is an + // undefined behavior if assigned to unsigned integer. Cast the result + // into signed integer before it is casted into unsigned integer to + // eliminate the undefined behavior. + const u64 seed = static_cast(pos.Y + (heat + humidity) * 0.9f); PcgRandom rng(seed); if (biome_closest_blend && dist_min_blend <= dist_min && diff --git a/src/nodedef.cpp b/src/nodedef.cpp index c707511ed..7efac7fc0 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -356,6 +356,8 @@ void ContentFeatures::reset() has_on_construct = false; has_on_destruct = false; has_after_destruct = false; + floats = false; + /* Actual data diff --git a/src/tool.cpp b/src/tool.cpp index 36ad1c608..3f3c2f7bd 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -416,8 +416,7 @@ DigParams getDigParams(const ItemGroupList &groups, // The actual number of uses increases // exponentially with leveldiff. // If the levels are equal, real_uses equals cap.uses. - u32 real_uses = cap.uses * pow(3.0, leveldiff); - real_uses = MYMIN(real_uses, U16_MAX); + const u32 real_uses = std::min(cap.uses * pow(3.0, leveldiff), U16_MAX); result_wear = calculateResultWear(real_uses, initial_wear); result_main_group = groupname; }