private void RandomizeCharacter()
 {
     _spellBonus = Rnd.value > 0.5f;
     _character  = _characters.OrderBy(x => Rnd.value).First(y => y.ForbiddenIncident != _incident);
     _season     = _seasons[Rnd.Range(0, _seasons.Length)];
 }
    IEnumerator SimulatateBattles(int debuff, int buff)
    {
        if (IsSimulationRunning)
        {
            IsItMyTurnYet       = BombModule.GetIDNumber();
            IsSimulationRunning = false;
        }
        yield return(null);

        yield return(null);

        _NO_SIMULATION_RUNNING = false;
        BombModule.LogFormat("DEBUGGING MODE ENABLED");
        while (IsItMyTurnYet < BombModule.GetIDNumber())
        {
            yield return(null);
        }
        IsSimulationRunning = true;

        if (_sets == 0)
        {
            InitializeItemSets();
        }

        if (!BombSerialNumber.Equals(BombInfo.GetSerialNumber()))
        {
            BombSerialNumber = BombInfo.GetSerialNumber();
            BombModule.LogFormat("------------------");
            BombModule.LogFormat("Simulation Results");
            BombModule.LogFormat("------------------");
            BombModule.LogFormat("");
            foreach (Incidents incident in _incidents.Skip(1))
            {
                _incident = incident;
                int battles = _sets * 4 * 2 * _characters.Count(x => x.ForbiddenIncident != _incident);
                SetEdgeworkBonus();

                IncidentSet incidentSet = _incidedentSets[(int)_incident];
                BombModule.LogFormat("Simulating Incident: {0}", incidentSet.Name);
                IncidentText.text           = _incident.ToString();
                InventoryText.characterSize = 0.7f;
                for (int j = debuff; j <= buff; j++)
                {
                    int i = 0;
                    foreach (Character c in _characters.Where(x => x.ForbiddenIncident != incident))
                    {
                        _character = c;
                        foreach (CharacterSeasons s in _seasons)
                        {
                            _season = s;
                            foreach (Inventory[] items in _itemSets.Values)
                            {
                                _inventory  = items.ToList();
                                _spellBonus = false;
                                Initialize(j, true);
                                _spellBonus = true;
                                Initialize(j, true);
                                i += 2;
                                if ((i % 50) == 0)
                                {
                                    UpdateDisplay(true, true, false, true);
                                    InventoryText.text = string.Format("{0}/{1}\n{2}: {3}/{4}", i + 1, battles, j < 0 ? "penalty" : "bonus", j, buff);
                                    yield return(null);
                                }
                            }
                        }
                    }
                    ReportWinResults(j, debuff != buff);
                }
            }
            BombModule.LogFormat("");
            BombModule.LogFormat("---------------");
            BombModule.LogFormat("Average Results");
            BombModule.LogFormat("---------------");
            BombModule.LogFormat("");
            foreach (Incidents incident in _incidents.Skip(1))
            {
                IncidentSet incidentSet = _incidedentSets[(int)incident];
                BombModule.LogFormat("Incident {0}:", incidentSet.Name);
                if (IncidentResults[incident][0] > 0)
                {
                    BombModule.LogFormat("Boss #1 ({0}): W/L: {1:0.##}/{2:0.##} ({3} Bombs)", incidentSet.Boss1.Name, (float)IncidentResults[incident][1] / IncidentResults[incident][0], (float)IncidentResults[incident][2] / IncidentResults[incident][0], IncidentResults[incident][0]);
                }

                if (IncidentResults[incident][3] > 0)
                {
                    BombModule.LogFormat("Boss #2 ({0}): W/L: {1:0.##}/{2:0.##} ({3} Bombs)", incidentSet.Boss2.Name, (float)IncidentResults[incident][4] / IncidentResults[incident][3], (float)IncidentResults[incident][5] / IncidentResults[incident][3], IncidentResults[incident][3]);
                }
            }
            BombModule.LogFormat("");
        }
        BombModule.LogFormat("--------------");
        BombModule.LogFormat("Battle Results");
        BombModule.LogFormat("--------------");
        BombModule.LogFormat("");
        _NO_SIMULATION_RUNNING = true;
        foreach (Incidents incident in _incidents.Skip(1))
        {
            BombModule.LogFormat("--------------");
            _incident = incident;
            Initialize();
            BombModule.LogFormat("--------------");
        }

        IsItMyTurnYet++;
        IsSimulationRunning = false;
        BombModule.HandlePass();
        if (IsItMyTurnYet <= KMBombModuleExtensions.HighestConsecutiveID)
        {
            yield break;
        }
        yield return(new WaitForSeconds(1));

        BombModule.HandleStrike();
    }