public void FirstTimeSetup()
	{
		Blob blob = new Blob();
		blob.male = true;
		blob.Hatch();
		blob.birthday = blob.birthday - gm.breedingAge;
		blob.SetRandomTextures();
		blob.id = gm.gameVars.blobsSpawned++;
		blob.SetGeneActivationForAll();
		blob.ApplyGeneEffects(blob.activeGenes);
		blob.sellValue = 10 + Mathf.FloorToInt(blob.level * 1.5f);
		blobs.Add(blob);
		
		blob = new Blob();
		blob.male = false;
		blob.Hatch();
		blob.birthday = blob.birthday - gm.breedingAge;
		blob.SetRandomTextures();
		blob.id = gm.gameVars.blobsSpawned++;
		blob.SetGeneActivationForAll();
		blob.ApplyGeneEffects(blob.activeGenes);
		blob.sellValue = 10 + Mathf.FloorToInt(blob.level * 1.5f);
		blobs.Add(blob);
	}
	public Blob GenerateNewBlobBasedOnBlobs(Blob dad, Blob mom)
	{
		Blob blob = new Blob();
		blob.id = gm.gameVars.blobsSpawned++;
		blob.dadId = dad.id;
		blob.momId = mom.id;
		blob.hasHatched = false;
		int totalEggs = GetTotalEggs();

		//safety spawn female
		if (GetTotalEggs() <= 0)
			blob.male = false;
		else
			blob.male = (UnityEngine.Random.Range(0, 2) == 0) ? true : false;
		
		blob.quality = Blob.GetRandomQuality();
		blob.level = (int)(dad.level + mom.level / 2f) + UnityEngine.Random.Range (-1,2);
		blob.level = Mathf.Clamp(blob.level, 1, 100);
		blob.sellValue = 10 + Mathf.FloorToInt(blob.level * 1.5f);
		blob.SetRandomTextures();

		List<Gene> parentGenesRaw = dad.genes.Union<Gene>(mom.genes).ToList<Gene>();
		List<Gene> GenesToPassOn = new List<Gene>();

		foreach(Gene g in parentGenesRaw)
		{
			int str = 0;
			if(dad.genes.Contains(g))
				str++;
			if(mom.genes.Contains(g))
				str++;

			float mod = (str > 1) ? .8f : .5f;

			float rand = UnityEngine.Random.Range(0f, 1f);
			if(rand < g.passOnChance * mod)
				GenesToPassOn.Add(g);
		}

		blob.unprocessedGenes = CleanupGeneList(GenesToPassOn);
		LimitGenesTo(blob, blob.allowedGeneCount);

		blob.SetGeneActivationForAll();
		blob.ApplyGeneEffects(blob.activeGenes);

		return blob;
	}
	public void GenerateVisitor()
	{
		Blob visitor = new Blob();

		visitor.male = true;
		visitor.Hatch();
		visitor.birthday = visitor.birthday - gm.breedingAge;
		visitor.level = gm.GetAverageLevel();
		visitor.quality = Blob.GetRandomQuality();
		visitor.SetRandomTextures();
		visitor.id = gm.gameVars.blobsSpawned++;
		gm.gameVars.visitorsSpawned++;

		List<Gene> goodGenes = GeneManager.GetGenesWithPositiveEffect(gm.mum.genes);
		List<Gene> badGenes = GeneManager.GetGenesWithNegativeEffect(gm.mum.genes);

		int allowedGenes = visitor.allowedGeneCount;

		for(int i=0; i<allowedGenes; i++)
		{
			Gene geneToadd = null;
			if((i%3) == 0)
			{
				geneToadd = GeneManager.GetRandomGeneBasedOnRarity(goodGenes);
				goodGenes.Remove(geneToadd);
			}
			else if(i==1)
			{
				geneToadd = badGenes[UnityEngine.Random.Range(0, badGenes.Count)];
				badGenes.Remove(geneToadd);
			}

			visitor.unprocessedGenes.Add(geneToadd);
		}

		if(gm.gameVars.visitorsSpawned == 1)
		{
			visitor.unprocessedGenes.Clear();
			visitor.unprocessedGenes.Add(gm.mum.GetGeneByName("Better Babies"));
		}

		if(gm.gameVars.visitorsSpawned == 2)
		{
			visitor.unprocessedGenes.Clear();
			visitor.unprocessedGenes.Add(gm.mum.GetGeneByName("Blue"));
		}

		if(gm.gameVars.visitorsSpawned == 3)
		{
			visitor.unprocessedGenes.Clear();
			visitor.unprocessedGenes.Add(gm.mum.GetGeneByName("Fertility"));
		}

		visitor.SetGeneActivationForAll();
		visitor.ApplyGeneEffects(visitor.activeGenes);

		visitors.Add(visitor);
		visitorCost.Add(gm.gameVars.visitorsSpawned * 50);
		visitorTimers.Add(DateTime.Now + new TimeSpan(0,1,0,0));

		gm.popup.Show("New Visitor", "A new Blob visitor has arrived to check out your kingdom!");
	}