Every multiplayer game needs a way to get player together into matches.
This usually involves "game rooms" or lobbies that players can join. Automated matchmaking is also an option that can be put to automatically assign players to these game rooms. They exist in every match-based game, web2 or web3.
VAPOR — short for Virtual Arena for Peer-to-Peer Online Rendezvous — offers as web3 solution to this problem.
VAPOR maintains an on-chain list of game rooms for discovery purposes. Users can create or join these rooms to play their favorite games.
To stay lean and responsive, the process of joining and setting the various settings (e.g. selected character class, faction, color, handicap, etc...) are all done over p2p via the Waku protocol.
In total only two on-chain transactions are required: one to create the game with the initial settings (characteristics of the match), and one to start it, which posts all aggregated settings that are decided after (including player choices) to the chain.
Game makers can integrate `VAPOR by registering their game with the vapor contracts, posting a manifest of the settings of their game, as well as callback contract functions to call when creating a game room, and when starting a match.
On the frontend, game makers can dispay the VAPOR interface and then smoothly transition into their game UX.
As an example of game setting, we have implemented game gating via WorldID and Mask Network's Next.ID.
The game relies centrally on Waku for p2p communication. We also integrate WorldID, Next.ID, and ENS Thorin to display users inside game lobbies.
Beyond this, the stack is pretty straightforward: React + Next.js, Foundry and Solidity on the contracts side, Ethers.js for chain integration, Axios for API calls.