WotC_BenFinkel

WotC_BenFinkel



14 Jun

Comment

Originally posted by SolarJoker

Velomachus says to cast an instant or sorcery spell from the top seven. If it said "instant or sorcery card", you'd be right.

Even that isn't the full picture; play/cast permissions describe the object on the stack, so it would still be fine to cast Chop Down if it said "you may cast and instant or sorcery card..." as it would be an instant card on the stack. If it said "you may choose an instant or sorcery card... you may cast that card", then you wouldn't be able to pick Giant Killer, as "choose" will refer to the object in your library (which is not an instant card). #wotc_staff


04 Jun

Comment

Originally posted by Filobel

Fair.

On a side note, totally hypothetical here, but imagine a card that has "splice onto sorcery" and the effect was "exile target creature". Do I understand your implementation of Light up the stage correctly that it would let you play the exiled creature if you spliced that card onto LutS, because the card was exiled by LutS not as part of paying its cost? Obviously, no point in fixing a bug that isn't even in the game yet, but I'm not sure I understand why LutS isn't just coded as "pick two cards, set them aside, you get to cast those two cards and those two cards alone". Why is it coded as "you can cast any card exiled by LutS as long as it wasn't exiled as part of its cost"?

The short answer is "because the English words drive the behavior." LUtS reads "you may play those cards." Which cards? The exiled cards. What are the exiled cards? The cards that have been exiled via Light Up the Stage.

Your hypothetical card wouldn't have an issue (well, besides the issues of friggin' implementing Splice) because at the time we create the play-permission, nothing would have been exiled by the spliced ability (as those happen after the natural abilities). So when we're creating that permission, the splice exiled cards won't be considered.

Comment

Originally posted by Filobel

Interesting. Thanks for giving some insight!

I don't mean to sound rude, and perhaps it's not something you're willing to answer, but don't you have some unit testing for individual cards? Obviously, it would be unrealistic to have unit tests that cover all the possible interaction of cards in the game, but I would have assumed you had some unit tests for the basic use cases of a card... like "if you sacrifice a saproling to Thallid Omnivore, the life total goes up by 2". Then your phone rings and someone goes "Ben, I don't know what you did, but the unit tests on Thallid Omnivore don't pass anymore!"

Again, there are going to be bugs when it comes to weird interactions, but it always surprises me when the "base case" of a card doesn't work properly.

We write regression tests for any new behavior that a dev implements. As Thallid Omnivore already worked perfectly when we released Dominaria, it did not receive a regression test. If we had to record regression tests for every single card behavior in the game, no matter how redundant, I'm pretty sure we wouldn't have time to implement anything! It's a tradeoff though - it means sometimes old cards get bugs on live, and that sucks. For what it's worth, any bugfixes we do also get regression tests for them. #wotc_staff

Comment

Thanks for the report! I see some curiosity here about how this could have happened. We discovered a bug with how [[Light Up the Stage]] works if you Escape it with [[Underworld Breach]] - the bug had been that you were allowed to play the cards you exiled to pay the Escape cost. The fix had been to separate recording the results of zone transfers for costs from other zone transfers. This made it so that when we look for a Saproling "sacrificed this way" for Thallid Omnivore, we aren't looking in the right place - we're looking for a Saproling sacrificed not to pay a cost. The fix should be pretty straightforward. #wotc_staff

[I made a mistake in the diagnosis earlier, oops!]

Comment

Thanks for the report! I see some curiosity in here about how this could have happened. The answer is implementing the Strixhaven card, [[Deadly Brew]], which reads in part: "If you sacrificed a permanent this way, you may return another permanent card from your graveyard to your hand."

The challenge this introduced is that "if you sacrificed a permanent this way" is talking about a permanent card on the battlefield, while "return another permanent card" means "other than the permanent you sacrificed while it's in the graveyard" - which means that the "sacrifice" verb is responsible for describing the sacrificed object in the graveyard. The bug was that this made the "if ... was sacrificed" code look at both the pre- and post-sacrifice objects for determining whether the condition was met, which interacts incorrectly with our token zone transfer code. The fix will be to ensure that the be-sacrificed condition code doesn't care about the object in the new zone. #wotc_staff

... Read more

17 May

Comment

Thanks for the report. I've fixed the undo bug; the autotap usage is much more complex. Weighting of mana abilities that have their own mana costs is a really tricky problem that has a lot of confounding factors (e.g. Garenbrig's mana is restricted in its usage). The current prioritization of it is as-designed for the current cardpool. #wotc_staff


07 May

Comment

Yup, Tezzeret's predictive discount is on the fritz. Prediction is hard, yo. I'm on it. #wotc_staff


04 May

Comment

We have fix for this bug which should be coming out pretty soon. #wotc_staff


30 Apr

Comment

Originally posted by mrbiggbrain

The autotapper is a backpack solver, probably with some kind of static state analysis involving costs. It just would be impossible of solving that situation. Most backpack algorithms are "Good Enough" variants since solving for a backpack is very hard, resource intensive, and the best answer is usually not that much better then an informed guess.

Imagine you hve a backpack and you are trying to figure out what can fit inside. Not only do the items have a size they have dimensions, and not only do they have dimensions they have weight, and not only do they have weight they have importance. Trying to determine the best items that can fit and how they do so as you can imagine is a massive undertaking.

That is what the autotapper does. It solves a large number of backpacks to see what combinations of items could work where the cast spell is part of that solution.

Now imagine if your tent got smaller when you put a blanket inside... that greatly complicates the i...

Read more

This is a great summary of the problem space autotap lives in. #wotc_staff


22 Apr

Comment

We do have a fix in the hopper for this one. Thanks for the report! #wotc_staff


17 Apr

Comment

Unfortunately, your opponent casting an instant or sorcery is currently expiring your discount. I'm hoping we can deploy the fix soon. #wotc_staff


07 Apr

Comment

Originally posted by gryfn7

I wonder if this bug is related to PWs getting double the loyalty counters when they come back from exile /u/WotC_BenFinkel

Yes, this is the same bug, and it will be fixed with the Strixhaven release. #wotc_staff


29 Mar

Comment

Yes, this is a bug. I've avoided making comments on previous threads on this issue until we had figured out what the exact problem was and identified a fix. Sadly, our release cycle demands that the fix will come with Strixhaven's release. But we did solve it, huzzah. The short version is that some pretty fundamental changes we made to support Learn caused replacement effects to behave incorrectly in cases where multiple simultaneous zone transfers to the battlefield occur. Yeah, sounds crazy, and I suppose I could go into it deeper when we reveal another relevant card in this story. #wotc_staff


28 Mar

Comment

Originally posted by bekeleven

My favorite story of finding an arena bug wasn't actually finding an arena bug, but was instead Arena finding a bug.

When they first implemented [[Conqueror's Galleon]] from Ixalan, every time it would attack, after combat... it died. It just died. Went to the graveyard.

Conqueror's Galleon back then read, "When Conqueror's Galleon attacks, transform it at end of combat." This meant that it was still the same permanent. Meaning that it was still under all of the same effects. Meaning that it had been crewed. Meaning that it was a creature. And since Conqueror's Foothold doesn't have power and toughness, its toughness defaulted to 0 and it died instantly.

This was found before print, which is why Galleon exiles itself to transform.

The follow-up story to that (credit to my wife for reminding me!) is that our testers also found the bug with Hostage Taker that resulted in its Oracle update (adding the word "another" to prevent it causing a mandatory draw if it is the only creature or artifact on the battlefield), but sadly that testing happened a little too late to get to print. It's a somewhat more esoteric situation than "do the thing you'd expect to be able to do" that Conqueror's Galleon has! #wotc_staff


20 Mar

Comment

Hi, we've found out why this is happening; resolving the ability is also resolving the same text from Ravager Wurm. We're fixing this for the next release; in the meantime you can minimize the occurrence of the bug by not including those cards in the same deck (yeah, not a satisfying answer, but release cycles go as they go). #wotc_staff


26 Feb

Comment

Originally posted by Douglasjm

The semantics laid out in rules 607.1 and 607.1c are essentially that every noun that comes from such things is its own unique thing with its own unique identity, and that all references to it refer to that unique identity. Whenever a card creates, acts on, or describes some number of objects, those objects should get a unique label that all linked references to them should use.

You establish the inter-ability (and intra-ability) references by considering the card in isolation, and then nothing added by other cards can become part of those references.

As I alluded to, the notion is that having a computer resolve anaphora is hard. Remember that the code is generated from the English text, with only extraordinary circumstances getting a "human touch" for aiding that. Light Up the Stage reads "you may play those cards.". The parser has to determine "what are 'those cards'"? I invite you to peruse the over 150 extant examples of that phrase on M:tG cards to see that there can be a variety of ways to interpret that phrase.

Suffice to say, I've implemented a fix (the one I alluded to above, where cards zone-transferred to pay a cost are marked differently than cards zone-transferred during a resolution step) and it will likely go live with the Strixhaven release. #wotc_staff

Comment

Originally posted by freestorageaccount

When in doubt, blame anaphora. Thanks

I mean it's not totally wrong? Although really the bug is the fact that the semantics for the noun that comes out of "Exile the top two cards of your library" effectively means "cards that were exiled due to this spell", and there's nothing that stops the cards you exiled for Escape for counting for that. My expectation is that the will be to make the Escape payment cards get labelled differently, perhaps "cards that were exiled to pay for this spell via ability [foo]"; after all, someday we'll probably want to implement [[Soulflayer]]. #wotc_staff

Comment

Originally posted by Zllsif

Maybe ask an Arena dev if this interaction is intentional?

u/WotC_BenFinkel Does this work?

I can confirm this is a bug, and I'm working on a fix for it today. #wotc_staff

Comment

Originally posted by Judge_Todd

Thanks for the report, I can imagine how this could happen (as the facedown card in exile's "cardback" face has mana value 0). I'll look into this tomorrow. #wotc_staff


06 Feb

Comment

Originally posted by sameth1

I never considered that cycling counts as discarding.

It being so easy to miss that is why so many cards from the Amonkhet block read "whenever you cycle or discard a card", which is technically rather redundant! #wotc_staff