What card was discarded?

I'm working on a spDrawCards routine. There are very few pure draw card spells. The bulk of them come with conditions... like lose n life, or discard n cards... So I'm intending that nearly all combinations can be supported.
There's one syntax I've run into so far that's not as easy as I had thought - "discard 2 cards unless you discard an artifact".
This is what I've got down so far:
So short of writing another form of input_discard, does anyone have some ideas?
There's one syntax I've run into so far that's not as easy as I had thought - "discard 2 cards unless you discard an artifact".
This is what I've got down so far:
- Code: Select all
if (shouldSpDrawCards(card) != -1)
{
int n = shouldSpDrawCards(card);
String parse = card.getKeyword().get(n).toString();
card.removeIntrinsicKeyword(parse);
String k[] = parse.split(":");
final int NumCards[] = {-1};
final String NumCardsType[] = {"none"};
final boolean NumCardsTypeYouCtrl[] = {false};
final boolean NumCardsTypeInPlay[] = {false};
final boolean NumCardsTypeInYourYard[] = {false};
final boolean NumCardsTypeInAllYards[] = {false};
final boolean NumCardsDomain[] = {false};
if (k[1].length() == 1)
NumCards[0] = Integer.parseInt(k[1]);
else
{
if (k[1].startsWith("NumCardsType"))
{
String kk[] = k[1].split("/");
NumCardsType[0] = kk[1];
NumCardsTypeYouCtrl[0] = kk[2].equals("YouCtrl");
NumCardsTypeInPlay[0] = kk[2].equals("InPlay");
NumCardsTypeInYourYard[0] = kk[2].equals("InYourYard");
NumCardsTypeInAllYards[0] = kk[2].equals("InAllYards");
}
NumCardsDomain[0] = k[1].equals("Domain");
}
final int NumDiscard[] = {0};
final boolean UnlessDiscardLand[] = {false};
final boolean UnlessDiscardArtifact[] = {false};
final boolean AtRandom[] = {false};
final int NumLife[] = {0};
final int NumToLibrary[] = {0};
final boolean ToLibraryTop[] = {false};
final boolean ToLibraryTopBottom[] = {false};
final boolean ToLibraryBottom[] = {false};
final int NumOppDraw[] = {0};
if (k.length > 2)
{
if (k[2].contains("Discard"))
{
String kk[] = k[2].split("/");
NumDiscard[0] = Integer.parseInt(kk[1]);
if (kk.length > 2)
{
UnlessDiscardLand[0] = kk[2].equals("UnlessDiscardLand");
UnlessDiscardArtifact[0] = kk[2].equals("UnlessDiscardArtifact");
AtRandom[0] = kk[2].equals("AtRandom");
}
}
if (k[2].contains("Life"))
{
String kk[] = k[2].split("/");
NumLife[0] = Integer.parseInt(kk[1]);
}
if (k[2].contains("NumToLibrary"))
{
String kk[] = k[2].split("/");
NumToLibrary[0] = Integer.parseInt(kk[1]);
if (kk.length > 2)
{
ToLibraryTop[0] = kk[2].equals("Top");
ToLibraryTopBottom[0] = kk[2].equals("TopBottom");
ToLibraryBottom[0] = kk[2].equals("Bottom");
}
}
if (k[2].contains("NumOppDraw"))
{
String kk[] = k[2].split("/");
NumOppDraw[0] = Integer.parseInt(kk[1]);
}
final SpellAbility spell = new Spell(card)
{
public int getNumCards()
{
int n = 0;
String cardController = card.getController();
PlayerZone myPlay = AllZone.getZone(Constant.Zone.Play, cardController);
PlayerZone opPlay = AllZone.getZone(Constant.Zone.Play, AllZone.GameAction.getOpponent(cardController));
PlayerZone myYard = AllZone.getZone(Constant.Zone.Graveyard, cardController);
PlayerZone opYard = AllZone.getZone(Constant.Zone.Graveyard, AllZone.GameAction.getOpponent(cardController));
CardList AllCards = new CardList();
if (! NumCardsType[0].equals("none"))
{
if (NumCardsTypeInYourYard[0] == false)
AllCards.addAll(myYard.getCards());
if (NumCardsTypeInAllYards[0] == false)
{
AllCards.addAll(myYard.getCards());
AllCards.addAll(opYard.getCards());
}
if (NumCardsTypeYouCtrl[0] == true)
AllCards.addAll(myPlay.getCards());
if (NumCardsTypeInPlay[0] == true)
{
AllCards.addAll(myPlay.getCards());
AllCards.addAll(opPlay.getCards());
}
AllCards = AllCards.filter(new CardListFilter()
{
public boolean addCard(Card c)
{
if (c.getType().contains(NumCardsType[0]))
return true;
return false;
}
});
n = AllCards.size();
}
if (NumCardsDomain[0] == true)
{
AllCards.addAll(myPlay.getCards());
String basic[] = {"Forest", "Plains", "Mountain", "Island", "Swamp"};
for(int i = 0; i < basic.length; i++)
{
if (! AllCards.getType(basic[i]).isEmpty())
n++;
}
}
return n;
}
public void resolve()
{
if (NumCards[0] == -1)
NumCards[0] = getNumCards();
for (int i=0; i<NumCards[0]; i++)
AllZone.GameAction.drawCard(card.getController());
if (NumDiscard[0] > 0)
{
for (int i=0; i < NumDiscard[0]; i++)
if(card.getController().equals("Human"))
AllZone.InputControl.setInput(CardFactoryUtil.input_discard());
else
AllZone.GameAction.discardRandom("Computer");
}
}
};
}
}
- Code: Select all
if (NumDiscard[0] > 0)
{
for (int i=0; i < NumDiscard[0]; i++)
if(card.getController().equals("Human"))
AllZone.InputControl.setInput(CardFactoryUtil.input_discard());
else
AllZone.GameAction.discardRandom("Computer");
}
So short of writing another form of input_discard, does anyone have some ideas?