MArcomage

Free multiplayer on-line fantasy card game

Please log in

Djinn on 20:34, 30. Jul, 2014
See http://arcomage.net/?location=Replays_details&CurrentReplay=363551&PlayerView=2&Turn=106

I don't know if this is considered a bug to others, but I was honestly expecting to get Titan's L.A. back upon playing it-- since that's what you have a 50-50 shot of when you're only missing one titan piece.
Lord_Earthfire on 20:45, 30. Jul, 2014
Well, as far as i know, the card you play will be still calculated into the results of the turn and the keywords.
For example if you play a mother of dragons, the legend keyword will always trigger even though you used the mother (Since by the time the keyword triggers, it sees the played mother and the newly summoned rare dragon)

So by the time you play the arm, the keyword triggers, but since it can only summon a titan you not have in hand, it cannot summon any card, since there is no card in the avaible card pool (Since the played card is still handled like its in your hand).
DPsycho on 01:14, 31. Jul, 2014
I believe Lord_Earthfire's explanation of what happened is correct. The arm was considered to be in hand at the time it was played, meaning the set of possible cards for the keyword to summon was empty, meaning that the regular draw occurred since the keyword effect couldn't replace it with anything else.

Now the next question is whether the keyword SHOULD function in this way. It seems to me that the keyword effect should be amended such that if all Titan cards are in hand, it summons the Titan card played to trigger the effect (which in your case would draw the arm again as you were expecting).

You're probably the only player who's encountered this. Grats on discovering this oddity!
Mojko on 06:19, 31. Jul, 2014
Actually, this can be fixed. Here is the current code of the keyword:

$titans = array_diff($this->getList(array('keyword'=>"Titan")), $mydata->Hand);
if (count($titans) > 0)
{
$nextcard = $this->drawCard($titans, $mydata->Hand, $cardpos, 'drawCardList');
}

And here the code after proposed change:

$titans = array_diff($this->getList(array('keyword'=>"Titan")), array_diff($mydata->Hand, array($mydata->Hand[$cardpos]));
if (count($titans) > 0)
{
$nextcard = $this->drawCard($titans, $mydata->Hand, $cardpos, 'drawCardList');
}

The change is in the first line and the idea behind it is to remove the card at currently played position from the cards that will be removed from the available titan cards. Did I understand the change proposal correctly?
dimitris on 08:14, 31. Jul, 2014
I'm not sure that I agree with the proposed change.

The change will certainly handle in a good way this special case of having full titan hand and not the gems to play Completion Ritual. But what about the rest of the more "normal" cases?

Maybe this special case could be handled separately in the code in some way. Like checking if there are no titan cards to draw (because they are all in the player's hand), then draw the last played card.

example code:

if (count($titans) > 0)
{
$nextcard = $this->drawCard($titans, $mydata->Hand, $cardpos, 'drawCardList');
}
else {
$nextcard = last-card-played
}

DPsycho on 00:51, 1. Aug, 2014
dimitris wrote:
Like checking if there are no titan cards to draw (because they are all in the player's hand), then draw the last played card.

That's exactly what I proposed.


Mojko wrote:
The change is in the first line and the idea behind it is to remove the card at currently played position from the cards that will be removed from the available titan cards. Did I understand the change proposal correctly?

This should fix it for the encountered problem, yes, because then if the played card is otherwise not in your hand, it will be the one choice for redraw.

But if you have all Titan cards in hand as well as a duplicate of the played card, won't this still result in an empty list and a standard draw when the player should at least be getting a Titan? This is why having a catch to draw the played card in the case of an empty list is arguably necessary.
Mojko on 06:21, 1. Aug, 2014
DPsycho wrote:
But if you have all Titan cards in hand as well as a duplicate of the played card, won't this still result in an empty list and a standard draw when the player should at least be getting a Titan? This is why having a catch to draw the played card in the case of an empty list is arguably necessary.


Actually this change will cover the above mentioned problem as well. You see this piece of code:

array_diff($mydata->Hand, array($mydata->Hand[$cardpos]))

it removes the all instances of played card from the list, not just one. array_diff(first_array, second_array) function returns all items in the first array that are not present in the second array.
Djinn on 06:33, 1. Aug, 2014
Just wondering, (even though I'm not sure of the syntax,) what's the point of the "if (count($titans) > 0)" line if we're making it so $titans is always greater than 0?
Mojko on 07:26, 1. Aug, 2014
Well, after the change it would be redundant, however right now it's needed.
Myschly on 18:29, 3. Aug, 2014
Congrats on discovering this, Titan requires dedication! A full Titan-hand should definitely allow you to gain gems without loosing your Titan-hand. A Titan-victory is already difficult enough to achieve.