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.


1 2
6 7
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
Jungon wrote:
Clicked to rewatch on youtube now ... and it started around 48:33 ... I wasn't looking at the screen nor touching anything (keyboard, mouse) ... any reason to why that happened? O_o
I think that's just a thing Youtube is doing, starting your videos at whatever point you stopped watching them at if you didn't finish them.
Previous Name: boct1584
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Warp wrote:
I'm positively surprised that so far nobody has posted the old tired "it's fake!" and "it's cheating!" posts.
I'd posted a comment there, saying "it's fake! it's cheating! (For Warp.)"... it got deleted before anybody here could notice. One mystery less!
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 12/31/2009
Posts: 174
There seems to be a timing error in the commentary (I have no idea if it was intentional or not). In the YT stream at ~39:27, "Quote can open this door because I read the letter (in Ma Pignon's room)." would do better at ~39:37. The subtitles afterwards seems to sync with the movie correctly.
Joined: 11/22/2004
Posts: 1468
Location: Rotterdam, The Netherlands
Zanoab wrote:
There seems to be a timing error in the commentary (I have no idea if it was intentional or not). In the YT stream at ~39:27, "Quote can open this door because I read the letter (in Ma Pignon's room)." would do better at ~39:37. The subtitles afterwards seems to sync with the movie correctly.
Nitsuja actually mentioned that to me in PM, but I haven't gotten around to fix that yet. Will try to do that tonight. edit: just fixed it.
Joined: 9/10/2011
Posts: 8
This. Run. ROCKS.
Joined: 11/22/2004
Posts: 1468
Location: Rotterdam, The Netherlands
The author of Cave Story briefly responded to this run on Twitter.
sirbastille wrote:
@amaya_pixel Did you ever watch the TAS (youtube.com/watch?feature=…) of Cave Story and if so, were there any tricks used that surprised even you?
Amaya Daisuke wrote:
@sirbastille I watched it. I did not think them. It's crazy..
Editor, Active player (297)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
And on his bbs,
Bisqwit wrote:
I just watched the Cave Story TAS by Nitsuja. I presume that you already know about the TAS, as well. It inspired me to play the game too.[/quote]
pixel wrote:
I a little watched it.[/quote]
Editor, Experienced player (570)
Joined: 11/8/2010
Posts: 4036
I don't understand what pixel is saying in his replies. Does he like the TAS or not?
Joined: 7/2/2007
Posts: 3960
I think the "I did not think them" means that he didn't realize those tricks existed (that being what "them" refers to). And of course the "it's crazy" indicates he's impressed.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 5/2/2010
Posts: 41
Location: the Netherlands
I've seen the first 15 minutes so far: great run, and great commentary!
Editor, Emulator Coder, Site Developer
Joined: 5/11/2011
Posts: 1108
Location: Murka
DarkKobold wrote:
#2, it is a wrapper - someone could claim that alone invalidates it.
With good reason; I don't think there's anything particularly wrong with Hourglass, but I don't see how you could prove conclusively that with all of those hooked functions and replaced libraries, the game is running exactly the same as it would otherwise. I see a very clear analog to the console-verified status for Hourglass though: Make a program which plays back the keystrokes in the movie file without mucking with the target executable at all.
Lex
Joined: 6/25/2007
Posts: 732
Location: Vancouver, British Columbia, Canada
It's impossible to synchronize keystroke playback with the game's logic rate without hooking anything.
Editor, Emulator Coder, Site Developer
Joined: 5/11/2011
Posts: 1108
Location: Murka
Lex wrote:
It's impossible to synchronize keystroke playback with the game's logic rate without hooking anything.
Didn't say it would be easy ;) but I personally wouldn't consider a simple timing hook to be forbidden for such a program; as long as you aren't actually changing any of the values returned by QueryPerformanceCounter() or similar.
Joined: 1/13/2007
Posts: 343
the game deliberately runs at 55 fps as I recall, just so no one has an unfair advantage due to matching refresh rates. that alone makes it... challenging...
Spikestuff
They/Them
Editor, Publisher, Expert player (2648)
Joined: 10/12/2011
Posts: 6441
Location: The land down under.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Editor, Experienced player (570)
Joined: 11/8/2010
Posts: 4036
Cool, Synahel (one of our TASers) commentated on it! I'll add this to the Interviews page.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
I believe this run should get the "Maximum kills" tag because it really goes out of its way to blow up every enemy you can see. Any thoughts on that?
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1766
Location: Dumpster
Don't enemies in cave story respawn? I'd be hesitant to include it.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Spikestuff
They/Them
Editor, Publisher, Expert player (2648)
Joined: 10/12/2011
Posts: 6441
Location: The land down under.
Memory wrote:
Don't enemies in cave story respawn?
Yes, when reentering the room of previously cleared out enemies they do respawn.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Spikestuff
They/Them
Editor, Publisher, Expert player (2648)
Joined: 10/12/2011
Posts: 6441
Location: The land down under.
So, multi video track has been placed on the new mirror link: But that doesn't mean I didn't make single video tracks, cause I did: There's also two subtitle variations I'm providing here.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
1 2
6 7