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.
> # 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
> # 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
> # 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