Fix MapgenV6::generateCaves possible division by 0 and misc. cosmetic fixes

This commit is contained in:
kwolekr 2013-03-30 21:24:37 -04:00
parent 414f0275cf
commit c517215bcf
3 changed files with 23 additions and 16 deletions

@ -928,20 +928,20 @@ void MapgenV6::growGrass() {
void MapgenV6::defineCave(Cave &cave, PseudoRandom ps, void MapgenV6::defineCave(Cave &cave, PseudoRandom ps,
v3s16 node_min, bool large_cave) { v3s16 node_min, bool large_cave) {
cave.min_tunnel_diameter = 2; cave.min_tunnel_diameter = 2;
cave.max_tunnel_diameter = ps.range(2,6); cave.max_tunnel_diameter = ps.range(2,6);
cave.dswitchint = ps.range(1,14); cave.dswitchint = ps.range(1,14);
cave.flooded = true; //large_cave && ps.range(0,4); cave.flooded = true; //large_cave && ps.range(0,4);
if(large_cave){ if (large_cave){
cave.part_max_length_rs = ps.range(2,4); cave.part_max_length_rs = ps.range(2,4);
cave.tunnel_routepoints = ps.range(5, ps.range(15,30)); cave.tunnel_routepoints = ps.range(5, ps.range(15,30));
cave.min_tunnel_diameter = 5; cave.min_tunnel_diameter = 5;
cave.max_tunnel_diameter = ps.range(7, ps.range(8,24)); cave.max_tunnel_diameter = ps.range(7, ps.range(8,24));
} else { } else {
cave.part_max_length_rs = ps.range(2,9); cave.part_max_length_rs = ps.range(2,9);
cave.tunnel_routepoints = ps.range(10, ps.range(15,30)); cave.tunnel_routepoints = ps.range(10, ps.range(15,30));
} }
cave.large_cave_is_flat = (ps.range(0,1) == 0); 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; rp.Z = ar.Z-1;
vec = rp - orp; 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; v3f fp = orp + vec * f;
fp.X += 0.1*ps.range(-10,10); fp.X += 0.1*ps.range(-10,10);

@ -822,6 +822,7 @@ private:
std::map<std::string, content_t> m_name_id_mapping_with_aliases; 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) // A mapping from groups to a list of content_ts (and their levels)
// that belong to it. Necessary for a direct lookup in getIds(). // that belong to it. Necessary for a direct lookup in getIds().
// Note: Not serialized.
std::map<std::string, GroupItems> m_group_to_items; std::map<std::string, GroupItems> m_group_to_items;
}; };

@ -727,7 +727,7 @@ static int l_register_ore(lua_State *L)
if (ore->clust_scarcity <= 0 || ore->clust_num_ores <= 0) { if (ore->clust_scarcity <= 0 || ore->clust_num_ores <= 0) {
errorstream << "register_ore: clust_scarcity and clust_num_ores" errorstream << "register_ore: clust_scarcity and clust_num_ores"
"must be greater than 0"; " must be greater than 0" << std::endl;
delete ore; delete ore;
return 0; return 0;
} }