Skip to content

3snowp7im/SotN-Randomizer

Repository files navigation

SotN Randomizer

This is a romhacking tool to randomize some things about Castlevania: Symphony of the Night.

Browser

https://sotn.io

CLI

$ git clone https://github.com/3snowp7im/SotN-Randomizer
$ cd SotN-Randomizer
$ npm install

Basic usage

To randomize your disc image, just pass in the path to your vanilla .bin file using the --in-bin option and an output path using the --out option. This will use the current time as the seed:

$ node randomize -i sotn.bin -o rando.bin

You can print the seed used with the --verbose flag:

$ node randomize -v -i sotn.bin -o rando.bin

The more --verbose flags you include, the more information about the randomization gets printed:

$ node randomize -vvv -i rando.bin

If you omit the --out option, the randomizations will be applied to the .bin in-place. This is not recommended unless you are randomizing a fresh copy of your vanilla bin:

$ cp sotn.bin rando.bin
$ node randomize -i rando.bin

PPF mode

If you omit the --in-bin option, the randomizer will create a PPF patch file.

$ node randomize -o rando.ppf

You can then use your choice of PPF patcher utilities. Note: After applying the patch, you must perform ECC/EDC recalculation.

Useful links:

Seed URLs

If you plan on sharing a seed with others, the easiest way to use CLI is with the --race option or seed URLs. To use the current time as a seed and print its URL and starting equipment:

$ node randomize -r -i rando.bin

To use a custom seed and print its URL and starting equipment:

$ node randomize -r -i rando.bin -s myseed

To use a copied seed URL, paste in the URL as an argument. The --race option will be automatically enabled:

$ node randomize -i rando.bin https://sotn.io/?myseed

The --race option has an inherent verbosity level of 2. You can override this behavior by supplying your own --verbose flag(s):

$ node randomize -vr -i rando.bin -s myseed                 # Less verbose
$ node randomize -v -i rando.bin https://sotn.io/?myseed    # Less verbose
$ node randomize -vvvr -i rando.bin -s myseed               # More verbose
$ node randomize -vvv -i rando.bin https://sotn.io/?myseed  # More verbose

Dry running

You can omit the --in-bin and --out options to perform a dry run.

To print starting equipment and relic locations for a URL without actually writing the randomizations to your disc image or PPF patch file:

$ node randomize -vvv https://sotn.io/?myseed

Presets

Presets are settings that generate different randomizations from those found in the default mode. The randomizer includes several built-in presets that can be described using the help system:

$ node randomize --help preset

To create your own preset, save a copy of presets/sample.json and modify its content with your own customizations. For example, you have created your preset and named it presets/mypreset.json. To randomize a bin using your preset:

$ node randomize -i sotn.bin -o rando.bin -f presets/mypreset

To create a URL that allows others to use your preset:

$ node randomize -rn -f presets/mypreset

Console

Randomized disc images can be played on all consoles that run game backups. This includes hardmodded PlayStations and softmodded PS2s. The latter approach is more accessible and will be outlined in this section.

Hardware needed

PS2 console compatible with FreeMcBoot

Check the compatibility list here.

PS2 memcard with FreeMcBoot and uLaunchELF

You can find these on Amazon or make one yourself.

USB thumb drive

This will store your randomized disc image.

Software needed

POPStarter r13 WIP 06 Beta 17

Download from here. Note: This version is known to cause random crashes on some PS2 revisions. Unfortunately, other recent POPStarter versions do not load the castle map corretly. Your mileage may vary.

POPS_IOX.PAK

You will need to locate this yourself. MD5: a625d0b3036823cdbf04a3c0e1648901

CUE2POPS

  • Windows version here.
  • Mac version here.
  • Linux version here.

Process

It is important to note that the file names and capitalization in this section must be matched. POPStarter is very strict and this will not work if your files are named differently.

  1. Create a directory on your USB drive named POPS and copy POPS_IOX.PAK into it.

  2. Rename POPSTARTER.ELF to XX.SOTN.ELF and copy it your USB drive.

  3. Using a text editor, create a file named SOTN.CUE with this content:

FILE "SOTN.BIN" BINARY
  TRACK 01 MODE2/2352
    INDEX 01 00:00:00
  1. Randomize your bin and rename the output to SOTN.BIN. Put this file in the same directory as SOTN.CUE.

  2. Use CUE2POPS to convert SOTN.CUE to a VCD. Save the output to the POPS directory on your USB drive. It should be named SOTN.VCD.

At this point the file layout on your USB drive should look like this:

POPS/POPS_IOX.PAK
POPS/SOTN.VCD
XX.SOTN.ELF
  1. Remove any game disc from your PS2 and insert your FreeMcBoot memcard and USB drive.

  2. Start your PS2 and on the FreeMcBoot system menu, select uLaunchELF.

  3. Once uLaunchELF has started, select mass0 and then XX.SOTN.ELF.

Whenever you randomize a new disc image, you will need to follow the above directions starting at step 4.