full mudkip table: https://www.dropbox.com/s/b6dib2g4x1rjwza/sapphire_mudkips.txt In gen 3, the RNG is seeded to a known value when the game starts or when you soft reset. It advances once per frame and once whenever random() is called. Thus, although the number of RNG advances is larger than the number of frames since soft reset, the difference between these two numbers should be a consistent and measurable value as long as we do the same movement every time. We can get a table of mudkips as follows: - setup a save in front of mudkip - for n in [0, 100000] - soft reset, continue, get to mudkip - wait n frames - take mudkip and record its nature and IVs Let T = number of seconds since soft reset Let A = number of frames since soft reset = 60 * T Let I = index of mudkip in table From this table, we can manipulate desired mudkip stats using the property that the difference between A and I is essentially constant. Results so far for new game -> mudkip: Time since soft reset: 180.03 sec, 179.97 sec, 197.94 sec Corresponding A value: 10801.8, 10798.2, 10796.4 (multiply by 60 frames/sec) Measured I value: 10299, 10303, 10293 (check the IVs/nature and look them up in the table) Difference: 502.8, 495.2, 503.4 The variance here is probably due to the inaccuracy in the timing, but even then we see that the average measured difference is about 500 frames (more data points would be nice but I'm lazy). We can use this information to convert a desired mudkip IV spread into a timing as follows: T = (I + 500) / 60. It is likely the case that 500 is not the best value, but it is close, and more measurements should help us get a more precise number. Unfortunately, as we saw, there is a bit of variance in actually getting the right frame consistently, though if we miss we will probably get a frame close to the desired one. However, suppose that instead of having a single desired frame that gives us good stats, we can find a group of frames close to each other that all give good stats. In this case, even if we miss the original target frame, we still have a decent chance of getting good stats anyway. It seems that if we time from new game -> mudkip instead of continue -> mudkip, it takes about 9500 extra rng advancements, so we must begin our search starting from index 9500. The best window I was able to find without having to wait too much is the 13-frame window from I = [11074, 11086], and we see that the corresponding mudkips are: 11074 | Mild 2/20/1/26/23/5 11075 | Serious 5/26/23/20/10/22 11076 | Jolly 22/20/10/20/6/19 11077 | Lax 19/20/6/12/21/24 11078 | Lonely 24/12/21/22/1/20 11079 | Lonely 20/22/1/30/13/23 11080 | Docile 23/30/13/26/6/23 11081 | Hasty 23/26/6/25/18/17 11082 | Relaxed 17/25/18/27/5/20 11083 | Docile 20/27/5/24/8/9 11084 | Mild 9/24/8/14/18/24 11085 | Docile 24/14/18/25/28/9 11086 | Jolly 9/25/28/29/16/9 The center of this range is I = 11080 which corresponds to T = 3:13, and this corresponds to waiting about 25 seconds extra compared to no manipulation. However, since only in game time matters, we can spend the majority of this wait on the new game screen before the game timer starts and use the remaining time as a buffer to ensure that we can get to the mudkip quickly enough and have a little time to ensure a precise input. Interestingly enough, Buster's WR run (http://www.twitch.tv/buster_poke/c/5603380) uses this exact strategy and even goes for the same group of frames, and it ended up getting the index 11081 mudkip.