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); }
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(); } } }
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 }
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"); }
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); }
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)); }
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"); }
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); } }
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)); } }
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); }