public void ShuffleBossOrder() { var toSwap = new List <Tuple <int, int> >(); var swapped = new HashSet <int>(); foreach (var bossId in EnemyTierList.BossIds) { //determine new tier rank var swapBossId = bossId; byte newTier = 0; byte originalTier = 0; while (swapBossId == bossId) { originalTier = EnemyTierList.GetBossTier(bossId); newTier = RandomFunctions.GenerateGaussianByte(Agent.Rng, originalTier, Agent.Probabilities.BossShuffleStandardDeviation, (byte)(EnemyTierList.TieredBossIds.Count - 1)); if (newTier < 0) { newTier = 0; } //determine what boss to swap with based on new rank var randNum = Agent.Rng.Next(0, EnemyTierList.TieredBossIds[newTier].Count); swapBossId = EnemyTierList.TieredBossIds[newTier][randNum]; } swapped.Add(bossId); swapped.Add(swapBossId); ScaleEnemies(originalTier, newTier, bossId, swapBossId); toSwap.Add(new Tuple <int, int>(bossId, swapBossId)); } EnemyCollection.WriteObjects(Agent.GeneralConfiguration.TempFile); foreach (var t in toSwap) { EnemyCollection.SwapMappedObjects(Agent.GeneralConfiguration.TempFile, EnemyCollection.GetMappedObject(t.Item1), EnemyCollection.GetMappedObject(t.Item2)); } /* * foreach (var t in toSwap) * { * var bossA = EnemyCollection.GetMappedObject(t.Item1); * var bossB = EnemyCollection.GetMappedObject(t.Item2); * bossA.WriteByte((byte)t.Item2, EnemyOffsets.Id); * bossB.WriteByte((byte)t.Item1, EnemyOffsets.Id); * }*/ }