Question regarding "working as intended" for Deathrattle returning to full hand

Play Mode Discussion
From the stickied "bugs reported that are not actually bugs" thread:

"A card that was returned to a players hand was destroyed and the Deathrattle still even though the minion wasn't in play triggered.
This is working as intended. When a returned minion is destroyed, since it cannot re-enter the players hand (since they are at the 10 card limit), it is still considered to be in play. This being the case, the Deathrattle ability will still trigger."

I'm not satisfied with this explanation. The part I have an issue with is the following:
"since it cannot re-enter the players hand, it is still considered to be in play."

This explanation seems to me to be a "it's coded badly, and the bad code is working as it should" sort of explanation. Why should that card be still considered to be in play? Shouldn't the card's "location" field be updated to be "in hand," followed by a check if there are already 10 cards in hand, followed by the destruction of that card? It would make a LOT more intuitive sense. The ONLY change that should be required in the code would be to change the "location" of the card before the number of cards in hand is checked, so it is no longer considered to be in play when it is destroyed.

Is there a proper design explanation for why this is considered to be "working as intended"?
04/21/2017 04:06 PMPosted by Vizionarius
This explanation seems to me to be a "it's coded badly, and the bad code is working as it should" sort of explanation. Why should that card be still considered to be in play?


Nah, it's a design decision.

If a minion can't return to the hand then it is destroyed instead, causing the Deathrattle to trigger.

Edit: They probably did it to prevent mill decks from circumventing enemy Deathrattle effects, but that's just a guess.
04/21/2017 04:06 PMPosted by Vizionarius
Is there a proper design explanation for why this is considered to be "working as intended"?

Basically, from the design point of view, the card was in play (as it was on the board). Then, you return it to hand. Hand is checked, no space. Minion in play therefore dies. Deathrattle triggers.

They never coded a "limbo" space for cards before they returned to hand.

It sounds logical to me.

Why do you feel there needs to be a "limbo" phase between the board and your hand? It seems completely unnecessary outside the fact that you don't like the idea that Deathrattles trigger.
It's a nearly arbitrary decision, but those are quite common in CCG design. You can argue that the minion should simply be removed as you do. You can argue that it should be destroyed, thus triggering the DR, as Blizzard decided. You could argue that the minion should remain unaffected since there's not room for it in hand. You could argue that the 10 card hand is only about draw, thus all returned minions are returned to hand.

None of these are objectively correct or incorrect, all the arguments make some sense. So you have to decide. And they presumably decided that the destroyed option is the best for balance.
04/21/2017 04:14 PMPosted by Leonis

Basically, from the design point of view, the card was in play (as it was on the board). Then, you return it to hand. Hand is checked, no space. Minion in play therefore dies. Deathrattle triggers.


The way you just said it also implies that the progression of events is as follows:

  • Minion is in play
  • Minion is returned to hand
  • Card is destroyed due to lack of space


I don't think there should be a "limbo" space. I just think that cards should be destroyed where they are unable to enter, not from where they were before the effect. Basically, if the card is destroyed because of a limitation in the hand zone, it should be destroyed as an object that is in the hand, not as an object that is in play.
04/21/2017 04:22 PMPosted by Frozenwind
It's a nearly arbitrary decision, but those are quite common in CCG design. You can argue that the minion should simply be removed as you do. You can argue that it should be destroyed, thus triggering the DR, as Blizzard decided. You could argue that the minion should remain unaffected since there's not room for it in hand. You could argue that the 10 card hand is only about draw, thus all returned minions are returned to hand.

None of these are objectively correct or incorrect, all the arguments make some sense. So you have to decide. And they presumably decided that the destroyed option is the best for balance.


Yeah, it does seem very arbitrary, and I feel that they decided to go with probably the least logical solution out of all the ones you just mentioned. That's why I was hoping to see if anyone knew of a clearly-stated design decision, rather than just a "it's working as it's coded" sort of answer. It would be nice to hear some rationale as to why they decided to have it work that way.

PS: I've been playing lots of different CCGs for the last 20 years now, which may be why I feel this is so unintuitive... I've dealt with a lot of systems, and none have this sort of thing work like it does in Hearthstone.
04/21/2017 04:28 PMPosted by Vizionarius
04/21/2017 04:22 PMPosted by Frozenwind
It's a nearly arbitrary decision, but those are quite common in CCG design. You can argue that the minion should simply be removed as you do. You can argue that it should be destroyed, thus triggering the DR, as Blizzard decided. You could argue that the minion should remain unaffected since there's not room for it in hand. You could argue that the 10 card hand is only about draw, thus all returned minions are returned to hand.

None of these are objectively correct or incorrect, all the arguments make some sense. So you have to decide. And they presumably decided that the destroyed option is the best for balance.


Yeah, it does seem very arbitrary, and I feel that they decided to go with probably the least logical solution out of all the ones you just mentioned. That's why I was hoping to see if anyone knew of a clearly-stated design decision, rather than just a "it's working as it's coded" sort of answer. It would be nice to hear some rationale as to why they decided to have it work that way.

PS: I've been playing lots of different CCGs for the last 20 years now, which may be why I feel this is so unintuitive... I've dealt with a lot of systems, and none have this sort of thing work like it does in Hearthstone.


The 'if there's no room for the minion in hand, destroy it' makes a lot of logical sense to me.
04/21/2017 04:23 PMPosted by Vizionarius
I don't think there should be a "limbo" space. I just think that cards should be destroyed where they are unable to enter, not from where they were before the effect.


There is no limbo space. While I don't know the specifics of how it is coded, the behavior implies something like.

ReturnToHand(minion)
{
if(HandSize < 10)
MoveToHand(minion);
else
Destroy(minion);
}
04/21/2017 04:30 PMPosted by Frozenwind

The 'if there's no room for the minion in hand, destroy it' makes a lot of logical sense to me.


Yeah, I can't argue with what makes sense to you...
I guess I'll just have to remain dissatisfied with how this particular thing works in Hearthstone.
If a minion can't be returned to hand, it's destroyed. If it's destroyed, the deathrattle triggers.
Seriously, stop making things seem more complicated than they really are.
04/21/2017 04:33 PMPosted by Psychologic

There is no limbo space. While I don't know the specifics of how it is coded, the behavior implies something like.

ReturnToHand(minion)
{
if(HandSize < 10)
MoveToHand(minion);
else
Destroy(minion);
}


Yeah, that's how I see it too, but what I'm questioning is not the coding, but the why. If it were up to me, I'd code it like such:

ReturnToHand(card){
card.zone = Zones.HAND
if(HAND.cardsInHand < 10)
HAND.add(card)
else
Destroy(card);
}


And the Destroy function takes care of what happens to the card based on the zone that it's in. Though seeing how other things work in Hearthsone, it's unlikely that they assign a zone for each card (thought I think that would make the most sense). It seems to me that they have new objects being created, such as Monsters and Spells whenever a Card (referring only to the ones in hand) is cast.
Let's compare to MtG (which has a max hand size of 7).

The max hand size is only checked at end of turn, you can have any number of cards in hand during your turn, as long as you discard down to 7 at the end of it.

Hearthstone has a continuous check on handsize, 10 at any time.
If I draw a deathrattle minion with 10 cards in hand, it is destroyed. It looks at last known position of card (in deck) and does not trigger deathrattle.
If a card (with deathrattle) is returned to my hand from play, and I have 10 cards in hand already, it looks at last known position (in play), and triggers deathrattle on destruction.

This makes perfect sense to me...
04/21/2017 04:41 PMPosted by Vizionarius
04/21/2017 04:33 PMPosted by Psychologic

There is no limbo space. While I don't know the specifics of how it is coded, the behavior implies something like.

ReturnToHand(minion)
{
if(HandSize < 10)
MoveToHand(minion);
else
Destroy(minion);
}


Yeah, that's how I see it too, but what I'm questioning is not the coding, but the why. If it were up to me, I'd code it like such:

ReturnToHand(card){
card.zone = Zones.HAND
if(HAND.cardsInHand < 10)
HAND.add(card)
else
Destroy(card);
}


And the Destroy function takes care of what happens to the card based on the zone that it's in. Though seeing how other things work in Hearthsone, it's unlikely that they assign a zone for each card (thought I think that would make the most sense). It seems to me that they have new objects being created, such as Monsters and Spells whenever a Card (referring only to the ones in hand) is cast.


Destroy is a keyword (used in Assassinate among others cards) and does cause deathrattles to trigger in all other cases. Your logic would require another state (between on board and in hand) which wouldn't be used in any situation except this one specific example.
04/21/2017 04:53 PMPosted by KnightSaber
Hearthstone has a continuous check on handsize, 10 at any time.
If I draw a deathrattle minion with 10 cards in hand, it is destroyed. It looks at last known position of card (in deck) and does not trigger deathrattle.
If a card (with deathrattle) is returned to my hand from play, and I have 10 cards in hand already, it looks at last known position (in play), and triggers deathrattle on destruction.


I understand what happens. I just disagree with the design. I don't think it's logical to have it check last known position. I feel it would make more sense to have card be destroyed from the zone that puts the limit on its existence. Since the hand is the limiting zone, then the card should be destroyed as a card in hand.
04/21/2017 04:55 PMPosted by Frozenwind

Destroy is a keyword (used in Assassinate among others cards) and does cause deathrattles to trigger in all other cases.


Destroy used on cards in play (card.zone = Zones.InPlay), yes.
My point is that the cards that say "return to hand" do NOT say "destroy," yet behave as such. That is not logical. Sure, you can define the game internally to say that if there is no space in hand, then it is destroyed instead, but then that no longer stays true to the intended function of the card. If the card in hand is destroyed (not the minion in play), then there is no deathrattle to be triggered. I think that makes more intuitive sense.
04/21/2017 04:58 PMPosted by Vizionarius
I understand what happens. I just disagree with the design. I don't think it's logical to have it check last known position. I feel it would make more sense to have card be destroyed from the zone that puts the limit on its existence. Since the hand is the limiting zone, then the card should be destroyed as a card in hand.

But it can never be back in hand, it doesn't ever reach that zone again.

How can it be destroyed from hand if it's not in hand?
04/21/2017 04:41 PMPosted by Vizionarius
And the Destroy function takes care of what happens to the card based on the zone that it's in.

The implementation is largely irrelevant. From a design standpoint the primary decision is "should returning a minion to a full hand trigger destruction effects". Implementing the desired behavior is trivial.

There are trade-offs either way, such as:

Pro-Destruction
-Deathrattles can deter the opponent from bouncing your minions to a full hand
-Bounced minions can trigger other minions' effects
-Acts as a deterrent to Vanish/Sap effects

Anti-Destruction
-Bouncing minions effectively silences them.
-Bounced minions that disappear can't be resurrected
-Increases the power level of Vanish/Sap effects
How exactly does destroying a minion and canceling it's deathrattle make more sense?

Currently it works fine. Minion gets bounced, no room in hand, minion is destroyed instead, normal death/destruction mechanics.

If anything, it doesn't make sense to destroy a minion with a bounce effect since they tend to be incredibly less expensive then outright destroy effects. Vanish is the worst culprit, though I could see single bounces being a "skill" play.
04/21/2017 05:04 PMPosted by KnightSaber

But it can never be back in hand, it doesn't ever reach that zone again.
How can it be destroyed from hand if it's not in hand?


Yeah, I get that the game is coded such that it never reaches hand. I say it should, and then it should be checked if adding it caused it to "overflow," and if so, then it should be destroyed. I'm aware of how it functions, I just disagree. And I still haven't seen a good enough explanation as to why this particular design was chosen. The closest is the rationale that Mill would be strong against Deathrattle decks, but even that one seems like a twisted way of explaining away unforseen design flaws.

Join the Conversation

Return to Forum