Demonstration/Tutorial
You can see a tutorial VOD posted here; that's probably the best starting point to understand what's going on, but I'll spell things out in a lot more detail below (including an even more consistent method than the one shown in the VOD).
Background
This was built off the work of VaultButler and UnderscorePoY (perhaps others?), who helped me understand the setups they had been using. The basic idea remains the same:
- Remove save file (**EDIT: see bolded note at bottom.)
- Hard Reset and hold A thru opening cutscenes to get same RNG each reset
- New TID is generated every frame and is set when New Game is selected (TID can be +/- 1 due to hardware idiosyncrasies)
New findings/method
When looking into something else related to Trainer IDs, gifvex noticed a peculiarity in the opening menus. It turns out the New Game menu runs at 15 frames per second, meaning inputs are only registered every 4 frames. The Options menu runs at 20 frames per second, meaning inputs on that screen are only registered every 3 frames. With this knowledge, hitting a specific TID is actually a much easier proposition than hitting a specific frame at 60 frames per second.
The new method starts the same way as the old one (remove save file, hard reset and hold A thru opening cutscenes). From there, you can take two approaches, with differing degrees of consistency/difficulty:
[1] Set options before New Game (maxes at ~75% consistency?)
Set up two timings in EonTimer:
- Start EonTimer on hard reset
- Press A to enter Options menu on first set of beeps
- Press B to close Options menu on second set of beeps
- Buffer A input to frame perfectly select New Game
[2] Set options in-game (maxes at ~90% consistency?)
Set up one timing in EonTimer:
- Start EonTimer on hard reset, press New Game on final beep to hit desired frame
Though it has drawbacks, this is an extremely consistent approach, since you basically only have to hit one 4-frame window. It's important to note that this skips over many possible TIDs, due to the 4 frame rule in effect on the main menu.
Console setup for Gold Any% (TID 63930 +/- 1, F9/D9 Toto)
The main console setup I have worked on so far is using the first approach to establish timings to get the first usable TID I was able to find from testing. This was useful since it is technically the fastest approach for RTA, but I'm starting to think setting options in-game may be the better approach for most people. I may look into finding if this or another TID works for the second approach, but others can feel free to undertake that task.
In any event, Kylovic was able to replicate my setup, so any TID manipulation setup should at minimum be working across all consoles that use Gold carts with non-dead batteries (still unsure what happens with a dead battery).
Setup:
- Configure EonTimer with two timings (ones I am currently using, in milliseconds: 10900, 5282; these are volatile as I'm not necessarily done calibrating, but they should be close).
- Hard reset with Start+B+X (GCN only) at the same time you start EonTimer.
- Press A to enter Options menu on first set of beeps
- Press B to close Options menu on second set of beeps
- Buffer A input to frame perfectly select New Game
EonTimer download: http://www.smogon.com/forums/threads/eo ... mer.81513/
Miscellaneous Notes
- **EDIT: Dabomstew has pointed out to me that after clearing a save, the first time you press New Game, you'll have a completely different TID list than normal. From then on, each New Game press will produce the normal list.
- The most important thing is to make sure you have a consistent timing method. If you aren't starting EonTimer at the same time you are hard resetting, your results are going to be wildly inconsistent (moreso with the 2-timings approach).
- Other console runners may need to modify their times slightly to get the timings right for their setups. You can hit New Game using the first of the two timings and check to make sure you are in the middle of a 4-frame window (should be getting 1 TID ~90% of the time), then adjust the second timing until you are getting consistent results. Of course, this becomes simpler if doing the second approach, where only one timing is at play.
- To find an F8/D8 Totodile on console, you may have to search for TIDs on your own by playing around with many different timings. I suggest changing things in multiples of 1 frame (~16.74 milliseconds) and running a few trials to see what TIDs are showing up at each timing configuration.
- Gold TID data dump from console with old method (to help calibrate timing): http://pastebin.com/QEQzBpaa.
- TIDs appear to be different between console, BGB, and BGB+bootrom, so different adjustments will be needed for emu runners. The manipulation should also work on Gambatte and Bizhawk with different timings, but these are not allowed for Gold Any% due to emulation inaccuracies.
- VaultButler (~10.045s, TID 55369) and UnderscorePoY (~15.01s, TID 63635) both have F8/D8 Totodiles in their BGB setups, which could be adjusted for this method.
- Lastly, besides Gold Any%, I have one pipe dream application of this: Lucky ID Manip for early Master Ball (especially in Crystal). Someone please solve this, preferably for Kenya (OTID = 01001), thank you
.