Released on April 20, 1989, The Adventures of Lolo was the start of a three-part series for the Nintendo Entertainment System. This game is actually a compilation of puzzles from the Japanese Eggerland series. The Lolo series was renowned for its unique style of puzzles, and the eclectic cast of enemies, ranging from an immobile snake to a sword-shooting demon's head called Don Medusa. As the titular character, Lolo, you must solve 50 puzzles in King Egger's castle to save your girlfriend, Lala, from the king's scaly clutches.
One of the things that makes Adventures of Lolo such an interesting game, besides the fact that it's arguably the best puzzle game series on the NES platform, is the fact that the game's possibility space is so limited (the game is on a 21x21 movement grid, and input is usually only taken every 8 frames (at 60fps), or every half block of the sprite grid). To put it simply: there are only so many possible things to try. With an emulator it isn't hard to test them all, and people have hacked away at this game for years. Numerous TAS videos for Lolo have been made (in particular Baxter has made a series of 10 TAS over the last 5 years, gradually incorporating essentially all known tricks to bring the completion time down to 22:04 (by SDA timing standards)). Nobody knows what's the absolute fastest the game can be completed, but it sure can't be much faster than 22:04.
I was curious to see how fast a TAS run i could make, and i decided to do so before watching any existing video (TAS or unassisted). After two weeks i was able to reach 22:25 (and i have, since then, shaved off another 10 seconds).
I'm not much of a TAS head. As usual, my real goal was to get the fastest unassisted run on a console recording. The record time by Tom Votava on TG was 27:05 (or 26:50 by SDA timing). The video for his run is not available.
My TAS route needed some modification before it would work on the console, within the modest limits of my skill. In most cases this meant fine-tuning the route slightly -- choosing from a range of equally-fast alternatives the one that leaves the most margin for error. For example, if i have a 2 block range in which i can safely change my heading, i'll aim to do it at the half-block boundary between the two, giving myself room to err on either side.
In most of the rooms, the route i take is optimal (at least, with respect to all known tactics). However there are a few places where a substantial amount of time can be saved by doing some very risky maneuvering. Too much risk is not a reasonable strategy for console, so for certain rooms i had to plan a route that compromises between risk and time-cost. The majority of the time difference between my best console run (23:02) that you see here and the best TAS run (22:04) come from just a small handful of rooms, all of them being situations that require complicated and risky manipulation of enemies (the remainder of the difference coming from errors in execution). It is often possible to skip much of the time you'd normally spend "boxing in" enemies so that they can't hurt you, and in some cases you can even use the moving enemies as temporary shields against other enemies. I can pull off a few such moves where i let the skulls roam free (e.g. Rooms 1-4, 2-5, 3-1, and 7-5), but in some cases (e.g. 10-1) it just isn't feasible.
The route i eventually settled on was approximately 22:50, if executed perfectly. It was a formidable task committing all 50 rooms to memory, many of which involve rather long, complex, and unobvious paths. It took several days to memorize what to do in each room. But even after committing the routes to memory, i found that i was still unable to reliably memorize the order in which the rooms appear.
Each time i enter a new room, it takes some amount of time for me to recognize the room, recall the plan, and begin moving. Usually about a second or more, which adds up to a minute or so of wasted time over the whole game (which is clearly unacceptable). To avoid this, i made note of the initial direction that i must head in each room, so that i could start out holding that direction before the room fades into view and then get my bearings while i was moving. I made a chart with these initial directions (and notes on the numerous special cases where i must make a turn soon after starting the level). One complication with this plan is that there is usually no down-time within or between rooms with which to consult my chart. The only down-time in the game happens between floors (every 5 rooms), so at each floor change i use this time to consult the chart and commit the next 5 initial directions to memory (which i would then have to keep repeating to myself as i played so as not to forget; i believe this is called "echoic storage").
After the planning was complete, i practiced the rooms individually by emulator until i had a pretty good handle on them. Then i began recording on an actual console. It only took about 3 attempts to get a time (26:10) that beat the current record. It took another 3 hours of recording to get a deathless run (about 25:00). After that it took another 5 hours of recording to get a run with no major mistakes (about 24:00). Then, it took another 10 hours of recording before i finally got a recording that met my quality standards.
I submitted the result to SDA and got some helpful feedback about route planning along with a request to revise and resubmit. My revised route was a bit riskier, and included some tricks that i had not originally realized were reasonable on a console run. After another 8 hours of recording i finally got a result that i was happy with. One reviewer of my first submission estimated that i could shave about 31 seconds off the original route, and i'm proud to say that i've actually reduced my time by 32 seconds with this new recording. The end result is an unassisted run that falls within 1 minute of the (super-optimized) TAS, which is quite respectable for a 22+ minute game.
The execution is pretty tight overall. There are a few instances of corner-sticking or overshooting that lose me a split second here and there. I also lose about 1.5 seconds in 8-2, about 1 second in 8-5, about 1 second in 10-1, and about 2 seconds in 10-4, but that is pretty much the extent of the execution error. Considering how easy it is to make mistakes in a game with such a discrete movement style and narrow timing windows, i'm amazed that the run turned out as well as it did. Consider the following: There are 1837 turns in the route you see here, and about 80% of them are in places where no overshoot or undershoot is allowed. At each turn, the d-pad direction must be changed within an 8 frame window. Aiming for the center of this window leaves a margin of error of 4 frames (67 ms) for each turn. So, in short, this game requires one to be accurate to within 67 milliseconds (or 1/5 of a second) nearly 1500 times. Yeah. And that's just the turning part.
Here is a room-by-room breakdown of the game:
- Room 1-1
Nothing notable here. (Except i'd like to point out that the snake has eyebrows.)
- Room 1-2
Nothing notable here, either.
- Room 1-3
Took me a while to figure out how to manipulate the sleepyhead's path so that i can get him to freeze in the top left corner.
- Room 1-4
I revised my route to take the lower path from the last heart to the chest, rather than the upper path. It leaves no room for error, but it saves me a couple of frames in 'sync' time to do it this way.
- Room 1-5
Nothing notable here. Justa buncha blockheads.
- Room 2-1
Chased by the angry armadillo. Fortunately he is easy to manipulate. Note that i must lose a couple frames near the beginning (walking into the left wall) in order to get the timing right so that he chases me up the left side of the screen rather than going up the center.
- Room 2-2
Revised block-pushing route saves about 1 step.
- Room 2-3
The TAS uses a glitch where you can actually walk past the don medusa (on the same row as him) without getting shot. I can get it to work on console about 1 out of 10 times, but i do not believe that it can be done consistently enough to be used in an unassisted speedrun.
- Room 2-4
The trick to this level is getting blockhead to change directions and start walking back to the left near the beginning of the level. Otherwise you run into him in the upper right and lose a bunch of time. Also, i need to lose a few frames somewhere in this level or else i'll run into blockhead again near the treasure chest. It's subtle enough that you might not see the lost frames.
- Room 2-5
This is a fun level, because you are obviously meant to waste tons of time moving blocks around everywhere to block in all the skulls, yet if you can get the timing right it is possible to skip all that and just walk straight through the chaos to reach the treasure chest. The trick lies in shooting the one skull at just the right moment -- too early or too late and he'll come out of his shell and run into you just before you reach the chest. It is also necessary to lose a few frames after collecting the last heart so that everybody syncs up properly.
Note that there is a *slightly* faster solution (by about 15 frames) that is too risky to be worth the trouble: Don't shoot the armadillo (save your shot), don't shoot the left-center skull, and then double-shoot the one skull that gets in your way as you approach the chest. Having to grab the lower left heart without shooting the armadillo is the risky part, and that's why i don't do it this way.
- Room 3-1
I save myself some block pushing by using the skull as a shield at the very end as i grab the chest. It looks totally bad-ass, but it's actually not so hard to do.
- Room 3-2
I overshoot by half a step here (losing 1/4 second), but it doesn't affect the armadillo timing since i can push his egg back up to where it was supposed to be.
- Room 3-3
I need to lose a couple frames after grabbing the second heart in order to get the timing right for putting the second sleepyhead to sleep. Again, it's so subtle you probably won't see it. After that, there is really nothing to this level. Note that the TAS takes a different route, however there is no difference in time.
- Room 3-4
I used to go out of my way to box in the skulls, but then one day i figured "what the hell, i'll just go for it" and just grabbed all the hearts and went straight for the chest, with complete disregard for the skulls. As you can see, it works out just fine.
- Room 3-5
The only difficult part of this room is faking-out the pink dinosaur.
- Room 4-1
There's probably a dozen different ways of doing this room, all of them with varying degrees of riskiness (i.e. varying margins of error). My particular route works nearly 100% of the time, and is only about 1 second slower than the optimal route (which has no margin of error whatsoever), so i don't bother with any of the riskier methods.
- Room 4-2
Aww... How nice of the evil dungeon master to draw a picture of me. I feel welcome.
- Room 4-3
Nothing notable here.
- Room 4-4
This is one of my favorite new tricks that i learned. I can hardly believe that it works. In order to sync things up properly it is necessary to lose a few frames near the top right corner before chasing the don medusa across the screen. It works because you are granted immunity while standing on a heart, even if you only overlap it by 1 pixel. Way way better than my old strategy of waiting for the don medusa to pass and then boxing him in.
- Room 4-5
I think the designers wanted you to use all 4 shots and move the snakes into the center to block the pink dinosaurs so you could grab the center heart last. But i really don't see why you'd do that. Also, note that it's possible to push a block through the staircase for some reason.
- Room 5-1
Nothing notable here.
- Room 5-2
I realize that i pushed one block half a square too far; this was not intentional.
- Room 5-3
Shooting those skulls so you can get the upper-right heart last is definitely the way to go.
- Room 5-4
I'm not sure how the designers intended you to solve this room, but i end up with an extra bridge segment. So i use it to save me two squares worth of walking near the end.
- Room 5-5
I think this room could use a few more arrows.
- Room 6-1
The route here has been drastically revised to save several steps. Note that i could have pushed two of the blocks half a square less than i did, however i chose not to because it is extremely error-prone to do so. In both cases it requires a turn, a half-square walk, a 180 turn, another half-square walk, followed by another turn. Fancy footwork like that is a real bitch to pull off and would inevitably end up costing me more than half a second of error anyway.
- Room 6-2
Nothing notable here.
- Room 6-3
There is very little room for error on this one. I need to do some block pushing and then make my way to the top right to let the sleepyhead out of his pen at just the right point in his cycle. Any hesitation and i'd end up having to wait an extra cycle (several seconds) for him to come around again. Also, note that i need to do some manipulation in order to get the sleepyhead to go around the right side of the grass patch, rather than the left.
There is actually a faster strategy in this room that involves using the sleepyhead as a moving shield in order grab the lower-left heart without placing a block next to the medusa, but this requires very difficult manipulation of the sleepyhead's path and is not practical in an unassisted speedrun.
- Room 6-4
The real gem here is pushing the egg into the water on the half-block boundary. That makes its path much more direct (and kinda funny-looking) saving several seconds since the thing moves so damn slow. In case you're wondering, no there is not enough time to grab the lower left heart while waiting for the egg to make its rounds.
- Room 6-5
This room is pretty obvious except for the following point: After you grab the last hearts and get off the little island, killing the egg in the water and then shooting the other snake to make a new boat is much much much faster than trying to use the same boat throughout the whole level.
- Room 7-1
Bit of trivia: This room has the highest rate of heart-grabbing in the whole game.
- Room 7-2
I have to wait a split second for the pink devil to pass me before i block him in. There is actually a way to avoid this brief delay, but it's pretty risky.
- Room 7-3
Nothing notable here.
- Room 7-4
Another confusing arrow-fest. The correct path is complicated but easy to execute.
- Room 7-5
Another cool new trick that i learned. It might look difficult and dangerous, but there's actually nothing to it. And what a huge time savings, not having to move blocks into the center.
- Room 8-1
Nothing notable here.
- Room 8-2
New revised route saves me 2 steps. However i lose about 1.5 seconds due to execution error.
- Room 8-3
Nothing notable here.
- Room 8-4
New revised route saves me 16 steps, which is a huge. This route takes advantage of the fact that you're protected from the medusa when you're overlapping a heart, even when you're hanging off it in the direction of the enemy (though for some reason this only works to the south or the east, not north or west).
- Room 8-5
This room is tough, because the route is long and complicated and because there is so much block pushing (which is always quite error prone; overshooting by half a square usually means game-over). It took me numerous iterations of improvement before i converged on the route that you see here. I chose to box in both the don medusas (though i leave them half a square of wiggle room to save some time). It is possible to just leave them free, however doing so leaves you with a route that has no margin of error whatsoever and requires some non-trivial synchronization. Even a couple lost frames would throw the timing out of whack and lead to death. It is certainly possible to do in an unassisted run, but far too unsafe for me to attempt this late in the game.
Note that near the beginning i push a certain block down by 1 square for no apparent reason. This is intentional and it helps with the synchronization. It doesn't actually lose me any time since i would have to pause and wait for the right-hand don medusa shortly thereafter anyway (before pushing a block against the left wall). What that extra push does is set up the timing so that i can synchronize with the right-hand don medusa without having to explicitly stop and wait.
- Room 9-1
Chased by the angry armadillo, version 2. Now with more bridges. I used to play this one by waiting all the way at the bottom and faking him out so that he breaks into a roll along the bottom row. But waiting where i do now, up in the loop, is actually less error-prone and it leads to a shorter following distance, which avoids lost time waiting for the armadillo again in the upper left loop.
- Room 9-2
Nothing notable here.
- Room 9-3
This is another room that was revised significantly after my first submission. Note that the pink dinosaur by the chest remains egged just barely long enough to let me run around the loop and back to the chest. You might not notice, but I pause just briefly as i shoot the upper-right pink dinosaur. This is done so that the second sleepyhead will turn right instead of left when he runs into the rocks in the top middle. (You'll notice that i'm almost directly above him when he hits. If i were just a few pixels farther to the left he'd turn left instead and block my way.) I can't pause too long, though, or else the pink dinosaur near the chest will come un-egged before i can grab the jewel.
I also found a really bad-ass strategy that involves getting the heart by the treasure chest last and shooting the pink dinosaur's shots (twice) to fend them off long enough to reach the chest. I can do it, but this is so error-prone that it is not practical. It's fun though -- give it a try on the emulator.
- Room 9-4
There is just barely enough time to run back to the right and push the block in front of the pink dinosaur before the snake re-appears, so it saves some time to do this while waiting. You'll notice that i push the block all the way against the wall instead of leaving a half-square gap. This does not cost any extra time, and in fact the extra half-square push allows me to synchronize perfectly with the snake and grab the heart just as he respawns.
- Room 9-5
Nothing notable here.
- Room 10-1
Lots of block-pushing in this one. Numerous attempts ended at this room due to pushing a block half a square too far. It is possible to use fewer than 4 blocks in this room and then get the upper left hearts last, saving a substantial amount of time. However it means dodging and manipulating the skulls in a rather complex pattern with little room for error, which is not a reasonable strategy in an unassisted run.
- Room 10-2
There are a number of different ways to do this room, differing mostly in the order in which you enter the four chambers and the places where you leave each sleepyhead.
- Room 10-3
Nothing notable here.
- Room 10-4
I lost about a 1.5 seconds waiting in the upper left corner for the don medusa to move out of my way. Normally, after pushing the egg up in there, i can move down and left to stand half way on the heart before the don medusa moves into my row, however i messed up his timing earlier on in the level when i pushed the previous egg too far (i'm supposed to leave it half a square away from the wall) requiring me to shoot it from the side rather than below. There might have been enough time for me to make the dash, but with the timing thrown off, and with such a solid run so far, i just couldn't risk it.
- Room 10-5
Final room. Surprisingly easy. I enjoy blocking the pink dinosaur's shot with my own bullet. It looks cool, and it isn't as risky as you might think.
And that's all. The Great Devil is egged, and Lolo and Lala are reunited (at least, until the sequel). Planning this run was fun and challenging. Executing the run was thoroughly exhausting. I hope that people will be entertained and amused by my best attempt at this excellent puzzle game.