Cave Story Randomizer

Dec 20, 2018 at 1:26 AM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
Hey gamers! I have a fresh new mod for you, I call it: Cave Story Randomizer.

https://shru.itch.io/cave-story-randomizer

Basically, it just shuffles around the locations of every weapon, equipment, and upgrade chest in the game. If you've heard of randomizers for games like Super Metroid or Zelda: A Link To The Past before, then you'll understand what this does right away.

I literally just got this to the point where I feel it's complete and viable to use, but I haven't had the chance to do a ton of testing yet. Any feedback or bug reports would be greatly appreciated.

Have fun!

EDIT: Here's the source code, in case anybody is interested. https://gitlab.com/toromi/cave-story-randomizer The TSC modification is kind of low tech and doesn't involve any elaborate grammar-aware parsing or anything fancy like that. Basically I'm just performing find-and-replace operations on the script contents. This has it's issues right now, obviously, but I think once I make it Event Label aware, it should work quite nicely.
 
Last edited:
Dec 20, 2018 at 2:19 AM
scrungy
Bobomb says: "I need a hug!"
Join Date: Oct 7, 2011
Location: PrtWeed
Posts: 777
Age: 24
Ooh, this looks interesting. I'm definitely taking a look!
 
Dec 20, 2018 at 3:38 AM
Senior Member
"Huzzah!"
Join Date: Jul 12, 2017
Location: <3
Posts: 204
Age: 20
I'm seeing this as a very nice project so far! Although some bugs need tweaking, thats just okay!
 
Dec 20, 2018 at 4:59 AM
Stoned Member
"All your forum are belong to us!"
Join Date: Sep 22, 2012
Location: Hell
Posts: 557
meme mod review

This is gonna be a playthrough of as much as I feel like:
The program itself felt unusual at first, but it doesn't seem as bad as I thought, so I started up a game with it.
p367636-0-jdlcdxx.png

Started with the Missile Launcher, so I think I know the extent of this already.
It played access after getting this???

Instead of the Polar Star, I got the bubbler, which, for some reason is called the bubbline here.
It sucks that this didn't come pre-patched for 60fps.

I headed straight to Yamashita Farm and got the life capsule, which, was a missile upgrade, this played the Mimiga Village music, it seems that there's an RMU here instead of a CMU?
p367636-1-5dxrnp6.png

Map system was a nemesis, if I get the spur soon that'll save me plenty of time, but I wonder if it's possible to get too many weapons now.
Silver Locket is left intact, thought I'm not sure if there's an item jump for that item.

Balrog is laughably quick with the bubbler.
Egg corridor's first life capsule was the turbocharge.
I've got a bad feeling about this.
Second capsule was the second capsule, finally a health upgrade.

ID Card was the ID card.

The missile launcher was a life capsule, with no music. an <END was missing and I got to see the text about sky dragon stuff.
Killed Igor with my nemesis (Which I accidentally leveled up to level 2.

Santa had the arms barrier, which is cool to have this early in the game, especially with such a low amount of HP.
Chaco's lipstick was missiles, which I find amusing, they look like condoms anyways so who am I to judge.
No <FAO included, so I had to interact with the bed again...
...to get another 5 missiles

Instead of cheesing the opportunity I felt around in the dark and exited.
Life capsule was... Curly's panties, the text wasn't changed at all.

Jellyfish juice showed the curly's panties text...
Balrog 2 was easy to crush as well.

The translation is strange, in some areas it uses the AGTP version, and in some, the shitty NICALiS translation.

Grasstown is Asstown without the fireball, and I've been spoiled by the switch's stacking feature that makes it into Flavortown.

So I continued on to go on a third date with Balrog, the one with the frog thing, Cave++ really is something huh Tyrone.
Gum base is there, so I guess key items are left intact, it'd be crazy if those were randomized too.

Curly asks for my polar star, I made a save just to see how the trade works.
But first I went to see curly's panties... And got...
Chako's.... Rouge?...
I don't understand these translations anymore, were they randomized as well or something?
I gave Curly my nonexistent Polar Star in trade for a nonexistent machine gun, sounds fair to me.

First sans zone capsule was... The super missile launcher, that's wicked

I went to fight omega and my party got wiped with 1 delta attack and a rainbow wind- oh right wrong game.

The pepperoni secret life capsule was a life capsule.

Anyways, that's all the time I have today make sure to like comment and subscribe and hit that bell, I'll see you guys next time.
Time to go back to playing FFXIV


I can't wait for this to become a full fledged randomizer, with randomized rooms, text, and music, it'll truly be my favorite CSBD if it reaches that point.
But the first thing you should focus on is the issues with the text. It's an impressive coding feat to make this, but some of these feel like rookie mistakes.
 
Dec 20, 2018 at 6:35 AM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
It sucks that this didn't come pre-patched for 60fps.

I'm not familiar with what this 60 FPS mod entails, I'll have to look into it. Including it might be a overstepping the bounds of what a randomizer probably should do. But if it's basically free to include it, I'll probably do it.

Instead of the Polar Star, I got the bubbler, which, for some reason is called the bubbline here.

Chako's.... Rouge?...

The translation is strange, in some areas it uses the AGTP version, and in some, the shitty NICALiS translation.

The patcher supports both the Aeon Genesis and the Nicalis translations, but goes through the same exact procedure for both of them. So I had to make some decisions for which text I would use for replacement.

Bubbline is pretty much a literal romanization of バブリン, so I prefer that to bubbler. Between Rouge and Lipstick I could go either way. Chako and Chaco are equally accurate to チャコ, but my preference is Chako. Actually, just be glad I didn't change it to Tyako.

On a somewhat related note, I was planning on having the patcher swap out "Oh Yeaaah!!" for "Huzzah!" as little bonus.

But the first thing you should focus on is the issues with the text. It's an impressive coding feat to make this, but some of these feel like rookie mistakes.

Yeah, I mean I literally had never taken Cave Story onto the operating table in any form until just 6 days ago. TSC is new to me. So a rookie making rookie mistakes, I'm afraid.

I've taken note of all of the oddities you've listed and will be looking into them. I don't suppose that you would have saved the modified data directory or log.txt? If you could attach them that would be a big help for me.

I can't wait for this to become a full fledged randomizer, with randomized rooms, text, and music, it'll truly be my favorite CSBD if it reaches that point.

I'd like to pursue that sort of thing eventually. Right now the focus is on making it a bit less janky though.

Anyways, thanks for the post! I found it highly entertaining and it went a long way towards making me feel motivated towards this project.
 
Dec 20, 2018 at 6:41 AM
War criminal
"Life begins and ends with Nu."
Join Date: Jun 27, 2013
Location: Phoenix
Posts: 2758
Age: 29
On a somewhat related note, I was planning on having the patcher swap out "Oh Yeaaah!!" for "Huzzah!" as little bonus.
Just a little tip here, don't replace "Huzzah!" with "Oh yeah!" The community here near unanimously already dislikes the Nicalis translation to a great extent.
 
Dec 20, 2018 at 6:45 AM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
Just a little tip here, don't replace "Huzzah!" with "Oh yeah!" The community here near unanimously already dislikes the Nicalis translation to a great extent.
Luckily for the community and yourself, I stated that I would replace "Oh Yeaaah!!" with "Huzzah!". Not the other way around.

I too enjoy it when my video games do not have dated cultural references which make them sound like a Family Guy episode or something.
 
Dec 20, 2018 at 9:58 AM
Deliverer of Sweets
Bobomb says: "I need a hug!"
Join Date: Jul 20, 2015
Location: Under sea level or something
Posts: 785
Age: 25
This certainly looks interesting, but not interesting enough yet since it's still a little too close to vanilla for me.
But it does looks like it's going in a nice direction, and i'm sure it'll only get better, but I'd still like to throw what I have to say.

First of all, are you guaranteed a weapon in start point? Is it always one that can break breakable blocks? It sounds bothersome to start with the bubbler and be forced to grind to level 3 or even worse: getting only the fireball.
One other concern is the balance that can get messy in this; Getting the blade or spur early in this would defenitely make most of the game easy.
Swapping around text could awake a bit of interest, but mostly for the possible sillyness that could come from it. Considering everyone here has played the game before it won't be like the changed text will be that disorienting.
Wether you are randomizing dialog or not, skipped cutscenes would be a great thing, just make sure the players still get the items they should get during the cutscenes.
One way to make the randomizer a lot more interesting would be to make randomizer affect the sequence of the game. This would require a lot of work since it involves changing cs to fit with this (like keycards to unlock teleporter slots), but if done right it could be worth it.
As haxx mentioned, random rooms could be interesting but you need to make sure you have a logic behind it that makes sure everything is connected(just like you'd obviously need a logic when doing randomized important items so that the game can actually be beaten, by the way), and the game is beatable.

It defenitely looks like this can become something nice, but it defenitely could still use a lot of work, if there's any help I can offer then I would be interested to do so.
 
Dec 20, 2018 at 1:07 PM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
This certainly looks interesting, but not interesting enough yet since it's still a little too close to vanilla for me.
First of all, are you guaranteed a weapon in start point? Is it always one that can break breakable blocks? It sounds bothersome to start with the bubbler and be forced to grind to level 3 or even worse: getting only the fireball.

You are guaranteed to get a non-Missile weapon in one of the first two chests. If that weapon is the Bubbler, Fireball, or Snake, then the patcher also produces an alternate Cave.pxm which has one of the blocks removed so that you can still proceed.

One other concern is the balance that can get messy in this; Getting the blade or spur early in this would definitely make most of the game easy.

Eventually, I'd like to add the option to do a sort of "tier-aware" weapon shuffle instead of a completely random one. Besides early-game balance, it would be nice if one could be guaranteed that the trades will be worthwhile. But, Trades don't exactly work yet anyways... ^^;;

In regards to randomizing the sequence of the game and all of that: I'm definitely interested in that, but first I'll have to get the basic functionality down.

The way that seems most obvious to me is to take the player on a linear tour through all of the main areas of the game, with randomized enemies, but without the need to complete the objectives. Surely we've all spent quite enough time collecting Jellyfish Juice and fetching Dogs?

You might start off in a version of the Sandzone populated with easier enemies from Egg Zone. Then once you reached the Warehouse where you normally fight King, it would lead to a fight with an HP-scaled Balfrog instead. After beating the frog, you could exit to Yamashita Farm. You'd collect the chest there, then go back out through the entrance. This would take you to the Egg Corridor, where you'd fight Grasstown and Sand Zone enemies. The Egg Observation Chamber 00 door would then lead you to Chaco's house. You'd sleep with Chaco and then get a mystery item and a complimentary Jellyfish juice. Her fireplace would lead to somewhere else... You see where this is going.

EDIT: Oh! I have a question that one of you modding wiz kids can probably answer! As far as I can tell from CaveEditor, each map is allowed to have NPCs from up to 2 different sprite sheets, correct? Is there any way around this constraint? Maybe through a hex-edited Doukutsu.exe or otherwise? Perhaps one of the various unofficial CS engines can do this?

EDIT 2 - THE SQUEAKQUEL: Oh, by the way, if anyone is interested, here's the source code: https://gitlab.com/toromi/cave-story-randomizer The TSC modification is kind of low tech and doesn't involve any elaborate grammar-aware parsing or anything fancy like that. Basically I'm just performing find-and-replace operations on the script contents. This has it's issues right now, obviously, but I think once I make it Event Label aware, it should work quite nicely.
 
Last edited:
Dec 20, 2018 at 1:26 PM
Deliverer of Sweets
Bobomb says: "I need a hug!"
Join Date: Jul 20, 2015
Location: Under sea level or something
Posts: 785
Age: 25
As far as I can tell from CaveEditor, each map is allowed to have NPCs from up to 2 different sprite sheets, correct?
It's more like each npc using either map spritesheet takes it's sprites from specific locations from sheet 1 or 2, dephending on what it is set to.
If CS doesn't mind massive spritesheets (i can't confirm this at all, it's not my area unlike tsc) then technically one should be able to fit everything in one or two sheets, but otherwise you might as well calculate what npc uses what spots in a sheet, and calculate what combinations are possible based on this.
 
Dec 20, 2018 at 4:25 PM
War criminal
"Life begins and ends with Nu."
Join Date: Jun 27, 2013
Location: Phoenix
Posts: 2758
Age: 29
It can handle massive spritesheets, should it be on one of the bitmaps from the data folder (ArmsImage, Loading, StageImage), or the "2004.12.20 Pixel" bitmap that's accessible through Resource Hacker. Just remember that entities that require NpcRegu.bmp, NpcSym.bmp, or Mr. Little (who uses ItemImage.bmp) can be left alone, they can be used in every map in the game. However, you may need to change the framerect positions through ASM
 
Dec 20, 2018 at 5:29 PM
Stoned Member
"All your forum are belong to us!"
Join Date: Sep 22, 2012
Location: Hell
Posts: 557
As far as I can tell from Cave Editor
First of all, use Booster's Lab.
Second,

Basically I'm just performing find-and-replace operations on the script contents
Try moving the scripts that would be replaced to HEAD.TSC, that way the only code you need to do the randomizer would be the HEAD.TSC

An interesting idea would be including different palette swaps of tilesets for the randomizer, that way each tileset could have a different look in the randomizer.
You could also randomize what enemies could be in areas, first just choose what NPC set to use (This may require some NPC.TBL modification or just an ASM hack to make every enemy work in any map, ask Thomas Xin about that) and then simply swap out the... PME files as you see fit.

You could randomize area names by having the randomizer choose first if it's a one, two, or three word name. The randomizer would choose from a huge list of words and throw them together.
You could try doing this same thing to randomize dialogue.
 
Dec 20, 2018 at 5:49 PM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
First of all, use Booster's Lab.

Noted. Although I'm not really making heavy use out the editor at all. Really, I was only really using it when I wasn't familiar with the map filenames.

Try moving the scripts that would be replaced to HEAD.TSC, that way the only code you need to do the randomizer would be the HEAD.TSC

Yeah. I've thought about something similar to this. Starting off with a more normalized base script definitely has some advantages. I do like that my current method makes it pretty easy to support multiple translations and languages in the future. However, I feel that it may become more and more difficult to continue this way if I start putting in more elaborate script changes, like stuff I would need in order to facilitate changing the order of the areas.

An interesting idea would be including different palette swaps of tilesets for the randomizer, that way each tileset could have a different look in the randomizer.

Yeah, that would be cool and not too hard; maybe a bit of a grind though... Just a matter of writing some mappings between the different tiles in each tilesets. PXM is a dead simple format, so I don't think the swapper logic here would take long.
 
Last edited:
Dec 21, 2018 at 1:59 PM
Senior Member
"Fly, Fly, Fly!"
Join Date: Feb 4, 2015
Location: Nibel
Posts: 136
Age: 18
Personally, I prefer 50 FPS CS due to just the fact it's vanilla and I've gotten used to it, but I guess I wouldn't mind too much if shru prepatched this randomizer with it. Although I do agree with zxin that it doesn't seem necessary, it's your mod so do whatever you want.
 
Dec 21, 2018 at 1:59 PM
Neophyte Member
"Fresh from the Bakery"
Join Date: Dec 20, 2018
Location: Hyperborea
Posts: 6
Basically, it changes the amount of time the game waits between each cycle. I believe the amount of time is given in 1000ths of a second.
At its default, 0x14, it runs at a cool (and boringly slow) 50FPS. At 0x11, the "60FPS" hack, it technically runs at 60 frames every 1.02 seconds... > _>
Nonetheless I don't see how it would conflict with the randomizer at all...
Very interesting. I'm going to have to see whether 0x05 gives me 200 frames every 1 second, for silky smooth high refresh rate gameplay!
 
Top