This is a romhacking tool to randomize some things about Castlevania: Symphony of the Night
.
$ git clone https://github.com/3snowp7im/SotN-Randomizer
$ cd SotN-Randomizer
$ npm install
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
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:
- ppf.sotn.io (Browser)
- ppfdev (Source)
- PPF-O-Matic (Windows binary)
- error_recalc (Windows binary and source)
- ECCRegen (Windows binary)
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
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 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
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.
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.
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
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.
-
Create a directory on your USB drive named
POPS
and copyPOPS_IOX.PAK
into it. -
Rename
POPSTARTER.ELF
toXX.SOTN.ELF
and copy it your USB drive. -
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
-
Randomize your bin and rename the output to
SOTN.BIN
. Put this file in the same directory asSOTN.CUE
. -
Use CUE2POPS to convert
SOTN.CUE
to a VCD. Save the output to thePOPS
directory on your USB drive. It should be namedSOTN.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
-
Remove any game disc from your PS2 and insert your FreeMcBoot memcard and USB drive.
-
Start your PS2 and on the FreeMcBoot system menu, select uLaunchELF.
-
Once uLaunchELF has started, select
mass0
and thenXX.SOTN.ELF
.
Whenever you randomize a new disc image, you will need to follow the above directions starting at step 4.