diff --git a/.gitattributes b/.gitattributes index 74bfce59354..405e2835168 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10171,6 +10171,7 @@ res/cardsfolder/v/vertigo.txt svneol=native#text/plain res/cardsfolder/v/vertigo_spawn.txt svneol=native#text/plain res/cardsfolder/v/vesper_ghoul.txt svneol=native#text/plain res/cardsfolder/v/vessel_of_endless_rest.txt -text +res/cardsfolder/v/vesuva.txt -text res/cardsfolder/v/vesuvan_doppelganger.txt svneol=native#text/plain res/cardsfolder/v/veteran_armorer.txt svneol=native#text/plain res/cardsfolder/v/veteran_armorsmith.txt svneol=native#text/plain diff --git a/res/cardsfolder/v/vesuva.txt b/res/cardsfolder/v/vesuva.txt new file mode 100644 index 00000000000..45aa73b21a9 --- /dev/null +++ b/res/cardsfolder/v/vesuva.txt @@ -0,0 +1,13 @@ +Name:Vesuva +ManaCost:no cost +Types:Land +Text:no text +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseLand | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield tapped as a copy of any land on the battlefield. +SVar:ChooseLand:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Land.Other | SubAbility$ DBCopy | RememberChosen$ True +SVar:DBCopy:DB$ Clone | Defined$ Remembered | IntoPlayTapped$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/vesuva.jpg +SetInfo:TSP|Rare|http://magiccards.info/scans/en/ts/281.jpg +Oracle:You may have Vesuva enter the battlefield tapped as a copy of any land on the battlefield. +End \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java index e15dc95b1cb..dffe7e27b0e 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java @@ -580,7 +580,10 @@ public final class AbilityFactoryClone { stateToCopy = cardToCopy.getCurState(); } - CardFactoryUtil.copyState(cardToCopy, stateToCopy, tgtCard, "Cloned"); + CardFactoryUtil.copyState(cardToCopy, stateToCopy, tgtCard); + // must call this before addAbilityFactoryAbilities so cloned added abilities are handled correctly + addExtraCharacteristics(tgtCard, params, origSVars); + CardFactoryUtil.addAbilityFactoryAbilities(tgtCard); for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) { tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i)); } @@ -588,21 +591,20 @@ public final class AbilityFactoryClone { tgtCard.setName(originalName); } - addExtraCharacteristics(tgtCard, params, origSVars); // If target is a flipped card, also copy the flipped // state. if (cardToCopy.isFlip()) { tgtCard.addAlternateState(CardCharactersticName.Flipped); tgtCard.setState(CardCharactersticName.Flipped); - CardFactoryUtil.copyState(cardToCopy, CardCharactersticName.Flipped, tgtCard, "Cloned"); + CardFactoryUtil.copyState(cardToCopy, CardCharactersticName.Flipped, tgtCard); + addExtraCharacteristics(tgtCard, params, origSVars); + CardFactoryUtil.addAbilityFactoryAbilities(tgtCard); for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) { tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i)); } if (keepName) { tgtCard.setName(originalName); } - - addExtraCharacteristics(tgtCard, params, origSVars); tgtCard.setFlip(true); tgtCard.setState(CardCharactersticName.Original); @@ -651,14 +653,40 @@ public final class AbilityFactoryClone { if (params.containsKey("AddAbilities")) { for (final String s : Arrays.asList(params.get("AddAbilities").split(","))) { if (origSVars.containsKey(s)) { - final AbilityFactory newAF = new AbilityFactory(); + //final AbilityFactory newAF = new AbilityFactory(); final String actualAbility = origSVars.get(s); - final SpellAbility grantedAbility = newAF.getAbility(actualAbility, tgtCard); - tgtCard.addSpellAbility(grantedAbility); + // final SpellAbility grantedAbility = newAF.getAbility(actualAbility, tgtCard); + // tgtCard.addSpellAbility(grantedAbility); + tgtCard.getIntrinsicAbilities().add(actualAbility); } } } + // keywords to add to clone + final ArrayList keywords = new ArrayList(); + if (params.containsKey("AddKeywords")) { + keywords.addAll(Arrays.asList(params.get("AddKeywords").split(" & "))); + // allow SVar substitution for keywords + for (int i = 0; i < keywords.size(); i++) { + final String k = keywords.get(i); + if (origSVars.containsKey(k)) { + keywords.add("\"" + k + "\""); + keywords.remove(k); + } + if (keywords.get(i).startsWith("HIDDEN")) { + tgtCard.addExtrinsicKeyword(keywords.get(i)); + } + else { + tgtCard.addIntrinsicKeyword(keywords.get(i)); + } + } + } + + // set power of clone + if (params.containsKey("IntoPlayTapped")) { + tgtCard.setTapped(true); + } + // set power of clone if (params.containsKey("SetPower")) { String rhs = params.get("SetPower"); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 39b970f3ceb..79ad995be24 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -3942,7 +3942,7 @@ public class CardFactoryUtil { * @param to * the to */ - public static void copyState(final Card from, final CardCharactersticName stateToCopy, final Card to, final String type) { + public static void copyState(final Card from, final CardCharactersticName stateToCopy, final Card to) { // copy characteristics not associated with a state to.setCurSetCode(from.getCurSetCode()); @@ -3969,33 +3969,6 @@ public class CardFactoryUtil { to.setTriggers(characteristics.getTriggers()); to.setReplacementEffects(characteristics.getReplacementEffects()); to.setStaticAbilityStrings(characteristics.getStaticAbilityStrings()); - - // copy activated abilities - for (SpellAbility sa : characteristics.getSpellAbility()) { - if (sa instanceof AbilityActivated) { - SpellAbility newSA = ((AbilityActivated) sa).getCopy(); - if (newSA == null) { - System.out.println("Uh-oh..."); - } - newSA.setType(type); - CardFactoryUtil.correctAbilityChainSourceCard(newSA, to); - to.addSpellAbility(newSA); - } - } - - // copy activated mana abilities - for (SpellAbility sa : characteristics.getManaAbility()) { - if (sa instanceof AbilityActivated) { - SpellAbility newSA = ((AbilityActivated) sa).getCopy(); - if (newSA == null) { - System.out.println("Uh-oh..."); - } - newSA.setType(type); - CardFactoryUtil.correctAbilityChainSourceCard(newSA, to); - to.addSpellAbility(newSA); - } - } - } public static void copySpellAbility(SpellAbility from, SpellAbility to) {