コード例 #1
0
        private void EggList_search()
        {
            int min = (int)n_min.Value;
            int max = (int)n_max.Value;

            uint[] st =
            {
                (uint)L_status0a.Value,
                (uint)L_status1a.Value,
                (uint)L_status2a.Value,
                (uint)L_status3a.Value,
            };

            uint[] status = { st[0], st[1], st[2], st[3] };
            var    tiny   = new TinyMT(status, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff));

            List <DataGridViewRow> list = new List <DataGridViewRow>();

            L_dataGridView.Rows.Clear();

            var rng        = getRNGSettings();
            int frameCount = 0;

            for (int i = 1; i <= max; i++)
            {
                //statusの更新
                tiny.status.CopyTo(st, 0);
                EggRNGSearch.EggRNGResult result = rng.Generate(st);
                int ctr = result.FramesUsed;
                result.FramesUsed = frameCount;
                frameCount       += ctr;

                if (i >= min)
                {
                    var row = getRow(i, rng, result, L_dataGridView);
                    list.Add(row);
                }
                // Continue adjacents
                rng.tiny.status.CopyTo(tiny.status, 0);
            }

            L_dataGridView.Rows.AddRange(list.ToArray());
            L_dataGridView.CurrentCell = null;
        }
コード例 #2
0
        private void search()
        {
            int min = (int)s_min.Value;
            int max = (int)s_max.Value;

            uint[] st =
            {
                (uint)status0.Value,
                (uint)status1.Value,
                (uint)status2.Value,
                (uint)status3.Value,
            };

            uint[] status = { st[0], st[1], st[2], st[3] };
            var    tiny   = new TinyMT(status, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff));

            List <DataGridViewRow> list = new List <DataGridViewRow>();

            k_dataGridView.Rows.Clear();

            var setting = getSettings();
            var rng     = getRNGSettings();

            for (int i = 0; i < min; i++)
            {
                tiny.nextState();
            }
            for (int i = min; i <= max; i++, tiny.nextState())
            {
                //statusの更新
                tiny.status.CopyTo(st, 0);
                EggRNGSearch.EggRNGResult result = rng.Generate(st);

                if (!frameMatch(result, setting))
                {
                    continue;
                }
                list.Add(getRow(i, rng, result, k_dataGridView));
            }

            k_dataGridView.Rows.AddRange(list.ToArray());
            k_dataGridView.CurrentCell = null;
        }
コード例 #3
0
        public EggRNGResult Generate(uint[] seed)
        {
            tiny = new TinyMT(seed, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff));
            EggRNGResult egg = new EggRNGResult();

            seed.CopyTo(egg.Seed, 0);
            FramesUsed = 0; // Reset Frame Counter

            //最初の消費 Initial Consumption
            egg.row_r = getRand();

            //性別 Gender
            if (GenderRandom)
            {
                egg.Gender = getRand() % 252 >= GenderRatio ? 0 : 1;
            }
            else if (GenderMale)
            {
                egg.Gender = 0;
            }
            else if (GenderFemale)
            {
                egg.Gender = 1;
            }
            else
            {
                egg.Gender = 2;
            }

            //性格 -- Nature
            egg.Nature = (int)(getRand() % 25);

            //両親変わらず -- Both_Everstone
            //Chooses which parent if necessary; users should not intermix with Power items either.
            if (Both_Everstone)
            {
                egg.BE_InheritParents = (int)(getRand() & 1);
            }

            //特性 -- Ability
            egg.Ability = getRandomAbility(ParentAbility, getRand() % 100);

            egg.InheritStats   = new uint[InheritIVs];
            egg.InheritParents = new uint[InheritIVs];

            //両親パワー系 -- Both_PowerItem
            //Chooses which parent if necessary
            if (Both_PowerItems)
            {
                egg.InheritParents[0] = (getRand() & 1) == 0 ? (uint)0 : 1;
                egg.InheritStats[0]   = egg.InheritParents[0] == 0 ? (uint)MalePowerStat : (uint)FemalePowerStat;
            }
            else if (PowerItems)
            {
                egg.InheritParents[0] = MalePowerStat > -1 ? (uint)0 : 1;
                egg.InheritStats[0]   = egg.InheritParents[0] == 0 ? (uint)MalePowerStat : (uint)FemalePowerStat;
            }

            //遺伝箇所 -- IV Inheritance
            for (int i = 0; i < InheritIVs; i++)
            {
                if ((i == 0) && PowerItems)
                {
                    continue;
                }

repeat:
                egg.InheritStats[i] = getRand() % 6;

                // Scan for duplicate IV
                for (int k = 0; k < i; k++)
                {
                    if (egg.InheritStats[k] == egg.InheritStats[i])
                    {
                        goto repeat;
                    }
                }

                egg.InheritParents[i] = getRand() & 1;
            }

            //基礎個体値 -- Base IVs
            for (int j = 0; j < 6; j++)
            {
                egg.BaseIV[j] = (int)(getRand() & 0x1F);
            }
            egg.InheritIVs(pre_parent, post_parent);

            //暗号化定数 -- Encryption Constant
            egg.EC = getRand();

            //性格値判定 -- PID Rerolls
            for (int i = PIDRerolls; i > 0; i--)
            {
                egg.PID = getRand();
                egg.PSV = ((egg.PID >> 16) ^ (egg.PID & 0xFFFF)) >> 4;

                if (!SearchOtherTSV && ConciderTSV && egg.PSV == TSV)
                {
                    egg.Shiny = true;
                    break;
                }
            }

            //ボール消費 -- Ball Inheritance
            if (Homogeneous) // Same Species (no Ditto)
            {
                egg.Ball = getRand() % 100 >= 50 ? 0 : 1;
            }

            //something
            getRand();

            egg.FramesUsed = FramesUsed;
            return(egg);
        }