Introduction
Quoting [Challenger] I wanted to see a TAS of this game for years (even before I joined here), but I knew Micro Machines wouldn't be an easy task for some technical reasons - the main one is how you can optimize the gameplay, because each curve would be difficult to handle without turning direction and slowing down so much even if you use the glorious TAStudio tool from the BizHawk emulator.
On 2022, eien86 submitted a NES racing game called R.C Pro-Am II run that impressed me the Jaffar bot was able to handle the races and optimize the game very well, inspiring me a year later to ask eien if Jaffar could give a shot for Micro Machines because I was planning to create a rough draft of this game and some years ago I discovered a very nice glitch that would affect the game a lot (I didn’t document it at the time, but fortunately some players were able to discover the same glitch years later and create RTA runs, which helped us a lot during the first draft).
So we started the project on May 2023, initially working slowly, putting this game on hold sometimes until finishing a first draft of the full game on January 2024. After that, the game was started from scratch again and this time the bot improved every race in every way that I previously thought the project was done. The game would be a real nightmare to TAS without this special help.
Quoting [eien86] As far as I know, Challenger has been brewing this movie for years now. I've joined the efforts more than a year ago, working on his initial progress and trying to improve its execution using my bot. I made two full passes now, everytime finding and learning new things. We believe now the movie is in a state of optimality that cannot be improved easily anymore.
Comparison Movie
The following movie compares our solution to the current
USC RTA WR by speedrunner
mx_seitan , available here:
The main difference between our approaches is the bonus stage strategy. In this port of the game, after each third first place achieved (even if non-consecutive), you get the chance to run a bonus race for an extra life.
The RTA approach involves finishing second several times to avoid playing the last bonus stage. This is good for RTA since it reduces the chances something awry could go during the bonus stage (e.g., falling in the water). However, for TAS it is always faster to finish all stages as soon as possible, even though we go through all bonus stages.
Category Rules
Heavy glitch abuse
Heavy luck manipulation
Software + Hardware
Name: Micro Machines (USA)
ROM: Micro Machines (U).nes
SHA1: ec7bb4d11afa5a955010bb9a548c1460eac08fe0
MD5: a3d0e4b19a2ab6cc5e10f9820232ca40
Emulator
EmuHawk 2.9.1 (Core: NESHawk)
Routing Bot
Bot: JaffarPlus
Routing Core: QuickerNES
Platform:
2 x AMD Epyc 7763 (128 cores, 256 threads) + 512Gb RAM
Exploration Rate: 1.7 Mstates/s
Timing
Criteria
We use the following addresses for timing:
0x0308 - Current Race
0x04B6 - Current Lap
0x00DD - Pre-Race Timer
And the following criteria:
Race Start: Set as soon as "Pre-Race Timer" becomes zero
Race End: Set as soon as "Current Lap" becomes zero
Stage Frame Duration
Power on 0 577
Qualify 577 539
Transition 1116 912
Race01 2028 1941
Transition 3969 673
Race02 4642 941
Transition 5583 670
Race03 6253 1162
Transition 7415 1002
Bonus01 8417 364
Transition 8781 617
Race04 9398 1545
Transition 10943 670
Race05 11613 2487
Transition 14100 671
Race06 14771 5654
Transition 20425 1001
Bonus02 21426 488
Transition 21914 617
Race07 22531 1500
Transition 24031 677
Race08 24708 4200
Transition 28908 669
Race09 29577 1438
Transition 31015 1002
Bonus03 32017 633
Transition 32650 620
Race10 33270 3326
Transition 36596 670
Race11 37266 1799
Transition 39065 677
Race12 39742 4074
Transition 43816 1001
Bonus04 44817 633
Transition 45450 618
Race13 46068 3021
Transition 49089 670
Race14 49759 7176
Transition 56935 672
Race15 57607 2924
Transition 60531 1009
Bonus05 61540 633
Transition 62173 617
Race16 62790 2240
Transition 65030 674
Race17 65704 7397
Transition 73101 670
Race18 73771 1679
Transition 75450 1001
Bonus06 76451 633
Transition 77084 618
Race19 77702 1902
Transition 79604 672
Race20 80276 3030
Transition 83306 677
Race21 83983 4748
Transition 88731 938
Race22 89669 5975
Transition 95644 670
Race23 96314 1795
Transition 98109 671
Race24 98780 862
Transition 99642 575
Race25 100217 2889
Last Input 103106
Race Breakdown
Race 00 (Qualification)
Quoting [eien86] This is kind of a "tutorial race" for players, but for TASing/botting as well. In this first race I researched the relevant RAM values (if you read this, the watchfile should be uploaded in the game's resources page).
The most important aspect is the "Checkpoint" system. The track is divided among dozens of checkpoints and the game remembers which one you reached last. So I simply configured the bot to reward states with increasingly high checkpoints until the single lap of this race was over.
Quoting [Challenger] The character selection screen will occur every three races. Selecting the future next opponent, waiting 19 frames and pressing start to start the next race is slightly faster because the game will set up the next choice automatically when you return to the selection. This interesting strategy is also implemented on the RTA runs.
Race 01
Quoting [eien86] On this race I had to expand the bot's capabilities to account for multiple laps. But more importantly, to enable shortcuts. It is possible to skip certain portions of the track without being punished (towed back to the departing point. This is called the Ultra Shortcut (USC). Challenger found the best checkpoints to 'touch' to achieve the shortest circuit for every race. To achieve shortcuts, I had to configure the bot to go to X/Y coordinates specified by Challenger, instead of pursuing ever increasing checkpoint numbers.
Race 02
Quoting [eien86] This race showcases a more sophisticated way to achieve shortcuts. When your car needs to be towed back for skipping parts of the race, you are teleported straight to the rescue point closes to the latest checkpoint you visited. However, if the source and destination checkpoints cross the end of lap line, then it counts as a full lap.
Quoting [Challenger] I discovered the lap glitch here by accident several years ago (probably 2018) while I was playing the SNES version - yeah it also works on other versions too, including the Genesis and Gameboy ports as far as I know of.
Race 03
Quoting [eien86] Nothing special about this level. Towing shortcuts are used on all laps.
Bonus Stage 01
Quoting [eien86] Bonus stages take a single "lap" and we complete it by using a very precise USC found by Challenger and the execution optimized by the bot.
Quoting [Challenger] Quoting an interesting piece of information from mx_seitan: “In the NES version, the game counts how many times you get 1st place. As soon as this counter reaches 3, the next level is a bonus level.”
Race 04
Quoting [eien86] This race I remember well because it was the one where I learnt that shortcuts are extremely precise (you cannot deviate from the correct checkpoints, even by one). So it took me a lot of bot configuration to convince it not to go 'further' than required. Many hours lost on this race alone :/
Race 05
Quoting [eien86] This race contains the first instance of the double-collision glitch. When your car touches two different objects (car/car, car/object), the collision response goes nuts and you can be catapulted towards a direction. I used the bot to find the most instances of this glitch and exploit it to go towards the direction required.
Quoting [Challenger] Before starting the project, I actually made a rough draft of some races including this one (back from October 2022), and the initial route I’ve found to glitch out the race was located further, starting from CP40 and going to CP88 while the route used in this run (after starting the actual project months later) is just when you reach the first obstacle a bit after the start of the race - CP7 - then go to CP55, saving a lot of time. Thanks RTA players!
Race 06
Quoting [eien86] Pretty long race with only small shortcuts.
Quoting [Challenger] The lap glitch isn’t possible in this race because there are lots of “barriers” around the course that punishes the player instantly.
Bonus Stage 02
Quoting [eien86] Different track but same principle as bonus stage 01.
Race 07
Quoting [eien86] Here Challenger found a shortcut that can be executed after getting far enough on the first lap and then skipping the others.
Race 08
Quoting [eien86] This race starts with a nice example of the double-collision glitch.
Quoting [Challenger] The “walls” in boat races are semi-solid: the double-collision glitch could be helpful for a very nice shortcut during the first lap by reaching C28 then boosting with one of the boats while it is in mid-air (bubble jump) to C67 (before the tunnel section), but unfortunately the best effort we’re got to gain enough momentum was reaching C71 with perfect timing and positioning, although you lose a lot of speed after entering the wall and even if could be possible to trace back to C67/68 after the shortcut, driving normally is still faster.
Race 09
Quoting [eien86] This race starts with a nice push (not glitch) from an opponent and then proceeds to executing USCs.
Bonus Stage 03
Quoting [eien86] Different track but same principle as bonus stage 01.
Race 10
Quoting [eien86] In this race we abuse the double-collision glitch in the beginning, and then let the bot find the best execution for the rest of the race.
Race 11
Quoting [eien86] Here Challenger found a shortcut that can be executed after getting far enough on the first lap and then skipping the others.
Quoting [Challenger] Well, four years ago I found a different location to glitch out the laps, but I didn’t record it and I guess that route was longer like the fifth race. Thanks again RTA runs!
Race 12
Quoting [eien86] This race contains more fun with collision glitches and then just nice execution with the bot.
Bonus Stage 04
Quoting [eien86] Different track but same principle as bonus stage 01.
Quoting [Challenger] Starting from Bonus Stage 04, they repeat the Bonus 03 layout for some reason, so the strategy remains the same.
Race 13
Quoting [eien86] We solved this race with nice shortcut routing by Challenger and then execution by the bot.
Quoting [Challenger] We tried to find a way to do the lap glitch here, but in this race it’s not possible because while you need to trigger certain checkpoints first, the required CP for the glitch (which is 23) won’t punish the player because the location acts as real checkpoints, unlike the Genesis version which occurs the opposite, allowing the glitch to occur without problem at all.
Race 14
Quoting [eien86] Yet another long race with no available shortcuts (that we know of), just good execution.
Race 15
Quoting [eien86] We destroy this race with a combination of collision glitching and shortcuts.
Quoting [Challenger] In the RTA runs, the setup for the lap glitch is tricky and precise, because unlike other races, for this one you need to avoid some checkpoints, trigger the most important one and go to the required checkpoint location after the bridge.
Bonus Stage 05
Quoting [eien86] Different track but same principle as bonus stage 01.
Race 16
Quoting [eien86] In this race we finish all laps by using USC.
Race 17
Quoting [eien86] Just good execution by the bot. There are no opportunities for shortcutting in helicopter races because the track is surrounded by solid boundaries.
Race 18
Quoting [eien86] In this race we finish all laps by using USC.
Bonus Stage 06
Quoting [eien86] Different track but same principle as bonus stage 01.
Race 19
Quoting [eien86] In this race we finish all laps by using USC.
Race 20
Quoting [eien86] The first approach found by Challenger performed a USC towards the end of the lap. However, speedrunner mx_seitan (
https://www.twitch.tv/videos/2065964451) found a better setup that starts going backwards. Challenger found out about this and we implemented / optimized it in this run.
Quoting [Challenger] Yeah this course is so long that the previous strategy required a good amount of time, Jaffar optimized very well, but I wasn’t aware of the backwards shortcut until a few weeks ago. Several seconds were gained (for my surprise) despite the fact you still need to reach the finish line during the last lap. It’s slightly faster avoiding one of the jumping obstacles in order to achieve maximum speed asap.
Fun fact: In the Genesis version, this race is completely new while some other versions keep the original course.
Race 21
Quoting [eien86] This race contains a pretty nice example of the collision bug. The boat gets launched pretty fast at the beginning. The rest of the race is executed to perfection (avoiding lag frames as much as possible) by the bot.
Quoting [Challenger] No bonus race this time because if you earn the maximum amount of lives (which is 9), the game will skip it.
Race 22
Quoting [eien86] In this race we take advantage of the fact that opponents get rubberbanded pretty heavily, so it doesn't take much time to wait for them to re-appear. By waiting for them, we can execute the collision bug time and time again for a very entertaining execution. This is the race I ran the bot for longer, precisely to increase the chances to find and execute these glitches as much as possible.
Quoting [Challenger] Originally only one collision bug was implemented at the start of this race, but when a second draft of this race was created by the bot, the boost somehow was a bit slower, the problem was going to be fixed when a new idea “appeared” for us: the bot took advantage of the brutal AI that the race changed the collision bug to a different location and the race ended up being more entertaining by adding three extra boosts. I like it!
Fun fact: The NES version is so brutal that the real difficulty actually starts at the eighth race.
Race 23
Quoting [eien86] After an initial push from an opponent, we use towing shortcuts to finish all laps faster.
Quoting [Challenger] I mentioned earlier during race 11 about finding locations for the lap glitches four years ago… but while some races are unskippable, this specific race was the only one I didn’t realize the lap glitch was actually possible until I watched the RTA runs! Luckily the trigger is located in the same map (the left path) so no barriers this time.
Race 24
Quoting [eien86] The most interesting race by far. And yet we don't understand well how we pulled this off. Turns out this particular race seems to be overwhelmed with moving objects (cars and bullets) so at some point your car position can glitch out along with the track itself.
We found out about this glitch thanks to the bot, which exploited it to reach a target checkpoint faster, but then failed to proceed to the rest of the race. So then Challenger took the task of finding out how to fully exploit the bug for the rest of the race. So he found a way to create an "artificial" mini circuit that completes the race within this crazy glitched state. After this find, I used the bot again to refine the execution of the mini circuit.
Sadly, we could not replicate this bug anywhere else in the game, but still, it's glorious to see it working even once.
Quoting [Challenger] Originally we worked on this race implementing a tricky lap glitch route from the RTA run. Since tank vehicles are slower, the strategy takes a while for each lap, but the super glitch discovery saved around 750 frames over the previous strategy by gaining a super speed during the first lap, then the tank will be towed to a random point, for the remaining laps you must trigger C12/13 and C52 or 53 so the lap glitch will work on some “invisible” places: somehow I managed to trigger both C13 and 53 at the same time during the second lap, adding extra impressive work while eien finished the last lap by respawning the tank on C12/13, triggering C52 and instantly finishing the race as soon as the player touches the “invisible lap glitch trigger” - this glitch is really unique and I like it too!
As eien said: we don’t understand well about this glitch, and practically requires trial-and-error + TAS tools because not only the whole race becomes glitched but lots of “random barriers” can confuse the player, towing the tank to random points or even softlock the race.
Race 25
Quoting [eien86] Basically, a repetition of race 20.
Quoting [Challenger] Yep in this version the race 20 repeats, and eien managed to finish input earlier by using two jumping obstacles so the car will keep enough speed to reach the cross line just in time.
Quoting [Challenger] For the first time in years, I’m presenting a completely new project that plays a game that doesn’t have a run here in TASVideos… until now.
I'd like to thank my partner eien for optimizing the bot and creating a much more polished run! Without the ability, experience and patience, this run wouldn't be possible after all.
Although I discovered this glitch by accident several years ago and never documented it before, someone named March (I found the information in one of RTA runs from the 2023 year) also discovered it and worked well in real-time.
Also thanks to the speedrunner mx_seitan for the RTA runs, which were helpful during the development of this run, including the unique backwards route on race 20 discovered when I thought the game was done.
Some of my recent runs were done on the BizHawk 2.4 version in the last three years because my PC and laptop were unable to update the emulator for some reason. But some months ago I finally bought a new PC and since I have some unfinished projects, they will be updated to the most recent BizHawk versions :)
nymx : Claiming for judging.
nymx : There is no reason to hold on to this submission, seeing that all the right details have been presented to me. The best tool for any judge to have, is a side-by-side comparison to the WR. This video clearly demonstrates dominance over the first place holder...which the runner does a fantastic job, yet has his own mistakes to overcome. Perfect for TAS to show off!
Even though
eien86 doesn't show himself as the primary author, he builds on the efforts of
Challenger ...who has demonstrated great efforts in the past. The apparent power of two great TASers shows that a collective knowledge can push the limits of a game.
eien86 's approach does sound familiar to my own, as each full pass of a game, always teaches you more and more tricks towards cutting more. Your love of racing is appreciated, as I am a fan of TASing the same genera of games. Great job on this. TASing = Racing, or is it.,..Racing = TASing!
Gladly accepting this fantastic effort!