Migrates the reaper-king-no-more proof of concept into decks/reaper-king-no-more/
as the first deck under a shared tools/ engine, so the repo can hold many
Commander decks instead of one implicit one.
- tools/deckctx.py: new shared DeckContext, resolves --deck / $MTG_DECK / cwd,
loads a deck's config.yaml, and derives color identity from the commander's
own card data (never a hardcoded color combination).
- cards.py: drop the JUND=frozenset("BRG") constant; jund_legal() renamed to
identity_legal(card, identity); DB() takes an explicit blacklist_path since
the blacklist is per-deck, not shared.
- combos.py, roles.py, similar.py, similar_text.py, bracket_check.py: take
--deck, use the deck's real identity instead of Jund/BRG.
- power.py, card_stats.py, forge_report.py: OURS deck-name constant now comes
from the deck's config (name: / commander), matched via DeckContext instead
of hardcoded "Reaper King No More".
- to_dck.py, batch_run.py, ab_test.py: .dck filename and [metadata] Name= are
derived from the deck (slug / config name), not a hardcoded "reaper.dck".
- generate.py: RECIPES and make_variants.py's VARIANTS (deck-specific
hypotheses) moved out of Python into decks/reaper-king-no-more/variants.yaml;
protected cards now come from config.yaml's protected: list instead of a
hardcoded set.
- New tools/mtg dispatcher: `tools/mtg decks/<name> <tool> [args...]` runs any
tool against any deck without cd-ing into its directory.
- data/ (Scryfall/MTGJSON/Spellbook bulk, ~1.2GB, gitignored) and embeddings.npz
move to the repo root as shared, commander-format-wide data.
- docs/howto.md: moved from the deck dir (it documents the tool, not the deck)
and updated its example commands to the real generalized CLI.
- README.md: rewritten to describe the multi-deck repo and point at
decks/reaper-king-no-more as the reference example.
Verified after the change: bracket_check, combos, and roles against
reaper-king-no-more reproduce the exact PASS/11-combos/role-profile numbers
from before the move; generate.py --list now loads recipes from YAML;
make_variants.py reproduces all 7 hand-curated variants including the
mikaeus FAIL control case; to_dck.py derives the right Name= and filename;
variant.py and compare.py reproduce decks/README.md's original numbers
exactly. The original POC at ~/mtg/reaper-king-no-more is untouched.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPKgLYpMR8szWNFXyK1XNu
90 lines
4.9 KiB
Text
90 lines
4.9 KiB
Text
==================================================================
|
|
COMBOS ALREADY IN THE DECK: 11
|
|
==================================================================
|
|
[E] Blowfly Infestation + Flourishing Defenses
|
|
-> Infinite creature ETB
|
|
-> Infinite creature LTB
|
|
-> Infinite death triggers
|
|
requires: You control at least two other creatures with toughness equal to 1.
|
|
requires: You have a way to put a -1/-1 counter on a creature.
|
|
[E] Blowfly Infestation + Nest of Scarabs
|
|
-> Infinite death triggers
|
|
-> Infinite creature ETB
|
|
-> Infinite creature LTB
|
|
requires: You control at least two other creatures with toughness equal to 1.
|
|
requires: You have a way to put a -1/-1 counter on a creature.
|
|
[E] Blowfly Infestation + Hapatra, Vizier of Poisons
|
|
-> Infinite death triggers
|
|
-> Infinite creature ETB
|
|
-> Infinite creature LTB
|
|
requires: You control at least two other creatures with toughness equal to one.
|
|
requires: You have a way to put a -1/-1 counter on a creature.
|
|
[S] Hapatra, Vizier of Poisons + Yawgmoth, Thran Physician + Obelisk Spider
|
|
-> Near-infinite lifeloss
|
|
-> Near-infinite lifegain triggers
|
|
-> Near-infinite creature ETB
|
|
requires: You control at least one additional creature.
|
|
requires: Your life total is at least 2.
|
|
requires: An opponent controls a creature.
|
|
[E] Yawgmoth, Thran Physician + Nest of Scarabs + Blood Artist
|
|
-> Near-infinite -1/-1 counters
|
|
-> Near-infinite card draw
|
|
-> Near-infinite death triggers
|
|
requires: Your life total is at least 2.
|
|
requires: You control at least one additional creature.
|
|
requires: There is at least one other creature on the battlefield.
|
|
[S] Hapatra, Vizier of Poisons + Yawgmoth, Thran Physician + Blood Artist
|
|
-> Destroy all creatures opponents control
|
|
-> Destroy each creature that enters the battlefield under an opponent's control
|
|
-> Infinite -1/-1 counters
|
|
requires: You control at least one additional creature.
|
|
requires: Your life total is at least 2.
|
|
requires: An opponent controls a creature.
|
|
[S] Hapatra, Vizier of Poisons + Yawgmoth, Thran Physician + Zulaport Cutthroat
|
|
-> Destroy all creatures opponents control
|
|
-> Destroy each creature that enters the battlefield under an opponent's control
|
|
-> Infinite -1/-1 counters
|
|
requires: You control at least one additional creature.
|
|
requires: Your life total is at least 2.
|
|
requires: An opponent controls a creature.
|
|
[E] Mazirek, Kraul Death Priest + Putrid Goblin + Woe Strider
|
|
-> Infinite +1/+1 counters on most creatures you control
|
|
-> Infinite death triggers
|
|
-> Infinite creature ETB
|
|
requires: Putrid Goblin does not have a -1/-1 counter on it.
|
|
[E] Mazirek, Kraul Death Priest + Putrid Goblin + Viscera Seer
|
|
-> Infinite +1/+1 counters on most creatures you control
|
|
-> Infinite death triggers
|
|
-> Infinite creature ETB
|
|
requires: Putrid Goblin does not have a -1/-1 counter on it.
|
|
[E] Mazirek, Kraul Death Priest + Putrid Goblin + Ashnod's Altar
|
|
-> Infinite +1/+1 counters on most creatures you control
|
|
-> Infinite colorless mana
|
|
-> Infinite death triggers
|
|
requires: Putrid Goblin does not have a -1/-1 counter on it.
|
|
[E] Mazirek, Kraul Death Priest + Putrid Goblin + Phyrexian Altar
|
|
-> Infinite +1/+1 counters on most creatures you control
|
|
-> Infinite colored mana
|
|
-> Infinite death triggers
|
|
requires: Putrid Goblin does not have a -1/-1 counter on it.
|
|
|
|
==================================================================
|
|
ONE CARD AWAY: 354 combos, 81 distinct cards
|
|
==================================================================
|
|
28 combos Mikaeus, the Unhallowed {3}{B}{B}{B} #1306
|
|
12 combos First Day of Class {1}{R} #10147
|
|
10 combos Host of the Hereafter {2}{B}{G} #7758
|
|
9 combos Rhythm of the Wild {1}{R}{G} #216
|
|
9 combos Grumgully, the Generous {1}{R}{G} #4341
|
|
8 combos Veinwitch Coven {2}{B} #4179
|
|
8 combos Thran Vigil {1}{B} #6285
|
|
8 combos Rocksteady, Mutant Marauder {2}{G} #10233
|
|
8 combos Support Mission {2}{G} #31928
|
|
8 combos Captain Kathryn Janeway {3}{G} #26133
|
|
8 combos Surrak and Goreclaw {4}{G}{G} #1600
|
|
8 combos Railway Brawler {3}{G}{G} #2493
|
|
8 combos Warden of the Grove {2}{G} #2262
|
|
8 combos Uncivil Unrest {4}{R} #2947
|
|
8 combos Renata, Called to the Hunt {2}{G}{G} #2830
|
|
|
|
decklist: /home/markdoeswork/mtg/reaper-king-no-more/decks/fast-ramp/decklist.txt | source: data/variants.json (108,535 combos)
|