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
| Cave Story |
|---|
|
Also known as: Doukutsu Monogatari (JP)
|
| 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.
To do:
|
Contents
- 1 Sub-Pages
- 2 Unused Enemies
- 3 Objects Re-Purposed From Earlier Iterations
- 4 Hidden Objects
- 5 Unused Items
- 6 Unused Graphics
- 6.1 PrtMimi
- 6.2 NpcEggs1 (Egg Corridor)
- 6.3 PrtEggs
- 6.4 NpcWeed (Grasstown/Bushlands)
- 6.5 PrtWeed
- 6.6 NpcSand (Sand Zone)
- 6.7 NpcMaze (Labyrinth)
- 6.8 PrtRiver
- 6.9 PrtOside (Outer Wall/Side)
- 6.10 NpcCent (Plantation)
- 6.11 NpcMiza (Misery and Sue bosses)
- 6.12 PrtHell (Sacred Grounds)
- 6.13 NpcSym (symbol characters)
- 6.14 NpcGuest (Guest appearances from development versions)
- 6.15 NpcRegu
- 6.16 Bullet
- 6.17 Caret (Cullet)
- 6.18 Title
- 6.19 Human Sue Portrait
- 6.20 Other Graphics
- 7 Unused Text
- 8 Unused Scripts
- 9 Unused Map Data
- 10 Version Differences
- 11 Debug Functions
- 12 Unused Code & Functions
- 13 Hidden Control Option
- 14 Main Artery's Secret
- 15 Quick Tidbits
Sub-Pages
| Prerelease Info |
| Windows vs. Wii Despite not being much more than a copy-pasted port, there are some differences. |
| 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. |
| 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
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
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
Beast Fang
A sharp fang found at the Yamashita Farm. Is its owner still alive...?
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
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
To do:
|
PrtMimi
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| Various statues (or maybe gravestones) that could've been used in the Graveyard. | Yes |
NpcEggs1 (Egg Corridor)
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| Some kind of owl. The eyes are mistakenly transparent in-game, as they have the color #000000. | No | |
| A white puff. Bears resemblance to the Counter/Time Bomb in the destroyed Egg Corridor. | Yes | |
| An "enrage" mechanic for the beetles, like what exists for the Behemoth. | Yes |
PrtEggs
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| 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? |
|---|---|---|
| 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 | |
| White-colored bullets, as opposed to red, for the Mannans. | Yes |
PrtWeed
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| 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? |
|---|---|---|
| It's a puppy... with wings... | Yes | |
| A Polish with spikes instead of blades. The Sun Stones use a similar graphic. | Yes | |
| A Skullhead or Skullstep with blue, half-open eyes, with no sprites for an open mouth. | Yes (poorly) | |
| 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? |
|---|---|---|
| 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 | |
| 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? |
|---|---|---|
| These arrows are used in the map, but are replaced by the flowing river currents in-game, so they are not seen. | Yes | |
| This tile blocks the player in the Ironhead boss fight, but they are offscreen. | No |
PrtOside (Outer Wall/Side)
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| 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 | |
| A statue of a Mimiga. | Yes |
NpcCent (Plantation)
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| Someone from the Droll family. He only has sprites for standing still and jumping, so that might have been how he attacked. | No | |
| Totem poles, with a destroyed variant. Found in PrtCent. | Yes |
NpcMiza (Misery and Sue bosses)
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| Curiously among these sprites is a greenish, early Quote. | Yes | |
| Even more curious are these early human Sue sprites. Maybe she was to turn back to normal after defeating her? | No | |
| A projectile, probably to be used in the boss fight. | Yes | |
| Misery standing up before flying. Only a left facing version of this exists in the file. | Yes | |
| Misery in misery. Right facing version does not exist. | Yes | |
| 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? |
|---|---|---|
| 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 | |
| A recoloured fence tile from the Mimiga Village tileset. The remastered graphics show the red bits as tentacles. | Yes |
NpcSym (symbol characters)
NpcGuest (Guest appearances from development versions)
NpcRegu
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| It's Curly Brace, except she's red. | Yes |
Bullet
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| A slightly green King, along with some swords, in Bullet.pbm. A scrapped weapon, perhaps? | Yes | |
| Green hashy things. | Yes |
Caret (Cullet)
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| Blood drops. Used in the development versions for organic enemies' deaths. | Yes | |
| Used in the development versions as an on-hit effect. | Yes | |
| A large dissipation effect. | Yes | |
| You're never told at any point during the game to jump. Quick time event or tutorial? | No |
Title
| Image | Notes | Revamped for rereleases? |
|---|---|---|
| An alternate romanization of the game's Japanese title, Doukutsu Montogari. Appears under the actual title logo in the spritesheet. | No | |
| 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

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.

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
![]()
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.
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!
![]()
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'.
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.
![]()
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.
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
| 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
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
To do:
|
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
To do:
|
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:
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:
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.
To do:
|
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
| 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
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.
- Games developed by Studio Pixel
- Games published by Studio Pixel
- Games published by Nicalis
- Windows games
- Mac OS X games
- Linux games
- WiiWare games
- Nintendo Switch games
- Games released in 2004
- Games with unused areas
- Games with unused code
- Games with hidden development-related text
- Games with unused enemies
- Games with unused graphics
- Games with unused items
- Games with unused text
- Games with debugging functions
- Games with regional differences
- Games with revisional differences
- To do
Cleanup > To do
Games > Games by content > Games with debugging functions
Games > Games by content > Games with hidden development-related text
Games > Games by content > Games with regional differences
Games > Games by content > Games with revisional differences
Games > Games by content > Games with unused areas
Games > Games by content > Games with unused code
Games > Games by content > Games with unused enemies
Games > Games by content > Games with unused graphics
Games > Games by content > Games with unused items
Games > Games by content > Games with unused text
Games > Games by developer > Games developed by Studio Pixel
Games > Games by platform
Games > Games by platform > Linux games
Games > Games by platform > Mac OS X games
Games > Games by platform > Nintendo Switch games
Games > Games by platform > Wii games > WiiWare games
Games > Games by platform > Windows games
Games > Games by publisher > Games published by Nicalis
Games > Games by publisher > Games published by Studio Pixel
Games > Games by release date > Games released in 2004

































