301
Let's Discuss ... / Re: Let's Discuss Adventures Cards: Relic
« on: March 22, 2016, 11:37:10 am »
I don't think there's any actual inconsistency. I think there are two events that are being defined differently from one another (and they're allowed to be), but they're unfortunately being expressed using similar-looking phrases that are using the words in subtly different ways, and that's making people feel like the phrases should be exact analogs to one another when they don't need to be.
All that needs to happen for things to be consistent is for the events to be explicitly defined. I think the current rulings are consistent with these loose descriptions:
"Draw a card" is an event that "would happen" before you determine the card you're going to move (and thus before you might reshuffle).
"Gain" is an event that happens to "a card," and it only "would happen" after that card has been decided upon.
It may be worth noting that MTG has a similar view of "drawing a card" being defined as an event that can occur without there being an actual card to draw:
But other events in that game are defined so that they require something (e.g. an actual object or a number) to be determined before the event "would" actually occur. If something's supposed to happen "when a creature would be put into a graveyard," then it doesn't trigger just because something tells you to sacrifice a creature when you have none; it only happens when there's an actual creature about to be moved.
There's no inconsistency in defining different kinds of events differently. The definitions just need to be made apparent somewhere (via rulings, for example).
If I were going to generalize the draw operation, say to support a card that has you draw from the bottom of your deck, I don't think I would call TopCard and pass the result to Draw. I think I would instead pass the TopCard method itself to Draw (as a callback of some sort) and let Draw call it as appropriate. Then, when the need arose, I could also pass it BottomCard sometimes.
In other words, I'd parameterize Draw with a behavior for determining a card, not with a pre-determined card. Mostly just because that seems more in line with how I'd expect drawing to work (and how the current rulings suggest it works).
All that needs to happen for things to be consistent is for the events to be explicitly defined. I think the current rulings are consistent with these loose descriptions:
"Draw a card" is an event that "would happen" before you determine the card you're going to move (and thus before you might reshuffle).
"Gain" is an event that happens to "a card," and it only "would happen" after that card has been decided upon.
It may be worth noting that MTG has a similar view of "drawing a card" being defined as an event that can occur without there being an actual card to draw:
614.11. Some effects replace card draws. These effects are applied even if no cards could be drawn because there are no cards in the affected player’s library.
But other events in that game are defined so that they require something (e.g. an actual object or a number) to be determined before the event "would" actually occur. If something's supposed to happen "when a creature would be put into a graveyard," then it doesn't trigger just because something tells you to sacrifice a creature when you have none; it only happens when there's an actual creature about to be moved.
There's no inconsistency in defining different kinds of events differently. The definitions just need to be made apparent somewhere (via rulings, for example).
I guess I would argue that "draw a card" takes a parameter as well, which happens now to always be the top card of your deck (separately there are instructions saying that anytime you need the top card of your deck, and your deck is empty, then you shuffle your discard). But your way seems valid as well. Here's my code for how draw works:Code: [Select]public Card TopCard
{
get
{
if (this.DrawPile.Count = 0)
{
this.ShuffleDiscard();
}
if (this.DrawPile.Count = 0)
{
return null;
}
else
{
return this.DrawPile[0];
}
}
}
public void Draw()
{
Draw(this.TopCard);
}
public void Draw(Card cardToDraw)
{
if (cardToDraw == null)
{
return;
}
bool drawReplaced = Game.CheckWouldDrawTriggers();
if (!drawReplaced)
{
Deck.Remove(cardToDraw);
Hand.Add(cardToDraw);
}
}
If I were going to generalize the draw operation, say to support a card that has you draw from the bottom of your deck, I don't think I would call TopCard and pass the result to Draw. I think I would instead pass the TopCard method itself to Draw (as a callback of some sort) and let Draw call it as appropriate. Then, when the need arose, I could also pass it BottomCard sometimes.
In other words, I'd parameterize Draw with a behavior for determining a card, not with a pre-determined card. Mostly just because that seems more in line with how I'd expect drawing to work (and how the current rulings suggest it works).