void GenerateZone_FlatAcidResistant( VoxelSector VoxelSector, int HeightOffset, int Sector_x, int Sector_y, int Sector_z ) { int y, Voxel_y; uint i; ushort[] TypeTable = new ushort[VoxelSector.ZVOXELBLOCSIZE_Y]; bool[] MineralInclude = new bool[VoxelSector.ZVOXELBLOCSIZE_Y]; ushort Type; ushort[] Data = VoxelSector.Data.Data; VoxelSector.Flag_Void_Transparent = true; VoxelSector.Flag_Void_Regular = true; // Probabilizer InclusionProbabilizer Probabilizer = new InclusionProbabilizer(); RandomGen.Reset(); random_seed[0] = Sector_x; random_seed[1] = Sector_y; random_seed[2] = Sector_z; random_seed[3] = 0; int Deepness = Sector_y; // Deepness = -2; switch( Deepness ) { case -1: default: Probabilizer.AddEntry( 60, 50.0f, 1.0f ); // Charbon Probabilizer.AddEntry( 112, 50.0f, 1.0f ); // Cuivre Probabilizer.AddEntry( 127, 50.0f, 0.4f ); // Etain Probabilizer.AddEntry( 44, 0, 0.10f ); // Vitrail // Rare ores Probabilizer.AddEntry( 74, 0, 0.05f ); // Fer Probabilizer.AddEntry( 26, 0, 0.1f ); // Or break; case -2: Probabilizer.AddEntry( 74, 50.0f, 1.0f ); // Fer Probabilizer.AddEntry( 60, 50.0f, 1.0f ); // Charbon Probabilizer.AddEntry( 26, 0, 0.1f ); // Or Probabilizer.AddEntry( 110, 50.0f, 0.2f ); // Nickel Probabilizer.AddEntry( 121, 50.0f, 0.2f ); // Chrome break; } uint FenceBound = Probabilizer.ComputeProbabilities( 1.0f ); // Random Seed for that particular sector. RandomGen.Reset(); random_seed[0] = Sector_x; random_seed[1] = Sector_z; random_seed[2] = 0; random_seed[3] = 0; // Layers of ground. for( y = 0, Voxel_y = ( Sector_y << VoxelSector.ZVOXELBLOCSHIFT_Y ) - HeightOffset; y < VoxelSector.ZVOXELBLOCSIZE_Y; y++, Voxel_y++ ) { Type = 0; if( Voxel_y >= 0 ) Type = 0; else { Type = 10; VoxelSector.Flag_Void_Regular = false; } TypeTable[y] = Type; //TypeTable[y]= 0; // debug MineralInclude[y] = ( ( Voxel_y < -5L ) && ( Type != 0 ) ); } // If sector is void, fill it more quickly if( VoxelSector.Flag_Void_Regular ) { for( i = 0; i < ( VoxelSector.ZVOXELBLOCSIZE_X * VoxelSector.ZVOXELBLOCSIZE_Y * VoxelSector.ZVOXELBLOCSIZE_Z ); i++ ) Data[i] = 0; return; } // Fill zone with inclusions ushort LastMineral = 0; uint Num = 0; for( i = 0; i < ( VoxelSector.ZVOXELBLOCSIZE_X * VoxelSector.ZVOXELBLOCSIZE_Y * VoxelSector.ZVOXELBLOCSIZE_Z ); i++ ) { Data[i] = TypeTable[i & VoxelSector.ZVOXELBLOCMASK_Y]; if( MineralInclude[i & VoxelSector.ZVOXELBLOCMASK_Y] ) { if( Probabilizer.IsBelowFence( RandomGen ) ) { Num = Probabilizer.GetTypeNum( RandomGen ); Data[i] = LastMineral = Probabilizer.GetVoxelType( Num ); } else if( LastMineral != 0 ) { if( Probabilizer.AllowRepeat( Num, RandomGen ) ) Data[i] = LastMineral; else LastMineral = 0; } // LastMineral = 0; } } }
void GenerateZone_Flat2( VoxelSector VoxelSector, int HeightOffset, int Sector_x, int Sector_y, int Sector_z ) { int y, Voxel_y; uint i; ushort[] TypeTable = new ushort[VoxelSector.ZVOXELBLOCSIZE_Y]; bool[] MineralInclude = new bool[VoxelSector.ZVOXELBLOCSIZE_Y]; ushort Type; ushort[] Data = VoxelSector.Data.Data; VoxelSector.Flag_Void_Transparent = true; VoxelSector.Flag_Void_Regular = true; // Probabilizer InclusionProbabilizer Probabilizer = new InclusionProbabilizer(); int Deepness = Sector_y; RandomGen.Reset(); random_seed[0] = Sector_x; random_seed[1] = Sector_y; random_seed[2] = Sector_z; random_seed[3] = 0; switch( Deepness ) { case -1: default: Probabilizer.AddEntry( 44, 0, 0.1f ); // Matériau X Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 112, 50, 1.0f ); // Cuivre Probabilizer.AddEntry( 127, 50, 0.4f ); // Etain // Rare ores Probabilizer.AddEntry( 26, 0, 0.1f ); // Or Probabilizer.AddEntry( 74, 0, 0.05f ); // Fer break; case -2: Probabilizer.AddEntry( 26, 0, 0.1f ); // Or Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 0.1f ); // Fer Probabilizer.AddEntry( 110, 50, 0.2f ); // Nickel Probabilizer.AddEntry( 121, 50, 0.2f ); // Chrome break; case -3: Probabilizer.AddEntry( 26, 0, 0.1f ); // Or Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 1.0f ); // Fer Probabilizer.AddEntry( 110, 50, 0.5f ); // Nickel Probabilizer.AddEntry( 121, 50, 0.5f ); // Chrome Probabilizer.AddEntry( 150, 50, 0.5f ); // Plomb break; case -4: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 47, 50, 0.05f ); // Emeraude Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 109, 50, 0.04f ); // Diamond Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 127, 50, 1.0f ); // Etain Probabilizer.AddEntry( 150, 50, 1.0f ); // Plomb break; case -5: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 109, 50, 0.05f ); // Diamond Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 150, 50, 1.0f ); // Plomb break; case -6: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 47, 50, 0.045f ); // Emeraude Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 109, 50, 0.1f ); // Diamond Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 150, 50, 1.0f ); // Plomb break; case -7: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 150, 50, 1.0f ); // Plomb break; case -8: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 46, 50, 0.05f ); // Rose des sables Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 111, 50, 0.05f ); // Uranium Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 150, 50, 1.0f ); // Plomb break; case -9: Probabilizer.AddEntry( 26, 0, 0.2f ); // Or Probabilizer.AddEntry( 27, 50, 0.05f ); // Amethyste Probabilizer.AddEntry( 60, 50, 1.0f ); // Charbon Probabilizer.AddEntry( 74, 50, 2.0f ); // Fer Probabilizer.AddEntry( 110, 50, 1.0f ); // Nickel Probabilizer.AddEntry( 111, 50, 0.05f ); // Uranium Probabilizer.AddEntry( 121, 50, 1.0f ); // Chrome Probabilizer.AddEntry( 122, 50, 0.05f ); // Titanium Probabilizer.AddEntry( 197, 50, 1.0f ); // Aluminium Ore break; case -10: // Water level Probabilizer.AddEntry( 10, 2, 15.0f ); break; /* case -1: default: Probabilizer.AddEntry(60, 50, 1.0); // Charbon Probabilizer.AddEntry(112,1, 1.0); // Cuivre Probabilizer.AddEntry(127,1, 0.4); // Etain Probabilizer.AddEntry( 44, 0, 0.10); // Vitrail // Rare ores Probabilizer.AddEntry( 74, 0, 0.05); // Fer Probabilizer.AddEntry( 26, 0, 0.1); // Or break; case -2: Probabilizer.AddEntry( 74, 50, 1.0); // Fer Probabilizer.AddEntry(60, 50, 1.0); // Charbon Probabilizer.AddEntry( 26, 0, 0.1); // Or Probabilizer.AddEntry(110, 50, 0.2); // Nickel Probabilizer.AddEntry(121, 50, 0.2); // Chrome break; */ } uint FenceBound = Probabilizer.ComputeProbabilities( 1.0f ); // Layers of ground. for( y = 0, Voxel_y = ( Sector_y << VoxelSector.ZVOXELBLOCSHIFT_Y ) - HeightOffset; y < VoxelSector.ZVOXELBLOCSIZE_Y; y++, Voxel_y++ ) { Type = 0; if( Voxel_y >= 0 ) Type = 0; else if( Voxel_y < -2176 ) { Type = 126; VoxelSector.Flag_Void_Regular = false; } // Bleu else if( Voxel_y < -2043 ) { Type = 3; VoxelSector.Flag_Void_Regular = false; } // Vert else if( Voxel_y < -2038 ) { Type = 52; VoxelSector.Flag_Void_Regular = false; } // Lave else if( Voxel_y < -2028 ) { Type = 0; VoxelSector.Flag_Void_Regular = false; } // Vide else if( Voxel_y < -1984 ) { Type = 3; VoxelSector.Flag_Void_Regular = false; } // Vert else if( Voxel_y < -1856 ) { Type = 5; VoxelSector.Flag_Void_Regular = false; } // Bleu ciel else if( Voxel_y < -1728 ) { Type = 2; VoxelSector.Flag_Void_Regular = false; } // Orange else if( Voxel_y < -1600 ) { Type = 3; VoxelSector.Flag_Void_Regular = false; } // Vert else if( Voxel_y < -1472 ) { Type = 1; VoxelSector.Flag_Void_Regular = false; } // Bleu else if( Voxel_y < -1339 ) { Type = 10; VoxelSector.Flag_Void_Regular = false; } // Blanc else if( Voxel_y < -1334 ) { Type = 86; VoxelSector.Flag_Void_Regular = false; VoxelSector.Flag_IsActiveVoxels = true; } // Acide else if( Voxel_y < -1324 ) { Type = 0; VoxelSector.Flag_Void_Regular = false; } // Vide else if( Voxel_y < -1280 ) { Type = 10; VoxelSector.Flag_Void_Regular = false; } // Blanc else if( Voxel_y < -1152 ) { Type = 5; VoxelSector.Flag_Void_Regular = false; } // Bleu ciel else if( Voxel_y < -1024 ) { Type = 2; VoxelSector.Flag_Void_Regular = false; } // Orange else if( Voxel_y < -896 ) { Type = 1; VoxelSector.Flag_Void_Regular = false; } // Vert else if( Voxel_y < -768 ) { Type = 1; VoxelSector.Flag_Void_Regular = false; } // Bleu else if( Voxel_y < -635 ) { Type = 10; VoxelSector.Flag_Void_Regular = false; } // Blanc else if( Voxel_y < -630 ) { Type = 85; VoxelSector.Flag_Void_Regular = false; VoxelSector.Flag_IsActiveVoxels = true; VoxelSector.Flag_NeedSortedRendering = true; } // Eau else if( Voxel_y < -620 ) { Type = 0; VoxelSector.Flag_Void_Regular = false; } // Vide else if( Voxel_y < -576 ) { Type = 10; VoxelSector.Flag_Void_Regular = false; } // Blanc else if( Voxel_y < -512 ) { Type = 7; VoxelSector.Flag_Void_Regular = false; } // Rose else if( Voxel_y < -448 ) { Type = 9; VoxelSector.Flag_Void_Regular = false; } // Gris else if( Voxel_y < -384 ) { Type = 8; VoxelSector.Flag_Void_Regular = false; } // Vert citron else if( Voxel_y < -320 ) { Type = 4; VoxelSector.Flag_Void_Regular = false; } // Rouge else if( Voxel_y < -256 ) { Type = 6; VoxelSector.Flag_Void_Regular = false; } // Jaune else if( Voxel_y < -192 ) { Type = 5; VoxelSector.Flag_Void_Regular = false; } // Bleu ciel else if( Voxel_y < -128 ) { Type = 2; VoxelSector.Flag_Void_Regular = false; } // Orange else if( Voxel_y < -64 ) { Type = 3; VoxelSector.Flag_Void_Regular = false; } // Vert else if( Voxel_y < 0 ) { Type = 1; VoxelSector.Flag_Void_Regular = false; } // Bleu else Type = 0; /* if (Voxel_y >=0 ) Type = 0; else if (Voxel_y < -960) {Type = 126; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -768) {Type = 1; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -630) {Type = 10; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -625) {Type = 85; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -615) {Type = 0; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -576) {Type = 10; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -512) {Type = 7; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -448) {Type = 9; VoxelSector.Flag_Void_Regular = false;} else if (Voxel_y < -384) {Type = 8; VoxelSector.Flag_Void_Regular = false; } else if (Voxel_y < -320) {Type = 4; VoxelSector.Flag_Void_Regular = false; } else if (Voxel_y < -256) {Type = 6; VoxelSector.Flag_Void_Regular = false; } else if (Voxel_y < -192) {Type = 5; VoxelSector.Flag_Void_Regular = false; } else if (Voxel_y < -128) {Type = 2; VoxelSector.Flag_Void_Regular = false; } // Orange else if (Voxel_y < -64) {Type = 3; VoxelSector.Flag_Void_Regular = false; } // Vert else if (Voxel_y < 0) {Type = 1; VoxelSector.Flag_Void_Regular = false; } // Bleu else Type = 0; */ TypeTable[y] = Type; //TypeTable[y]= 0; // debug MineralInclude[y] = ( ( Voxel_y < -5L ) && ( Type != 0 ) ); } // If sector is void, fill it more quickly if( VoxelSector.Flag_Void_Regular ) { for( i = 0; i < ( VoxelSector.ZVOXELBLOCSIZE_X * VoxelSector.ZVOXELBLOCSIZE_Y * VoxelSector.ZVOXELBLOCSIZE_Z ); i++ ) Data[i] = 0; return; } // Fill zone with inclusions ushort LastMineral = 0; uint Num = 0; for( i = 0; i < ( VoxelSector.ZVOXELBLOCSIZE_X * VoxelSector.ZVOXELBLOCSIZE_Y * VoxelSector.ZVOXELBLOCSIZE_Z ); i++ ) { Data[i] = TypeTable[i & VoxelSector.ZVOXELBLOCMASK_Y]; if( MineralInclude[i & VoxelSector.ZVOXELBLOCMASK_Y] ) { if( Probabilizer.IsBelowFence( RandomGen ) ) { Num = Probabilizer.GetTypeNum( RandomGen ); Data[i] = LastMineral = Probabilizer.GetVoxelType( Num ); } else if( LastMineral != 0 ) { if( Probabilizer.AllowRepeat( Num, RandomGen ) ) Data[i] = LastMineral; else LastMineral = 0; } // LastMineral = 0; } } // if (Pos_y<0) {Cnt=1;Flag_Void_Regular=false;Flag_Void_Transparent=true;} // if (Pos_y>=0){Cnt=0;Flag_Void_Regular=true;Flag_Void_Transparent=true;} /* if( VoxelSector.Pos_x == 0 && VoxelSector.Pos_y == 0 && VoxelSector.Pos_z == -2 && VoxelGlobalSettings.COMPILEOPTION_ALLOWSTARTINGSTORAGE ) { ZVoxelExtension_Storage* StorageExtension; StorageExtension = new ZVoxelExtension_Storage(); StorageExtension.VoxelType[0] = 42; StorageExtension.VoxelQuantity[0] = 1; StorageExtension.VoxelType[1] = 75; StorageExtension.VoxelQuantity[1] = 1; VoxelSector.SetCube_WithExtension( 8, 0, 8, 49, StorageExtension ); } */ }