Submission #3343: nitsuja's Windows Cave Story "best ending" in 50:10.30

Windows
best ending
Hourglass r77
150515
50
269327
Unknown
doukutsu.exe
Submitted by nitsuja on 10/25/2011 12:13:33 PM
Submission Comments
This is a TAS of Cave Story (Doukutsu Monogatari) for Windows.

Game objectives / info

  • Emulator used: None. But I used Hourglass 77
  • Game version: [dead link removed], without translation patch.
  • Gets best ending
  • Aims for fastest time
  • Manipulates luck
  • Takes damage to save time

About the game

Cave Story is a free Windows game. It is very fun (way up there with Super Mario Bros. 3, in my opinion) and well-made (albeit quite "retro"). I suggest reading about it here, and then downloading it from here and playing it, if you haven't played it yet. And all of your usual excuses for not playing it are invalid: It's free to download (legally), it has been translated to English and several other languages (in case you don't read Japanese), and it has been ported to Mac OS and Linux (if you don't use Windows).
The actual gameplay has similarities to Metroid, including upgrades throughout the game. You can also think of it as a platformer action game with RPG elements (somewhat like Popful Mail, for example), but with more shooting than slashing. But really, it's its own unique mix of things.

Why I made this movie

As you can probably tell from the above, I appreciate this game, and so I thought it deserved to have a good TAS made of it (and I was certain the game is deep enough for that to be possible). I even made Hourglass partly for this purpose (although for some reason I hadn't thought about TASing this game myself until recently). And it seemed like some people were holding their breath for this TAS to happen before considering other Windows games, or something like that, so I thought I'd try making a Cave Story TAS really quickly to get it over with, even though there are probably all sorts of other things I should be doing instead. It turned out I was totally wrong in thinking that it would be either fast or easy to TAS this game, but it's finally done now.

How to watch this movie

If you have a computer with Windows on it:
  • Download Hourglass r77
  • Download the game [dead link removed]
  • Unzip all three of the above things you just downloaded.
  • In the unzipped game folder, open DoConfig.exe and set it to "640x480 Windowed" (the 3rd option in the bottom box), just in case. Then click OK (2nd button from the bottom-right).
  • Open hourglass.exe.
  • Click "Browse..." on the bottom-right and browse to doukutsu.exe in the unzipped game folder.
  • Click "Browse..." on the top-right and browse to the unzipped movie file (the extension should be . or .hgm).
  • Click the "Run and Play Existing Movie" button on the bottom right, and wait a bit.
OR
  • Just watch somebody's encode, if you're feeling lazy or if you don't have Windows. I assume someone with more experience at encoding videos will upload a better one, but I put up a downloadable encode for now, which should be decent enough. Also there is a YouTube encode (thanks Dada), although I dislike how YouTube's framerate limitations make the game look so unsmooth.

Some of the Tricks Used

Jumping to control speed

Speed on the ground oscillates rather than staying capped at a maximum. By decelerating in the air, the speed can be tweaked such that the oscillation peaks at a higher value on the ground. Jumping again can then freeze the oscillation at that maximum speed until landing. This is why I tend to stay in the air as much as possible.

Horizontal Enemy Boosting

Until I get the Booster 2.0, I'm normally limited to a maximum speed of 845, but by lowering my speed to below 512 and then clipping the corner of an enemy, the enemy pushes me forward and I can reach speeds of up to 1023. This is usually very difficult to do, since it requires hitting an exact position on a moving enemy and reaching a specific velocity value at the same time. This trick is why I get hit so much early on in the game (to push myself forward faster than normal and save a bunch of frames every time). Note that it only works on certain types of enemies, because not all enemies have the type of solid collision that can push the player around.

Invulnerability Reset

Normally the player blinks for a while after getting hit and can't get hit again during that time, but some things (such as the end of a boss round) can reset the invulnerability time and allow you to immediately get hit again. Most importantly, opening the menu resets your invulnerability. This was used to get hit twice in a row by a bat to skip a bunch of backtracking in Grasstown. I didn't discover this trick.

Button Control via Menu

By opening the menu and varying what buttons I hold while closing the menu, I can cause a button to count as a new press on two consecutive frames, or alternatively, I can cause a button to go from unpressed to held without counting as a new press. This can be used to do little tricks like boost right and then boost left on the next in-game frame, or jump and then boost on the next in-game frame, or stop boosting in the air and hold jump to go higher without starting to boost again, or fire certain weapons faster than normal by in-game time. This is why I cause the menu to flicker open occasionally near the end of the movie.

Automatic weapon fire abuse

The machine gun (and the bubbler, which I don't get) support automatic fire, which means you can hold the fire button and the gun will shoot a shot every 6 frames automatially. Like all other weapons, though, you can fire it manually up to once every 4 frames. By using the pattern "press, release, press, hold, release", the two methods of firing can be mixed together, allowing 2 shots to be fired every 5 frames. And it's possible to do even better than that: By firing a different weapon and simultaneously switching to the machine gun and holding fire for another frame, the other weapon will fire on the "press" and the machine gun will fire on the "hold", and two frames later the other weapon will be ready to fire again, which means you can shoot 2 shots every 4 frames if one of them is from the machine gun.

Optional Items Acquired

Life Expansion (+3)

  • This lets me survive 3-damage and 5-damage hits, and do damage boosts a little more often.
  • I get the very first one in the game, and skip all others after that since they were determined not to help any further in a TAS.
  • Rough time estimate: saved 20+ seconds.

Missile Launcher

  • This has high damage output, which saves time on several bosses.
  • It starts with only 10 missiles and runs out of ammo fast, but luck manipulation makes that not a problem.
  • Getting this is a requirement for getting the Super Missile Launcher later, which is even better.
  • Rough time estimate: saved 6+ seconds plus the benefits of Super Missiles.

Machine Gun

  • High damage, lets me fly, AND manipulates luck well.
  • This goes well with the Booster 2.0 too, letting me move diagonally while still boosting at full speed.
  • Automatic and manual fire can be mixed to fire it super fast and/or overlay damage over another weapon by firing in-between its shots.
  • Rough time estimate: saved 200+ seconds minus whatever much smaller amount might be saved by getting the Snake or Spur later on.

Super Missile Launcher

  • Extremely high damage output, and the longest-ranged weapon.
  • Rough time estimate: saved 30+ seconds.

Missile Expansion (+5)

  • I grab one of these since it's directly in my path and doesn't play the long "got item" tune either.
  • It came in handy a couple of times, but I think it basically just broke even.
  • Rough time estimate: saved 0 seconds.

Missile Expansion (+24)

  • This lets me spam super missiles in the last couple of boss fights.
  • Rough time estimate: saved 5+ seconds.

Boss Fights

Igor

  • I only have the Polar Star at this point, so I just shoot it as fast as possible.

Balrog 2

  • By now I have the Fireball, which does more damage per shot than the Polar Star, so I shoot fireballs as fast as possible instead.

Balfrog

  • Defeated in 2 rounds.
  • The trick here is to wait a few frames for him to stop shaking so he doesn't instantly close his mouth when I do enough damage, then use all of my weapons together (missiles included) to force extra damage through before the next time he checks his health again in a few frames.

Curly

  • She's immune to missiles, so I use my next strongest weapon at this point, fireballs.
  • The mimigas love to get in the way, but I managed to avoid wasting any shots on them.
  • The way I fight Curly should get me killed, but I stay 1 pixel away from her "shoot up" triggerbox.

Omega

  • Defeated in first round (before he goes underground)
  • This is the first boss fight where I have the machine gun.
  • I mix 2-shots-per-5-frames machinegun fire with 2-shots-per-4-frames fireball+machinegun fire.
  • I could kill this boss faster by standing closer to it, but then I'd have to walk further to get out of the boss room, which would take longer.

Toroko+

  • I use up all of my missiles, and shoot mixed machinegun+fireball in-between those.
  • She has good aim with those blocks, which would kill me instantly, so I take damage beforehand to avoid wasting time dodging them.

Pooh Black

  • Defeated in first round (before he jumps up)
  • First boss fight where I have the Blade, which does a lot of the damage here although that happens too fast to see it.
  • I don't level up the Blade before this fight, because the level 2 Blade does much less damage here than the level 1 Blade (because of the black bubble shield he has).
  • Like Omega, I could kill this boss faster, but it's more important to head towards the door first since I need to leave the room after the fight.

Monster X

  • Defeated in 3 rounds. 5 or more rounds would be normal.
  • Similar strategy to the Balfrog fight, except I don't have to wait for him to stop shaking.

Balrog 4

  • Mixed level 2 sword + level 3 machinegun makes this a very loud (and fast) battle.

The Core

  • Defeated in 3 rounds. 5 or more rounds would be normal.
  • This boss slowly drifts to a position to the right of you, so I have to move around in a weird way to keep him in reach of my shots.
  • I drowned as early as I could while still beating the boss in 3 rounds. Maybe there's a way to get in the water a lot faster and still do enough damage in round 1, but I couldn't find it.

Ironhead

  • I can't aim in this boss fight, which makes it hard to do enough damage before he escapes to the right.
  • He moves too fast for missiles to work well (since he outruns the explosions), but they still help a little in a TAS.
  • He enters the fight after what seems to be a random delay, but I managed to make him appear pretty early.
  • Touching him is deadly, but his collision shape is wierd.

Ma Pignon

  • Over in 2 seconds with mixed machinegun + fireball.
  • This boss is immune to both missiles and swords.

Red Demon

  • Just passing through...

Misery

  • Defeated in 4 rounds.
  • Hitting her with 3 fireballs and a sword and a machine gun shot on the same frame is not easy, but I have to do really concentrated damage in a single frame at the beginning and end of each round in order to force this much damage through. Normally she only takes 80-ish damage per round, not 147.

The Doctor

  • Thanks to super missiles and the blade, he barely gets a chance to move either time. Usually he teleports around at least once.

Undead Core

  • Defeated in 5 rounds.
  • This is similar to the Misery fight in strategy, but missiles are more helpful here, since there's a larger surface area and a lower damage cap per round (I do 126 damage per 50-damage round, which is a lot of extra damage for a 2-frame window).
  • The Core waits for Sue/Misery to fall before starting round 2 (unless I wait a really long time), so I can't just ignore them. It isn't necessary to kill both of them though, but I did that anyway since there was enough extra time between rounds.

Heavy Press

  • More close-range super missile spam, combined with rapid fire support from Curly's Nemesis.

Ballos

  • I start the second stage far to the left so that the third stage will be as short as possible, since he has to reach the middle of the chamber in order to start the last stage.
  • The last form is super weak to super missiles. Good thing too, because I would take 10 damage if it took a little longer to kill him, and I don't have enough health to survive that.

Things that look like mistakes but aren't

Q: Why do you jump before giving Santa the key in Grasstown?
A: Because it's faster. If I stayed on the ground I would decelerate quickly, if I landed earlier I would decelerate earlier, and if I jumped lower I would pass too close to the corner and slow down. Santa does not wait for me to land on the ground.
Q: Why do you push against walls sometimes instead of perfectly clipping the corner?
A: Because Quote can still accumulate and maintain a certain amount (384) of speed while pushing against a wall. It doesn't reset speed to 0 in that case. If I can exceed 384 speed before reaching the corner then I'll do that instead of pushing against the wall, otherwise it's faster to push against it to have a better subpixel position upon clearing it.
Q: Why do you sometimes not "pre-jump" before falling over edges?
A: Because Quote can decelerate much faster on the ground than in the air, so in cases where I need to turn around (or avoid going forward) after dropping down a short distance, it's faster to slow down on the ground as much as possible before starting to fall.
Q: Why don't you shoot the machine gun up more to go faster downward?
A: Because I'm already falling as fast as possible. (Or, in certain rare situations, because I already have 5 shots in the air and can't shoot any more.) There is 1 actual mistake in Mimiga Village which I found after this TAS was submitted, but it only loses 1 or 2 frames (insignificant compared to the gains that someone making an improvement to this TAS should attempt to find) and isn't a systematic error.
Q: Why don't you use the booster more when you're going straight down?
A: Because boosting down sets me to maximum falling speed instantly. Boosting down for more than 1 frame would do nothing but waste fuel. It also prevents me from accelerating horizontally while doing so.
Q: Why don't you damage boost off of more types of enemies? For example, the purple critters in the Labyrinth.
A: Because they don't have collision I can boost off of. Despite looking like a palette swap of a different enemy that I can boost from, the purple critters don't have solid collision. Getting hit by enemies with non-solid collision can boost me upward, but never horizontally.
Q: What about the enemies you can damage boost off of? You skip them sometimes.
A: Early on, sometimes I skip them for health-management or weapon-experience-management reasons. Sometimes I skip them because they are in such an awkward position to damage boost from that it would actually be slower. Sometimes it looks like I skip them but actually don't (for example, I often boost off of 2 different enemies per time I get hit in Grasstown).
Q: Why do I sometimes see fireballs disappearing on their own instead of hitting an enemy?
A: Because they're a "piercing" type weapon if they hit an enemy without expending all of their damage potential, so they do their damage and then continue on and disappear later.
Q: Why do you shoot the machine gun so much even when you don't need it for air control? Sometimes you even shoot it horizontally at nothing.
A: Because every shot from the machine gun advances the RNG (random number generator), and I need to manipulate luck a lot.
Q: Why do you go to all that trouble with the Mimiga mask just to get them to move a stepping stool outside? Couldn't you have reached the Last Cave without it?
A: Because (unfortunately) the game has explicit sequence breaking prevention here: The door refuses to open until the rocket is functional, whether I need to use it or not.

Stage by stage comments

I made some commentary subtitles instead, so I could explain things as they're happening in the movie. I'm guessing you'll be able to find an encode of the movie that comes with subtitles in some way (if you're on YouTube, try clicking on the button that enables closed captioning), but the original subtitles file is here [dead link removed] in a format that most video players can display.

Some times

  • Total movie time: 50:10
  • Time until final boss dies: 48:51
  • Total in-game time: 27'14"4
  • In-game time in : 2'04"1

Memory addresses watched

  • 0049E66C d s 0 X velocity
  • 0049E670 d s 0 Y velocity
  • 0049E654 d u 0 X pos
  • 0049E658 d s 0 Y pos
  • 0049E664 d s 0 X cam offset
  • 0049E660 w s 0 Y cam offset
  • 0049E6B0 d h 0 flags
  • 0049E6CC w s 0 health
  • 0049E6E8 d s 0 booster fuel
  • 00499BCC b u 0 weapon 1 level
  • 00499BD0 b u 0 weapon 1 xp
  • 00499BE0 b u 0 weapon 2 level
  • 00499BE4 b u 0 weapon 2 xp
  • 00499BF4 b u 0 weapon 3 level
  • 00499BF8 b u 0 weapon 3 xp
  • 00499C08 b u 0 weapon 4 level
  • 00499C0C b u 0 weapon 4 xp
  • 0049E1EC d u 0 framecounter
  • 004A5ADC b s 0 event status
  • 004A5B00 d s 0 wait length
  • 004A5AFC d s 0 waited frames
  • 00499C00 w s 0 missiles
  • 00499BD8 w s 0 machinegun ammo
  • 004A5554 w s 0 mgunrefillcounter
  • 0049E650 w h 0 equipped
  • 004ADC74 d s 0 bat1ypos
  • 004AE684 d u 0 basilx
  • 004AE68C d s 0 basilxvel
  • 004B1950 d s 0 jelly time
  • 004B1980 d s 0 jelly dmg
  • 004B1920 d u 0 jelly hp
  • 004BBC9C w s 0 monsterxhp1
  • 004BBDF4 w s 0 monsterxhp2
  • 004BBD48 w s 0 monsterxhp3
  • 004BBEA0 w s 0 monsterxhp4
  • 004AE484 w u 0 fan1ypos
  • 004AEAC4 w u 0 door4hp
  • 004BBA60 w u 0 corex
  • 004BBA64 w u 0 corey
  • 004BBA6C w s 0 coreyvel
  • 004BBA98 w u 0 corehp
  • 004BBA3C w s 0 coreroundstarthp
  • 004AD748 w s 0 miseryhp
  • 004AD778 w s 0 miseryroundstarthp
  • 004AD8A0 w s 0 suehp
  • 004AD7F4 w s 0 miserytransformedhp
  • 004B1314 w s 0 deleet1hp
  • 004B13C0 w s 0 deleet2hp
  • 004BBA98 w s 0 heavypresshp
  • 004AD748 d s 0 ballos1hp

Possible improvements:

  • Several things such as killing certain bosses quickly or getting certain damage boosts are so hard to pull off that there is most likely some way to improve them at least a little. I don't see further reducing the number of rounds of any boss as being possible, though. (Actually, Misery could be 3-rounded if you can hit her with an extra blade and 6 super missile explosions on the last 2 frames of every round. But I don't know if that's really possible, and it would require getting more xp in the Last Cave and using fewer missiles against the Doctor, so it might not be significantly faster.)
  • The level 1 super missile can be shot through a wall to skip a countdown in the third room of . I'm not sure how this could save time, because by that point I'm starving for doritos for my super missiles and that area has the most xp, which takes as much time to collect as the countdown takes. But maybe there's some completely different strategy that would make it possible to save a little time here.
  • These might not really save time, but some other things to try are: skipping the +5 missiles, using left+right in the omega battle, ending closer to the door after balfrog, taking damage from different enemies in egg corridor.
  • If aiming for in-game time, which I wasn't, then more tricks with the menu could be used (including unequipping the booster in some places to preserve full boosting speed).

Other comments

  • Thanks to Upthorn for supporting winTASer (now Hourglass) and making a test run of Cave Story with it. And watching my WIPs, and advising me that the missile launcher and health upgrade are worth getting (which turned out to be completely correct), and other help.
  • Thanks to the various speedrunners and (mainly on nicovideo) TASers, who found tricks I was able to use.

Mukki: Judging...
Mukki: A superb piece of work. Accepting for publication.
Last Edited by adelikat on 9/23/2023 2:01 PM
Page History Latest diff List referrers