mage: Infinite stack with same ability (wrong choose dialog)

Some card has wrong ability/effect/cost/applies with choose dialog in wrong method and it allows to generate broken stack with inifinite abilities

Only server logs from gameInCheckPlayableState call:

Current stack: 40 - stack ability (Whenever a permanent enters the battlefield tapped and under your control, untap it. Triggered permanent: <font color='#94A4BA'>Bojuka Bog [0eb]</font>),

stack ability (Whenever a permanent enters the battlefield tapped and under your control, untap it. Triggered permanent: <font color='#94A4BA'>Mystic Sanctuary [e90]</font>),

stack ability (Whenever {this} or another land enters the battlefield under your control, if you control seven or more lands with different names, create a 2/2 black Zombie creature token.),

… x40 same abilities …

stack ability (Whenever {this} or another land enters the battlefield under your control, if you control seven or more lands with different names, create a 2/2 black Zombie creature token.)

About this issue

  • Original URL
  • State: closed
  • Created 10 months ago
  • Comments: 21 (20 by maintainers)

Most upvoted comments

Academy Ruins;Amulet of Vigor;Bayou;Bojuka Bog;Burgeoning;Cabal Coffers;Chromatic Lantern;Coalition Relic;Collective Restraint;Crop Rotation;Crucible of Worlds;Cultivate;Cyclonic Rift;Demonic Tutor;Doubling Season;Dryad of the Ilysian Grove;Eerie Ultimatum;Enchanted Evening;Exploration;Explosive Vegetation;Fabricate;Field of the Dead;3 Forest;Gaea’s Cradle;Glacial Chasm;Godless Shrine;Heroic Intervention;Inventors’ Fair;2 Island;Kodama’s Reach;Leyline of Anticipation;Mana Crypt;Mana Reflection;Mana Vault;Mirari’s Wake;Misty Rainforest;Mystic Sanctuary;Mystical Tutor;New Frontiers;Nyxbloom Ancient;Open the Vaults;Overgrown Tomb;Phyrexian Tower;Plains;Planar Bridge;Planar Portal;Prismatic Vista;Privileged Position;Ramunap Excavator;Replenish;Reshape the Earth;Rite of Replication;Rootpath Purifier;Savannah;Scrubland;Search for Tomorrow;Seedborn Muse;Serra’s Sanctum;Smothering Tithe;Sol Ring;Solemn Simulacrum;Splendid Reclamation;Sterling Grove;Swamp;Teferi’s Protection;The World Tree;Thrasios, Triton Hero;Three Visits;Timeless Witness;Traumatize;Tropical Island;Tundra;Underground Sea;Unwinding Clock;Urborg, Tomb of Yawgmoth;Vampiric Tutor;Verdant Catacombs;Watery Grave;Wayward Swordtooth;Windfall;Worldly Tutor;Yavimaya, Cradle of Growth;World Shaper;Farhaven Elf;Earthcraft;Land Tax;Elixir of Immortality;Demolition Field;Fabled Passage;Treasure Vault;Warp World;Boseiju, Who Shelters All;Beast Within;Taiga;The Tabernacle at Pendrell Vale;Mana Web;SB: Kenrith, the Returned King; << deck list.

Oh that’s you then? Can you post or upload the decklist, I’ll check the code of each card in it. Might be another player’s card that interacted badly there, but checking your deck is a start.

What’s gameInCheckPlayableState:

  • xmage allows only one active user’s response in time per game (e.g. only one choose dialog):
prepareForResponse(game); // clear user's feedback data
waitForResponse(game); // start another thread and wait user's data
if (response.getBoolean() != null) {
    return response.getBoolean(); // processing result
}
  • if you call second dialog then the first will lose user’s feedback and never get it from a player (it’s a popular bug – game freeze – you can see a battlefield, clicks on it, write chat but nothing happens like game waiting someone);
  • some abilities and effects can use choose dialogs for calcs or other things (example: mana type choose for usage);
  • if a bad ability calls a choose dialog in wrong place like continues effect’s apply, trigger’s applies, etc – then it will broke user’s feedback chain and freeze the game;
  • but xmage needs some heavy calcs with possible user’s feedback. Example: searching for playable abilities and available mana;
  • so it uses “check playable mode” – it’s looks like mode without a user’s feedback (all dialog calls will be ignored). shot_230831_135729
  • there is a runtime check to find possible broken effect with wrong dialog call – that’s error from started issue: Player interaction in checkPlayableState