No description
  • Kotlin 99.7%
  • Java 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-08 21:06:24 +02:00
.github chore: rework the labels and label pull requests automatically (#116) 2026-08-08 13:35:41 +02:00
buildSrc feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
bytecodec refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00
codegen feat(codegen): generate the decomp trainers and their parties (#115) 2026-08-08 21:06:24 +02:00
common feat(codegen): generate the decomp trainers and their parties (#115) 2026-08-08 21:06:24 +02:00
common.test refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00
decomp refactor: maps git submodules (#9) 2026-07-20 12:10:47 +02:00
docs chore(deps): lock file maintenance (#119) 2026-08-08 19:38:15 +02:00
gradle fix(deps): update kotest to v6.2.3 (#80) 2026-08-03 13:21:09 +00:00
keys feat(patcher): patch the native image client and serve it a local main feed 2026-08-02 15:39:05 +02:00
network refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00
patcher feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
protocols.game feat(codegen): generate the decomp trainers and their parties (#115) 2026-08-08 21:06:24 +02:00
protocols.login refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00
roms chore: move hex encode and decode into a shared common util (#62) 2026-07-25 21:37:53 +02:00
server.game feat(codegen): generate the decomp trainers and their parties (#115) 2026-08-08 21:06:24 +02:00
server.login refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00
.env.example feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
.gitattributes chore: pin line endings to LF via .gitattributes 2026-05-26 16:15:48 +02:00
.gitignore fix: formatting in .gitignore for local env 2026-07-22 18:50:56 +02:00
.gitmodules refactor: maps git submodules (#9) 2026-07-20 12:10:47 +02:00
.readthedocs.yaml docs: set up Astro Starlight site for Read the Docs (#46) 2026-07-20 15:30:23 +02:00
.release-please-manifest.json feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
build.gradle.kts chore: remove .env file 2026-06-08 15:42:23 +02:00
docker-compose.yml chore: remove .env file 2026-06-08 15:42:23 +02:00
gradle.properties feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
gradlew chore(deps): update gradle to v9.6.1 (#27) 2026-07-20 16:13:33 +02:00
gradlew.bat chore(deps): update gradle to v9.6.1 (#27) 2026-07-20 16:13:33 +02:00
LICENSE init 2025-08-22 16:11:41 +02:00
README.md docs: explain the roms folder and why the build wants one (#87) 2026-08-03 22:59:26 +02:00
release-please-config.json feat: release pipeline and env-supplied server key (#82) 2026-08-03 11:38:03 +02:00
renovate.json chore: rework the labels and label pull requests automatically (#116) 2026-08-08 13:35:41 +02:00
settings.gradle.kts refactor(test): add a common.test module and move the captured payloads into fixtures (#97) 2026-08-07 10:47:27 +02:00

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.