Esempio n. 1
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];
            }
        }
Esempio n. 2
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];
            }
        }
Esempio n. 3
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();
        }
Esempio n. 4
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;
            }
        }
Esempio n. 5
0
        private void Search7_Timeline()
        {
            SFMT sfmt      = new SFMT(Seed.Value);
            int  frame     = (int)StartingFrame.Value;
            int  loopcount = (int)MaxResults.Value;
            int  frameadvance;
            int  FirstJumpFrame = (int)JumpFrame.Value;

            FirstJumpFrame = FirstJumpFrame >= frame && Fidget.Checked ? FirstJumpFrame : int.MaxValue;
            setupgenerator();

            FuncUtil.getblinkflaglist(frame, frame, sfmt, (byte)(NPC.Value + 1));

            for (int i = 0; i < frame; i++)
            {
                sfmt.Next();
            }
            ModelStatus status = new ModelStatus((byte)(NPC.Value + 1), sfmt);

            status.raining = Raining.Checked;
            status.IsBoy   = Boy.Checked;

            RNGPool.CreateBuffer(sfmt);

            for (int i = 0; i <= loopcount; i++)
            {
                var f = new Frame_Misc();
                f.Frame    = frame;
                f.Rand64   = RNGPool.getcurrent64;
                f.realtime = 2 * i;
                f.status   = (int[])status.remain_frame.Clone();

                if (frame >= FirstJumpFrame) // Find the first call
                {
                    status.fidget_cd = 1;
                    FirstJumpFrame   = int.MaxValue; // Disable this part
                }
                if (status.fidget_cd == 1)
                {
                    f.Blink = 1;
                }

                // USUM v1.1 sub_421E4C eyes closed
                if (status.remain_frame[0] == -3 || status.remain_frame[0] == 33)
                {
                    f.Blink = 4;
                }

                RNGPool.Rewind(0); RNGPool.CopyStatus(status);
                getspecialinfo(f);

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

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

                Frames.Add(f);
            }
            if (Frames.FirstOrDefault()?.Frame == (int)StartingFrame.Value)
            {
                Frames[0].Blink = FuncUtil.blinkflaglist[0];
            }
        }
Esempio n. 6
0
        private void Search7()
        {
            SFMT sfmt     = new SFMT(Seed.Value);
            int  min      = (int)StartingFrame.Value;
            int  max      = min + (int)MaxResults.Value;
            byte Modelnum = (byte)(NPC.Value + 1);

            setupgenerator();

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

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

            ModelStatus status = new ModelStatus(Modelnum, sfmt);
            ModelStatus stmp   = new ModelStatus(Modelnum, sfmt);

            RNGPool.CreateBuffer(sfmt);

            int frameadvance;
            int realtime  = 0;
            int frametime = 0;

            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
                {
                    var f = new Frame_Misc();
                    f.Frame    = i;
                    f.Rand64   = RNGPool.getcurrent64;
                    f.Blink    = FuncUtil.blinkflaglist[i - min];
                    f.realtime = 2 * frametime;
                    f.status   = (int[])stmp.remain_frame.Clone();

                    RNGPool.Rewind(0); RNGPool.CopyStatus(stmp);
                    getspecialinfo(f);

                    RNGPool.AddNext(sfmt);
                    frameadvance--;
                    if (i++ > max)
                    {
                        return;
                    }
                    if (!filter.check(f))
                    {
                        continue;
                    }

                    Frames.Add(f);
                }while (frameadvance > 0);

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