magefree / mage

Magic Another Game Engine
http://xmage.today
MIT License
1.88k stars 769 forks source link

ExileTopXMayPlayUntilEndOfTurnEffect UI improvements #8619

Open Alex-Vasile opened 2 years ago

Alex-Vasile commented 2 years ago

Noticed a UI/usability issues when playing with a deck with many cards which let you exile and play the card on a later turn. E.g. [[Prosper, Tome Bound]], [[Outpost Siege]], etc.

The exile window that gets opened shows ALL cards exile by that source, even if they are no longer playable. It is difficult for your opponents to keep track of which cards you can still play since they don't get a visual cue. This is especially bad in a multiplayer commander game.

Proposed solution: After the card is no longer playable, it be moved out of that exile zone and into general exile. Thoughts?

github-actions[bot] commented 2 years ago

Prosper, Tome-Bound - (Gatherer) (Scryfall) (EDHREC)

{2}{B}{R} Legendary Creature — Tiefling Warlock 1/4 Deathtouch Mystic Arcanum — At the beginning of your end step, exile the top card of your library. Until the end of your next turn, you may play that card. Pact Boon — Whenever you play a card from exile, create a Treasure token.

Outpost Siege - (Gatherer) (Scryfall) (EDHREC)

{3}{R} Enchantment As Outpost Siege enters the battlefield, choose Khans or Dragons. • Khans — At the beginning of your upkeep, exile the top card of your library. Until end of turn, you may play that card. • Dragons — Whenever a creature you control leaves the battlefield, Outpost Siege deals 1 damage to any target.

PurpleCrowbar commented 6 months ago

This same issue applies to the newly-implemented [[Ob Nixilis, Captive Kingpin]], another popular commander and card that appears frequently in Prosper, Tome Bound decks, sort of exacerbating the problem.

XMage already supports automatically sending cards to the generic exile zone at the end of turn, which works great for effects that exile cards to be played that turn only ([[Uba Mask]], [[Magus of the Mind]], etc). This is done by calling setCleanupOnEndTurn(true) when creating an exile zone. See example in case of Uba Mask below: https://github.com/magefree/mage/blob/ebdbdc494cd8b6e643c4a36ff0c6f890e630784f/Mage.Sets/src/mage/cards/u/UbaMask.java#L78 Then, in Exile.java, at the end of every turn all exile zones tagged to be cleaned up on end turn have their cards relocated to the generic exile zone. https://github.com/magefree/mage/blob/ebdbdc494cd8b6e643c4a36ff0c6f890e630784f/Mage/src/main/java/mage/game/Exile.java#L140-L151 This gets a bit more complicated with cards that can only be played until, for example, the end of the controller's next turn (as is the case with Prosper and Ob Nixilis). If it's possible to associate an exile zone with a player, perhaps it would be possible to add an additional cycle in Exile which, at the end of each turn, gets each exile zone marked with "cleanupOnOwnersEndTurn", checks if it's owned by the active player, and cleans it up..? Perhaps a more obvious / extensible solution?

github-actions[bot] commented 6 months ago

Ob Nixilis, Captive Kingpin - (Gatherer) (Scryfall) (EDHREC)

{2}{B}{R} Legendary Creature — Demon 4/3 Flying, trample Whenever one or more opponents each lose exactly 1 life, put a +1/+1 counter on Ob Nixilis, Captive Kingpin. Exile the top card of your library. Until your next end step, you may play that card.

Uba Mask - (Gatherer) (Scryfall) (EDHREC)

{4} Artifact If a player would draw a card, that player exiles that card face up instead. Each player may play lands and cast spells from among cards they exiled with Uba Mask this turn.

Magus of the Mind - (Gatherer) (Scryfall) (EDHREC)

{4}{U}{U} Creature — Human Wizard 4/5 {U}, {T}, Sacrifice Magus of the Mind: Shuffle your library, then exile the top X cards, where X is one plus the number of spells cast this turn. Until end of turn, you may play lands and cast spells from among cards exiled this way without paying their mana costs.