Skip to the content.

Multiplayer over LoRa

MonsterMesh has three ways to battle other trainers, all riding the Meshtastic mesh — no internet, no pairing servers. They need at least one other MonsterMesh T-Deck within LoRa range.

Trainers find each other through their presence beacons (broadcast periodically; you can force one with the beacon command), so the <peer>/<N> arguments below resolve against the nodes you’ve recently heard.

All MonsterMesh traffic uses channel 1 (MONSTERMESH_CHANNEL).

1. fight — local mirror match

The zero-coordination option. Your node already knows a snapshot of nearby trainers’ parties from their beacons. fight builds a CPU opponent from a neighbor’s party and runs a complete local battle against it, with a freshly-healed copy of your own team.

2. mmg — MonsterMesh Gyms (player-hosted gyms)

Any node can act as a gym: it offers its party (and a ladder of trainers) for other trainers to challenge over the mesh.

This lets a stationary T-Deck become a destination gym for a local mesh community.

3. mmb — MonsterMesh Battle (live PvP)

A real head-to-head battle between two players, resolved deterministically over the radio (see BATTLE_ENGINE.md for why this works without sending battle state).

Wire protocol summary

The packet types live in MonsterMeshTextBattle.h / MonsterMeshModule.h and travel on the MonsterMesh mesh channel. See BATTLE_ENGINE.md for the text-battle packet layouts.

Group Used by
TEXT_BATTLE_START / ACTION / HASH / FORFEIT / PARTY live PvP (mmb) and the per-fight party transfer
BBS_LADDER_REQUEST / NAMES / PARTIES MMG bulk gym-roster dump
BBS_FIGHT_REQUEST / RESULT MMG per-trainer fallback chain

Networking notes