aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2013-03-30 21:24:37 -0400
committerkwolekr <kwolekr@minetest.net>2013-03-30 21:24:37 -0400
commitc517215bcf3c92ccef1690ad871a234e547c8435 (patch)
tree9aee34f62b843fc61aae545e39bfa13aff517139
parent414f0275cfa014423394cc9c37ecb0151c3bd46c (diff)
downloadminetest-c517215bcf3c92ccef1690ad871a234e547c8435.tar.gz
minetest-c517215bcf3c92ccef1690ad871a234e547c8435.tar.bz2
minetest-c517215bcf3c92ccef1690ad871a234e547c8435.zip
Fix MapgenV6::generateCaves possible division by 0 and misc. cosmetic fixes
-rw-r--r--src/mapgen_v6.cpp36
-rw-r--r--src/nodedef.cpp1
-rw-r--r--src/scriptapi.cpp2
3 files changed, 23 insertions, 16 deletions
diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp
index 0b419617d..275d4b78f 100644
--- a/src/mapgen_v6.cpp
+++ b/src/mapgen_v6.cpp
@@ -928,20 +928,20 @@ void MapgenV6::growGrass() {
void MapgenV6::defineCave(Cave &cave, PseudoRandom ps,
v3s16 node_min, bool large_cave) {
- cave.min_tunnel_diameter = 2;
- cave.max_tunnel_diameter = ps.range(2,6);
- cave.dswitchint = ps.range(1,14);
- cave.flooded = true; //large_cave && ps.range(0,4);
- if(large_cave){
- cave.part_max_length_rs = ps.range(2,4);
- cave.tunnel_routepoints = ps.range(5, ps.range(15,30));
- cave.min_tunnel_diameter = 5;
- cave.max_tunnel_diameter = ps.range(7, ps.range(8,24));
- } else {
- cave.part_max_length_rs = ps.range(2,9);
- cave.tunnel_routepoints = ps.range(10, ps.range(15,30));
- }
- cave.large_cave_is_flat = (ps.range(0,1) == 0);
+ cave.min_tunnel_diameter = 2;
+ cave.max_tunnel_diameter = ps.range(2,6);
+ cave.dswitchint = ps.range(1,14);
+ cave.flooded = true; //large_cave && ps.range(0,4);
+ if (large_cave){
+ cave.part_max_length_rs = ps.range(2,4);
+ cave.tunnel_routepoints = ps.range(5, ps.range(15,30));
+ cave.min_tunnel_diameter = 5;
+ cave.max_tunnel_diameter = ps.range(7, ps.range(8,24));
+ } else {
+ cave.part_max_length_rs = ps.range(2,9);
+ cave.tunnel_routepoints = ps.range(10, ps.range(15,30));
+ }
+ cave.large_cave_is_flat = (ps.range(0,1) == 0);
}
@@ -1120,7 +1120,13 @@ void MapgenV6::generateCaves(int max_stone_y) {
rp.Z = ar.Z-1;
vec = rp - orp;
- for(float f=0; f<1.0; f+=1.0/vec.getLength())
+ float veclen = vec.getLength();
+ // As odd as it sounds, veclen is *exactly*
+ // 0.0 sometimes, causing a FPE
+ if (veclen == 0.0)
+ veclen = 1.0;
+
+ for(float f=0; f<1.0; f+=1.0/veclen)
{
v3f fp = orp + vec * f;
fp.X += 0.1*ps.range(-10,10);
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 59db68a36..ca8898907 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -822,6 +822,7 @@ private:
std::map<std::string, content_t> m_name_id_mapping_with_aliases;
// A mapping from groups to a list of content_ts (and their levels)
// that belong to it. Necessary for a direct lookup in getIds().
+ // Note: Not serialized.
std::map<std::string, GroupItems> m_group_to_items;
};
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index 80abffa2b..81fcc08d3 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -727,7 +727,7 @@ static int l_register_ore(lua_State *L)
if (ore->clust_scarcity <= 0 || ore->clust_num_ores <= 0) {
errorstream << "register_ore: clust_scarcity and clust_num_ores"
- "must be greater than 0";
+ " must be greater than 0" << std::endl;
delete ore;
return 0;
}