public IEnumerable States() { List <Sprite> targets = (This.Game.CurrentLevel as FrostbyteLevel).allies; Random rng = new Random(); while (master.Crystals == null || master.Crystals.Count == 0) { yield return(null); } master.currentCrystal = master.Crystals[0]; int initialWaitDistance = 300; while (!master.camp(targets, initialWaitDistance, float.PositiveInfinity) && !master.AtArms) { foreach (Enemies.Crystal crystal in master.Crystals) { master.currentCrystal.Rewind(); crystal.SetAnimation(EMPTY_CRYSTAL); } yield return(null); } master.setAtArms(); This.Game.AudioManager.PlayBackgroundMusic("Music/CrystalBossBG"); This.Game.AudioManager.BackgroundMusicVolume = 0.05f; while (true) { foreach (Object o in TeleportIn()) { if (master.currentCrystal.State == SpriteState.Dead) { break; } yield return(null); } while (!master.freeze(new TimeSpan(0, 0, 5))) { if (master.currentCrystal.State == SpriteState.Dead) { break; } yield return(null); } foreach (Object o in TeleportOut()) { if (master.currentCrystal.State == SpriteState.Dead) { break; } yield return(null); } if (master.currentCrystal.State == SpriteState.Dead) { master.Crystals.Remove(master.currentCrystal); master.OuterCrystals.Remove(master.currentCrystal); } if (master.Crystals.Count == 0) { break; } master.currentCrystal = master.Crystals.GetRandomElement(); yield return(null); } master.Health = 0; }