fCraft.VanillaMapGenState.Carve C# (CSharp) Method

Carve() private method

private Carve ( ) : void
return void
        void Carve() {
            Random carveRand = new Random( random.Next() );
            int caveDensity = (int)Math.Round( BaseCaveDensity/genParams.CaveDensity );
            int maxCaves = genParams.MapWidth*genParams.MapLength*genParams.MapHeight/caveDensity/64*2;
            for( int i = 0; i < maxCaves; i++ ) {
                double startX = carveRand.NextDouble()*genParams.MapWidth;
                double startY = carveRand.NextDouble()*genParams.MapLength;
                double startZ = carveRand.NextDouble()*genParams.MapHeight;
                double f9 = carveRand.NextDouble()*Math.PI*2;
                double f10 = 0;
                double f11 = carveRand.NextDouble()*Math.PI*2;
                double f12 = 0;
                double f13 = carveRand.NextDouble()*carveRand.NextDouble();
                int caveLength = (int)((carveRand.NextDouble() + carveRand.NextDouble())*200);
                for( int step = 0; step < caveLength; step++ ) {
                    startX += Math.Sin( f9 )*Math.Cos( f11 );
                    startY += Math.Cos( f9 )*Math.Cos( f11 );
                    startZ += Math.Sin( f11 );
                    f9 += f10*0.2;
                    f10 = f10*0.9 + (carveRand.NextDouble() - carveRand.NextDouble());
                    f11 = (f11 + f12*0.5)*0.5;
                    f12 = f12*0.75 + (carveRand.NextDouble() - carveRand.NextDouble());
                    if( carveRand.NextDouble() < 0.25 )
                        continue;
                    double f1 = startX + (carveRand.NextDouble()*4 - 2)*0.2;
                    double f2 = startZ + (carveRand.NextDouble()*4 - 2)*0.2;
                    double f5 = startY + (carveRand.NextDouble()*4 - 2)*0.2;
                    double f6 = (genParams.MapHeight - f2)/genParams.MapHeight;
                    f6 = 1.2 + (f6*3.5 + 1)*f13;
                    f6 = Math.Sin( step*Math.PI/caveLength )*f6;
                    for( int x = (int)(f1 - f6); x <= (int)(f1 + f6); x++ ) {
                        for( int z = (int)(f2 - f6); z <= (int)(f2 + f6); z++ ) {
                            for( int y = (int)(f5 - f6); y <= (int)(f5 + f6); y++ ) {
                                double f14 = x - f1;
                                double f15 = z - f2;
                                double f16 = y - f5;
                                f14 = f14*f14 + f15*f15*2 + f16*f16;
                                if( (f14 >= f6*f6) ||
                                    (x < 1) || (z < 1) || (y < 1) ||
                                    (x >= genParams.MapWidth - 1) || (z >= genParams.MapHeight - 1) ||
                                    (y >= genParams.MapLength - 1) ) {
                                    continue;
                                }
                                int index = Index( x, y, z );
                                if( (Block)blocks[index] == Block.Stone ) {
                                    blocks[index] = (byte)Block.Air;
                                }
                            }
                        }
                    }
                }
            }
        }