コード例 #1
0
        private void generateAdjacentToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var initialiframe = (IFrameBreeding) dataGridViewEggIVValues.SelectedRows[0].DataBoundItem;

            //  We need to display a dialog that is going to let the user
            //  decide which adjacent spreads that we want to show here.
            var adjacent = new PlatinumTimeAdjacent(initialiframe.Seed, initialiframe.Offset,
                                                    DateTime.Now.Year);

            if (adjacent.ShowDialog() == DialogResult.OK)
            {
                //  Instantiate our Generator and a dummy frame compare record
                //  one time here so we can re-use it for all of our later work
                var adjacentGenerator = new FrameGenerator();

                var parentA = new uint[6];
                var parentB = new uint[6];

                uint.TryParse(maskedTextBoxHPA.Text, out parentA[0]);
                uint.TryParse(maskedTextBoxAtkA.Text, out parentA[1]);
                uint.TryParse(maskedTextBoxDefA.Text, out parentA[2]);
                uint.TryParse(maskedTextBoxSpAA.Text, out parentA[3]);
                uint.TryParse(maskedTextBoxSpDA.Text, out parentA[4]);
                uint.TryParse(maskedTextBoxSpeA.Text, out parentA[5]);

                uint.TryParse(maskedTextBoxHPB.Text, out parentB[0]);
                uint.TryParse(maskedTextBoxAtkB.Text, out parentB[1]);
                uint.TryParse(maskedTextBoxDefB.Text, out parentB[2]);
                uint.TryParse(maskedTextBoxSpAB.Text, out parentB[3]);
                uint.TryParse(maskedTextBoxSpDB.Text, out parentB[4]);
                uint.TryParse(maskedTextBoxSpeB.Text, out parentB[5]);

                adjacentGenerator.ParentA = parentA;
                adjacentGenerator.ParentB = parentB;

                var adjacentFrameCompare = new FrameCompare(
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    null,
                    -1,
                    false,
                    false,
                    false,
                    null,
                    new NoGenderFilter());

                var adjacentFrames = new List<IFrameBreeding>();

                int matchCount = 0;

                //  Now we need to get the values back from this and run a special generation
                //  with just these variables.  We want it to be sorted by date (with delay)
                //  and for items to be put in offset order.
                foreach (DateTime adjacentTime in adjacent.AdjacentTimeList)
                {
                    for (uint rdelay = adjacent.ReturnMinDelay; rdelay <= adjacent.ReturnMaxDelay; rdelay++)
                    {
                        //  Get the information (year, month, date from the frame) and build
                        //  our initial seed to feed to the Frame Generator so that we can
                        uint seed =
                            ((((uint) adjacentTime.Month*
                               (uint) adjacentTime.Day +
                               (uint) adjacentTime.Minute +
                               (uint) adjacentTime.Second)%0x100) << 24) +
                            ((uint) adjacentTime.Hour << 16) +
                            ((uint) adjacentTime.Year - 2000 + rdelay);

                        //  Call a generator with a dummy compare object and go
                        //  up to the max delay and after this iterate through
                        //  the results to include min-max in a new list of frames
                        //  to show on the grid.
                        adjacentGenerator.InitialFrame = adjacent.ReturnMinOffset;
                        adjacentGenerator.MaxResults = adjacent.ReturnMaxOffset - adjacent.ReturnMinOffset + 1;
                        adjacentGenerator.InitialSeed = seed;
                        adjacentGenerator.FrameType = initialiframe.FrameType;

                        List<Frame> frames = adjacentGenerator.Generate(adjacentFrameCompare, 0, 0);

                        foreach (Frame frame in frames)
                        {
                            //  Create our PlatinumIFrame and then add this to the
                            //  master collection that we are going to display to
                            //  the user.
                            var iframe = new IFrameBreeding
                                {
                                    Seed = seed,
                                    Offset = frame.Number,
                                    Delay = rdelay,
                                    Hp = frame.DisplayHpAlt,
                                    Atk = frame.DisplayAtkAlt,
                                    Def = frame.DisplayDefAlt,
                                    Spa = frame.DisplaySpaAlt,
                                    Spd = frame.DisplaySpdAlt,
                                    Spe = frame.DisplaySpeAlt,
                                    DisplayHpInh = frame.DisplayHp,
                                    DisplayAtkInh = frame.DisplayAtk,
                                    DisplayDefInh = frame.DisplayDef,
                                    DisplaySpaInh = frame.DisplaySpa,
                                    DisplaySpdInh = frame.DisplaySpd,
                                    DisplaySpeInh = frame.DisplaySpe,
                                    SeedTime = adjacentTime,
                                    FrameType = adjacentGenerator.FrameType
                                };

                            if (initialiframe.Seed == iframe.Seed)
                            {
                                if (targetFrameIndex != 0)
                                {
                                    if (initialiframe.Offset == iframe.Offset)
                                        targetFrameIndex = matchCount;
                                }
                                else
                                    targetFrameIndex = matchCount;
                            }

                            adjacentFrames.Add(iframe);

                            matchCount++;
                        }
                    }
                }

                Date.Visible = true;
                dataGridViewEggIVValues.DataSource = adjacentFrames;
                returnToResultsToolStripMenuItem.Visible = true;

                //  Select the row of the initial frame that was
                //  selected when the adjacent command was run

                dataGridViewEggIVValues.FirstDisplayedScrollingRowIndex = targetFrameIndex;
                dataGridViewEggIVValues.Rows[targetFrameIndex].Selected = true;
            }
        }
コード例 #2
0
        private void buttonGenerateXD_Click(object sender, EventArgs e)
        {
            if (maskedTextBoxMinHP.Text == "")
            {
                maskedTextBoxMinHP.Focus();
                maskedTextBoxMinHP.SelectAll();
                return;
            }

            if (maskedTextBoxMinAtk.Text == "")
            {
                maskedTextBoxMinAtk.Focus();
                maskedTextBoxMinAtk.SelectAll();
                return;
            }

            if (maskedTextBoxMinDef.Text == "")
            {
                maskedTextBoxMinDef.Focus();
                maskedTextBoxMinDef.SelectAll();
                return;
            }

            if (maskedTextBoxMinSpA.Text == "")
            {
                maskedTextBoxMinSpA.Focus();
                maskedTextBoxMinSpA.SelectAll();
                return;
            }

            if (maskedTextBoxMinSpD.Text == "")
            {
                maskedTextBoxMinSpD.Focus();
                maskedTextBoxMinSpD.SelectAll();
                return;
            }

            if (maskedTextBoxMinSpe.Text == "")
            {
                maskedTextBoxMinSpe.Focus();
                maskedTextBoxMinSpe.SelectAll();
                return;
            }

            if (maskedTextBoxMaxHP.Text == "")
            {
                maskedTextBoxMaxHP.Focus();
                maskedTextBoxMaxHP.SelectAll();
                return;
            }

            if (maskedTextBoxMaxAtk.Text == "")
            {
                maskedTextBoxMaxAtk.Focus();
                maskedTextBoxMaxAtk.SelectAll();
                return;
            }

            if (maskedTextBoxMaxDef.Text == "")
            {
                maskedTextBoxMaxDef.Focus();
                maskedTextBoxMaxDef.SelectAll();
                return;
            }

            if (maskedTextBoxMaxSpA.Text == "")
            {
                maskedTextBoxMaxSpA.Focus();
                maskedTextBoxMaxSpA.SelectAll();
                return;
            }

            if (maskedTextBoxMaxSpD.Text == "")
            {
                maskedTextBoxMaxSpD.Focus();
                maskedTextBoxMaxSpD.SelectAll();
                return;
            }

            if (maskedTextBoxMaxSpe.Text == "")
            {
                maskedTextBoxMaxSpe.Focus();
                maskedTextBoxMaxSpe.SelectAll();
                return;
            }

            uint minhp = uint.Parse(maskedTextBoxMinHP.Text);
            uint minatk = uint.Parse(maskedTextBoxMinAtk.Text);
            uint mindef = uint.Parse(maskedTextBoxMinDef.Text);
            uint minspa = uint.Parse(maskedTextBoxMinSpA.Text);
            uint minspd = uint.Parse(maskedTextBoxMinSpD.Text);
            uint minspe = uint.Parse(maskedTextBoxMinSpe.Text);

            uint maxhp = uint.Parse(maskedTextBoxMaxHP.Text);
            uint maxatk = uint.Parse(maskedTextBoxMaxAtk.Text);
            uint maxdef = uint.Parse(maskedTextBoxMaxDef.Text);
            uint maxspa = uint.Parse(maskedTextBoxMaxSpA.Text);
            uint maxspd = uint.Parse(maskedTextBoxMaxSpD.Text);
            uint maxspe = uint.Parse(maskedTextBoxMaxSpe.Text);

            var nature = (uint) comboBoxNatureXD.SelectedIndex;

            var XDGenerator = new FrameGenerator();

            List<Frame> frames = XDGenerator.Generate(minhp, maxhp,
                                                      minatk, maxatk,
                                                      mindef, maxdef,
                                                      minspa, maxspa,
                                                      minspd, maxspd,
                                                      minspe, maxspe,
                                                      nature);

            var iframes = new List<IFrameCaptureXD>();

            foreach (Frame frame in frames)
            {
                var iframe = new IFrameCaptureXD {Frame = frame};

                // We're calibrating only with shadow Pokémon that are generated first in the party.
                // There are 375451 frames between the initial seed generation and Pokémon generation,
                // so we need to reverse the RNG that many frames
                var reverseRNG = new XdRngR(frame.Seed);

                for (int i = 0; i < 375450; i++)
                {
                    reverseRNG.GetNext32BitNumber();
                }

                iframe.Seed = reverseRNG.GetNext32BitNumber();
                //iframe.Seed = frame.Seed;
                iframes.Add(iframe);
            }

            dataGridViewXDCalibration.DataSource = iframes;
        }
コード例 #3
0
ファイル: Adjacents.cs プロジェクト: Slashmolder/RNGReporter
        private void Generate()
        {
            var profile = (Profile) comboBoxProfiles.SelectedItem;
            uint minFrame = uint.Parse(maskedTextBoxCapMinOffset.Text);
            uint maxFrame = uint.Parse(maskedTextBoxCapMaxOffset.Text);

            DateTime seedTime = datePicker.Value;
            iframes = new List<IFrameCapture>();

            generator = new FrameGenerator
                {
                    FrameType = (FrameType) ((ComboBoxItem) comboBoxMethod.SelectedItem).Reference,
                    EncounterType =
                        (EncounterType) ((ComboBoxItem) comboBoxEncounterType.SelectedItem).Reference,
                    EncounterMod = (EncounterMod) ((ComboBoxItem) comboBoxLead.SelectedItem).Reference,
                    SynchNature = -2,
                    InitialFrame = minFrame + (profile.IsBW2() ? 2u : 0),
                    MaxResults = maxFrame - minFrame + 1
                };

            // Now that each combo box item is a custom object containing the FrameType reference
            // We can simply retrieve the FrameType from the selected item

            frameCompare = new FrameCompare(
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                null,
                -1,
                false,
                false,
                false,
                null,
                new NoGenderFilter());

            switch (generator.FrameType)
            {
                case FrameType.Method5Standard:
                    CapSeed.DefaultCellStyle.Format = "X16";
                    EncounterSlot.Visible = false;
                    PID.Visible = false;
                    Shiny.Visible = false;
                    Nature.Visible = false;
                    Ability.Visible = false;
                    CapHP.Visible = true;
                    CapAtk.Visible = true;
                    CapDef.Visible = true;
                    CapSpA.Visible = true;
                    CapSpD.Visible = true;
                    CapSpe.Visible = true;
                    f25.Visible = false;
                    f50.Visible = false;
                    f75.Visible = false;
                    f125.Visible = false;
                    break;
                case FrameType.Method5Natures:

                    CapSeed.DefaultCellStyle.Format = "X16";
                    if (generator.EncounterType != EncounterType.Stationary &&
                        generator.EncounterType != EncounterType.Gift &&
                        generator.EncounterType != EncounterType.Roamer &&
                        generator.EncounterType != EncounterType.LarvestaEgg)
                        EncounterSlot.Visible = true;
                    else
                        EncounterSlot.Visible = false;
                    PID.Visible = true;
                    Shiny.Visible = true;
                    Nature.Visible = true;
                    Ability.Visible = true;
                    CapHP.Visible = false;
                    CapAtk.Visible = false;
                    CapDef.Visible = false;
                    CapSpA.Visible = false;
                    CapSpD.Visible = false;
                    CapSpe.Visible = false;
                    f25.Visible = true;
                    f50.Visible = true;
                    f75.Visible = true;
                    f125.Visible = true;
                    break;
                case FrameType.BWBred:
                    generator.FrameType = FrameType.Method5Standard;
                    generator.InitialFrame = 14;
                    generator.MaxResults = 7;

                    CapSeed.DefaultCellStyle.Format = "X16";
                    EncounterSlot.Visible = false;
                    PID.Visible = false;
                    Shiny.Visible = false;
                    Nature.Visible = false;
                    Ability.Visible = false;
                    CapHP.Visible = true;
                    CapAtk.Visible = true;
                    CapDef.Visible = true;
                    CapSpA.Visible = true;
                    CapSpD.Visible = true;
                    CapSpe.Visible = true;
                    f25.Visible = false;
                    f50.Visible = false;
                    f75.Visible = false;
                    f125.Visible = false;
                    break;
                case FrameType.Wondercard5thGen:
                case FrameType.Wondercard5thGenFixed:
                    CapSeed.DefaultCellStyle.Format = "X16";
                    EncounterSlot.Visible = false;
                    PID.Visible = false;
                    Shiny.Visible = false;
                    Nature.Visible = true;
                    Ability.Visible = false;
                    CapHP.Visible = true;
                    CapAtk.Visible = true;
                    CapDef.Visible = true;
                    CapSpA.Visible = true;
                    CapSpD.Visible = true;
                    CapSpe.Visible = true;
                    f25.Visible = false;
                    f50.Visible = false;
                    f75.Visible = false;
                    f125.Visible = false;
                    break;
            }

            for (int seconds = (int) numericUpDownSeconds.Value*-1; seconds <= numericUpDownSeconds.Value; seconds++)
            {
                for (uint timer0 = profile.Timer0Min - 1; timer0 <= profile.Timer0Max + 1; timer0++)
                {
                    ulong seed = Functions.EncryptSeed(seedTime.AddSeconds(seconds), profile.MAC_Address,
                                                       profile.Version, profile.Language,
                                                       profile.DSType, profile.SoftReset, profile.VCount, timer0,
                                                       profile.GxStat,
                                                       profile.VFrame, buttonValue());

                    if (seconds == 0 && timer0 == profile.Timer0Min)
                    {
                        seedMatch = seed;
                    }

                    switch (generator.FrameType)
                    {
                        case FrameType.Method5Standard:
                            generator.InitialSeed = seed >> 32;
                            break;
                        case FrameType.Method5Natures:
                        case FrameType.Wondercard5thGen:
                        case FrameType.Wondercard5thGenFixed:
                            generator.InitialSeed = seed;
                            generator.InitialFrame = Functions.initialPIDRNG(seed, profile) + minFrame;
                            break;
                    }

                    List<Frame> frames = generator.Generate(frameCompare, profile.ID, profile.SID);

                    foreach (Frame frame in frames)
                    {
                        var iframe = new IFrameCapture();

                        frame.DisplayPrep();
                        iframe.Offset = frame.Number;
                        iframe.Seed = seed;
                        iframe.Frame = frame;

                        iframe.TimeDate = seedTime.AddSeconds(seconds);
                        iframe.Timer0 = timer0;

                        iframes.Add(iframe);
                    }
                }
            }

            listBindingCap = new BindingSource {DataSource = iframes};
            dataGridViewCapValues.DataSource = listBindingCap;

            foreach (DataGridViewRow row in dataGridViewCapValues.Rows)
            {
                if ((ulong) row.Cells[0].Value == seedMatch)
                {
                    dataGridViewCapValues.CurrentCell = row.Cells[0];
                    dataGridViewCapValues.FirstDisplayedScrollingRowIndex = row.Index;
                    break;
                }
            }

            dataGridViewCapValues.Focus();
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: Slashmolder/RNGReporter
        private void Generate()
        {
            // We want to force an early garbage collection
            // Because the frame lists get very big, very fast
            if (frames != null)
            {
                frames.Clear();
                frames = null;
            }

            //  Nuke the target frame when we generate a new list.  This may
            //  end up being controversial need to be revisted, but we can
            //  do this at a later time after we get a complaint. :)
            SetTargetFrame(-1); // = 0;

            // Set up generator settings
            var generator = new FrameGenerator
                {
                    FrameType =
                        (FrameType) ((ComboBoxItem) comboBoxMethod.SelectedItem).Reference,
                    EncounterMod = currentMod
                };
            var offset =
                (uint)
                (checkBoxBW2.Visible && checkBoxBW2.Checked && generator.FrameType != FrameType.Method5Natures &&
                 generator.FrameType != FrameType.BWBred && generator.FrameType != FrameType.BWBredInternational
                     ? 2
                     : 0);
            if (generator.FrameType == FrameType.BWBred && checkBoxBW2.Checked) generator.FrameType = FrameType.BW2Bred;
            if (generator.FrameType == FrameType.BWBredInternational && checkBoxBW2.Checked)
                generator.FrameType = FrameType.BW2BredInternational;
            if (currentMod == EncounterMod.Synchronize && comboBoxSynchNatures.SelectedIndex == 0)
            {
                generator.EncounterMod = EncounterMod.None;
            }

            if (currentMod == EncounterMod.CuteCharm)
                generator.SynchNature = (int) ((ComboBoxItem) comboBoxSynchNatures.SelectedItem).Reference;
            else
                generator.SynchNature = ((Nature) comboBoxSynchNatures.SelectedItem).Number;

            generator.EncounterType = EncounterTypeCalc.EncounterString(comboBoxEncounterType.Text);
            generator.DittoUsed = checkBoxDittoParent.Checked;
            generator.MaleOnlySpecies = cbNidoBeat.Checked;
            generator.ShinyCharm = cbShinyCharm.Checked;

            // this is for PIDRNG encounter slots
            generator.isBW2 = checkBoxBW2.Visible && checkBoxBW2.Checked;

            if (generator.EncounterType == EncounterType.SafariZone ||
                generator.EncounterType == EncounterType.BugCatchingContest && !szWarned)
            {
                var warning = new WarningSZ();
                warning.ShowDialog();
                szWarned = true;
            }

            //  Build up a FrameComparer
            List<int> encounterSlots = null;
            if (comboBoxEncounterSlot.Text != "Any" && comboBoxEncounterSlot.CheckBoxItems.Count > 0)
            {
                encounterSlots = new List<int>();
                for (int i = 0; i < comboBoxEncounterSlot.CheckBoxItems.Count; i++)
                {
                    if (comboBoxEncounterSlot.CheckBoxItems[i].Checked)
                        // We have to subtract 1 because this custom control contains a hidden item for text display
                        encounterSlots.Add(i - 1);
                }
            }

            List<uint> natures = null;
            if (comboBoxNature.Text != "Any" && comboBoxNature.CheckBoxItems.Count > 0)
            {
                natures =
                    (from t in comboBoxNature.CheckBoxItems
                     where t.Checked
                     select (uint) ((Nature) t.ComboBoxItem).Number).ToList();
            }

            generator.ParentA = parentA;
            generator.ParentB = parentB;
            generator.RNGIVs = rngIVs;

            FrameCompare frameCompare;
            // Create separate FrameCompares for methods that don't produce natures or IVs
            if (generator.FrameType == FrameType.Method5Standard ||
                generator.FrameType == FrameType.Method5CGear ||
                (generator.FrameType == FrameType.WondercardIVs && generator.EncounterType != EncounterType.Manaphy) ||
                generator.FrameType == FrameType.Bred ||
                generator.FrameType == FrameType.BredAlternate ||
                generator.FrameType == FrameType.BredSplit ||
                generator.FrameType == FrameType.RSBredUpper ||
                generator.FrameType == FrameType.RSBredUpperAlt ||
                generator.FrameType == FrameType.RSBredUpperSplit ||
                generator.FrameType == FrameType.DPPtBred ||
                generator.FrameType == FrameType.HGSSBred)
            {
                frameCompare = new FrameCompare(
                    ivFilters.IVFilter,
                    null,
                    -1,
                    false,
                    false,
                    false,
                    null,
                    new NoGenderFilter());
            }
            else if (generator.FrameType == FrameType.Method5Natures)
            {
                frameCompare = new FrameCompare(
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    natures,
                    (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                    checkBoxShinyOnly.Checked,
                    checkBoxSynchOnly.Checked,
                    false,
                    encounterSlots,
                    (GenderFilter) (comboBoxGender.SelectedItem));

                generator.RNGIVs = rngIVs;
            }
            else if (generator.FrameType == FrameType.Gen4Normal ||
                     generator.FrameType == FrameType.Gen4International)
            {
                frameCompare = new FrameCompare(
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    0, CompareType.None,
                    natures,
                    (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                    checkBoxShinyOnly.Checked,
                    false,
                    false,
                    null,
                    (GenderFilter) (comboBoxGender.SelectedItem));
            }
            else if (generator.FrameType == FrameType.Method1 ||
                     generator.FrameType == FrameType.Method2 ||
                     generator.FrameType == FrameType.Method3 ||
                     generator.FrameType == FrameType.Method4 ||
                     generator.FrameType == FrameType.ChainedShiny ||
                     generator.FrameType == FrameType.ColoXD ||
                     generator.FrameType == FrameType.WondercardIVs)
            {
                frameCompare = new FrameCompare(
                    ivFilters.IVFilter,
                    natures,
                    (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                    checkBoxShinyOnly.Checked,
                    false,
                    false,
                    null,
                    (GenderFilter) (comboBoxGender.SelectedItem));
            }
            else if (generator.FrameType == FrameType.Wondercard5thGen ||
                     generator.FrameType == FrameType.Wondercard5thGenFixed)
            {
                frameCompare = new FrameCompare(
                    ivFilters.IVFilter,
                    natures,
                    (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                    checkBoxShinyOnly.Checked,
                    false,
                    false,
                    null,
                    new NoGenderFilter());
            }
            else if (generator.FrameType == FrameType.BWBred ||
                     generator.FrameType == FrameType.BWBredInternational ||
                     generator.FrameType == FrameType.BW2Bred ||
                     generator.FrameType == FrameType.BW2BredInternational)
            {
                if (parentA != null && parentB != null && rngIVs != null)
                {
                    frameCompare = new FrameCompare(
                        ivFilters.IVFilter,
                        natures,
                        (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                        checkBoxShinyOnly.Checked,
                        checkBoxSynchOnly.Checked,
                        checkBoxDreamWorld.Checked,
                        null,
                        (GenderFilter) (comboBoxGender.SelectedItem));
                }
                else
                {
                    frameCompare = new FrameCompare(
                        0, CompareType.None,
                        0, CompareType.None,
                        0, CompareType.None,
                        0, CompareType.None,
                        0, CompareType.None,
                        0, CompareType.None,
                        natures,
                        (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                        checkBoxShinyOnly.Checked,
                        checkBoxSynchOnly.Checked,
                        checkBoxDreamWorld.Checked,
                        null,
                        (GenderFilter) (comboBoxGender.SelectedItem));
                }
            }
            else
            {
                frameCompare = new FrameCompare(
                    ivFilters.IVFilter,
                    natures,
                    (int) ((ComboBoxItem) comboBoxAbility.SelectedItem).Reference,
                    checkBoxShinyOnly.Checked,
                    checkBoxSynchOnly.Checked,
                    false,
                    encounterSlots,
                    (GenderFilter) (comboBoxGender.SelectedItem));
            }

            ulong seed = 0;

            if (textBoxSeed.Text != "")
            {
                if ((generator.FrameType == FrameType.BWBred ||
                     generator.FrameType == FrameType.BWBredInternational ||
                     generator.FrameType == FrameType.BW2Bred ||
                     generator.FrameType == FrameType.BW2BredInternational ||
                     generator.FrameType == FrameType.Method5Natures) &&
                    textBoxSeed.Text.Length == 8)
                {
                    MessageBox.Show("This method requires you to copy the Full Seed from the Time Finder window.");
                    seed = ulong.Parse(textBoxSeed.Text, NumberStyles.HexNumber);
                }
                else if (generator.FrameType == FrameType.Method5Standard && textBoxSeed.Text.Length > 8)
                {
                    seed = ulong.Parse(textBoxSeed.Text.Substring(0, textBoxSeed.Text.Length - 8),
                                       NumberStyles.HexNumber);
                }
                else
                {
                    seed = ulong.Parse(textBoxSeed.Text, NumberStyles.HexNumber);
                }
            }

            generator.InitialSeed = seed;

            //  Handle add seed finding activities
            labelFlipsForSeed.Text = CoinFlips.GetFlips((uint) seed, 10);

            // Handle all of the roaming Pokemon here
            uint rRoute = 0;
            uint eRoute = 0;
            uint lRoute = 0;

            // need to tryparse out all of the route values
            if (maskedTextBoxRRoute.Text != "")
                rRoute = uint.Parse(maskedTextBoxRRoute.Text);

            if (maskedTextBoxERoute.Text != "")
                eRoute = uint.Parse(maskedTextBoxERoute.Text);

            if (maskedTextBoxLRoute.Text != "")
                lRoute = uint.Parse(maskedTextBoxLRoute.Text);

            //  We need to know two things, forced advancement and the
            //  starting route of each of the roamers the user has
            //  shown interest in --
            HgSsRoamerInformation information = HgSsRoamers.GetHgSsRoamerInformation(
                (uint) seed,
                checkBoxRPresent.Checked,
                checkBoxEPresent.Checked,
                checkBoxLPresent.Checked,
                rRoute,
                eRoute,
                lRoute);

            //  Build our roaming monster string
            //labelRoamerRoutes.Text = "";

            string labelRoamerRoutesText = "";

            bool firstDisplay = true;

            if (checkBoxRPresent.Checked)
            {
                labelRoamerRoutesText += "R: " + information.RCurrentRoute;
                firstDisplay = false;
            }

            if (checkBoxEPresent.Checked)
            {
                if (!firstDisplay)
                    labelRoamerRoutesText += "  ";

                labelRoamerRoutesText += "E: " + information.ECurrentRoute;
                firstDisplay = false;
            }

            if (checkBoxLPresent.Checked)
            {
                if (!firstDisplay)
                    labelRoamerRoutesText += "  ";

                labelRoamerRoutesText += "L: " + information.LCurrentRoute;
                firstDisplay = false;
            }

            if (!firstDisplay)
            {
                labelRoamerRoutesText += "  ---  ";
                labelRoamerRoutesText += "Frame(s) Advanced: " + information.RngCalls;
            }

            labelRoamerRoutes.Text = labelRoamerRoutesText;

            //  Handle elm here, letting it know the foced advancement
            labelElmForSeed.Text = Responses.ElmResponses((uint) seed, 10, information.RngCalls);

            if (maskedTextBoxStartingFrame.Text != "")
            {
                ulong startingFrame;
                ulong.TryParse(maskedTextBoxStartingFrame.Text, out startingFrame);
                if (startingFrame > uint.MaxValue) startingFrame = uint.MaxValue - offset;
                generator.InitialFrame = (uint) startingFrame;
                generator.InitialFrame += offset;
            }

            if (maskedTextBoxMaxFrames.Text != "")
            {
                ulong maxFrames;
                ulong.TryParse(maskedTextBoxMaxFrames.Text, out maxFrames);
                if (maxFrames > uint.MaxValue) maxFrames = uint.MaxValue;
                generator.MaxResults = (uint) maxFrames;
            }

            //  Figure out if we have something good to pass in
            //  for the ID and Secret ID to do shiny calculations.
            ushort id;
            ushort sid;

            ushort.TryParse(maskedTextBoxID.Text, out id);
            ushort.TryParse(maskedTextBoxSID.Text, out sid);

            //  This is where we actually go ahead and call our
            //  generator for a list of IVs based on parameters
            //  that have been passed in.
            frames = generator.Generate(frameCompare, id, sid);

            foreach (Frame frame in frames)
            {
                frame.DisplayPrep();
            }

            Frame.DataPropertyName = generator.FrameType == FrameType.BredSplit
                                         ? "Name"
                                         : "Number";

            HP.DataPropertyName = "DisplayHp";
            Atk.DataPropertyName = "DisplayAtk";
            Def.DataPropertyName = "DisplayDef";
            SpA.DataPropertyName = "DisplaySpa";
            SpD.DataPropertyName = "DisplaySpd";
            Spe.DataPropertyName = "DisplaySpe";
            Characteristic.Visible = false;
            PossibleShakingSpot.Visible = false;

            if (parentA != null && parentB != null && rngIVs != null)
            {
                if (generator.FrameType == FrameType.Bred ||
                    generator.FrameType == FrameType.BredSplit ||
                    generator.FrameType == FrameType.BredAlternate ||
                    generator.FrameType == FrameType.RSBredUpper ||
                    generator.FrameType == FrameType.RSBredUpperAlt ||
                    generator.FrameType == FrameType.RSBredUpperSplit ||
                    generator.FrameType == FrameType.DPPtBred ||
                    generator.FrameType == FrameType.HGSSBred)
                {
                    foreach (Frame frame in frames)
                    {
                        frame.DisplayHpAlt = (frame.DisplayHp == "A" || frame.DisplayHp == "B")
                                                 ? (frame.DisplayHp == "A"
                                                        ? Functions.NullIV(parentA[0], "A")
                                                        : Functions.NullIV(parentB[0], "B"))
                                                 : frame.DisplayHp;
                        frame.DisplayAtkAlt = (frame.DisplayAtk == "A" || frame.DisplayAtk == "B")
                                                  ? (frame.DisplayAtk == "A"
                                                         ? Functions.NullIV(parentA[1], "A")
                                                         : Functions.NullIV(parentB[1], "B"))
                                                  : frame.DisplayAtk;
                        frame.DisplayDefAlt = (frame.DisplayDef == "A" || frame.DisplayDef == "B")
                                                  ? (frame.DisplayDef == "A"
                                                         ? Functions.NullIV(parentA[2], "A")
                                                         : Functions.NullIV(parentB[2], "B"))
                                                  : frame.DisplayDef;
                        frame.DisplaySpaAlt = (frame.DisplaySpa == "A" || frame.DisplaySpa == "B")
                                                  ? (frame.DisplaySpa == "A"
                                                         ? Functions.NullIV(parentA[3], "A")
                                                         : Functions.NullIV(parentB[3], "B"))
                                                  : frame.DisplaySpa;
                        frame.DisplaySpdAlt = (frame.DisplaySpd == "A" || frame.DisplaySpd == "B")
                                                  ? (frame.DisplaySpd == "A"
                                                         ? Functions.NullIV(parentA[4], "A")
                                                         : Functions.NullIV(parentB[4], "B"))
                                                  : frame.DisplaySpd;
                        frame.DisplaySpeAlt = (frame.DisplaySpe == "A" || frame.DisplaySpe == "B")
                                                  ? (frame.DisplaySpe == "A"
                                                         ? Functions.NullIV(parentA[5], "A")
                                                         : Functions.NullIV(parentB[5], "B"))
                                                  : frame.DisplaySpe;
                    }

                    HP.DataPropertyName = "DisplayHpAlt";
                    Atk.DataPropertyName = "DisplayAtkAlt";
                    Def.DataPropertyName = "DisplayDefAlt";
                    SpA.DataPropertyName = "DisplaySpaAlt";
                    SpD.DataPropertyName = "DisplaySpdAlt";
                    Spe.DataPropertyName = "DisplaySpeAlt";
                }

                if (generator.FrameType == FrameType.BWBred ||
                    generator.FrameType == FrameType.BWBredInternational ||
                    generator.FrameType == FrameType.BWBred ||
                    generator.FrameType == FrameType.BWBredInternational)
                {
                    foreach (Frame frame in frames)
                    {
                        frame.DisplayHpAlt = string.IsNullOrEmpty(frame.DisplayHp)
                                                 ? Functions.NullIV(rngIVs[0])
                                                 : (frame.DisplayHp == "Fe"
                                                        ? Functions.NullIV(parentA[0], "Fe")
                                                        : Functions.NullIV(parentB[0], "Ma"));
                        frame.DisplayAtkAlt = string.IsNullOrEmpty(frame.DisplayAtk)
                                                  ? Functions.NullIV(rngIVs[1])
                                                  : (frame.DisplayAtk == "Fe"
                                                         ? Functions.NullIV(parentA[1], "Fe")
                                                         : Functions.NullIV(parentB[1], "Ma"));
                        frame.DisplayDefAlt = string.IsNullOrEmpty(frame.DisplayDef)
                                                  ? Functions.NullIV(rngIVs[2])
                                                  : (frame.DisplayDef == "Fe"
                                                         ? Functions.NullIV(parentA[2], "Fe")
                                                         : Functions.NullIV(parentB[2], "Ma"));
                        frame.DisplaySpaAlt = string.IsNullOrEmpty(frame.DisplaySpa)
                                                  ? Functions.NullIV(rngIVs[3])
                                                  : (frame.DisplaySpa == "Fe"
                                                         ? Functions.NullIV(parentA[3], "Fe")
                                                         : Functions.NullIV(parentB[3], "Ma"));
                        frame.DisplaySpdAlt = string.IsNullOrEmpty(frame.DisplaySpd)
                                                  ? Functions.NullIV(rngIVs[4])
                                                  : (frame.DisplaySpd == "Fe"
                                                         ? Functions.NullIV(parentA[4], "Fe")
                                                         : Functions.NullIV(parentB[4], "Ma"));
                        frame.DisplaySpeAlt = string.IsNullOrEmpty(frame.DisplaySpe)
                                                  ? Functions.NullIV(rngIVs[5])
                                                  : (frame.DisplaySpe == "Fe"
                                                         ? Functions.NullIV(parentA[5], "Fe")
                                                         : Functions.NullIV(parentB[5], "Ma"));

                        if (completeIVs)
                        {
                            var DisplayIVs = new[]
                                {
                                    uint.Parse(frame.DisplayHpAlt),
                                    uint.Parse(frame.DisplayAtkAlt),
                                    uint.Parse(frame.DisplayDefAlt),
                                    uint.Parse(frame.DisplaySpeAlt),
                                    uint.Parse(frame.DisplaySpaAlt),
                                    uint.Parse(frame.DisplaySpdAlt)
                                };

                            frame.CharacteristicIVs = DisplayIVs;
                        }

                        HP.DataPropertyName = "DisplayHpAlt";
                        Atk.DataPropertyName = "DisplayAtkAlt";
                        Def.DataPropertyName = "DisplayDefAlt";
                        SpA.DataPropertyName = "DisplaySpaAlt";
                        SpD.DataPropertyName = "DisplaySpdAlt";
                        Spe.DataPropertyName = "DisplaySpeAlt";
                    }

                    Characteristic.Visible = completeIVs;
                }

                if (generator.FrameType == FrameType.Method5Natures && rngIVsOnly)
                {
                    // make the characteristic IVs, we need to clone the array because the function moves them
                    uint[] characteristicIVs = Functions.moveSpeFromBack(rngIVs);
                    foreach (Frame frame in frames)
                    {
                        frame.CharacteristicIVs = characteristicIVs;
                    }
                    Characteristic.Visible = true;
                }
            }

            //  Hide some columns based on output type
            if (generator.FrameType == FrameType.RSBredLower)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = true;
                Time.DataPropertyName = "Time";
                Shiny.Visible = false;
                Nature.Visible = false;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = false;
                Atk.Visible = false;
                Def.Visible = false;
                SpA.Visible = false;
                SpD.Visible = false;
                Spe.Visible = false;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            //  Hide some columns based on output type
            if (generator.FrameType == FrameType.RSBredUpper ||
                generator.FrameType == FrameType.RSBredUpperSplit)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = true;
                Time.DataPropertyName = "Time";
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            //  Hide some columns based on output type
            if (generator.FrameType == FrameType.Bred ||
                generator.FrameType == FrameType.BredSplit ||
                generator.FrameType == FrameType.BredAlternate ||
                generator.FrameType == FrameType.RSBredUpper ||
                generator.FrameType == FrameType.RSBredUpperAlt ||
                generator.FrameType == FrameType.RSBredUpperSplit)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = false;
                Time.Visible = true;
                Time.DataPropertyName = "Time";
                Shiny.Visible = false;
                Nature.Visible = false;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            //  Hide some columns based on output type

            if (generator.FrameType == FrameType.Method5Standard ||
                generator.FrameType == FrameType.Method5CGear)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = false;
                Time.Visible = false;
                Shiny.Visible = false;
                Nature.Visible = false;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }
            else if (generator.FrameType == FrameType.DPPtBred)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = false;
                Time.Visible = false;
                Shiny.Visible = false;
                Nature.Visible = false;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.Method5Natures)
            {
                Frame.Visible = true;
                Offset.Visible = false;

                if (generator.EncounterType != EncounterType.Stationary &&
                    generator.EncounterType != EncounterType.Gift &&
                    generator.EncounterType != EncounterType.Roamer &&
                    generator.EncounterType != EncounterType.LarvestaEgg &&
                    generator.EncounterType != EncounterType.Entralink &&
                    generator.EncounterType != EncounterType.HiddenGrotto)
                    EncounterSlot.Visible = true;
                else
                    EncounterSlot.Visible = false;

                ItemCalc.Visible = false;
                PID.Visible = true;

                if (generator.EncounterType == EncounterType.Entralink)
                {
                    Time.Visible = true;
                    Time.DataPropertyName = "EntralinkTime";
                }
                else
                {
                    Time.Visible = false;
                    Time.DataPropertyName = "Time";
                }

                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot64";

                if (generator.EncounterType == EncounterType.WildCaveSpot ||
                    generator.EncounterType == EncounterType.WildWaterSpot ||
                    generator.EncounterType == EncounterType.WildShakerGrass)
                {
                    CaveSpot.Visible = true;
                    if (generator.EncounterType == EncounterType.WildCaveSpot)
                        CaveSpot.HeaderText = "Cave Spot";
                    else if (generator.EncounterType == EncounterType.WildWaterSpot)
                        CaveSpot.HeaderText = "Bubble Spot";
                    else
                        CaveSpot.HeaderText = "Shaking Grass";
                }
                else
                {
                    CaveSpot.Visible = false;
                }

                HP.Visible = false;
                Atk.Visible = false;
                Def.Visible = false;
                SpA.Visible = false;
                SpD.Visible = false;
                Spe.Visible = false;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            //  Hide some columns based on output type
            if (generator.FrameType == FrameType.HGSSBred)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = false;
                Time.Visible = false;
                Shiny.Visible = false;
                Nature.Visible = false;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = true;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            //  Hide some columns based on output type
            if (generator.FrameType == FrameType.WondercardIVs)
            {
                if (generator.EncounterType == EncounterType.Manaphy)
                {
                    PID.Visible = true;
                    Nature.Visible = true;
                }
                else
                {
                    PID.Visible = false;
                    Nature.Visible = false;
                }

                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;

                Time.Visible = false;
                Shiny.Visible = false;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = true;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = false;
                f125.Visible = false;
                f25.Visible = false;
                f75.Visible = false;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.Gen4Normal ||
                generator.FrameType == FrameType.Gen4International)
            {
                //  Hide IV columns
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = false;
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = true;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = false;
                Atk.Visible = false;
                Def.Visible = false;
                SpA.Visible = false;
                SpD.Visible = false;
                Spe.Visible = false;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.Method1)
            {
                //  Show ALL columns
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = true;
                Time.DataPropertyName = "Time";
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = true;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.Method2 ||
                generator.FrameType == FrameType.Method3 ||
                generator.FrameType == FrameType.Method4 ||
                generator.FrameType == FrameType.ColoXD)
            {
                //  Show ALL columns
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;

                if (generator.FrameType != FrameType.ColoXD)
                {
                    Time.Visible = true;
                    Time.DataPropertyName = "Time";
                }
                else
                {
                    Time.Visible = false;
                }

                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.MethodJ ||
                generator.FrameType == FrameType.ChainedShiny)
            {
                //  Show ALL columns
                Frame.Visible = true;
                Offset.Visible = true;

                EncounterSlot.Visible = generator.EncounterType !=
                                        EncounterType.Stationary;

                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = false;
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;

                if (generator.FrameType == FrameType.ChainedShiny)
                {
                    Offset.Visible = false;
                    EncounterSlot.Visible = false;
                }
            }

            if (generator.FrameType == FrameType.MethodK)
            {
                Frame.Visible = true;
                Offset.Visible = true;
                Elm.Visible = true;
                EncounterSlot.Visible = generator.EncounterType !=
                                        EncounterType.Stationary;

                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = false;
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.MethodH1 ||
                generator.FrameType == FrameType.MethodH2 ||
                generator.FrameType == FrameType.MethodH4)
            {
                Frame.Visible = true;
                Offset.Visible = true;
                EncounterSlot.Visible = true;

                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = true;
                Time.DataPropertyName = "Time";
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = false;
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.Wondercard5thGen ||
                generator.FrameType == FrameType.Wondercard5thGenFixed)
            {
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = false;
                Time.Visible = false;
                Shiny.Visible = false;
                Nature.Visible = true;
                Ability.Visible = false;
                Dream.Visible = false;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot64";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = true;
                HiddenPowerPower.Visible = true;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = false;
            }

            if (generator.FrameType == FrameType.BWBred ||
                generator.FrameType == FrameType.BWBredInternational ||
                generator.FrameType == FrameType.BW2Bred ||
                generator.FrameType == FrameType.BW2BredInternational)
            {
                //  Show ALL columns
                Frame.Visible = true;
                Offset.Visible = false;
                EncounterSlot.Visible = false;
                ItemCalc.Visible = false;
                PID.Visible = true;
                Time.Visible = false;
                Shiny.Visible = true;
                Nature.Visible = true;
                Ability.Visible = true;
                Dream.Visible = true;
                Coin.Visible = false;
                Elm.Visible = false;
                Chatot.Visible = true;
                Chatot.DataPropertyName = "Chatot64";
                CaveSpot.Visible = false;

                HP.Visible = true;
                Atk.Visible = true;
                Def.Visible = true;
                SpA.Visible = true;
                SpD.Visible = true;
                Spe.Visible = true;
                HiddenPower.Visible = false;
                HiddenPowerPower.Visible = false;

                f50.Visible = true;
                f125.Visible = true;
                f25.Visible = true;
                f75.Visible = true;

                PossibleShakingSpot.Visible = false;
                MaleOnlySpecies.Visible = true;
            }

            if (generator.FrameType == FrameType.BWBred ||
                generator.FrameType == FrameType.BWBredInternational ||
                generator.FrameType == FrameType.BW2Bred ||
                generator.FrameType == FrameType.BW2BredInternational ||
                generator.FrameType == FrameType.DPPtBred ||
                generator.FrameType == FrameType.HGSSBred ||
                generator.FrameType == FrameType.Bred ||
                generator.FrameType == FrameType.BredSplit ||
                generator.FrameType == FrameType.BredAlternate ||
                generator.FrameType == FrameType.RSBredUpper ||
                generator.FrameType == FrameType.RSBredUpperAlt ||
                generator.FrameType == FrameType.RSBredUpperSplit ||
                generator.FrameType == FrameType.Method5Natures)
            {
                displayParentsInSearchToolStripMenuItem.Enabled = true;

                if (generator.FrameType == FrameType.Method5Natures)
                {
                    displayParentsInSearchToolStripMenuItem.Text = "Display Characteristics in Search...";
                    resetParentsToolStripMenuItem.Text = "Reset Characteristics";
                }
                else
                {
                    displayParentsInSearchToolStripMenuItem.Text = "Display Parents in Search...";
                    resetParentsToolStripMenuItem.Text = "Reset Parents";
                }
            }
            else
            {
                displayParentsInSearchToolStripMenuItem.Enabled = false;
            }

            // update frame number for bw2
            if (offset > 0)
            {
                foreach (Frame frame in frames)
                {
                    frame.Number -= offset;
                }
            }

            //  Bind our returned list of frames to the grid
            dataGridViewValues.DataSource = frames;
        }
コード例 #5
0
        private void Generate(FrameGenerator generator, IEnumerable<DateTime> possibleDates, uint minFrame,
                              uint maxFrame, Profile profile, uint groupSize, uint calibratedDelay)
        {
            const uint incrementFound = 1;
            List<List<ButtonComboType>> keypresses = profile.GetKeypresses();

            foreach (DateTime seedTime in possibleDates)
            {
                waitHandle.WaitOne();
                foreach (var combo in keypresses)
                {
                    for (uint timer0 = profile.Timer0Min; timer0 <= profile.Timer0Max; timer0++)
                    {
                        ulong seed = Functions.EncryptSeed(seedTime, profile, timer0, Functions.buttonMashed(combo));

                        generator.InitialSeed = seed;
                        generator.InitialFrame = Functions.initialPIDRNG(seed, profile) + minFrame;
                        generator.MaxResults = maxFrame - minFrame + 1;

                        List<Frame> frames = generator.Generate(frameCompare, 0, 0);

                        IFrameCapture previous = null;
                        bool previouslyAdded = false;

                        var frameGroup = new List<IFrameCapture>();
                        // quick check and if it's impossible that this is a match don't waste our time loop
                        // breaks search progress so that needs to get fixed
                        if (frames.Count < groupSize) continue;
                        foreach (Frame frame in frames)
                        {
                            var iframe = new IFrameCapture
                                {
                                    Offset = frame.Number,
                                    Seed = seed,
                                    Frame = frame,
                                    TimeDate = seedTime,
                                    Timer0 = timer0,
                                    Delay = calibratedDelay,
                                    KeyPresses = combo
                                };

                            //  Calibrated delay instead of the real delay for correct CGear Times

                            if (previous != null &&
                                (iframe.Offset == previous.Offset + 1 || iframe.Offset == previous.Offset + 2))
                            {
                                if (!previouslyAdded)
                                    frameGroup.Add(previous);

                                frameGroup.Add(iframe);
                                previouslyAdded = true;
                            }
                            else
                            {
                                if (frameGroup.Count >= groupSize)
                                {
                                    lock (threadLock)
                                    {
                                        foreach (IFrameCapture t in frameGroup)
                                            t.Frame.Synchable = grey;
                                        iframes.AddRange(frameGroup);
                                        grey = !grey;
                                    }
                                    refreshQueue = true;
                                    progressFound += incrementFound;
                                }

                                frameGroup = new List<IFrameCapture>();
                                previouslyAdded = false;
                            }
                            previous = iframe;
                        }
                        progressSearched += (uint) frames.Count;

                        if (frameGroup.Count >= groupSize)
                        {
                            lock (threadLock)
                            {
                                for (int i = 0; i < frameGroup.Count; ++i)
                                    frameGroup[i].Frame.Synchable = grey;
                                iframes.AddRange(frameGroup);
                                grey = !grey;
                            }
                            refreshQueue = true;
                            progressFound += incrementFound;
                        }
                    }
                }
            }
        }
コード例 #6
0
        private void buttonSeedGenerate_Click(object sender, EventArgs e)
        {
            if (!ParametersInputCheck())
                return;

            #region Initialize

            if (comboBoxNature.Text == "Any")
            {
                MessageBox.Show("Please select a specific list of natures.");
                return;
            }
            List<uint> natures =
                (from t in comboBoxNature.CheckBoxItems where t.Checked select (uint) ((Nature) t.ComboBoxItem).Number).
                    ToList();

            var profile = (Profile) comboBoxProfiles.SelectedItem;
            uint mac_partial = (uint) profile.MAC_Address & 0xFFFFFF;

            uint minFrame = uint.Parse(maskedTextBoxCapMinOffset.Text);
            uint maxFrame = uint.Parse(maskedTextBoxCapMaxOffset.Text);

            uint groupSize = uint.Parse(maskedTextBoxGroupSize.Text);

            uint seedCGear = uint.Parse(textBoxSeed.Text, NumberStyles.HexNumber);

            int generateYear = int.Parse(maskedTextBoxYear.Text);

            if (generateYear < 2000 || generateYear > 2099)
            {
                MessageBox.Show("Year must be a value between 2000 and 2099, inclusive.");
                return;
            }

            uint frameCGear = uint.Parse(maskedTextBoxCGearFrame.Text);
            //generate the CGear Seed Times
            uint ab = seedCGear - mac_partial >> 24;
            uint cd = (seedCGear - mac_partial & 0x00FF0000) >> 16;
            uint efgh = seedCGear - mac_partial & 0x0000FFFF;

            //  Get Delay
            uint delay = efgh + (uint) (2000 - generateYear);

            //  Get Calibration
            uint calibration = uint.Parse(maskedTextBoxDelayCalibration.Text);

            //  Store the Calibrated Delay and offset
            uint calibratedDelay = delay + calibration;

            long offset = -calibratedDelay/60;

            //  Get Hour
            var hour = (int) cd;

            //  We need to check here, as a user could have entered a seed
            //  that is not possible (invalid hour) to lets warn and exit
            //  on it.
            if (hour > 23)
            {
                MessageBox.Show("This seed is invalid, please verify that you have entered it correctly and try again.",
                                "Invalid Seed", MessageBoxButtons.OK);

                return;
            }

            maskedTextBoxDelay.Text = delay.ToString(CultureInfo.InvariantCulture);

            List<List<ButtonComboType>> keypresses = GetKeypresses();

            iframes = new List<IFrameCapture>();
            var generator = new FrameGenerator
                {
                    InitialSeed = seedCGear,
                    FrameType = FrameType.Method5CGear,
                    InitialFrame = frameCGear,
                    MaxResults = 1
                };

            GenderFilter genderFilter = checkBoxGenderless.Checked
                                            ? new GenderFilter("Genderless", 0xFF, GenderCriteria.DontCareGenderless)
                                            : new GenderFilter("Gendered", 0, GenderCriteria.DontCareGenderless);

            var possibleDates = new List<DateTime>();
            //  Loop through all months
            for (int month = 1; month <= 12; month++)
            {
                int daysInMonth = DateTime.DaysInMonth(generateYear, month);

                //  Loop through all days
                for (int day = 1; day <= daysInMonth; day++)
                {
                    //  Loop through all minutes
                    for (int minute = 0; minute <= 59; minute++)
                    {
                        //  Loop through all seconds
                        for (int second = 0; second <= 59; second++)
                        {
                            if (ab != ((month*day + minute + second)%0x100)) continue;
                            var dateTime = new DateTime(generateYear, month, day, hour, minute, second);

                            // Standard seed time will be the C-Gear seed time, minus the delay
                            // We'll skip seeds that cross over into the next day and cause unwanted advances
                            // Added calibration to the delay to account for the fact that people aren't perfectly fast
                            DateTime possibleDate = dateTime.AddSeconds(offset);
                            if (dateTime.Day == possibleDate.Day)
                                possibleDates.Add(possibleDate);
                        }
                    }
                }
            }

            // Generate the IVs for the corresponding C-Gear seed first

            var rngIVs = new uint[6];

            frameCompare = new FrameCompare(
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                null,
                -1,
                false,
                false,
                false,
                null,
                new NoGenderFilter());

            List<Frame> IVs = generator.Generate(frameCompare, 0, 0);
            if (IVs.Count > 0)
            {
                rngIVs[0] = IVs[0].Hp;
                rngIVs[1] = IVs[0].Atk;
                rngIVs[2] = IVs[0].Def;
                rngIVs[3] = IVs[0].Spa;
                rngIVs[4] = IVs[0].Spd;
                rngIVs[5] = IVs[0].Spe;
            }

            // Now that each combo box item is a custom object containing the FrameType reference
            // We can simply retrieve the FrameType from the selected item
            generator.FrameType = FrameType.Method5Natures;
            generator.EncounterType = EncounterType.Entralink;
            generator.RNGIVs = rngIVs;

            generator.InitialFrame = minFrame;
            generator.MaxResults = maxFrame - minFrame + 1;

            frameCompare = new FrameCompare(
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                null,
                -1,
                false,
                false,
                false,
                null,
                new NoGenderFilter());

            frameCompare = new FrameCompare(
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                0, CompareType.None,
                natures,
                -1,
                false,
                false,
                false,
                null,
                genderFilter);

            #endregion

            waitHandle = new EventWaitHandle(true, EventResetMode.ManualReset);

            jobs = new Thread[cpus];
            //divide the possible times into even groups
            int split = possibleDates.Count/cpus;
            for (int i = 0; i < cpus; ++i)
            {
                List<DateTime> dates = i < cpus - 1
                                           ? possibleDates.GetRange(i*split, split)
                                           : possibleDates.GetRange(i*split, split + possibleDates.Count%cpus);
                //if the last i make sure we add the remainder as well
                // technically supposed to copy profile and send in a copy because now the threads are
                // using a reference to the same profile but that's fine because the profile isn't getting
                // mutated anyway
                jobs[i] =
                    new Thread(
                        () =>
                        Generate(generator.Clone(), dates, minFrame, maxFrame,
                                 profile, groupSize, calibratedDelay));
                jobs[i].Start();
            }

            listBindingCap = new BindingSource {DataSource = iframes};
            dataGridViewCapValues.DataSource = listBindingCap;

            progressTotal =
                (ulong)
                (maxFrame - minFrame + 1)*(profile.Timer0Max - profile.Timer0Min + 1)*(ulong) keypresses.Count*
                (ulong) possibleDates.Count;
            var progressJob =
                new Thread(() => ManageProgress(listBindingCap, dataGridViewCapValues, generator.FrameType, 0));
            progressJob.Start();
            progressJob.Priority = ThreadPriority.Lowest;

            buttonSeedGenerate.Enabled = false;
        }