I am aware that Hetfield90 has had trouble with Vile, so I'll post what I figured out by disassembly, if it helps.
There are four courses of action that Vile may take, possibly based on distance between Vile and X, or based on RNG, or both:
- If the distance between Vile and X is 160 pixels or greater, then Vile may either begin by dashing/walking, or jumping back. If the RNG value at that time is even, Vile will begin by dash/walk. Otherwise, Vile will jump back.
-- If Vile begins by dash/walk, then the next RNG value will determine whether Vile dashes or walks. If it is 2 or 7 mod 8, then Vile will dash. Otherwise Vile will walk.
-- This also occurs at the beginning of the fight.
- If the distance between Vile and X is between 32 and 159 pixels, then Vile will choose between dash/walk. If the RNG value at that time is 2 or 7 mod 8, then Vile will walk. Otherwise Vile will dash. (Note that this is backwards from the above.)
-- This also occurs when Vile begins walking from 160 pixels or more away and first closes the distance to less than 160 pixels.
- If the distance between Vile and X is less than 32, then Vile will choose between jumping backward or forward. If the RNG value at that time is 0, 3, or 4 mod 8, then Vile will jump forward. Otherwise, Vile will jump backward. (This hasn't been tested well, since it doesn't factor into the optimal strategy.)
-- This does not apply for the situation below.
- If Vile has chosen to walk or dash up to X, then when he is close enough, he will either jump back or jump straight up. If the RNG value at that time is 0 mod 8, then Vile will jump straight up. Otherwise, Vile will jump backward.
Applying to TAS, the optimal manipulation is as follows:
- First, manipulate Vile to start dashing right away (RNG value is even, and the next value is 2 or 7 mod 8). The alternative, walk first and then dash 5 frames later when within 160 pixels of X, is a bit slower.
- X should be walking towards him at the same time. When Vile is close, X should shoot him; this freezes him in midair about 8 pixels off the ground when he attempts to jump. Whether Vile attempts to jump straight up or jump back before he is frozen doesn't seem to matter much (jumping back just moves him back one pixel).
- At this time, X should jump up, remaining close to Vile but at least 32 pixels away, and get hit by the ball that Vile shoots.
- At about this time, Vile will (since X is at least 32 pixels away) choose to dash or walk in midair. He should be manipulated to walk, so RNG should be 2 or 7 mod 8. Vile will then attempt to walk, and simply fall down to the ground. (If he attempts to dash, he will still fall to the ground, but towards X, which doesn't allow the following to work.)
- About 20 frames later, Vile will be on the ground and choose to dash/walk towards X. He should be manipulated to walk, so RNG should be 2 or 7 mod 8.
- As a result of this, Vile will arrive just as X does his "helpless" pose; this immediately triggers the next scene and Vile doesn't have to walk any distance.
This is very difficult to manipulate; the flexibility of this strat is almost nothing. In particular, the manipulation for RNG to be 2 or 7 mod 8 after Vile is frozen requires two RNG values which are 2 or 7 mod 8, with one of them 24 values in advance of the other. (I did get 23 in advance a few times, but that was when I shot Vile with a green charged shot, which doesn't seem to be possible in this strat.)
By the way, some other MMX disassembly I did a long time ago:
http://tasvideos.org/forum/viewtopic.php?p=284826#284826