add Vesuvan Doppelganger (from original base Alpha)

This commit is contained in:
jendave
2011-08-06 14:25:41 +00:00
parent 24d46bd925
commit b66ac05fec
6 changed files with 156 additions and 47 deletions

1
.gitattributes vendored
View File

@@ -5411,6 +5411,7 @@ res/cardsfolder/verdant_force.txt -text svneol=native#text/plain
res/cardsfolder/verdigris.txt -text svneol=native#text/plain res/cardsfolder/verdigris.txt -text svneol=native#text/plain
res/cardsfolder/verduran_enchantress.txt -text svneol=native#text/plain res/cardsfolder/verduran_enchantress.txt -text svneol=native#text/plain
res/cardsfolder/vermiculos.txt -text svneol=native#text/plain res/cardsfolder/vermiculos.txt -text svneol=native#text/plain
res/cardsfolder/vesuvan_doppelganger.txt -text svneol=native#text/plain
res/cardsfolder/veteran_armorer.txt -text svneol=native#text/plain res/cardsfolder/veteran_armorer.txt -text svneol=native#text/plain
res/cardsfolder/veteran_armorsmith.txt -text svneol=native#text/plain res/cardsfolder/veteran_armorsmith.txt -text svneol=native#text/plain
res/cardsfolder/veteran_cavalier.txt -text svneol=native#text/plain res/cardsfolder/veteran_cavalier.txt -text svneol=native#text/plain

View File

@@ -0,0 +1,9 @@
Name:Vesuvan Doppelganger
ManaCost:3 U U
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability."
PT:0/0
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/vesuvan_doppelganger.jpg
End

View File

@@ -139,7 +139,9 @@ public class Card extends MyObservable {
private String namedCard = ""; private String namedCard = "";
private String topCardName = ""; private String topCardName = "";
private String reflectableMana = ""; private String reflectableMana = "";
private String cloneOrigin = ""; private Card cloneOrigin = null;
private Card currentlyCloningCard = null;
private Command cloneLeavesPlayCommand = null;
private ArrayList<Card> gainControlTargets = new ArrayList<Card>(); private ArrayList<Card> gainControlTargets = new ArrayList<Card>();
private ArrayList<Command> gainControlReleaseCommands = new ArrayList<Command>();; private ArrayList<Command> gainControlReleaseCommands = new ArrayList<Command>();;
@@ -311,14 +313,30 @@ public class Card extends MyObservable {
return sirenAttackOrDestroy; return sirenAttackOrDestroy;
} }
public String getCloneOrigin() { public Card getCloneOrigin() {
return cloneOrigin; return cloneOrigin;
} }
public void setCloneOrigin(String name) { public void setCloneOrigin(Card name) {
cloneOrigin = name; cloneOrigin = name;
} }
public Command getCloneLeavesPlayCommand() {
return cloneLeavesPlayCommand;
}
public void setCloneLeavesPlayCommand(Command com) {
cloneLeavesPlayCommand = com;
}
public Card getCurrentlyCloningCard() {
return currentlyCloningCard;
}
public void setCurrentlyCloningCard(Card c) {
currentlyCloningCard = c;
}
public boolean getSacrificeAtEOT() { public boolean getSacrificeAtEOT() {
return sacrificeAtEOT || getKeyword().contains("At the beginning of the end step, sacrifice CARDNAME."); return sacrificeAtEOT || getKeyword().contains("At the beginning of the end step, sacrifice CARDNAME.");
} }
@@ -1308,6 +1326,10 @@ public class Card extends MyObservable {
if(t.trigger.equals(type) && t.isBasic()) AllZone.Stack.add(t); if(t.trigger.equals(type) && t.isBasic()) AllZone.Stack.add(t);
} }
public void clearTriggers() {
zcTriggers.clear();
}
public void addComesIntoPlayCommand(Command c) { public void addComesIntoPlayCommand(Command c) {
addTrigger(c, ZCTrigger.ENTERFIELD); addTrigger(c, ZCTrigger.ENTERFIELD);
} }

View File

@@ -13280,7 +13280,7 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Clone")) { else if(cardName.equals("Clone") || cardName.equals("Vesuvan Doppelganger")) {
final CardFactory cfact = cf; final CardFactory cfact = cf;
final Card[] copyTarget = new Card[1]; final Card[] copyTarget = new Card[1];
final Card[] cloned = new Card[1]; final Card[] cloned = new Card[1];
@@ -13288,10 +13288,10 @@ public class CardFactory_Creatures {
final SpellAbility copyBack = new Ability(card, "0") { final SpellAbility copyBack = new Ability(card, "0") {
@Override @Override
public void resolve() { public void resolve() {
Card orig = cfact.getCard(cloned[0].getCloneOrigin(), card.getController()); Card orig = cfact.getCard(card.getName(), card.getController());
PlayerZone dest = AllZone.getZone(cloned[0]); PlayerZone dest = AllZone.getZone(card.getCurrentlyCloningCard());
AllZone.GameAction.moveTo(dest, orig); AllZone.GameAction.moveTo(dest, orig);
dest.remove(cloned[0]); dest.remove(card.getCurrentlyCloningCard());
} }
};//SpellAbility };//SpellAbility
@@ -13300,11 +13300,10 @@ public class CardFactory_Creatures {
public void execute() { public void execute() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(card.getName()).append(" - reverting "+cloned[0].getName()+" to "+card.getName()+"."); sb.append(card.getName()).append(" - reverting self to "+card.getName()+".");
copyBack.setStackDescription(sb.toString()); copyBack.setStackDescription(sb.toString());
AllZone.Stack.add(copyBack); AllZone.Stack.add(copyBack);
} }
}; };
@@ -13313,37 +13312,28 @@ public class CardFactory_Creatures {
@Override @Override
public void resolve() { public void resolve() {
if (card.getController().isComputer()) {
if (card.getController().equals(AllZone.ComputerPlayer)) { CardList creatures = AllZoneUtil.getCreaturesInPlay();
if(!creatures.isEmpty()) {
CardList AICreatures = AllZoneUtil.getCreaturesInPlay(AllZone.ComputerPlayer); copyTarget[0] = CardFactoryUtil.AI_getBestCreature(creatures);
CardList PlayerCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.HumanPlayer);
if (!AICreatures.isEmpty()) {
copyTarget[0] = AICreatures.iterator().next();
} }
else if (!PlayerCreatures.isEmpty()) {
copyTarget[0] = PlayerCreatures.iterator().next();
}
} }
if (copyTarget[0] != null) { if (copyTarget[0] != null) {
cloned[0] = cfact.getCard(copyTarget[0].getName(), card.getController());
cloned[0] = cfact.getCard(copyTarget[0].getName(), card.getController()); cloned[0].setCloneOrigin(card);
cloned[0].setCloneOrigin(card.getName()); cloned[0].addLeavesPlayCommand(leaves);
cloned[0].addLeavesPlayCommand(leaves); cloned[0].setCloneLeavesPlayCommand(leaves);
cloned[0].setCurSetCode(copyTarget[0].getCurSetCode()); cloned[0].setCurSetCode(copyTarget[0].getCurSetCode());
cloned[0].setImageFilename(copyTarget[0].getImageFilename()); cloned[0].setImageFilename(copyTarget[0].getImageFilename());
PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, card.getController()); if(cardName.equals("Vesuvan Doppelganger")) {
play.add(cloned[0]); cloned[0].addExtrinsicKeyword("At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.");
cloned[0].addColor("U", cloned[0], false, true);
}
PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, card.getController());
play.add(cloned[0]);
card.setCurrentlyCloningCard(cloned[0]);
} }
} }
};//SpellAbility };//SpellAbility
@@ -13353,7 +13343,11 @@ public class CardFactory_Creatures {
@Override @Override
public void showMessage() { public void showMessage() {
AllZone.Display.showMessage(cardName+" - Select a creature on the battlefield"); AllZone.Display.showMessage(cardName+" - Select a creature on the battlefield");
ButtonUtil.enableOnlyCancel();
} }
@Override
public void selectButtonCancel() { stop(); }
@Override @Override
public void selectCard(Card c, PlayerZone z) { public void selectCard(Card c, PlayerZone z) {
@@ -13379,7 +13373,7 @@ public class CardFactory_Creatures {
final SpellAbility copyBack = new Ability(card, "0") { final SpellAbility copyBack = new Ability(card, "0") {
@Override @Override
public void resolve() { public void resolve() {
Card orig = cfact.getCard(cloned[0].getCloneOrigin(), card.getController()); Card orig = cfact.getCard(cloned[0].getCloneOrigin().getName(), card.getController());
PlayerZone dest = AllZone.getZone(cloned[0]); PlayerZone dest = AllZone.getZone(cloned[0]);
AllZone.GameAction.moveTo(dest, orig); AllZone.GameAction.moveTo(dest, orig);
dest.remove(cloned[0]); dest.remove(cloned[0]);
@@ -13424,15 +13418,15 @@ public class CardFactory_Creatures {
} }
if (copyTarget[0] != null) { if (copyTarget[0] != null) {
cloned[0] = cfact.getCard(copyTarget[0].getName(), card.getController()); cloned[0] = cfact.getCard(copyTarget[0].getName(), card.getController());
cloned[0].setCloneOrigin(card.getName()); cloned[0].setCloneOrigin(card);
cloned[0].addLeavesPlayCommand(leaves); cloned[0].addLeavesPlayCommand(leaves);
cloned[0].setBaseDefense(7); cloned[0].setBaseDefense(7);
cloned[0].setBaseAttack(7); cloned[0].setBaseAttack(7);
PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, card.getController()); PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, card.getController());
play.add(cloned[0]); play.add(cloned[0]);
card.setCurrentlyCloningCard(cloned[0]);
} }
} }

View File

@@ -77,6 +77,7 @@ public class GameActionUtil {
upkeep_Anowon(); upkeep_Anowon();
upkeep_Cunning_Lethemancer(); upkeep_Cunning_Lethemancer();
upkeep_Shapeshifter(); upkeep_Shapeshifter();
upkeep_Vesuvan_Doppelganger_Keyword();
upkeep_Ink_Dissolver(); upkeep_Ink_Dissolver();
upkeep_Kithkin_Zephyrnaut(); upkeep_Kithkin_Zephyrnaut();
@@ -10119,6 +10120,88 @@ public class GameActionUtil {
}//foreach(Card) }//foreach(Card)
}//upkeep_Shapeshifter }//upkeep_Shapeshifter
private static void upkeep_Vesuvan_Doppelganger_Keyword() {
final Player player = AllZone.Phase.getPlayerTurn();
final String keyword = "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.";
CardList list = AllZoneUtil.getPlayerCardsInPlay(player);
list = list.filter(AllZoneUtil.getKeywordFilter(keyword));
for(final Card c:list) {
final SpellAbility ability = new Ability(c, "0") {
@Override
public void resolve() {
final Card[] newTarget = new Card[1];
newTarget[0] = null;
final Ability switchTargets = new Ability(c, "0") {
public void resolve() {
if(newTarget[0] != null) {
/*
* 1. need to select new card - DONE
* 1a. need to create the newly copied card with pic and setinfo
* 2. need to add the leaves play command
* 3. need to transfer the keyword
* 4. need to update the clone origin of new card and old card
* 5. remove clone leaves play commands from old
* 5a. remove old from play
* 6. add new to play
*/
Card newCopy = AllZone.CardFactory.getCard(newTarget[0].getName(), player);
newCopy.setCurSetCode(newTarget[0].getCurSetCode());
newCopy.setImageFilename(newTarget[0].getImageFilename());
//need to add the leaves play command (2)
newCopy.addLeavesPlayCommand(c.getCloneLeavesPlayCommand());
c.removeTrigger(c.getCloneLeavesPlayCommand(), ZCTrigger.LEAVEFIELD);
newCopy.setCloneLeavesPlayCommand(c.getCloneLeavesPlayCommand());
newCopy.addExtrinsicKeyword(keyword);
newCopy.setCloneOrigin(c.getCloneOrigin());
newCopy.getCloneOrigin().setCurrentlyCloningCard(newCopy);
c.setCloneOrigin(null);
//5
PlayerZone play = AllZone.getZone(c);
play.remove(c);
play.add(newCopy);
}
}
};
AllZone.InputControl.setInput(new Input() {
private static final long serialVersionUID = 5662272658873063221L;
@Override
public void showMessage() {
AllZone.Display.showMessage(c.getName()+" - Select new target creature. (Click Cancel to remain as is.)");
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() { stop(); }
@Override
public void selectCard(Card selectedCard, PlayerZone z) {
if(z.is(Constant.Zone.Battlefield) && selectedCard.isCreature()
&& CardFactoryUtil.canTarget(c, selectedCard)) {
newTarget[0] = selectedCard;
StringBuilder sb = new StringBuilder();
sb.append(c.getCloneOrigin()).append(" - switching to copy "+selectedCard.getName()+".");
switchTargets.setStackDescription(sb.toString());
AllZone.Stack.add(switchTargets);
stop();
}
}
});
}
};
ability.setStackDescription(c.getName()+" - you may have this creature become a copy of target creature.");
AllZone.Stack.add(ability);
}//foreach(Card)
}//upkeep_Vesuvan_Doppelganger_Keyword
private static void upkeep_Tangle_Wire() { private static void upkeep_Tangle_Wire() {
final Player player = AllZone.Phase.getPlayerTurn(); final Player player = AllZone.Phase.getPlayerTurn();
CardList wires = AllZoneUtil.getCardsInPlay("Tangle Wire"); CardList wires = AllZoneUtil.getCardsInPlay("Tangle Wire");

View File

@@ -298,10 +298,10 @@ public class CardDetailPanel extends JPanel implements CardContainer {
} }
//cloned via //cloned via
if(card.getCloneOrigin() != "") { if(card.getCloneOrigin() != null) {
if(area.length() != 0) area.append("\n"); if(area.length() != 0) area.append("\n");
area.append("^Cloned via: "); area.append("^Cloned via: ");
area.append(card.getCloneOrigin()); area.append(card.getCloneOrigin().getName());
area.append("^"); area.append("^");
} }