Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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);
	}
}
Exemplo n.º 5
0
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);
}