Example #1
0
		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;
				}
			}
		}
Example #2
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 );
			}
			*/
		}