Beispiel #1
0
 private static void tiny_Advance(int n)
 {
     for (int i = n; i > 0; i--)
     {
         RNGPool.AdvanceTiny();
     }
 }
Beispiel #2
0
        private void Search7_Egg()
        {
            var rng = new TinyMT(Status);
            int min = (int)Frame_min.Value;
            int max = (int)Frame_max.Value;

            bool CheckRandomNumber(uint rn)
            {
                int sv = (int)Pokemon.getTSV(rn);

                return(sv == TSV.Value || ConsiderOtherTSV.Checked && OtherTSVList.Contains(sv));
            }

            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            // Prepare
            getsetting(rng);
            // Start
            for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
            {
                var result = RNGPool.GenerateEgg7() as EggResult;
                if (!(filter.CheckResult(result) || ShinyRemind.Checked && CheckRandomNumber(result.RandNum)))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: i));
                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    return;
                }
            }
        }
Beispiel #3
0
        private void Search7_TimelineLeap2(List <int> framelist, List <ModelStatus> statuslist, int target, List <int> timelist)
        {
            // Prepare
            SFMT sfmt = new SFMT(Seed.Value);

            for (int i = 0; i < target; i++)
            {
                sfmt.Next();
            }
            getsetting(sfmt);
            Frame.standard = timelist.Last() * 2;

            // Start
            for (int i = 0; i < framelist.Count; i++)
            {
                RNGPool.CopyStatus(statuslist[i]);
                var result = RNGPool.Generate7();
                if (!filter.CheckResult(result))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: target, time: timelist[i] * 2)
                {
                    Frame0 = framelist[i]
                });
            }
        }
Beispiel #4
0
        private void Search6_Normal()
        {
            var rng = new MersenneTwister(Seed.Value);
            int min = (int)Frame_min.Value;
            int max = (int)Frame_max.Value;

            if (AroundTarget.Checked)
            {
                min = (int)TargetFrame.Value - 100; max = (int)TargetFrame.Value + 100;
            }
            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            // Prepare
            getsetting(rng);
            // Start
            for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
            {
                RNGResult result = RNGPool.Generate6();
                if (!filter.CheckResult(result))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: i, time: i - min));
                if (Frames.Count > 100000)
                {
                    break;
                }
            }
        }
Beispiel #5
0
        private void Search7_Egg()
        {
            var rng = new TinyMT(Status);
            int min = (int)Frame_min.Value;
            int max = (int)Frame_max.Value;

            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            // Prepare
            getsetting(rng);
            // Start
            for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
            {
                var result = RNGPool.GenerateEgg7() as EggResult;
                if (!(filter.CheckResult(result) || ShinyRemind.Checked && CheckRandomNumber(result.RandNum)))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: i));
                if (Frames.Count > 100000)
                {
                    return;
                }
            }
        }
Beispiel #6
0
        private void Search6_Timeline()
        {
            if (!TTT.HasSeed)
            {
                FormUtil.Error("Please Calibrate Timeline");
                return;
            }

            var timeline = TTT.gettimeline();
            int min      = Math.Max((int)Frame_min.Value, timeline.Startingframe + 2);
            int max      = (int)TimeSpan.Value * 60 + min;

            timeline.Maxframe = max;
            timeline.Generate(ForMainForm: true);
            int listlength = timeline.TinyLength;

            // Prepare
            var rng = new MersenneTwister(Seed.Value);

            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            getsetting(rng);
            Frame.standard = (int)(TargetFrame.Value - min);

            for (int i = 0; i < listlength; i++)
            {
                var tinyframe = timeline.results[i];
                if (tinyframe.unhitable)
                {
                    continue;
                }
                if (tinyframe.framemax < min)
                {
                    continue;
                }
                RNGPool.TinySynced = tinyframe.sync == true; // For stationary
                for (int j = tinyframe.framemin + 2; j <= tinyframe.framemax; j += 2, RNGPool.AddNext(rng), RNGPool.AddNext(rng))
                {
                    while (j < min)
                    {
                        j += 2;
                    }
                    RNGPool.tinystatus = tinyframe.tinystate.Clone();
                    RNGPool.tinystatus.Currentframe = j;
                    RNGResult result = RNGPool.Generate6();
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: j, time: j - min));
                    Frames.Last()._tinystate = new PRNGState(tinyframe.tinystate.Status);
                    if (Frames.Count > MAX_RESULTS_NUM)
                    {
                        return;
                    }
                }
            }
        }
Beispiel #7
0
 private void getspecialinfo(Frame_Misc f)
 {
     RNGPool.time_elapse7(Timedelay);
     f.frameused = RNGPool.index;
     if (FestivalPlaza)
     {
         f.frt = FPFacility.Generate();
     }
     else if (BattleTree)
     {
         RNGPool.modelnumber = 2;
         RNGPool.ResetModelStatus();
         RNGPool.time_elapse7(2);
         f.frameused = RNGPool.index;
         f.trt       = BTTrainer.Generate();
     }
     else if (filter.Random)
     {
         f.RandN = (int)(RNGPool.getrand64 % N);
     }
     else if (filter.Pokerus)
     {
         f.Pokerus = Pokerus7.getStrain();
     }
 }
Beispiel #8
0
 public override void Delay()
 {
     if (NoDex || YourID && !IsEgg)
     {
         Generate();
     }
     RNGPool.NormalDelay7();
 }
Beispiel #9
0
        private void Search6_Timeline()
        {
            if (!TTT.HasSeed)
            {
                Error("Please Calibrate Timeline");
                return;
            }

            RNGPool.timeline = TTT.gettimeline();
            int min = Math.Max((int)Frame_min.Value, RNGPool.timeline.Startingframe + 2);
            int max = (int)TimeSpan.Value * 60 + min;

            RNGPool.timeline.Maxframe = max;
            RNGPool.timeline.Generate(Method == 0); // Consider Stationary delay
            int listlength = RNGPool.timeline.TinyLength;

            // Prepare
            var rng = new MersenneTwister(Seed.Value);

            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            getsetting(rng);

            for (int i = 0; i < listlength; i++)
            {
                var tinyframe = RNGPool.timeline.results[i];
                if (tinyframe.unhitable)
                {
                    continue;
                }
                if (tinyframe.framemax < min)
                {
                    continue;
                }
                for (int j = tinyframe.framemin + 2; j <= tinyframe.framemax; j += 2, RNGPool.AddNext(rng), RNGPool.AddNext(rng))
                {
                    while (j < min)
                    {
                        j += 2;
                    }
                    RNGPool.tinystatus = (TinyStatus)tinyframe.tinystate.DeepCopy();
                    RNGPool.tinystatus.Currentframe = j;
                    RNGResult result = RNGPool.Generate6();
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: j, time: j - min));
                    Frames.Last()._tinystate = new PRNGState(tinyframe.state);
                    if (Frames.Count > 100000)
                    {
                        return;
                    }
                }
            }
        }
Beispiel #10
0
 public override void Delay()
 {
     RNGPool.time_elapse7(2);
     if (NoDex || YourID && !IsEgg)
     {
         Generate();
     }
     RNGPool.time_elapse7(RNGPool.DelayTime - 2);
 }
Beispiel #11
0
        private void Search6_Normal()
        {
            int counter = 0;
            int min     = (int)Frame_min.Value;
            int max     = (int)Frame_max.Value;

            while (counter <= int.Parse(MaxSeeds.Text))
            {
                var rng = new MersenneTwister(Seed.Value);
                if (AroundTarget.Checked)
                {
                    min = (int)TargetFrame.Value - 100;
                    max = (int)TargetFrame.Value + 100;
                }
                // Advance
                for (int i = 0; i < min; i++)
                {
                    rng.Next();
                }
                // Prepare
                getsetting(rng);
                // Start
                for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
                {
                    RNGResult result = RNGPool.Generate6();
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: i, time: i - min));
                    // found init seed+spread
                    if (seedsearchCheckBox.Checked == true && Frames.Count >= 1)
                    {
                        counter = int.Parse(MaxSeeds.Text) + 1;
                        break;
                    }
                    //normal search
                    else if (Frames.Count > MAX_RESULTS_NUM)
                    {
                        break;
                    }
                }
                if (seedsearchCheckBox.Checked == false)
                {
                    counter = int.Parse(MaxSeeds.Text) + 1;
                }
                else if (counter != int.Parse(MaxSeeds.Text) + 1)
                {
                    Seed.Value++;
                }
                counter++;
            }
        }
Beispiel #12
0
        private void Search7_Timeline()
        {
            SFMT sfmt        = new SFMT(Seed.Value);
            int  start_frame = (int)Frame_min.Value;

            FuncUtil.getblinkflaglist(start_frame, start_frame, sfmt, Modelnum);
            // Advance
            for (int i = 0; i < start_frame; i++)
            {
                sfmt.Next();
            }
            // Prepare
            ModelStatus status = new ModelStatus(Modelnum, sfmt);

            getsetting(sfmt);
            int totaltime = (int)TimeSpan.Value * 30;
            int frame = (int)Frame_min.Value;
            int frameadvance, Currentframe;

            // Start
            for (int i = 0; i <= totaltime; i++)
            {
                Currentframe = frame;

                RNGPool.CopyStatus(status);

                var result = RNGPool.Generate7() as Result7;

                frameadvance = status.NextState();
                frame       += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }

                if (!filter.CheckResult(result))
                {
                    continue;
                }

                Frames.Add(new Frame(result, frame: Currentframe, time: i * 2));

                if (Frames.Count > 100000)
                {
                    break;
                }
            }
            if (Frames.FirstOrDefault()?.FrameNum == (int)Frame_min.Value)
            {
                Frames[0].Blink = FuncUtil.blinkflaglist[0];
            }
        }
Beispiel #13
0
        private void Search7_EggList()
        {
            var  rng       = new TinyMT(Status);
            int  min       = (int)Egg_min.Value - 1;
            int  max       = (int)Egg_max.Value - 1;
            int  target    = (int)TargetFrame.Value;
            bool gotresult = false;

            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            TinyMT Seedrng = new TinyMT(rng.status);

            // Prepare
            getsetting(rng);
            // Start
            int frame   = 0;
            int advance = 0;

            for (int i = 0; i <= max; i++)
            {
                var result = RNGPool.GenerateEgg7() as EggResult;
                advance = result.FramesUsed;
                if (!gotresult && frame <= target && target < frame + advance)
                {
                    Egg_Instruction.Text = getEggListString(i, target - frame);
                    gotresult            = true;
                }
                frame += advance;
                for (int j = advance; j > 0; j--)
                {
                    RNGPool.AddNext(rng);
                }
                if (i < min || !filter.CheckResult(result))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: frame - advance, eggnum: i + 1));
                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    break;
                }
            }
            if (!gotresult)
            {
                Egg_Instruction.Text = getEggListString(-1, -1);
            }
        }
Beispiel #14
0
        private void Search6_Egg()
        {
            var rng = new MersenneTwister(Seed.Value);
            int min = (int)Frame_min.Value;
            int max = (int)Frame_max.Value;

            if (AroundTarget.Checked)
            {
                min = (int)TargetFrame.Value - 100; max = (int)TargetFrame.Value + 100;
            }
            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            // Prepare
            getsetting(rng);

            // The egg already have
            uint[] key    = { Key0.Value, Key1.Value };
            Egg6   IG     = RNGPool.igenerator as Egg6;
            var    eggnow = IG.Generate(null, key) as ResultE6;

            eggnow.hiddenpower = (byte)Pokemon.getHiddenPowerValue(eggnow.IVs);
            if (IG.IsMainRNGEgg)
            {
                eggnow.PID = 0xFFFFFFFF;
            }
            eggnow.Status = "Current";
            Frames.Add(new Frame(eggnow, frame: -1));

            // Start
            for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
            {
                var result = RNGPool.Generate6();
                if (!filter.CheckResult(result))
                {
                    continue;
                }
                Frames.Add(new Frame(result, frame: i, time: i - min));
                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    return;
                }
            }
        }
Beispiel #15
0
        private void Search6_Horde()
        {
            var rng = new MersenneTwister(Seed.Value);
            int min = (int)Frame_min.Value;
            int max = (int)Frame_max.Value;

            if (AroundTarget.Checked)
            {
                min = (int)TargetFrame.Value - 100; max = (int)TargetFrame.Value + 100;
            }
            // Advance
            for (int i = 0; i < min; i++)
            {
                rng.Next();
            }
            // Prepare
            if (FullInfoHorde)
            {
                RNGPool.horde             = new Horde(TTT.Gen6Tiny, (int)TTT.Parameter1.Value, IsORAS);
                SlotSpecies.SelectedValue = slotspecies[RNGPool.horde.Slot - 1];
            }
            if (SlotSpecies.SelectedIndex > 0)
            {
                var Hordespecies = (ea as HordeArea).getSpecies(Ver, (byte)SlotSpecies.SelectedIndex);
                L_HordeInfo.Text = "Species: " + string.Join(" \t", Hordespecies.Select(t => StringItem.speciestr[t])) + Environment.NewLine;
            }
            L_HordeInfo.Text += RNGPool.horde?.ToString() ?? string.Empty;
            getsetting(rng);
            // Start
            for (int i = min; i <= max; i++, RNGPool.AddNext(rng))
            {
                var results = RNGPool.GenerateHorde6();
                foreach (var result in results)
                {
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: i, time: i - min));
                }
                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    break;
                }
            }
        }
Beispiel #16
0
        public static SOSResult Generate()
        {
            var rt = new SOSResult();

            // First 2 frames for sos call
            rt.Call1 = (byte)(rand % 100);
            rt.Call2 = (byte)(rand % 100);

            // Generate SOS Pokemon (sync, slot, level, held item)
            rt.Sync = rand % 100 >= 50;
            if (Weather)
            {
                rt.Slot = getWeatherSlot(rand % 100);
            }
            if (rt.Slot == 0)
            {
                rt.Slot = getSOSSlot(rand % 100);
            }
            rt.Level = (byte)(rand % 4);
            RNGPool.Advance(1);

            rt.HeldItem = (byte)(rand % 100);

            // Chaining bonus
            while (rt.BumpedIVs.Count(iv => iv) < FlawlessCount)
            {
                rt.BumpedIVs[rand % 6] = true;
            }
            rt.HA = rand % 100 < HARate;

            if (rt.Call1 >= Rate1)
            {
                rt.Advance = 1;
            }
            else if (rt.Call2 >= Rate2)
            {
                rt.Advance = 2;
            }
            else
            {
                rt.Advance = RNGPool.index;
            }
            return(rt);
        }
Beispiel #17
0
        private void Search7_TimelineLeap1(int newstartframe, int targetframe, ModelStatus status, int totaltime)
        {
            // Prepare
            SFMT sfmt = new SFMT(Seed.Value);

            for (int i = 0; i < newstartframe; i++)
            {
                sfmt.Next();
            }
            getsetting(sfmt);
            int frame = newstartframe;
            int frameadvance, Currentframe;

            // Start
            for (int i = 0; i <= totaltime; i++)
            {
                Currentframe = frame;

                RNGPool.CopyStatus(status);

                var result = RNGPool.Generate7();

                byte Jumpflag = (byte)(status.fidget_cd == 1 ? 1 : 0);
                frameadvance = status.NextState();
                frame       += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }
                if (Currentframe <= targetframe && targetframe < frame)
                {
                    Frame.standard = i * 2;
                }

                if (!filter.CheckResult(result))
                {
                    continue;
                }

                Frames.Add(new Frame(result, frame: Currentframe, time: i * 2, blink: Jumpflag));
            }
        }
Beispiel #18
0
        private void Search6()
        {
            MersenneTwister MT        = new MersenneTwister(Seed.Value);
            int             frame     = (int)StartingFrame.Value;
            int             loopcount = (int)MaxResults.Value;
            int             delay     = (int)Delay.Value;
            ulong           N         = (ulong)Range.Value;

            for (int i = 0; i < frame; i++)
            {
                MT.Next();
            }

            RNGPool.CreateBuffer(MT);

            for (int i = 0; i < loopcount; i++, RNGPool.AddNext(MT))
            {
                var f = new Frame_Misc();
                f.Frame    = frame++;
                f.Rand32   = RNGPool.getcurrent;
                f.realtime = i;
                f.st       = RNGPool.getcurrentstate;

                RNGPool.Rewind(0);
                RNGPool.Advance(delay);
                if (filter.Random)
                {
                    f.RandN = (int)((RNGPool.getrand * N) >> 32);
                }
                else if (filter.Pokerus)
                {
                    f.Pokerus = Pokerus6.getStrain();
                }

                if (!filter.check(f))
                {
                    continue;
                }

                Frames.Add(f);
            }
        }
Beispiel #19
0
        private void B_Calc_Click(object sender, EventArgs e)
        {
            Frames.Clear();
            Frames = new List <Frame_Misc>();
            getFilter();
            Frame_Misc.X64 = RNG.SelectedIndex == 0;
            switch (RNG.SelectedIndex)
            {
            case 0 when !CreateTimeline.Checked: Search7(); break;

            case 0 when CreateTimeline.Checked: Search7_Timeline(); break;

            case 1: Search7_Battle(); break;

            case 2: Search6(); break;

            case 3: Search6_Battle(); break;
            }
            AdjustDGVColumns();
            RNGPool.Clear();
            GC.Collect();
        }
Beispiel #20
0
        private void Search7_EggShortestPath()
        {
            var rng         = new TinyMT(Status);
            int max         = (int)TargetFrame.Value;
            int rejectcount = 0;
            List <EggResult> ResultsList = new List <EggResult>();

            // Prepare
            getsetting(rng);
            // Start
            for (int i = 0; i <= max; i++, RNGPool.AddNext(rng))
            {
                ResultsList.Add(RNGPool.GenerateEgg7() as EggResult);
            }
            var FrameIndexList = Gen7EggPath.Calc(ResultsList.Select(egg => egg.FramesUsed).ToArray());

            max = FrameIndexList.Count;
            for (int i = 0; i < max; i++)
            {
                int index  = FrameIndexList[i];
                var result = ResultsList[index];
                result.hiddenpower = (byte)Pokemon.getHiddenPowerValue(result.IVs);
                var Frame = new Frame(result, frame: index, eggnum: i + 1);
                if (i == max - 1 || FrameIndexList[i + 1] - index > 1)
                {
                    Frame.FrameUsed = StringItem.EGGACCEPT_STR[lindex, 0];
                }
                else
                {
                    Frame.FrameUsed = StringItem.EGGACCEPT_STR[lindex, 1];
                    rejectcount++;
                }
                Frames.Add(Frame);
            }
            Egg_Instruction.Text = getEggListString(max - rejectcount - 1, rejectcount, true);
        }
Beispiel #21
0
 private static void Advance(int n) => RNGPool.Advance(n);
Beispiel #22
0
 private static void time_elapse(int n) => RNGPool.time_elapse7(n);
Beispiel #23
0
        private void Search6_Battle()
        {
            TinyMT tiny      = TTT.Checked ? new TinyMT(Program.mainform.TinySeeds) : new TinyMT(Seed.Value);
            int    frame     = (int)StartingFrame.Value;
            int    loopcount = (int)MaxResults.Value;
            int    delay     = (int)Delay.Value;
            ulong  N         = (ulong)Range.Value;

            CaptureResult.Details = CB_Detail.Checked || Filters.SelectedTab == TP_Misc;
            var capture6 = new Capture();

            if (Filters.SelectedTab == TP_Capture)
            {
                capture6.Gen6        = true;
                capture6.HPCurr      = (uint)HPCurr.Value;
                capture6.HPMax       = (uint)HPMax.Value;
                capture6.CatchRate   = (byte)CatchRate.Value;
                capture6.StatusBonus = (uint)(int)Status.SelectedValue;
                capture6.BallBonus   = (uint)(int)BallBonus.SelectedValue;
                capture6.DexBonus    = (uint)(int)DexBonus.SelectedValue;
                capture6.OPowerBonus = OPowerList[OPower.SelectedIndex];
                capture6.Calc();
                var criticalchance = capture6.CriticalRate / 256.0;
                var shakechance    = capture6.ShakeRate / 65536.0;
                var capturechance  = criticalchance * shakechance + (1 - criticalchance) * Math.Pow(shakechance, 4);
                L_output.Text = CB_Detail.Checked ? string.Format("Critical {0:P}  \tShake {1:P}", criticalchance, shakechance)
                    : string.Format("Critical {0:P}  \tSuccess {1:P}", criticalchance, capturechance);
            }

            for (int i = 0; i < frame; i++)
            {
                tiny.Next();
            }

            RNGPool.CreateBuffer(tiny);

            for (int i = 0; i < loopcount; i++, RNGPool.AddNext(tiny, AutoCheck: false))
            {
                var f = new Frame_Misc();
                f.Frame  = frame++;
                f.Rand32 = RNGPool.getcurrent;
                f.st     = RNGPool.getcurrentstate;

                RNGPool.Rewind(0);
                RNGPool.Advance(delay);
                if (filter.Random)
                {
                    f.RandN = (int)((RNGPool.getrand * N) >> 32);
                }
                if (ShowCapture)
                {
                    RNGPool.Rewind(0);
                    f.Crt = capture6.Catch();
                }

                if (!filter.check(f))
                {
                    continue;
                }

                Frames.Add(f);
            }
        }
Beispiel #24
0
        public override RNGResult Generate()
        {
            ResultW7 rt = new ResultW7();

            rt.Level = SpecialLevel;

            if (Fishing)
            {
                IsSpecial = rt.IsSpecial = getrand % 100 >= SpecialEnctr;
                time_elapse(12);
                if (IsSpecial) // Predict hooked item
                {
                    int mark = RNGPool.index;
                    time_elapse(34);
                    rt.SpecialVal = (byte)(getrand % 100);
                    RNGPool.Rewind(mark); // Don't need to put modelstatus back
                }
            }
            else if (SpecialEnctr > 0)
            {
                IsSpecial = rt.IsSpecial = getrand % 100 < SpecialEnctr;
            }

            if (SOS)
            {
                SOSRNG.Reset();
                SOSRNG.Advance(2);                                                                    // Call Rate Check
                CheckLeadAbility(getsosrand % 100);
                if (SOSRNG.Weather && (rt.Slot = slot = SOSRNG.getWeatherSlot(getsosrand % 100)) > 7) // No Electric/Steel Type in weather sos slots
                {
                    rt.IsSpecial = true;
                }
                else
                {
                    rt.Slot = StaticMagnetPass ? getsmslot(getsosrand) : getslot((int)(getsosrand % 100));
                }
                rt.Level   = (byte)(getsosrand % (uint)(Levelmax - Levelmin + 1) + Levelmin);
                FluteBoost = getFluteBoost(getsosrand % 100);
                ModifyLevel(rt);
            }
            else if (Crabrawler)
            {
                CheckLeadAbility(getrand % 100);
                rt.Slot  = slot = 1;
                rt.Level = ModifiedLevel;
            }
            else if (NormalSlot) // Normal wild
            {
                CheckLeadAbility(getrand % 100);
                rt.Slot    = StaticMagnetPass ? getsmslot(getrand) : getslot((int)(getrand % 100));
                rt.Level   = (byte)(getrand % (ulong)(Levelmax - Levelmin + 1) + Levelmin);
                FluteBoost = getFluteBoost(getrand % 100);
                ModifyLevel(rt);
                if (IsMinior)
                {
                    rt.Forme = (byte)(getrand % 7);
                }
            }
            else // UB or QR
            {
                slot = 0;
                time_elapse(7);
                CheckLeadAbility(getrand % 100);
                time_elapse(3);
            }
            rt.Species = (short)(SpecForm[slot] & 0x7FF);

            if (DelayTime > 0)
            {
                InlineDelay();
            }

            if (!SOS)
            {
                Advance(60);
            }

            //Encryption Constant
            rt.EC = (uint)getrand;

            //PID
            for (int i = PIDroll_count; i > 0; i--)
            {
                rt.PID = (uint)getrand;
                if (rt.PSV == TSV)
                {
                    if (IsShinyLocked)
                    {
                        rt.PID ^= 0x10000000;
                    }
                    else
                    {
                        rt.Shiny       = true;
                        rt.SquareShiny = rt.PRV == TRV;
                    }
                    break;
                }
            }

            //IV
            rt.IVs = new int[6];
            for (int i = PerfectIVCount; i > 0;)
            {
                int tmp = (int)(getrand % 6);
                if (rt.IVs[tmp] == 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] == 0)
                {
                    rt.IVs[i] = (int)(getrand & 0x1F);
                }
            }

            //Ability
            rt.Ability = (byte)(IsUB ? 1 : (getrand & 1) + 1);

            //Nature
            rt.Nature = (rt.Synchronize = SynchroPass) && Synchro_Stat < 25 ? Synchro_Stat : (byte)(getrand % 25);

            //Gender
            rt.Gender = RandomGender[slot] ? (CuteCharmPass ? CuteCharmGender : (byte)(getrand % 252 >= Gender[slot] ? 1 : 2)) : Gender[slot];

            //Item
            rt.Item = getHeldItem(SOS ? getsosrand % 100 : NormalSlot ? getrand % 100 : 100, CompoundEye);

            if (Fishing && rt.IsSpecial)
            {
                rt.Slot = getHookedItemSlot(rt.SpecialVal); //Fishing item slots
            }
            else if (SOS)
            {
                SOSRNG.PostGeneration(rt); // IVs and HA
            }
            return(rt);
        }
Beispiel #25
0
 public override void Delay() => RNGPool.WildDelay7();
Beispiel #26
0
        private void Search7_Normal()
        {
            SFMT sfmt = new SFMT(Seed.Value);
            int  min  = (int)Frame_min.Value;
            int  max  = (int)Frame_max.Value;

            if (min > max)
            {
                return;
            }
            // Blinkflag
            FuncUtil.getblinkflaglist(min, max, sfmt, Modelnum);
            // Advance
            for (int i = 0; i < min; i++)
            {
                sfmt.Next();
            }
            // Prepare
            ModelStatus status = new ModelStatus(Modelnum, sfmt);
            ModelStatus stmp   = new ModelStatus(Modelnum, sfmt);

            status.raining = stmp.raining = Raining.Checked;
            getsetting(sfmt);
            int frameadvance;
            int realtime  = 0;
            int frametime = 0;

            // Start
            for (int i = min; i <= max;)
            {
                do
                {
                    frameadvance = status.NextState();
                    realtime++;
                }while (frameadvance == 0); // Keep the starting status of a longlife frame(for npc=0 case)
                do
                {
                    RNGPool.CopyStatus(stmp);
                    var result = RNGPool.Generate7();

                    RNGPool.AddNext(sfmt);

                    frameadvance--;
                    i++;
                    if (i > max + 1)
                    {
                        continue;
                    }
                    byte blinkflag = FuncUtil.blinkflaglist[i - min - 1];
                    if (BlinkFOnly.Checked && blinkflag < 4)
                    {
                        continue;
                    }
                    if (SafeFOnly.Checked && blinkflag >= 2)
                    {
                        continue;
                    }
                    if (!filter.CheckResult(result))
                    {
                        continue;
                    }
                    Frames.Add(new Frame(result, frame: i - 1, time: frametime * 2, blink: blinkflag));
                }while (frameadvance > 0);

                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    return;
                }
                // Backup current status
                status.CopyTo(stmp);
                frametime = realtime;
            }
        }
Beispiel #27
0
        private void Search7_TimelineLeap()
        {
            int start      = (int)Frame_min.Value;
            int target     = (int)TargetFrame.Value;
            int Totaldelay = FuncUtil.CalcFrame(Seed.Value, start, target, Modelnum)[0];
            int mindelay   = (int)Math.Round(DelayMin.Value * 30);
            int maxdelay   = (int)Math.Round(DelayMax.Value * 30);
            int starttime  = Totaldelay - maxdelay;
            int endtime    = Totaldelay - mindelay;

            // Intialize
            SFMT sfmt = new SFMT(Seed.Value);

            for (int i = 0; i < start; i++)
            {
                sfmt.Next();
            }
            ModelStatus status = new ModelStatus(Modelnum, sfmt)
            {
                IsBoy = Boy.Checked
            };

            // Advance
            int frame = start;

            for (int i = 0; i < starttime; i++)
            {
                frame += status.NextState();
            }
            for (int i = start; i < frame; i++)
            {
                sfmt.Next();
            }

            getsetting(sfmt);

            List <int>         Framelist  = new List <int>();
            List <ModelStatus> statuslist = new List <ModelStatus>();
            List <int>         timelist   = new List <int>();

            // Search
            int         LeapType = getLeapType();
            int         frameadvance;
            int         Tmpframe, bakframe1, bakframe2 = 0;
            ModelStatus stmp, bak1, bak2 = null;

            for (int i = Math.Max(0, starttime); i < endtime; i++)
            {
                Tmpframe = frame;
                stmp     = status.Clone();

                // Leap!
                switch (LeapType)
                {
                case 0:     // WC7
                    for (int j = 0; j < 19; j++)
                    {
                        Tmpframe += stmp.NextState();
                    }
                    RNGPool.Rewind(Tmpframe - frame);
                    RNGPool.CopyStatus(stmp);
                    RNGPool.igenerator.Generate();
                    frameadvance = RNGPool.index - (Tmpframe - frame);
                    Tmpframe    += stmp.frameshift(frameadvance);
                    Tmpframe    += stmp.NextState();
                    break;

                case 1:     // Menu
                    stmp.fidget_cd = 3;
                    break;

                case 2:     // Dialogue
                    Tmpframe += stmp.NextState();
                    Tmpframe += stmp.NextState();
                    Tmpframe += stmp.frameshift(1);
                    Tmpframe += stmp.NextState();
                    break;
                }

                bak1      = stmp.Clone();
                bakframe1 = Tmpframe;

                // Check if hit
                while (Tmpframe < target)
                {
                    Tmpframe += stmp.NextState();
                }
                if (Tmpframe == target)
                {
                    Framelist.Add(frame);
                    timelist.Add(i);
                    bak2      = bak1.Clone();
                    bakframe2 = bakframe1;
                    statuslist.Add(stmp.Clone());
                }

                // Move to next state
                frameadvance = status.NextState();
                frame       += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }
            }

            if (Framelist.Count > 0)
            {
                int frame0 = Framelist.Last();
                Frame_max.Value = frame0;
                if (!IsEvent)
                {
                    JumpFrame.Value = frame0;
                }
                if (FormUtil.Prompt(MessageBoxButtons.YesNo, string.Format("Hit A at {0} (Frame1) and then at {1} (Frame2).\n\nYes: Check new timeline / No: Check the spread", frame0, target)) == DialogResult.Yes)
                {
                    Search7_TimelineLeap1(bakframe2, target, bak2, maxdelay);
                    foreach (var f in Frames)
                    {
                        f.Frame0 = frame0;
                    }
                }
                else
                {
                    Search7_TimelineLeap2(Framelist, statuslist, target, timelist);
                }
            }
            else
            {
                FormUtil.Error(StringItem.NORESULT_STR[StringItem.language]);
            }
        }
Beispiel #28
0
        private void Search7_FishyTimeline()
        {
            SFMT sfmt        = new SFMT(Seed.Value);
            int  start_frame = (int)Frame_min.Value;
            int  targetframe = (int)TargetFrame.Value;

            // Advance
            for (int i = 0; i < start_frame; i++)
            {
                sfmt.Next();
            }
            // Prepare
            ModelStatus status = new ModelStatus(Modelnum, sfmt)
            {
                raining = Raining.Checked
            };

            getsetting(sfmt);
            int totaltime = (int)TimeSpan.Value * 30;
            int frameinput1 = (int)Frame_min.Value;         // Input 1: Cast the rod
            int frameadvance, fishingdelay, frameinput2;    // Input 2: Pull the rod off water
            var fsetting   = getFishingSetting;
            int Timewindow = 2;

            // Start
            for (int i = 0; i <= totaltime; i++)
            {
                RNGPool.Save();

                // 2 Frames for delay calc
                // USUM v1.1 sub_39E2F0
                RNGPool.Rewind(0); RNGPool.CopyStatus(status);
                fishingdelay = (int)(RNGPool.getrand64 % 60) + fsetting.basedelay;
                if (Overview.Checked)
                {
                    RNGPool.Advance(1); // Keep timewindow at 2 to avoid calculation
                }
                else
                {
                    Timewindow = (int)(RNGPool.getrand64 % 15) + fsetting.platdelay + 14;
                }

                // Fishing Delay
                RNGPool.time_elapse7(fishingdelay);

                // Bitechance
                if (fsetting.suctioncups || (int)(RNGPool.getrand64 % 100) < 50)
                {
                    RNGPool.time_elapse7(1);
                    frameinput2 = RNGPool.index + frameinput1;
                    RNGPool.SaveStatus();

                    for (int j = 2; j <= Timewindow; j++)
                    {
                        RNGPool.LoadStatus();
                        RNGPool.time_elapse7(1);
                        frameinput2 += RNGPool.index;
                        RNGPool.SaveStatus();
                        RNGPool.DelayTime = fsetting.pkmdelay + Math.Max(0, fsetting.platdelay - j); //  Duplicates

                        var result = RNGPool.Generate7() as ResultW7;

                        if (!filter.CheckResult(result))
                        {
                            continue;
                        }
                        if (Overview.Checked)
                        {
                            result.RandNum = RNGPool.getsavepoint;
                        }
                        result.FrameDelayUsed += frameinput2 - frameinput1;
                        Frames.Add(new Frame(result, frame: frameinput2, time: (i + j + fishingdelay) * 2)
                        {
                            Frame0 = frameinput1
                        });
                    }
                }

                RNGPool.Load();

                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    break;
                }

                // Move to next Frame, Update RNGPool
                frameadvance = status.NextState();
                frameinput1 += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }
            }
        }
Beispiel #29
0
        private void Search7_Timeline()
        {
            if (gen7fishing)
            {
                Search7_FishyTimeline();
                return;
            }
            SFMT sfmt        = new SFMT(Seed.Value);
            int  start_frame = (int)Frame_min.Value;
            int  targetframe = (int)TargetFrame.Value;

            FuncUtil.getblinkflaglist(start_frame, start_frame, sfmt, Modelnum);
            // Advance
            for (int i = 0; i < start_frame; i++)
            {
                sfmt.Next();
            }
            // Prepare
            ModelStatus status = new ModelStatus(Modelnum, sfmt)
            {
                IsBoy = Boy.Checked, raining = Raining.Checked
            };

            getsetting(sfmt);
            int totaltime = (int)TimeSpan.Value * 30;
            int frame = (int)Frame_min.Value;
            int frameadvance, Currentframe;
            int FirstJumpFrame = (int)JumpFrame.Value;

            FirstJumpFrame = FirstJumpFrame >= start_frame && gen7fidgettimeline ? FirstJumpFrame : int.MaxValue;
            // Start
            for (int i = 0; i <= totaltime; i++)
            {
                Currentframe = frame;

                RNGPool.CopyStatus(status);

                var result = RNGPool.Generate7();

                if (frame >= FirstJumpFrame) // Find the first call
                {
                    status.fidget_cd = XMenu.Checked ? 3 : 1;
                    FirstJumpFrame   = int.MaxValue; // Disable this part
                }
                byte Jumpflag = (byte)(status.fidget_cd == 1 ? 1 : 0);
                frameadvance = status.NextState();
                frame       += frameadvance;
                for (int j = 0; j < frameadvance; j++)
                {
                    RNGPool.AddNext(sfmt);
                }
                if (Currentframe <= targetframe && targetframe < frame)
                {
                    Frame.standard = i * 2;
                }

                if (!filter.CheckResult(result))
                {
                    continue;
                }

                Frames.Add(new Frame(result, frame: Currentframe, time: i * 2, blink: Jumpflag));

                if (Frames.Count > MAX_RESULTS_NUM)
                {
                    break;
                }
            }
            if (Frames.FirstOrDefault()?.FrameNum == (int)Frame_min.Value)
            {
                Frames[0].Blink = FuncUtil.blinkflaglist[0];
            }
        }
Beispiel #30
0
        private void Search7_AroundTarget()
        {
            SFMT sfmt   = new SFMT(Seed.Value);
            int  start  = (int)Frame_min.Value;
            int  target = (int)TargetFrame.Value;
            int  min    = target - 100;
            int  max    = target + 100;

            if (start > min)
            {
                start = min;
            }

            // Blinkflag
            FuncUtil.getblinkflaglist(min, max, sfmt, Modelnum);

            // Prepare
            int  i         = 0;
            byte blinkflag = 0;

            for (; i < start; i++)
            {
                sfmt.Next();
            }
            ModelStatus status = new ModelStatus(Modelnum, sfmt);
            ModelStatus stmp   = new ModelStatus(Modelnum, sfmt);

            status.raining = stmp.raining = Raining.Checked;
            getsetting(sfmt);
            int frameadvance = 0;
            int realtime     = 0;
            int frametime    = 0;

            // Calc frames around target
            for (; i <= max;)
            {
                for (; frameadvance == 0; frameadvance = status.NextState())
                {
                    realtime++;
                }
                for (; frameadvance > 0; frameadvance--, i++)
                {
                    if (min <= i && i <= max)
                    {
                        RNGPool.CopyStatus(stmp);
                        var result = RNGPool.Generate7();
                        blinkflag = FuncUtil.blinkflaglist[i - min];
                        Frames.Add(new Frame(result, frame: i, time: frametime * 2, blink: blinkflag));
                    }
                    RNGPool.AddNext(sfmt);
                }

                // Backup current status
                status.CopyTo(stmp);
                frametime = realtime;
            }

            // Get all possible results by EC matching
            // Can't identify MainRNGEggs by EC
            if (Method < 3)
            {
                Frames = Frames.OrderBy(f => f.FrameNum + (f.rt as Result7).FrameDelayUsed).ToList();

                var EClist = Frames.Select(f => f.rt.EC).ToArray();

                // Another Buffer
                sfmt = new SFMT(Seed.Value);
                int starting = Frames[0].FrameNum + (Frames[0].rt as Result7).FrameDelayUsed;
                for (i = 0; i < starting; i++)
                {
                    sfmt.Next();
                }
                RNGPool.CreateBuffer(sfmt);

                // Skip Delay
                RNGPool.Considerdelay = false;
                if (RNGPool.igenerator is Stationary7 st7)
                {
                    st7.AssumeSynced = Nature.CheckBoxItems[SyncNature.SelectedIndex].Checked;
                }

                uint  EC;
                uint  EClast = EClist.Last();
                int   Nframe = -1;
                ulong rand   = 0;
                do
                {
                    RNGPool.modelnumber = Modelnum;
                    RNGPool.ResetModelStatus();
                    var result = RNGPool.Generate7() as Result7;
                    EC = result.EC;
                    RNGPool.AddNext(sfmt);
                    if (EClist.Contains(EC))
                    {
                        var framenow = Frames.LastOrDefault(f => f.EC == EC);
                        Nframe    = framenow.FrameNum;
                        frametime = framenow.realtime;
                        rand      = framenow.Rand64;
                        continue;
                    }
                    else if (Nframe > -1)
                    {
                        result.RandNum = rand;
                        Frames.Add(new Frame(result, frame: Nframe, time: frametime, blink: 4));
                    }
                }while (EC != EClast);
            }

            // Filters
            RNGResult.IsPokemon = true;
            Frames = Frames.Where(f => filter.CheckResult(f.rt))
                     .OrderBy(f => f.FrameNum)
                     .ToList();
        }