v3s16 rand_ortho_dir(PseudoRandom &random) { if (random.next() % 2 == 0) return random.next() % 2 ? v3s16(-1, 0, 0) : v3s16(1, 0, 0); else return random.next() % 2 ? v3s16(0, 0, -1) : v3s16(0, 0, 1); }
void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0, PseudoRandom ps ,TreeDef &tree_definition) { MapNode leavesnode=tree_definition.leavesnode; if (ps.range(1,100) > 100-tree_definition.leaves2_chance) leavesnode=tree_definition.leaves2node; v3s16 p1 = v3s16(myround(p0.X),myround(p0.Y),myround(p0.Z)); if(vmanip.m_area.contains(p1) == false) return; u32 vi = vmanip.m_area.index(p1); if(vmanip.m_data[vi].getContent() != CONTENT_AIR && vmanip.m_data[vi].getContent() != CONTENT_IGNORE) return; if (tree_definition.fruit_chance>0) { if (ps.range(1,100) > 100-tree_definition.fruit_chance) vmanip.m_data[vmanip.m_area.index(p1)] = tree_definition.fruitnode; else vmanip.m_data[vmanip.m_area.index(p1)] = leavesnode; } else if (ps.range(1,100) > 20) vmanip.m_data[vmanip.m_area.index(p1)] = leavesnode; }
v3s16 random_turn(PseudoRandom &random, v3s16 olddir) { int turn = random.range(0, 2); v3s16 dir; if (turn == 0) // Go straight dir = olddir; else if (turn == 1) // Turn right dir = turn_xz(olddir, 0); else // Turn left dir = turn_xz(olddir, 1); return dir; }
v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs) { // Make diagonal directions somewhat rare if (diagonal_dirs && (random.next() % 4 == 0)) { v3s16 dir; int trycount = 0; do { trycount++; dir = v3s16(random.next() % 3 - 1, 0, random.next() % 3 - 1); } while ((dir.X == 0 && dir.Z == 0) && trycount < 10); return dir; } else { if (random.next() % 2 == 0) return random.next() % 2 ? v3s16(-1, 0, 0) : v3s16(1, 0, 0); else return random.next() % 2 ? v3s16(0, 0, -1) : v3s16(0, 0, 1); } }
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); }