We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!

Cave Story

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Cave Story

Also known as: Doukutsu Monogatari (JP)
Developer: Studio Pixel
Publishers: Studio Pixel (Windows), Nicalis (WiiWare, Cave Story+)
Platforms: Windows, Mac OS X, Linux, WiiWare, Nintendo Switch
Released internationally: November 22, 2011 (Windows, Mac OS X), December 13, 2011 (Linux)
Released in JP: December 20, 2004 (Windows)
Released in US: March 22, 2010 (WiiWare)
Released in EU: December 10, 2010 (WiiWare)


AreasIcon.png This game has unused areas.
CodeIcon.png This game has unused code.
DevTextIcon.png This game has hidden development-related text.
EnemyIcon.png This game has unused enemies.
GraphicsIcon.png This game has unused graphics.
ItemsIcon.png This game has unused items.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
RegionIcon.png This game has regional differences.
Carts.png This game has revisional differences.


PrereleaseIcon.png This game has a prerelease article

Cactus Story
This page focuses primarily on the original Windows release, not the Nicalis-produced versions.
You can find info on the Wii and Nintendo Switch ports in the Sub-Pages.
Additionally, this page focuses on the (half-official) English translation of the game.

Cave Story is an indie game released for free from Japan, with program, art, music, character design, and everything all coming from a single man in his spare time. It was later picked up by publisher Nicalis which made several ports of the game for WiiWare, Mac App Store, DSiWare, Steam, Nintendo Switch and 3DS (one retail version and one eShop version based on the DSiWare port).

The Nicalis ports were criticized by fans of the original freeware release for being extremely rushed, if not butchered in some aspects, and not adding a whole lot to the game. The few noteworthy things that Nicalis did to their ports was update the game with new graphics, music (only for CS+, 3DS and WiiWare version, the other ports kept the original Organya music), and a brand new translation and mods that were taken from the Cave Story Tribute Forums (although the controversy has been cleared up since then).

This page primarily covers the original Windows release. For other versions, check the Sub-Pages.

Hmmm...
To do:
  • More information, more images.
  • The released prototype screenshots and music.
  • The Wii version also has unused content and remixes the unused theme.
  • Version differences. There also seems to be 8 (!) test versions that were available about two months before the game's release. So if anyone manages to find one of these lying around, they should give it to the internet to dissect.
  • Add the rest of the unused functions.
  • More images for the re-purposed objects?
  • There might still be a few more differences from 1.0.0.5 to 1.0.0.6.
  • Unused carets:
    • 4 (looks like the Snake's projectile trail)
    • 14 (broken - might be related to the 'large dissipation effect' described in this article)
    • 17 ('PUSH JUMP KEY!')
  • Background type 0 also appears to be unused.

Sub-Pages

Read about prerelease information and/or media for this game.
Prerelease Info


Cave-wiirough.png
Windows vs. Wii
Despite not being much more than a copy-pasted port, there are some differences.
Cave-wiifinal.png
Wii versions
The initial Wii release was so rushed, they made a second version to fix some of the problems of the original. They later updated the North American version with these changes.
CaveStory-SwitchQuoteanim.gif
Nintendo Switch version
Even though it has some little tweaks, this version is the most superior.

Unused Enemies

0A Balrog (Shooting)

Balrog, a recurring miniboss throughout the game, has several objects for when he's doing different things, including one for dropping in from the ceiling, one for bursting in through the wall, one for standard cutscene animations, one for every boss battle, and even a major boss for when he transforms into a giant frog.

This object in particular is one of the miniboss battle versions of him which was never used. It consists of a very simple pattern of shooting three of his energy bubble projectiles, jumping to the opposite side of the room in one giant leap, shooting three more, jumping all the way back, and repeating.

Various forms of Balrog can be seen in the prototype art and screenshots, so this AI is left over from a much earlier version of him as seen here.

BD CaveStory-homingflame.gif Homing Flame

A few seconds after entering a room with this object, it slowly moves toward and swerves around the player, occasionally hitting them. Sprites for this are found in both NpcSym.pbm and NpcAlmond.pbm, suggesting it was originally going to be used in the Core fight.

Objects Re-Purposed From Earlier Iterations

The original Linux port contains a complete set of debug symbols, including the names of every variable in the game. Over the course of Cave Story's development, Pixel's variable naming scheme changed. This allows us to determine the age of various objects:

Notably, the oldest objects in the game (dating back to before the development reset) name their spritesheet bounding boxes "rect_left" and "rect_right", while newer objects use "rcLeft" and "rcRight".

Here's a list of these recycled objects in order (hypothetical, but these seem to match up with what we know about the versions prior to the restart of development):

  • 09, 0A, 0B, 0C, 13, 24, 44, A9 - All of these are objects for Balrog, who was re-purposed from the earlier versions, being a common character.
  • 1A - Black bat that goes in circles.
  • 21 - Balrog projectile.
  • 33 - Crow holding a Skull Head.
  • 41 - Blue bat.
  • 54 - Basu's projectiles.
  • 6C - Balfrog projectile (this was likely re-purposed from a scrapped enemy, as far as I know, Balfrog wasn't in the earlier versions).
  • 94 - Critter projectile.
  • 9C - Gaudi projectile.
  • AE - Armoured Gaudi projectile.
  • B2 - Core projectile (spinning) (The core was re-purposed from the earlier versions).
  • B3 - Core projectile (wisp).
  • BB - Fuzz core.
  • BC - Fuzz baby.
  • CA - Zombie Dragon projectile (Likely re-purposed from an old enemy).
  • CE - Counter Bomb from Egg Corridor(?)
  • D1 - Basu's projectiles from Egg Corridor(?) (Deal more damage)
  • E8 - Orangebell.
  • E9 - Orangebell's smaller bats.
  • F2 - Red bat.
  • F8 - Misery vanishing during her boss battle (Misery is based off of another scrapped character, although the actual boss was changed, this seemed to stay the same...)

Hidden Objects

These are difficult to find even with a map editor because Pixel's work style is to make an object for every single event, including ones that don't need a new object to function.

There are many many objects scattered throughout all of the maps, and you can't even depend on the object type to determine if it is used or not because an event might change them into something else to make them "appear".

Pixel also probably couldn't fully delete objects from his maps as he was making them, so instead he simply reused them as something else, set them to have an event and type value of 0, or pushed them into a wall where they would not be noticed.

This section is for looking at the latter of those. The objects which are set to all 0 are not worth listing.

First Cave

Unused wall spikes revealed.

This screen contains some spikes surrounding the lion head doorway near the bottom. When pushed out of the wall in the direction they're set to face, you see them on either side above the lion's head, providing some interesting atmosphere and a slight jumping challenge to cross the gap there.

It also seems that, since the map "Pole" (the Hermit Gunsmith's abode, where you get the polar star) is so late in the map list, and there is a deleted NPC above the doorway, originally there was simply a chest there which contained your first weapon, probably the Snake. As the Snake cannot break the tiles blocking the exit, there is also another deleted NPC on top of the uppermost of the three blocks, which was probably used as either a vertical script trigger or something similar to the laser system seen in Egg Corridor, which would block you from exiting without a weapon despite the breakable blocks not being there. The Snake was probably replaced by the Polar Star there later, but the Pole map still was not necessary until the Spur came into existence, so this chest probably lasted a long while.

A nearby mostly-deleted and probably related NPC pushed into the wall on top of the spikes carries the unused event number 220. This was likely a talking NPC of some kind (and less likely a second chest) which would have been situated on the far ledge, as 1xx events are used for doors, 3xx events are used for items like the beast fang, 4xx events are used for life capsules, events 200 and 201 actually already exist in the script for the original chest (containing only <END), and the 2xx range of events seems to be used for those general purposes.

Unused Items

05 CaveStory 05.png Beast Fang

A sharp fang found at the
Yamashita Farm. Is its owner still
alive...?
Location of the Beast Fang in Yamashita Farm.

Found in the Yamashita Farm, as the description states. It is one tile below the ground where the Life Capsule now rests, suggesting that is where it was originally placed. The text that should appear when you collect it is:

You see something gleaming...
Got the =Beast Fang=.

Pixel has confirmed that the fang is from the Red Ogre in the Last Cave,

http://i.imgur.com/iO6ET.png
Oh.. I forgot.. but it's right..

— Pixel's BBS

and from what this shoddily Google Translated webpage says, it was supposed to act as foreshadowing. Another idea tossed around was for it to be used in Jenka's soup.

06 CaveStory 06.png Life Capsule

A life capsule.

This is used for the small image in the dialogue box when you collect one, but never is available in the inventory. Despite this, it still has text for the inventory screen, which cannot be seen.

Unused Graphics

Hmmm...
To do:
  • Take a closer look at the images. There seem to be a few duplicate NPC sprites, for instance.
  • Possibly upload the remastered versions?

PrtMimi

Image Notes Revamped for rereleases?
CaveStory-mimistatues.png
Various statues (or maybe gravestones) that could've been used in the Graveyard. Yes

NpcEggs1 (Egg Corridor)

Image Notes Revamped for rereleases?
Cave Story owl.png
Some kind of owl. The eyes are mistakenly transparent in-game, as they have the color #000000. No
CaveStory-puff.png
A white puff. Bears resemblance to the Counter/Time Bomb in the destroyed Egg Corridor. Yes
CaveStory-enragedbeetle.png
An "enrage" mechanic for the beetles, like what exists for the Behemoth. Yes

PrtEggs

Image Notes Revamped for rereleases?
CaveStory-EggsWater.png Red looking water in front of an X pattern. Marked as a regular water tile in the tileset attributes. Yes

NpcWeed (Grasstown/Bushlands)

Image Notes Revamped for rereleases?
Cave Story frog.png
A frog wielding a sword, similar to a used enemy that appears in the Mimiga Graveyard. Appears in the art for OrgView, versions 9 and 12 (OrgV09/OrgV12.exe), two of the music players released by Pixel during Cave Story's development. No
CaveStory-mannanbullets.png
White-colored bullets, as opposed to red, for the Mannans. Yes

PrtWeed

Image Notes Revamped for rereleases?
CaveStory-bushmap.png
The top tile is placed behind and obscured by all the fans, which is odd, as the fans themselves are solid. Maybe at one point they weren't?

The arrow is a downwards air current.

Yes

NpcSand (Sand Zone)

Image Notes Revamped for rereleases?
Cave Story flying puppy.png
It's a puppy... with wings... Yes
Cave Story Polish.png
A Polish with spikes instead of blades. The Sun Stones use a similar graphic. Yes
Cave Story Blue Skull.png
A Skullhead or Skullstep with blue, half-open eyes, with no sprites for an open mouth. Yes (poorly)
CaveStory-birdsflying.png
These birds don't fly horizontally in the final game, which is good, considering how scary they would be if they did. Yes

NpcMaze (Labyrinth)

Image Notes Revamped for rereleases?
Cave Story Gaudi side.png
Gaudi, the main enemy of the Labyrinth, flying horizontally and crouching. The flying sprites were revamped and used in the Wind Fortress challenge in Cave Story+, and probably would've been used in the original game had the Wind Fortress not been cut. Yes
CaveStoryGaudiStandingAttack.png
What appears to be a Gaudi firing a projectile whilst stood on the ground. Normally, only the flying Gaudi can shoot. Yes

PrtRiver

Image Notes Revamped for rereleases?
CaveStory-riverarrows.png
These arrows are used in the map, but are replaced by the flowing river currents in-game, so they are not seen. Yes
CaveStory-riverme.png
This tile blocks the player in the Ironhead boss fight, but they are offscreen. No

PrtOside (Outer Wall/Side)

Image Notes Revamped for rereleases?
CaveStory-holes.png
This holey block is marked as shootable in the tileset attributes, but shootable blocks are replaced with the star block tile in NpcSym in-game. Notably, the tileset attributes (Oside.pxa) were last modified on December 16, 2001, six months before development reset. Yes
CaveStory-osidestatue.png
A statue of a Mimiga. Yes

NpcCent (Plantation)

Image Notes Revamped for rereleases?
Cave Story enemy.png
Someone from the Droll family. He only has sprites for standing still and jumping, so that might have been how he attacked. No
CaveStory-totem.png
Totem poles, with a destroyed variant. Found in PrtCent. Yes

NpcMiza (Misery and Sue bosses)

Image Notes Revamped for rereleases?
CaveStory-earlyquote.png
Curiously among these sprites is a greenish, early Quote. Yes
CaveStory-humansueearly.png
Even more curious are these early human Sue sprites. Maybe she was to turn back to normal after defeating her? No
CaveStory-friendlinesspellets.png
CaveStory-friendlinesspelletsa.gif
A projectile, probably to be used in the boss fight. Yes
CaveStory-mizaRise.png
Misery standing up before flying. Only a left facing version of this exists in the file. Yes
CaveStory-mizaDed.png
CaveStory-mizaDedassembled.png
Misery in misery. Right facing version does not exist. Yes
CaveStory-mizaCharge.png
CaveStory-mizaChargeSue.png
Misery and Sue possibly charging up energy attacks. Note that Sue's eyes are orange, instead of red. Yes

PrtHell (Sacred Grounds)

Image Notes Revamped for rereleases?
CaveStory-hellmarkings.png
Similar to the marked block in the Labyrinth, where Professor Booster falls. Technically, these are used to mark the position of the Deleet enemies... but those enemies appear over tiles, and destroy the tiles around them when they explode, so these tiles can never be seen in normal gameplay. Yes
CaveStory-hellbridge.png
A recoloured fence tile from the Mimiga Village tileset. The remastered graphics show the red bits as tentacles. Yes

NpcSym (symbol characters)

Image Notes Revamped for rereleases?
CaveStory-snakefirerefill.gif ...Powerups, perhaps? Or ammo refills for the Snake and Fireball, for when they still had limited ammo. Yes
Cave Story NpcSym2.png
CaveStory-animatedsign.gif
Unused sprites for an animated sign. The black on the sign shows as transparent in-game.

Notably, the code that animates the sign is still active. The only reason that signs don't look like they're animated is because their 2 frames are identical to each other.

Yes
CaveStory-bluefire.gif Identical to the regular fire, except in color. Yes
CaveStory-bigkey.png
Looks like Santa's key, but bigger. The warehouse key...? Yes

NpcGuest (Guest appearances from development versions)

Image Notes Revamped for rereleases?
Cave-Story-Unused-Soldiers.png
Either a Mimiga medic or soldier. Yes
Cave-Story-Workers-Looking-Up.png
The plantation workers looking up... but they never do this in the game. Yes
Cave-Story-Alligator.png
A strange alligator sprite from within the game. Some early screenshots show the game with reptile-like enemies. Yes
Cave Story- Mimiga TV.gif A Mimiga sitting down, eating, while watching a TV or computer. This sprite was later used on Cave Story 3D's boot screen. Yes
Cave-Story-Sweatervest.png
Itoh, wearing what looks like a blue sweater vest. Yes
CaveStory-campfire.gif A campfire. Yes
CaveStory-thumbsupman.png
The man listed as BA2 in the credits. The sprite that isn't giving you a thumbs-up/is pointing to you is used. In the revamped version, it's more clear that he's just holding his cigarette instead. Yes

NpcRegu

Image Notes Revamped for rereleases?
CaveStory-redcurly.png
It's Curly Brace, except she's red. Yes

Bullet

Image Notes Revamped for rereleases?
CaveStory-kingblades.png
A slightly green King, along with some swords, in Bullet.pbm. A scrapped weapon, perhaps? Yes
CaveStory-greenhash.png
Green hashy things. Yes

Caret (Cullet)

Image Notes Revamped for rereleases?
CaveStory-blooddrop.png
Blood drops. Used in the development versions for organic enemies' deaths. Yes
CaveStory-bloodsplatter.png
CaveStory-bloodsplattera.gif
Used in the development versions as an on-hit effect. Yes
CaveStory-boom.png
CaveStory-booma.gif
A large dissipation effect. Yes
Cave Story jump.png
You're never told at any point during the game to jump. Quick time event or tutorial? No

Title

Image Notes Revamped for rereleases?
CaveStory-titleDUKUTSU.png
An alternate romanization of the game's Japanese title, Doukutsu Montogari. Appears under the actual title logo in the spritesheet. No
CaveStory-titleKana.png
The first is 'Doukutsu' in hiragana, followed by kanji of 'Monogatari', and the second is kanji of 'Doukutsu' followed by hiragana of 'Monogatari'. No

Human Sue Portrait

Cave Story human Sue.png
Present among the portrait images (the pictures that show who's talking) is a picture of Sue as a human. This is never used, as the only time Sue is seen as a human is during the credits, in a small animation.

CaveStory Quote Face.png
It appears to be the base for Quote's portrait in the WiiWare port's Curly Story mode. It was further edited in the European version and later updated in the North American version.

Other Graphics

Cave Story Ikachan.cur.png
A cursor that looks like Ikachan, which can be found by editing the main executable with a resource hacker. There is no code left in the executable that would use this.

Cave Story points.png


This text, found next to the "Lv" graphic, seems to have belonged somewhere on the HUD. It either showed the experience points or some score. This was actually revamped better than the Lv icon for the rereleases!

CaveStory-sns.png
These represent the shootable block star tiles in-game. In order, they are: PrtCave, PrtWeed, PrtSand, two duplicates in PrtStore (Gaudi shop and Plantation jail), PrtMaze, PrtCent, PrtWhite, and PrtHell. These were not revamped.

According to leftover debug symbols in the Linux port, 'SN' is short for 'Snack'.

CaveStory-mychars.png


Sprites of Quote either with a Booster or backpack on, legs slanted in the air, and him sitting (which was just done for the good ending). Two are duplicates. In the rereleases (both the new and original graphics), the bottom two were edited to have the Mimiga mask on.

It's hard to see, but that's actually blue.

Much better.
A circle fade effect. Used in the development versions, before it was changed to a diamond shape. It's an inverted version of Ikachan's fade.

Unused Text

The scripts in Cave Story are very easily decoded as plain text, so we can see all of the text that falls outside of specific dialogue box events and such. Things in this section may have been intended as dialog or cutscenes, or may just be leftover comments.

ArmsItem

Item names and descriptions.

#6002
<PRI<EVE7002<MPJ7002<MSGNo data for this floor.<NOD<CLR<END

Present between the description of Arthur's key and Santa's key. The "<MPJ" command, which doesn't appear in any event except this one, jumps to an event if the map's "mapping flag" has been set with the similarly unused "<MP+" command. Pixel probably had something like map stations, from Metroid, planned in mind, but decided not to follow through with it. Or, he simply didn't want the player to use the map in some areas.

This event is run when using the Map System in the inventory, and it immediately jumps to event 7002, which just shows the map, leaving the <MPJ command unused, and the "No data for this floor." text to never appear.

<MSG<TURPuppy<WAI9999<END
<MSG<TURJenka's pet dog.<WAI9999<END

The name and description for Jenka's puppies, however, whenever acquiring a puppy, a flag is set that gives the puppy a unique name and description.

Head

Global events such as health refills, death, and drowning.

XX: head.tsc   4000 - 4099
4000:Almond水難

This appears at the bottom. This is one of Pixel's flag comments that they would've used to keep track of the flags in the game, but they seem to have forgotten to remove them from this script. The one flag noted here (4000) is about running event 1100 when drowned, rather than the standard drowning event. "Almond" is the internal name for the Core (and by extension, the "Core" map), which is the only place in the game where the above flag is used. The two kanji mean "flood" (as in drowning).

Eggs

The Egg Corridor.

-0505
<PRI<MSG<FAC0013What...?<NOD<CLRWhere am I...?<NOD
What did I...?<NOD<CLRWho are you?<NOD<END

This event (numbered 505, but rendered inactive; the first character should be "#" instead of "-") occurs between the events for the boss battle with Igor at the end of Egg Corridor. It shows that, originally, Igor survived to say those lines if talked to after the battle, and had a large profile face for the dialog, numbered 13 (which was later replaced by Jenka's face). Oddly, there are no commands in this event which would play a 'getting up' animation (implying that he would simply change back to normal immediately) and the script freezes the entire game state while it's running so nothing can move or animate anyway.

Unfortunately for Igor, he is no longer interactable after combat and instead falls to his knees before flopping to the floor and laying there.

MazeI

First room of the Labyrinth.

The following text can be found at the bottom of the script file:

37: MazeI      0640 - 0659
0640:初到来
0641:扉開く
0642:ライフカプセル

Translated:

0640:Initial entrance
0641:Open gate
0642:Life Capsule

Notes about the flags used in this map. Seems odd that out of all the maps, only this one (and technically the Core room in Head.tsc) got to keep its notes.

Plant

Yamashita Farm.

#0105
<PRI<MSGWant to save?<YNJ0000<SVP<CLRGame saved.<NOD<END
#0106
<PRI<LI+1000<SOU0020<AE+<MSGEnergy replenished.<NOD<END

It's a room-specific save and healing prompt, before they were added to Head.tsc. Seems to be a pretty old holdover from early in development.

The save script differs from the one in Head, as it doesn't set the flag that confirms the player has saved at least once. Also, the AGTP translation has this as "Want to save?" while the regular save prompt is "Do you want to save?". However, the Japanese is exactly the same in both cases (セーブしますか?) so, probably just a stylistic choice in translation.

Jenka1

Jenka's house, before being raided by Balrog.

Each puppy says something different after you return him/her, and they're all aligned next to Jenka. The joke was that the first puppy would bark once "Arf!", the second would bark twice "Arf arf!", the third three times "Arf arf arf!", the fourth would perform a combo breaker and say "Booop.", and finally, the fifth would say "Five!".

However, when you enter the door to Jenka's house with the fifth puppy on your head, the game takes you to "Jenka2" to show Balrog stealing the key. From there on, "Jenka2" is the map you're taken to. As such, the fifth puppy never gets in line (said line being in "Jenka1") and the last part of the joke is lost.

MazeO

The Camp in the Labyrinth where Curly is.

The mysterious robot,
Monster X...
Your chance to attack
is when its hatch opens.

Someone should have told you when to attack the Labyrinth's mid-boss, but this text is never used.

MazeB

Labyrinth B, the room where Prof. Booster appears.

When Prof. Booster appears, and you talk to him, there's an alternate script where when you try to talk to him with the Tow Rope, he will say "Ooh..." instead of his usual dialogue.

#0503
<KEY<MSGOoh...<NOD<END

You get the Tow Rope in the Core room before or after fighting the Core, but by then, you can't backtrack to Labyrinth B (you're blocked either at Dark Place, or if before the fight, the door to it), and by the time you're able to get back to Labyrinth B, Prof. Booster has already left, making this event impossible.

Almond

The Core's room in the Labyrinth.

Once the core is destroyed, the doors to the main room close and the first terminal reads "ERROR" when you try to inspect it. The underwater terminal is programmed to do the same, but the problem is that when the core is defeated, the elevator that leads to the underwater terminal is blocking you, so you can never read its "ERROR" message.

Blcny2

The Balcony, when it's crumbling.

In the regular Balcony, when it's not crumbling, if the player gets too close to the left edge, the message

Any further and you're
going to fall!

appears. The script for this message is also present when the island is crumbling, but doesn't play since you need to jump off the edge.

Cent

The Plantation.

#0150
<PRI<FLJ1030:0151<MSGIt's still too early to come
here...<NOD<END

This message appears if you try to enter the door to the Final Cave before the rocket is ready. There is actually a 'cheat' way to get up there without the rocket - you get a few of those dragonflies in the top left corner or down there around the pool at the bottom. They will follow you to the presses. Get yourself damaged by them, then quickly boost through a few presses. You won't take 127 damage due to the invincibility. Keep doing this to get to the top. You can save there, but it will display the message so you can't get through the door.

#0299
<PRI<MSG.....<NOD<END
<PRI<CMU0000<MSGYou're one of those killer robots!<NOD<FAO0004<MYD0002<CLR
Oh, you got me...<NOD<TRA0057:0094:0011:0014

This strange script is used for when you talk to Mimigas without the Mimiga mask. However, some of this script is unused because an <END command precedes it.

This may have been an alternate script for the guard grabbing you when you try to use the teleporter, and taking you to the cell where Sue was. It mutes the music, shows this text, fades the screen to black, and takes the player to the cell.

The "Oh, you got me..." line is a strange alternate version of "You were caught...".

Momo

Momorin Sakamoto's hideout.

#0201
<ITJ0018:0202<ITJ0023:0203
<MSG<FAC0022What I need right now
is a Booster.<NOD
Now, who would have one
of those...<NOD<END

Sue's mother needs a booster to complete the rocket, and she says this if you don't have one with you. However, by this point you either have the Booster V0.8 or V2.0 mandatorily.

Ring2

The King's Table, where you battle against the Doctor.

#0220
<PRI<FLJ1270:0222
<FLJ1271:0221
<MSGOh hey,<NOD you're that...<NOD<END

When you talk to Santa, the Mimiga to the right of the Doctor, the game checks if the battle has ended. If so, it runs event #0222, where he reminds you who he is. If the battle is taking place, it runs event #0221, where he says "Look out! Behind you!". If neither of those is true, it shows that text. One problem though. The battle starts when you get close to the Doctor, and you can't talk to Santa without getting through the Doctor. In other words, you can't talk to Santa before the battle, so this text is never used.

Hell2

The second Sacred Ground level.

There's a script that hides the HUD and displays the message

There's no going back...

It was most likely intended for the door in this area.

Demo Finishers

During development, Pixel released some prototype versions where the storyline would only go to a certain point, after which a message would be displayed noting that the rest of the story will be added later.

MazeB

Labyrinth B, the room where Prof. Booster appears.

If the player tried to leave through the door in Labyrinth B, the following message would appear:

Thank you. This is as far as it
goes for now.
  2003/09/27 Studio Pixel

This message doesn't appear because the script that takes the player to the Boulder Chamber runs before the message's script.

Oside

Outer Wall.

If the player tried to enter the door that leads to the Storehouse where Itoh is, the message

That's all...

would appear. As with the previous message, the script that transports the player plays before the message's script.

Location of the unused NPC.

Also in the Outer Wall, there is an NPC inside the wall, to the left and below the door that leads to the Storehouse, with almost no info, and named "Debug cat". Its sprite is used in the credits, as the first person credited in the special thanks section. This NPC triggers the following message:

Thanks for helping with the
debugging.
This is as far as the game goes
for now.
I'm thinking I'll make this next
stage the last one.
Wonder how far I can get in
just two months...

Blcny1

Balcony, first arrival.

There is a Cthulhu burrowed underground, a bit to the left of the entrance to the Throne Room. When spoken to, the game hides the HUD and displays the message

Nice job.

It then fades out, displays the message

Ending.

and rolls the credits.

Blcny2

Balcony, when it's crumbling.

The same Cthulhu as above, when spoken to, hides the HUD, plays the credits song, writes

Thank you for testing!
The next part is still
under construction...

and restores the song that was playing before.

Unused Scripts

Hmmm...
To do:
There's more.

Shootable Block Tutorial

#0150
<KEY<MYD0000<CMU0008<FAI0004
<WAI0030
<SOU0012<CMP0050:0035:0067<WAI0020
<SOU0012<CMP0050:0036:0067<WAI0020
<END

This script in the First Cave, when activated, will create two shootable blocks outside of the Hermit Gunsmith's entrance and make you look at them. The blocks block the way out, forcing you to shoot them. Pixel probably decided that this was too handholdy (and random!), especially when you still have to shoot the blocks earlier in the level to get past them (although these may have been added later).

Waterway to Reservoir

#0110
<KEY<FON0200:0016<WAI0010<FAO0000<FOM0016<FLJ850:0111
<FL+0850<MSG
Something's coming!!<NOD<MYD0000<TRA0031:0092:0030:0008

#0111
<KEY<CSS<TRA0015:0093:0014:0001

The trigger for the Ironhead boss fight, in Waterway. Normally when you go past the trigger, it transports you to the Main Artery. When the script is activated a second time, it jumps to event 0111, which takes you to the top of Reservoir (falling down into the water), suggesting that you would originally be able to go back into the Waterway, for whatever reason.

Notably, there's an error in this script:

<FLJ850:0111

It should instead read:

<FLJ0850:0111

This might not seem like a big deal, but due to the script system in Cave Story always expecting parameters to be 4 digits with any 1 character in-between each parameter, this causes this instruction to look to see if flag 8510 (flag "850:", the ":" is read as 10) is set, which is only a non-issue despite flag 8510 being out-of-bounds (highest in-bounds flag is 7999) because the bit in the memory position of flag 8510 is always off.

This error is a leftover from version 1.0.0.5 and earlier: while it was fixed in the Japanese v1.0.0.6, the AGTP translation accidentally retained it when it was updated. Interestingly, this error also carries over into the Nicalis translation for the Steam and Wiiware versions, however it is fixed in Cave Story 3D and future versions. (This is likely to do with Nicalis being provided an earlier version of the game to work with initially.)

Main Artery to Core

#0100
<KEY<FAO0001<CSS<TRA0047:0091:0008:0009

Takes you to the Core with an upwards fade, and spawns you in midair next to the computer on the left.

A leftover from an early version?

Unused Map Data

Cook.pxm

CaveStory-Cook.png

There is only one unused map in the game, and it has neither an entity or script file to go with it. The date modified on the .pxm (PiXel Map) file is August 7, 2002, a mere two months after the development reset, meaning Pixel scrapped this one pretty early on. Judging from the name, it had something to do with cooking.

New.pxe

Hmmm...
To do:
  • Expand on this. More info can be found here.
  • Also, screenshots.

This seems to be the .pxe (PiXel Event) file for an earlier version of the Plantation, as it's the closest match and yet only some of the doors line up. Apparently Pixel didn't even get around to naming the place before scrapping this version of the layout.

555.pxe

Hmmm...
To do:
  • Expand on this.
  • Also, screenshots.

Yet another unused .pxe (PiXel Event) file.

Version Differences

There were a lot of versions of Cave Story released through the years, unfortunately, most of them have fallen through the depths of time, but we have just about 4 versions.

Version 1.0.0.7

This version improves text support for Chinese and other languages, it was created for fan translations, otherwise identical to 1.0.0.6.

Version 1.0.0.6

This is the most common and up-to-date version of Cave Story, and it's the version Pixel still distributes.

Version 1.0.0.5

This is the earliest full version we have, there's not very many differences, but they are there.

  • For some reason, there's a missing Sleep call in the function to draw the window, where it also waits for the next frame. This causes the game to use as much CPU as it can, making it very slow, but we don't know if this is in previous versions.
  • The open chest object's code is screwed, the flashing seems a bit faster, and it disappears for a split second when it does flash.
  • Title.pbm's layout is different from in 1.0.0.6.

Version 1.0.0.4

Well... we don't *actually* have version 1.0.0.4 in its original form, but we do have it anyhow.
The Linux port! That's right, the Linux Port by Simon Parzer and Peter Mackay, when Pixel gave him the source to Cave Story, he gave him the source for version 1.0.0.4. How do we know this? On top of their own confirmation, there's quite a few differences between this version and 1.0.0.5.

  • The Behemoth is missing its effects when enraged, this being the smoke and screen shaking effects.

But the real smoking gun? On the title screen, it refers to itself as Version 1.0.0.4. Unfortunately, we don't seem to have any of the original assets that came with it, and of course, all the code that's changed to use SDL can't be referred to.

Debug Functions

The game has a number of hidden debug features:

Mute

Creating a blank file named "mute" (no file extension) in the same folder as the executable will add an extra option to the menu bar, titled 'Mute'. Selecting it will give you this:

CaveStory Mute menu.png

The tick-boxes will disable certain audio channels in the music.

The game's sound engine (Organya) actually has 14 audio channels, with the last 6 being reserved for drums, so this menu will only let you mute the melody channels. (Normally Organya has 16 channels with 8 for drums, but Cave Story only has 6 hard-coded drums that are assigned to the first 6 drum tracks, rather than making a selection of drums available for each track like in the OrgMaker and OrgMaker2 programs.)

Debug Save

This menu cannot be enabled with a file, as there's no check for it in the game's code. It can be restored, however, with a modification to the game's executable: Using a hex-editor, change the two bytes at 0x12D4D to EB0F. Doing so will add a 'Debug Save' option to the menu bar, which reveals this menu:

CaveStory Debug Save menu.png

This allows you to create save files at any time, with any filename. The game contains an unused drag-and-drop handling function that allows save files to be loaded by dragging-and-dropping them onto the game window. However, the game's window does not have the "supports drag and drop" flag enabled, so this behavior goes unused.

Hmmm...
To do:
  • Find a way to re-enable this function.
  • Document said function in the "Unused Functions" section.

Framerate Counter

Same as before, creating a blank file named "fps" in the same folder as the executable will enable an FPS counter at the top-right of the window. The freeware release ran at 50FPS, so the number will average at around this.

Unused Code & Functions

Hmmm...
To do:
There are a lot more of these.

Littered throughout Cave Story's executable are functions that are unused in the actual game, some from the versions before development reset, and some that were just scrapped.

PitMyChar

This function moves the player down by 2 tiles (32 pixels). The simplicity of this function implies that this was supposed to be a TSC command, though it's unknown what it would have been used for...

void PitMyChar()
{
	gMC.y += 0x4000;
}

Weapon Ammo

Interestingly, a lot of Cave Story's weapons which don't ever get any ammo (infinite) still have code to handle ammo. Most of these weapons are just copied from the pre-development reset versions, where all weapons had ammo. The behavior when you run out of ammo also varies.

Snake

The Snake, which comes from the beta's "Frontier". Each shot uses 1 ammo, and when it runs out it switches to your first weapon. This was actually the standard behavior of when you run out of ammo until later in development, according to the Revisional BBS (Pixel 2004/01/30-09:23). Interestingly, there's what appears to be ammo for it in NpcSym.pbm.

Polar Star

The Polar Star, originally the "Doggy Gun". Each shot uses 1 ammo, and when it runs out it plays the "empty" sound, but oddly doesn't create the "EMPTY" effect.

Fireball

The Fireball. Each shot uses 1 ammo, and when it runs out it switches to your first weapon. Interestingly, there's what appears to be ammo for it in NpcSym.pbm.

Nemesis

The Nemesis. Each shot uses 1 ammo, and when it runs out it switches to your first weapon. This behavior likely comes from copying the code from elsewhere, as the Nemesis is not known to have come from the beta or to have ever had ammo.

Spur

The Spur has its shooting code copied from the Polar Star, so its behavior is identical to it.

More Ammo Drops?

In the function "SetBulletObject", which handles creating the missile drops when an enemy is defeated, the code suggests that more weapons were intended to have ammo dropped for them. Additionally, there are unused sprites in NpcSym.pbm that appear to be for Fireball and Snake ammo drops.

int tamakazu_ari[10];
int t = 0;

memset(tamakazu_ari, 0, sizeof(tamakazu_ari));

for (n = 0; n < 8; ++n)
{
	switch (gArmsData[n].code)
	{
		case 5: /* Missile Launcher */
			tamakazu_ari[t++] = 0;
			break;

		case 10: /* Super Missile Launcher */
			tamakazu_ari[t++] = 1;
			break;

		default:
			tamakazu_ari[t] = 0;
			break;
	}
}

if (t == 0)
	return FALSE;

n = Random(1, 10 * t);
bullet_no = tamakazu_ari[n % t];

As can be seen, the code handles the Missile Launcher and the Super Missile Launcher, and randomly chooses one of them to drop. It'd be weird for Pixel to just write the code like this just for the two Missile Launchers, especially since you can't have both at the same time. Once again, it was likely intended for there to be ammo drops for more weapons, like the Fireball and Snake.

Hidden Control Option

Creating a file named "s_reverse" in the same folder as Doukutsu.exe will cause the weapon-toggle keys to be reversed. It's odd that this isn't simply an option in the DoConfig tool.

Main Artery's Secret

Cave Story Main Artery.png

In the Main Artery, where you fight a boss from Ikachan, it looks as though you're traveling through an infinite canal. If you use a map editor, though, you can see that the action only really happens in a small 23×16 rectangle, with a scrolling background. However, Pixel felt like using some more space.

To the left of the main rectangle is a pixel-art Ikachan made of iron blocks, and to the right is some text written in iron blocks as well, that reads "→ No damage." in both the original Japanese version and the English patch. In-game, you can see this using the map. As such, it is most likely intended to be a hint for how to meet Ikachan and receive the Ikachan Badge (defeat the boss without taking damage), given only to players clever enough to attempt to view the map in this particular area.

Quick Tidbits

  • There is an unused duplicate of the door to the second jail in the Plantation, under the first block of the tunnel that leads to the hideout.
  • When Sue's mother tells you that the Mimigas on the Plantation can't talk to humans, she asks "Are you with me so far?" After that, the current script ends and another starts that continues the conversation. This split indicates that there might have been a Yes/No prompt.
  • The filename for the music that plays during the fight with the Core is ironH.org, suggesting the song was originally meant for the Ironhead boss fight, instead. In OrgView versions 2 to 4, the song was indeed a remix of the Ironhead boss theme in Ikachan.