Metronome

A set of tools for modifying and randomizing Pokémon games

Metronome is built as a competitor to PPRE, the Universal Pokemon Randomizer, and other tools used to modify Pokémon games.

Unlike most of these tools, Metronome is built from the ground up to be extendible, meaning that anyone can build their own tool on top of Metronome. So far, a Randomizer has been built using Metronome.

Metronome is a set of programs called tm35-load and tm35-apply. tm35-load is a command-line tool that loads a Pokémon rom and outputs a lot of data about this rom:

> # Full output is omitted with `head`
> tm35-load emerald.gba | head
.version=Emerald
.game_title=POKEMON EMER
.gamecode=BPEE
.starters[0]=277
.starters[1]=280
.starters[2]=283
.trainers[0].class=0
.trainers[0].encounter_music=0
.trainers[0].trainer_picture=0
.trainers[0].items[0]=0

The format is really simple. Each line is a sequence of field and array accesses followed by a value. .trainers[0].encounter_music=0 should be read as:

field 'trainers'
index '0'
field 'encounter_music'
is '0'

tm35-apply is the counterpart to tm35-load. It takes the same format that tm35-load outputs, and applies that information to a Pokémon rom.

Examples

> # Set Treeckos first type to be Fire.
> # This will make Treecko a Fire/Grass type.
>
> # First, let's figure out which type is the Fire type.
> tm35-load emerald.gba | grep '=FIRE$'
.types[10].name=FIRE

> # Alright, 10 is Fire. Next let's change Treeckos typing.
> echo '.pokemons[277].types[0]=10' | tm35-apply emerald.gba

randomizer

> # Set the max level of all wild Pokémons to 100
> tm35-load emerald.gba | sed 's/max_level=.*$/\max_level=100/' |
      tm35-apply emerald.gba

randomizer

> # 150 power, 25% accuracy, and 5 PP for all moves. Very fun!
> tm35-load plat.nds | sed -e 's/\.power=.*$/.power=150/' \
      -e 's/\.accuracy=.*$/.accuracy=25/' \
      -e 's/\.pp=.*$/.pp=5/' | tm35-apply plat.nds

randomizer