Retropass is a library and cli tool for generating passwords for NES-era video games. Yes, there's quite a few, but I had a few goals not shared (or at least not satisfied) by existing tools:
- Retropass is intended to support multiple games.
- Retropass can be incorporated into other generation tools. If you like writing UI's, you don't need to get bogged down in binary to get anywhere.
- Retropass's CLI is easily scriptable, if for whatever reason you want that.
- Retropass ships with machine- and human- readable specifications of the password formats. It can be used as a reference when developing other programs.
Still beta. CLI and API details are subject to change. The following games are supported (so far):
- Mega Man 2
- Mega Man 3
- Metroid
- Kid Icarus
- Solar Jetman
- Install Python 3.6 or above.
- Install Pip, if needed. On windows platforms, Pip is included in the python installation.
- Run
pip install --user retropass
Retropass is intended as a library for use by other tools, but it has a command line interface as well. You feed it a file containing the options you want, and it generates a password that implements those options.
retropass --help
will print the available games and options.
An example, from metroid:
- Run
retropass metroid --dump > metroid.conf
to create the file. - Edit the file to set whatever options you want.
- Run
retropass metroid --conf metroid.conf
. It will print the corresponding password. - Enter it in your game of choice and play.
The API is minimal. There is a Password class. It has subclasses for each game, and a .make classmethod that creates the appropriate type of object given the game's name. A list of available names is available via retropass.Password.supported_games()
The options available for a given password can be set either
attribute-style (pw.option = 1
) or dictionary-style (pw['option'] = 1
). You can get the available options and their current settings as a
dictionary with dict(pw)
, or as a pretty-printed string with
print(pw.dump())
. Stringifying or printing the password object will
produce the resulting password.
Usage example:
from retropass import Password
pw = Password.make('metroid')
pw.has_marumari = 1
pw.has_longbeam = 1
print(pw)
- There's no great way of handling lists of related bits, e.g. all the missile containers in Metroid
The following links were instrumental, either as documentation or as reference implementations:
- Metroid Password Format Guide, John Ratliff.
- True Peace in Space, Alex Rasmussen.
- Kid Icarus Password Generator (KIP), author unknown. Once used the handle "Parasyte" according to archive.org.
- StrategyWiki's Mega Man 2 Password Mechanics page.
- Solar Jetman Password Generator, CyberN.