Balatro-Multiplayer / Balatro-Multiplayer/BalatroMultiplayer

Ranked deck pool: curate to a fixed allowlist (fixes cross-install fairness bug)

Open
#491 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Lua
Stars
335
Forks
106
Avg merge
2d 2h
Merged PRs (30d)
1

Description

**Status: root cause confirmed** (correctness bug) + design

## Summary
The ranked draft builds its pool from `G.P_CENTER_POOLS.Back` on the **host** (`pvp_api/actions.lua:91`, and `api/ban_pick.lua:527` in BalatroMultiplayerAPI) — every deck back the host's installed mods registered. The pool is broadcast to the guest, who may not have those decks; an unresolvable deck key is a broken match, not a balance issue. Correctness bug, latent or live depending on whether ranked players can load arbitrary deck mods.

## Proposal
Ranked draws from an explicit curated allowlist in the mod, not the install-global pool:
- **Included:** all vanilla decks + Violet + Orange + Cocktail.
- **Explicitly excluded** (exist but are not ranked-legal): **Echo**, **Heisenberg**.
- Every included deck ships with vanilla or the PvP mod itself, so both clients are guaranteed to have them — this fixes the fairness bug by construction, no server authority required.
- Draft mechanic unchanged: sample 9 (deck + random stake) combos from the allowlist, ban combos, pick one.

## Open questions
- **Server authority** — whether to move the ranked list server-side later (live meta changes / instant deck bans without a client patch). Not needed for the fairness fix; open for the future.
- **Cocktail** in the pool is gated on the weekly-cocktail API (#492) — ship ranked with vanilla + Violet + Orange first, add Cocktail when that lands.

Contributor guide

Open the contributing guide

Research direction

Start by reading the ranked pool construction in pvp_api/actions.lua around line 91 and compare it with api/ban_pick.lua around line 527 in BalatroMultiplayerAPI. Trace how deck keys are collected and broadcast, then verify the draft still samples nine deck-and-stake combinations while restricting ranked choices to the stated legal decks. Done means a ranked match cannot offer an install-only deck to the other client.

Written by the indexing model from the issue text.

Assessment

Tech stack
lua
Domain
game-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.