This is an improvement of 31 seconds to the published movie. Usually I don't TAS games I never played before, but this one appeared to be quite interesting to me when I saw Mukki's TAS, so I played around with it a little. I found some addresses and put a simple Lua script together. Shortly after, I found a useful speed trick which involves keeping your speed by pausing the game at certain frames, and I felt like running the first level. I didn't consider running the whole game at that time, but I recently got interested in it again. The upcoming levels were a much easier job than I expected (because the speed trick which is annoying to optimize was applicable to a much lesser extent). When I was near the end of world 4, I was made aware of further improvements by cyghfer, mainly the world 2 boss could be improved by a lot so I had to redo it. Unfortunately, the game isn't very hex-edit friendly due to lag behavior and varying speed oscilations. When entering a new "floor" of rooms, the game may tend to throw 10 lagframes right at you, and there isn't anything you can do about it. Also, when standing still for a long time there will be frequent lag frames, probably due to the BGM. I had to redo all of world 3, but I managed to save another second here by better luck-manipulation (kicking in the air changes the RNG apparently, and it helped bypass the ceiling enemies) and better midboss strat. I managed to hex-edit my previous world 4 in without trouble, I only had to account for lag frame differences.
- Genre: Platform
- Emulator used: VisualBoyAdvance 1.7.2 re-recording v21-interim
- It should still work in v23 though.
World 1
I TASed this level in december 2010 after I found a pause trick that lets you keep flying speed. I expected the upcoming levels would be similar and the pause trick kind of kills the music. All the other levels were done in July/August 2011. Probably more frames can be saved in this level since I wasn't very serious about it, but it's quite a pain to use the pause trick optimally.
World 2
I got to the boss room much sooner. The key was to optimize ball speed. I prevent the boss from becoming invincible and using his attack by having him fly around in the air.
World 3
Optimized stuff here. You can prevent the shelled enemy from shutting his shell by making him fly (jump at him with upwards motion). At one point a screen transition took 10 additional lag frames compared to my movie before I redid the level. I tried some ideas, but it's pretty much frame dependent so I had to accept the loss.
World 4
The pause trick gets used a lot again. Nothing much to say here..
World 5
Another level where the pause trick gets used a lot. I managed to beat the midboss with no lag frames at all. I used the enemy boost and stopped the robot for faster walking, as suggested by cyghfer. Right before the boss rooms, I got another bunch of lag frames thrown at me... Nothing to do about it other than trying to save frames earlier on, which you can't just do on the spot. I killed the two small bosses seperately, because the score needs to end racking up before the floor opens so no need to get to one side of the room first. There's some sprite glitch going on at the final boss. By the way, if you kill him as Big Yacopu, the game locks up due to him flying away.
Level | Frames saved |
---|---|
Menu | 1 |
1 | 248 |
2 | 575 |
3 | 212 |
4 | 373 |
5 | 473 |
Total | 1882 (31.3 seconds) |
Tricks & Glitches
- Speed oscillation: The game basicly sets your speed to something when moving, and depletes by 1 unit every 15th frame or so. You can abuse the oscillation behavior to go at higher speed than usual, though I didn't use it in some places, for example in the water. My impression was that abusing walking speed oscillation behavior in the water is pretty much equal to not abusing it.
- When jumping, it goes 17, then 16, and when it becomes 15, it sets it to 17 again. The best way to move is to jump repeatedly at certain frames which gets you 18 speed.
- When in flying form, you move at 24 speed, and when it becomes 23, it sets to 24 again.
- When in Ball form, you move at jumping speed. You can press B to boost your speed by 8. When going left, you can get a boost as long as your speed is 40 or lower. When going right, you get the boost when your speed is 39 or lower.
- When in Fish form in the water, you move at jumping speed.
- When in big Yacopu form, shooting gains you 32 speed in the opposite direction. If your speed is 33 or lower, you get the speed boost, meaning your speed can be 65 at max.
- Pause trick: You can skip the speed drops by pausing the game at certain frames. It is only really useful when in flying form since rejumping after landing on a floor gains you +3 speed. You can build up high speed this way, the greatest in this TAS is at 51 (in World 5). You can glitch into walls if your speed is somewhere at 100, but it's not possible within the game's level layouts. It is not beneficial to use at all when under water (since the game drops speed much more frequently) or in big Yacopu form.
- RNG trick: Kicking in the air when jumping can be done to change enemy behavior, apparently. It doesn't waste any time to do this. It was done in World 3 to bypass the ceiling enemies easily. I don't have any RNG addresses at hand, but I didn't need any for this game.
- Keep shelled enemies open: The shelled enemies in World 3 and World 4 can be made to not protect themselves by bumping into them with upward motion (to make them fly) and then damaging them.
- Wall clip: This vbm by Mukki shows how to glitch into a wall by using the midboss in World 4. Maybe it can be used in other places with other enemies, but I wasn't able to find any use for it. World 3 has the greatest potential for a wall clip, the ceiling enemies can clip you to the side, but due to the level layout you don't get stuck in the wall. The World 3 midboss' shots don't last long enough to push you into the wall.
Memory addresses
Addresses | Range | |
---|---|---|
ffa8 | 1-byte signed | X-Speed |
ffaa | 1-byte signed | Y-Speed |
ffa1 | 1-byte unsigned | X-Position Block |
ffa2 | 1-byte unsigned | X-Position (Sub-) pixels |
ffa3 | 1-byte unsigned | Y-Position Block |
ffa4 | 1-byte unsigned | Y-Position (Sub-) pixels |
c2c4 | 1-byte unsigned | Transformation timer 1 |
c2c5 | 1-byte unsigned | Transformation timer 2 |
c102 | 1-byte unsigned | Boss HP |
c142 | 1-byte unsigned | Final Boss HP |
When timer 2 runs out (256 frames), timer 1 decreases by 1. The transformation timer lasts for 30 seconds = 1800 frames.
Possible improvements
- Optimizing abuse of speed oscillation better. I noticed very late that by facing the opposite direction for one frame, you can keep 18 speed while jumping.
- Other minor optimizations. I didn't want to spend too much time on doing optimizations and getting the rerecord count up to the 100,000s, as was the case with my Kirby's Dream land run.
- By saving frames, you can have a chance at removing room transition lag (or risk getting new lag).
Closing words
Thanks to everyone who contributed. This was a nice challenging-to-TAS game.
I hope you enjoy watching.
mmbossman: Very nice improvement, and well paced run. Accepting for publication.
fsvgm777: Processing...