OpenMMO
ToC
Description
OpenMMO is currently in development and not yet ready for any real use.
OpenMMO is an open-source implementation of the PokeMMO server. The goal is it to provide a free and open-source alternative to the PokeMMO server.
Building
The map data is generated at build time from the pret
decompilation projects, which are vendored as git submodules under decomp/.
Clone the repository with its submodules:
git clone --recurse-submodules <repo-url>
# or, for an existing clone:
git submodule update --init --recursive
Without the submodules the :maps build fails, because the generator has no
decomp data to read.
ROMs
A dialog id is a file offset into the retail GBA ROM. The decomp is byte-identical to it, so the generator encodes a text from the decomp, finds those bytes in the ROM, and packs the offset into the id. The decomp alone has no offsets.
Put the Emerald (BPEE, Hoenn) and FireRed (BPRE, Kanto) ROMs in roms/.
Filenames do not matter, each is identified by the game code in its GBA header.
The folder is gitignored, this project ships no ROMs.
Without them the build still succeeds and every dialog id is 0, so CI passes but
the client shows the wrong text.
Configuration
All local configuration and secrets live in a .env file at the repository
root. It is gitignored, never commit it. Use the tracked
.env.example as the template:
cp .env.example .env # then edit the values
docker compose up -d # start all docker containers
./gradlew runAll # build and run the servers
For local-only tweaks to the container setup, create a
docker-compose.override.yml (also gitignored).
Docker Compose merges it automatically on docker compose up.
For deployment,supply a proper .env and run docker compose -f docker-compose.yml up -d to skip any override.
Server key
Both servers share one private key. A local build generates it, so development needs no setup.
Released archives ship no keys. Generate a pair with
./gradlew :keys:generateGame and pass the private key to both servers through
OPENMMO_GAME_PRIVATE_KEY (the PEM) or OPENMMO_GAME_PRIVATE_KEY_FILE (a path
to it). Clients need a patched build carrying the matching public key.
Releases
release-please cuts releases from the commit history. Pull requests are squash merged, so their titles become the commit messages it reads and must follow Conventional Commits. CI rejects titles that do not.
feat bumps the minor version, fix the patch version. Below 1.0.0 a
breaking change bumps the minor version instead of jumping to 1.0.0.
Every push to master opens or updates a release pull request. Merging it tags
the release and attaches the server archives. The version lives in
gradle.properties and applies to every module, do not edit it by hand.
Wiki
The documentation wiki can be found here.
Or you can navigate to it via the docs folder in this repository.
Disclaimer
PokeMMO is not affiliated with this project in any way. Hosting/Using a private server might be against the PokeMMO ToS.
