Skip to main content

Retropass

An NES password generation tool

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:

  1. Retropass is intended to support multiple games.
  2. 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.
  3. Retropass's CLI is easily scriptable, if for whatever reason you want that.
  4. Retropass ships with machine- and human- readable specifications of the password formats. It can be used as a reference when developing other programs.

Status

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
  • Battle of Olympus

Installation

  1. Install Python 3.6 or above.
  2. Install Pip, if needed. On windows platforms, Pip is included in the python installation.
  3. Run pip install --user retropass

Usage (by players)

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:

  1. Run retropass metroid --dump > metroid.conf to create the file.
  2. Edit the file to set whatever options you want.
  3. Run retropass metroid --conf metroid.conf. It will print the corresponding password.
  4. Enter it in your game of choice and play.

Usage (by developers)

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)

Known Issues

  • There's no great way of handling lists of related bits, e.g. all the missile containers in Metroid

Extra Credits

The following links were instrumental, either as documentation or as reference implementations. Credit for figuring out the password mechanics belongs to these people, not me:

Metadata

Release files for retropass 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for retropass 0.6.1
File Size Uploaded
retropass-0.6.1.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for retropass 0.6.1
File Interpreter ABI Platform
retropass-0.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 39.0 kB

Release files / retropass-0.6.1.tar.gz

Download URL retropass-0.6.1.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6f16705e4468cc4d5f48b0fa5959efe90ac28ca7896b292ace83a74b007d2484
BLAKE2b-256 checksum
How to use checksums
e8ac27f158a832cda38b0d430187e1b9a7c14d3b2fbd74c934a1c4c3ed415cb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

Release files / retropass-0.6.1-py3-none-any.whl

Download URL retropass-0.6.1-py3-none-any.whl
Size 17.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aaf0a922b7a1bd81c4cfee0f2712448b75f7e09cccae3698e7f8d0c0457494ac
BLAKE2b-256 checksum
How to use checksums
3d0c142bb7255a3b1810e5bbcc1a4875103e94c88ed00d41830a1a64df0cb290
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

1 release file

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page