Balatro-Multiplayer / Balatro-Multiplayer/BalatroMultiplayerAPI

Ban-pick: weighted tuple pool policy per gamemode (Botlatro generation parity)

オープン
#13 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Lua
スター
7
フォーク
3
平均マージ
4時間 42分
マージ済み PR(30日)
4

説明

The ban-pick engine's default pool is a uniform random sample of every installed deck Back — including modded decks — with no exclusions, no weights, and no stake dimension. Botlatro (the Discord matchmaking bot) already runs real pool policy for its tuple-ban queues; this issue is about giving consumer mods the same power in-game, per mod and per gamemode.

## Reference: what Botlatro's generation enforces (`src/utils/TupleBans.ts`)

- Allowed stakes: a fixed subset (White/Green/Black/Purple/Gold — 5 of 8).
- Allowed decks: `decks` table minus per-queue `banned_decks` minus match-step bans.
- Weighted roulette-wheel selection via per-queue `deck_mults` / `stake_mults`.
- Occurrence caps in the generated list (9 tuples): max 4 of any stake (`< (tupleCount-1)/2`), max 3 of any deck (`< (tupleCount-3)/2`), no duplicate (deck, stake) pairs.
- White-stake guarantee: if the final slot is reached with zero whites, it is forced white — every list contains at least one.
- All of it is data-driven (DB tables) so moderators tune weights/bans live, without a deploy.

## Proposal

1. **A reusable weighted-tuple pool helper in the API** (opt-in, e.g. `MPAPI.BanPick.build_weighted_pool(policy)`), implementing the constraints above and returning `{ key, stake }` items. The engine already supports everything downstream of it: pool items may be `{ key, stake, ... }` tables, and `config.decorate_tile(card, item)` renders stake stickers — no engine changes needed.
2. **Policy comes from the consumer, per gamemode** — each mod passes its own policy into `BP.start` via `build_pool`, exactly like `schedule`/`decorate_tile` today. PvP and Speedrun configure independently.
3. **Policy data should be server-deliverable** (gamemode config in the match/lobby payload, keyed by `modId + gameMode`) so allowed lists/weights can be tuned like the bot's DB-backed mults — without shipping mod updates. Client-side defaults as fallback.

## Notes

- Sampling differs today: the in-game default samples decks without replacement (each deck once); tuple pools intentionally allow one deck at multiple stakes. Both remain valid choices per gamemode — the helper covers the tuple case, the current default stays for plain drafts.
- Related: the low-rated-player pool veto (see linked issue) depends on this — its mercy rule ("force white stakes into the reroll") only has meaning against a weighted tuple pool.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、ban-pick エンジンのエントリーポイント BP.start、現在のデフォルト pool、および build_pool/decorate_tile の統合箇所を特定します。重み付きタプルの生成と制約については、動作のリファレンスとして src/utils/TupleBans.ts を使用してください。説明されているとおり、mod および gamemode ごとに consumer ポリシーが機能し、サーバーから配信可能な設定とクライアントのデフォルトが実現されれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
lua
領域
api
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。