Multiplayer & Co-op
How multiplayer works
BONKERS is a host-authoritative co-op game. One machine is the host — either the player who started the session or a dedicated server — and it owns the truth: enemy existence, damage, trade confirmations, guild rosters and mail all resolve there. Clients send requests and receive results.
Parties and trades are ephemeral — they live only for the session. Guilds, the guild vault, mail and the player directory are persistent, snapshotted to JSON on the host.
Parties
A party holds up to 4 members. The flow is invite → accept or decline → leave; an invite expires after 15s. The oldest remaining member holds position zero in the roster, and a party dissolves automatically when it drops to one member.
Guilds
Guilds are the persistent social layer, stored in bonkers_guilds.json. Founding one
costs 10,000 gold and requires character level 50;
joining an existing guild requires level 25. A guild invite expires
after 6s.
Membership cap rises with guild level:
| Guild level | Member cap |
|---|---|
| 1 | 20 |
| 2 | 25 |
| 3 | 30 |
| 4 | 40 |
| 5 | 50 |
Three ranks are defined: Guild Master (0), Officer (1) and Member (2). The roster keeps each member's last-known display name so offline members still appear. Guild names are 3–24 characters, letters and digits plus space, apostrophe and hyphen.
Guild vault
Each guild has shared storage of 6 tabs × 48 slots, with rank-based daily withdrawal quotas. Every mutation appends a ledger entry — deposit or withdraw, item or gold, and tab unlocks — recording who did what and when. The ledger holds up to 5,000 entries. The source is explicit that the audit trail is the point, not an optional extra.
Trading
Player-to-player trade runs request → accept → active session. Each side writes its own half of
the offer, but the confirmation flags are held by the host, so a client cannot forge a
confirm. Editing an offer resets both confirmations, which is what stops the classic
swap-at-the-last-instant scam. A trade ends as Complete or Cancelled.
Mail is a private per-player inbox — unlike loot parcels, nobody else can see it. A message is a container with a recipient: text, gold and item attachments.
| Limit | Value |
|---|---|
| Inbox capacity | 50 messages |
| Attachments per message | 5 |
| Postage fee | 30 gold |
Three safety rules are built in: postage acts as a spam brake and gold sink; a full inbox refuses the send rather than silently dropping it; and mail with unclaimed attachments cannot be deleted. Mail can address offline players because the host keeps a directory of every SteamID that has ever connected, mapped to its last-known name.
Chat channels
9 channels are defined: Universal, World, Biome, Party, Guild, Trade, Pvp, System, Whisper. Universal, World, Party, Biome, Trade and PvP are joined by default; Guild is a dynamic tab that appears only while you are in a guild. System carries notifications and has no prefix.
Channel switching and social actions share the slash-command line:
| Command | Does |
|---|---|
/join, /leave | Add or remove a channel tab |
/u /w /b /p /t /gc | Universal, World, Biome, Party, Trade, Guild chat |
/party | Party actions |
/trade <player> | Trade action — accept, decline, cancel, or a player name |
/g, /guild | Guild commands |
/tell <player> <msg> | Whisper — also /whisper, /pm |
/r <msg> | Reply to the last whisper |
Note that /w is World, not whisper, and /g is guild
commands while /gc is guild chat — the source calls both out
deliberately.
Source & verification
Source status: generated from the current BONKERS repository on November 8, 2026. Every figure on this page was read out of the files below at generation time — nothing is estimated, remembered or predicted.
Verification: Implemented in code, not yet playtested. Caps, fees and limits are constants read from source; balance and etiquette are not documented.
Code/Social/ — 19 files (Party, Guild, Guild vault, Trade, Mail, PlayerDirectory)Code/UI/ChatChannels.csCode/UI/ChatBox.razor
Regenerate with
python tools/make_wiki_articles.py after the code changes, then
python build.py.