Exemple #1
0
        public static Dictionary <int, List <int> > FindDualPendulumManipulation(int numIterations)
        {
            TtcSaveState currentSaveState  = new TtcSaveState();
            int          currentStartFrame = MupenUtilities.GetFrameCount();


            Dictionary <int, List <int> > dustFrameLists = new Dictionary <int, List <int> >();

            for (int i = 0; i < numIterations; i++)
            {
                (bool success, TtcSaveState saveState, int relativeEndFrame, List <int> relativeDustFrames) =
                    FindDualPendulumManipulation(currentSaveState);
                if (!success)
                {
                    break;
                }

                List <int> absoluteDustFrames = relativeDustFrames.ConvertAll(rel => rel + currentStartFrame - 2);
                dustFrameLists[currentStartFrame] = absoluteDustFrames;
                Config.Print(currentStartFrame + ":\t[" + string.Join(",", absoluteDustFrames) + "]");

                currentSaveState   = saveState;
                currentStartFrame += relativeEndFrame;
            }
            return(dustFrameLists);
        }
Exemple #2
0
        public static void FindMidairWalkingSetup()
        {
            TtcSaveState initialSaveState  = new TtcSaveState();
            int          initialStartFrame = MupenUtilities.GetFrameCount();

            int successCounter = 0;

            for (int i = 0; true; i++)
            {
                if (i % 10_000 == 0)
                {
                    Config.Print("Tested " + i);
                }

                List <int>    dustFrames = GetDustFrames(initialStartFrame + 2, 150, 10);
                TtcSimulation simulation = new TtcSimulation(initialSaveState, initialStartFrame, dustFrames);
                (bool success, int startFrame) = simulation.FindMidairWalkingSetup1();
                if (success)
                {
                    successCounter++;

                    Config.Print();
                    Config.Print("SUCCESS#{0}: {1}", successCounter, startFrame);
                    List <int> inputFrames = dustFrames.ConvertAll(frame => frame - 2);
                    foreach (int frame in inputFrames)
                    {
                        Config.Print(frame);
                    }
                    Config.Print();
                }
            }
        }
Exemple #3
0
        public TtcSimulation(List <int> dustFrames = null)
        {
            //set up objects
            _rng        = new TtcRng(Config.Stream.GetUInt16(MiscConfig.RngAddress));
            _rngObjects = TtcUtilities.CreateRngObjectsFromGame(_rng, dustFrames);

            //set up testing variables
            _startingFrame = MupenUtilities.GetFrameCount(); //the frame directly preceding any object initialization
        }
Exemple #4
0
        public static void FindMovingBarManipulation()
        {
            TtcSaveState       saveState       = new TtcSaveState();
            int                startingFrame   = MupenUtilities.GetFrameCount();
            List <List <int> > dustFramesLists = GetDustFrameLists(startingFrame + 2, 25, 25);

            Config.Print("START FindMovingBarManipulation");
            foreach (List <int> dustFrames in dustFramesLists)
            {
                TtcSimulation simulation = new TtcSimulation(saveState, startingFrame, dustFrames);
                simulation.FindMovingBarManipulationGivenDustFrames(dustFrames);
            }
            Config.Print("END FindMovingBarManipulation");
        }
Exemple #5
0
        public static List <int> FindIdealPendulumManipulation(uint pendulumAddress)
        {
            List <List <int> > dustFrameLists = GetDustFrameLists(MupenUtilities.GetFrameCount() + 2, 25, 25);

            foreach (List <int> dustFrames in dustFrameLists)
            {
                TtcSimulation simulation = new TtcSimulation(dustFrames);
                bool          success    = simulation.FindIdealPendulumManipulation(pendulumAddress).ToTuple().Item1;
                if (success)
                {
                    return(dustFrames);
                }
            }
            return(null);
        }
Exemple #6
0
        public static void FindIdealCogManipulation()
        {
            TtcSaveState saveState         = new TtcSaveState();
            int          startFrame        = MupenUtilities.GetFrameCount();
            int          earliestDustFrame = startFrame + 2;

            int dustFrameRange = 40;
            int maxDustFrames  = 6;
            int minDustFrames  = 0;

            int numFramesMin = 120;
            int numFramesMax = 7000;

            //int numFramesMin = 0;
            //int numFramesMax = 3000;

            List <List <int> > dustFrameLists = GetDustFrameLists(earliestDustFrame, dustFrameRange, maxDustFrames, minDustFrames);
            int           counter             = 0;
            List <string> outputStrings       = new List <string>();

            Config.Print("Starting brute force...");
            foreach (List <int> dustFrames in dustFrameLists)
            {
                counter++;
                if (counter % 1000 == 0)
                {
                    double percent       = Math.Round(100d * counter / dustFrameLists.Count, 1);
                    string percentString = percent.ToString("N1");
                    Config.Print(
                        "counter = {0} / {1} ({2}%)",
                        counter, dustFrameLists.Count, percentString);
                }

                TtcSimulation simulation = new TtcSimulation(saveState, startFrame, dustFrames);
                int?          idealCogConfigurationFrame = simulation.FindIdealCogConfiguration(numFramesMin, numFramesMax);
                if (idealCogConfigurationFrame.HasValue)
                {
                    List <int> dustInputFrames       = dustFrames.ConvertAll(dustFrame => dustFrame - 2);
                    string     dustInputFramesString = "[" + String.Join(", ", dustInputFrames) + "]";
                    string     outputString          = dustInputFramesString + " => " + idealCogConfigurationFrame.Value;
                    outputStrings.Add(outputString);
                    Config.Print(outputString);
                }
            }
            Config.Print("In total, there were {0} successes:", outputStrings.Count);
            outputStrings.ForEach(output => Config.Print(output));
        }
Exemple #7
0
        public static void FindPendulumSyncingManipulation()
        {
            TtcSaveState       saveState       = new TtcSaveState();
            int                startingFrame   = MupenUtilities.GetFrameCount();
            List <List <int> > dustFramesLists = GetDustFrameLists(startingFrame + 2, 25, 25);

            Config.Print("START FindPendulumSyncingManipulation");
            foreach (List <int> dustFrames in dustFramesLists)
            {
                TtcSimulation simulation   = new TtcSimulation(saveState, startingFrame, dustFrames);
                int?          syncingFrame = simulation.FindPendulumSyncingManipulation();
                if (syncingFrame.HasValue)
                {
                    Config.Print(syncingFrame.Value + "\t" + FormatDustFrames(dustFrames));
                }
            }
            Config.Print("END FindPendulumSyncingManipulation");
        }
Exemple #8
0
        public static void FindPunchRecoilPendulumManipulation()
        {
            TtcSaveState currentSaveState  = new TtcSaveState();
            int          currentStartFrame = MupenUtilities.GetFrameCount();

            Dictionary <int, List <int> > dustFrameLists = new Dictionary <int, List <int> >();

            for (int i = 0; i < 100; i++)
            {
                (bool success, TtcSaveState saveState, int relativeEndFrame, List <int> relativeDustFrames) =
                    FindPunchRecoilPendulumManipulation(currentSaveState);
                if (!success)
                {
                    break;
                }

                List <int> absoluteDustFrames = relativeDustFrames.ConvertAll(rel => rel + currentStartFrame - 2);
                dustFrameLists[currentStartFrame] = absoluteDustFrames;
                Config.Print(i + ":\t[" + string.Join(",", absoluteDustFrames) + "]");

                currentSaveState   = saveState;
                currentStartFrame += relativeEndFrame;
            }

            List <int> dustFrames     = dustFrameLists.Values.SelectMany(list => list).ToList();
            int        firstDustFrame = dustFrames[0];
            int        lastDustFrame  = dustFrames[dustFrames.Count - 1];
            int        dustFrameRange = lastDustFrame - firstDustFrame;

            int[] joystickInputs = new int[dustFrameRange + 1000];
            foreach (int dustFrame in dustFrames)
            {
                joystickInputs[dustFrame - firstDustFrame] = 127;
            }

            Config.Print();
            foreach (int joystickInput in joystickInputs)
            {
                Config.Print(joystickInput);
            }
        }
Exemple #9
0
        public static void FindIdealHandManipulation()
        {
            HandManipulationProgress startingProgress =
                new HandManipulationProgress(
                    new TtcSaveState(), MupenUtilities.GetFrameCount(), new List <int>());

            Queue <HandManipulationProgress> queue = new Queue <HandManipulationProgress>();

            queue.Enqueue(startingProgress);

            while (queue.Count > 0)
            {
                HandManipulationProgress dequeue = queue.Dequeue();
                int handMovementFrame            = dequeue.GetHandMovementFrame();
                if (handMovementFrame < 1000000)
                {
                    Config.Print(dequeue + " => " + handMovementFrame);
                }

                List <HandManipulationProgress> successors = dequeue.GetSuccessors();
                successors.ForEach(successor => queue.Enqueue(successor));
            }
        }
Exemple #10
0
        public static List <List <int> > FindIdealPendulumManipulation(uint pendulumAddress, int numIterations)
        {
            TtcSaveState currentSaveState  = new TtcSaveState();
            int          currentStartFrame = MupenUtilities.GetFrameCount();

            List <List <int> > dustFrameLists = new List <List <int> >();

            for (int i = 0; i < numIterations; i++)
            {
                (bool success, TtcSaveState saveState, int relativeEndFrame, List <int> relativeDustFrames) =
                    FindIdealPendulumManipulation(pendulumAddress, currentSaveState);
                if (!success)
                {
                    break;
                }

                List <int> absoluteDustFrames = relativeDustFrames.ConvertAll(rel => rel + currentStartFrame - 2);
                dustFrameLists.Add(absoluteDustFrames);

                currentSaveState   = saveState;
                currentStartFrame += relativeEndFrame;
            }
            return(dustFrameLists);
        }