-Added remaining ability cost reducers

-Added Elixir of Immortality and fixed Feldon's Cane description
-Added Sprouting Phytohydra
This commit is contained in:
jendave
2011-08-06 10:55:30 +00:00
parent 98e71b46cf
commit 1e3f2d8cd4
14 changed files with 175 additions and 13 deletions

5
.gitattributes vendored
View File

@@ -1340,6 +1340,7 @@ res/cardsfolder/elfhame_palace.txt -text svneol=native#text/plain
res/cardsfolder/elite_archers.txt -text svneol=native#text/plain
res/cardsfolder/elite_cat_warrior.txt -text svneol=native#text/plain
res/cardsfolder/elite_vanguard.txt -text svneol=native#text/plain
res/cardsfolder/elixir_of_immortality.txt svneol=native#text/plain
res/cardsfolder/elixir_of_vitality.txt -text svneol=native#text/plain
res/cardsfolder/elspeth_knight_errant.txt -text svneol=native#text/plain
res/cardsfolder/elspeth_tirel.txt -text svneol=native#text/plain
@@ -1647,6 +1648,7 @@ res/cardsfolder/flowstone_surge.txt -text svneol=native#text/plain
res/cardsfolder/flowstone_thopter.txt -text svneol=native#text/plain
res/cardsfolder/flowstone_wall.txt -text svneol=native#text/plain
res/cardsfolder/flowstone_wyvern.txt -text svneol=native#text/plain
res/cardsfolder/fluctuator.txt svneol=native#text/plain
res/cardsfolder/flying_carpet.txt -text svneol=native#text/plain
res/cardsfolder/flying_men.txt -text svneol=native#text/plain
res/cardsfolder/fodder_cannon.txt -text svneol=native#text/plain
@@ -2063,6 +2065,7 @@ res/cardsfolder/heart_sliver.txt -text svneol=native#text/plain
res/cardsfolder/heart_warden.txt -text svneol=native#text/plain
res/cardsfolder/hearthfire_hobgoblin.txt -text svneol=native#text/plain
res/cardsfolder/heartmender.txt -text svneol=native#text/plain
res/cardsfolder/heartstone.txt svneol=native#text/plain
res/cardsfolder/heartwood_dryad.txt -text svneol=native#text/plain
res/cardsfolder/heartwood_shard.txt -text svneol=native#text/plain
res/cardsfolder/heartwood_treefolk.txt -text svneol=native#text/plain
@@ -3372,6 +3375,7 @@ res/cardsfolder/pongify.txt -text svneol=native#text/plain
res/cardsfolder/porphyry_nodes.txt -text svneol=native#text/plain
res/cardsfolder/pouncing_jaguar.txt -text svneol=native#text/plain
res/cardsfolder/power_armor.txt -text svneol=native#text/plain
res/cardsfolder/power_artifact.txt svneol=native#text/plain
res/cardsfolder/power_matrix.txt -text svneol=native#text/plain
res/cardsfolder/power_surge.txt -text svneol=native#text/plain
res/cardsfolder/pradesh_gypsies.txt -text svneol=native#text/plain
@@ -4254,6 +4258,7 @@ res/cardsfolder/springing_tiger.txt -text svneol=native#text/plain
res/cardsfolder/springjack_shepherd.txt -text svneol=native#text/plain
res/cardsfolder/sprout.txt -text svneol=native#text/plain
res/cardsfolder/sprout_swarm.txt -text svneol=native#text/plain
res/cardsfolder/sprouting_phytohydra.txt svneol=native#text/plain
res/cardsfolder/sprouting_thrinax.txt -text svneol=native#text/plain
res/cardsfolder/sprouting_vines.txt -text svneol=native#text/plain
res/cardsfolder/spur_grappler.txt -text svneol=native#text/plain

View File

@@ -0,0 +1,7 @@
Name:Elixir of Immortality
ManaCost:1
Types:Artifact
Text:no text
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/elixir_of_immortality.jpg
End

View File

@@ -1,7 +1,7 @@
Name:Feldon's Cane
ManaCost:1
Types:Artifact
Text:tap, Exile Feldon's Cane: Shuffle your graveyard into your library.
Text:no text
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/feldons_cane.jpg

View File

@@ -0,0 +1,8 @@
Name:Fluctuator
ManaCost:2
Types:Artifact
Text:Cycling abilities you activate cost you up to 2 less to activate.
K:CostChange:Player:Less:2:Ability_Cycling:All:All:TargetInHand
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/training_grounds.jpg
End

View File

@@ -0,0 +1,8 @@
Name:Heartstone
ManaCost:3
Types:Artifact
Text:Activated abilities of creatures you control cost 1 less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana.
K:CostChange:Player:Less:1:Ability:All:Creature:TargetInPlay
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/heartstone.jpg
End

View File

@@ -0,0 +1,9 @@
Name:Power Artifact
ManaCost:U U
Types:Enchantment Aura
Text:Enchanted artifact's activated abilities cost 2 less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana.
K:CostChange:Player:Less:2:Enchanted:All:Artifact:TargetInPlay
K:Enchant Artifact
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/power_artifact.jpg
End

View File

@@ -0,0 +1,9 @@
Name:Sprouting Phytohydra
ManaCost:4 G
Types:Creature Plant Hydra
Text:Whenever Sprouting Phytohydra is dealt damage, you may put a token that's a copy of Sprouting Phytohydra onto the battlefield.
PT:0/2
K:Defender
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/sprouting_phytohydra.jpg
End

View File

@@ -6659,7 +6659,11 @@ public class CardFactory implements NewConstants {
list = list.getType("Creature");
for(int i = 0; i < list.size(); i++) {
if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(1, card);
if(CardFactoryUtil.canDamage(card, list.get(i))){
HashMap<Card, Integer> m = new HashMap<Card, Integer>();
m.put(card, 1);
list.get(i).addDamage(m);
}
}
AllZone.HumanPlayer.addDamage(1, card);
@@ -10489,7 +10493,45 @@ public class CardFactory implements NewConstants {
StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - Player shuffles grave into library.");
ability.setStackDescription(sb.toString());
ability.setDescription("tap, Exile CARDNAME: Shuffle your graveyard into your library.");
card.addSpellAbility(ability);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Elixir of Immortality")) {
/*
* 2, Tap: You gain 5 life. Shuffle Elixir of Immortality and your graveyard into your library.
*/
final Ability_Tap ability = new Ability_Tap(card, "2") {
private static final long serialVersionUID = -1299603105585632846L;
@Override
public void resolve() {
final Player player = card.getController();
CardList grave = AllZoneUtil.getPlayerGraveyard(player);
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player);
AllZone.GameAction.moveToLibrary(card);
for(Card c:grave) {
lib.add(c);
}
AllZone.getZone(Constant.Zone.Graveyard, player).reset();
player.shuffle();
player.gainLife(5, card);
}
@Override
public boolean canPlayAI() {
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, AllZone.ComputerPlayer);
return lib.size() < 5 || AllZone.ComputerPlayer.getLife() < 3;
}
};//SpellAbility
StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - Player shuffles grave into library.");
ability.setStackDescription(sb.toString());
ability.setDescription("2, Tap: You gain 5 life. Shuffle Elixir of Immortality and your graveyard into your library.");
card.addSpellAbility(ability);
}//*************** END ************ END **************************

View File

@@ -1636,8 +1636,9 @@ public class CardFactoryUtil {
sourceCard.cycle();
}
};
cycle.setIsCycling(true);
StringBuilder sbDesc = new StringBuilder();
sbDesc.append("Cycling (").append(abCost.toString()).append(" Draw a card.)");
sbDesc.append("Cycling ").append(cycle.getManaCost()).append(" (").append(abCost.toString()).append(" Draw a card.)");
cycle.setDescription(sbDesc.toString());
StringBuilder sbStack = new StringBuilder();
@@ -1711,6 +1712,7 @@ public class CardFactoryUtil {
if(type.contains("Basic")) description = "basic land";
else description = type;
cycle.setIsCycling(true);
StringBuilder sbDesc = new StringBuilder();
sbDesc.append(description).append("cycling (").append(abCost.toString()).append(" Search your library for a ");
sbDesc.append(description).append(" card, reveal it, and put it into your hand. Then shuffle your library.");

View File

@@ -17363,6 +17363,60 @@ public class CardFactory_Creatures {
return newCard;
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Sprouting Phytohydra")) {
final Card newCard = new Card() {
@Override
public void addDamage(HashMap<Card, Integer> map) {
final HashMap<Card, Integer> m = map;
final Ability ability = new Ability(card, "0") {
@Override
public void resolve() {
if(getController().isHuman() &&
AllZone.Display.getChoice("Copy " + getSourceCard(),
new String[] {"Yes", "No"}).equals("No"))
return;//*
PlayerZone play = AllZone.getZone(Constant.Zone.Play, getSourceCard().getController());
CardList DoublingSeasons = new CardList(play.getCards());
DoublingSeasons = DoublingSeasons.getName("Doubling Season");
PlayerZone_ComesIntoPlay.SimultaneousEntry = true;
double Count = DoublingSeasons.size();
Count = Math.pow(2,Count);
for(int i = 0; i < Count; i++) {
if(i + 1== Count) PlayerZone_ComesIntoPlay.SimultaneousEntry = false;
Card Copy = AllZone.CardFactory.copyCardintoNew(getSourceCard());
Copy.setToken(true);
Copy.setController(getSourceCard().getController());
play.add(Copy);
}// */
}
};
ability.setStackDescription(toString() + " - you may put a token that's a copy of " + getName() + " onto the battlefield.");
AllZone.Stack.add(ability);
for(Entry<Card, Integer> entry : m.entrySet()) {
this.addDamage(entry.getValue(), entry.getKey());
}
}
};
newCard.setOwner(card.getOwner());
newCard.setController(card.getController());
newCard.setManaCost(card.getManaCost());
newCard.setName(card.getName());
newCard.setType(card.getType());
newCard.setText(card.getSpellText());
newCard.setBaseAttack(card.getBaseAttack());
newCard.setBaseDefense(card.getBaseDefense());
newCard.addSpellAbility(new Spell_Permanent(newCard));
newCard.setSVars(card.getSVars());
return newCard;
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Thoughtcutter Agent")) {

View File

@@ -204,7 +204,7 @@ public class Cost_Payment {
return false;
}
if (!payMana && !cost.hasNoManaCost()){ // pay mana here
if (!payMana /*&& !cost.hasNoManaCost()*/){ // pay mana here
changeInput.stopSetNext(new Input_PayCostMana(this));
return false;
}

View File

@@ -2886,7 +2886,8 @@ public class GameAction {
Cards_In_Play.add(originalCard);
String Mana = manaCost.toString();
CardList Player_Play = new CardList(AllZone.getZone(Constant.Zone.Play, sa.getSourceCard().getController()).getCards());
int XBonus = 0;
CardList Player_Hand = new CardList(AllZone.getZone(Constant.Zone.Hand, sa.getSourceCard().getController()).getCards());
int XBonus = 0;
int Max = 25;
if(sa.isXCost() && !sa.getSourceCard().isCopiedSpell()) sa.getSourceCard().setXManaCostPaid(0);
if(sa.isMultiKicker()) CostCutting_GetMultiMickerManaCostPaid_Colored = "";
@@ -2948,7 +2949,8 @@ public class GameAction {
if((k[1].equals("Player") && card.getController().equals(sa.getSourceCard().getController())
|| (k[1].equals("Opponent") && card.getController().equals(sa.getSourceCard().getController().getOpponent())) || k[1].equals("All"))
&& ((k[4].equals("Spell") && sa.isSpell() == true) || (k[4].equals("Ability") && sa.isAbility() == true)
|| (k[4].equals("Self") && originalCard.equals(card)) || k[4].equals("All"))
|| (k[4].startsWith("Ability_Cycling") && sa.isCycling()) || (k[4].equals("Self") && originalCard.equals(card))
|| (k[4].equals("Enchanted") && originalCard.getEnchantedBy().contains(card)) || k[4].equals("All"))
&& ((CardUtil.getColors(sa.getSourceCard()).contains(k[5])) || k[5].equals("All"))
&& ((sa.getSourceCard().isType(k[6]))
|| (!(sa.getSourceCard().isType(k[6])) && k[7].contains("NonType")) || k[6].equals("All"))) {
@@ -2958,6 +2960,9 @@ public class GameAction {
if(k[7].contains("TargetInPlay")) {
if(!Player_Play.contains(sa.getSourceCard())) k[3] = "0";
}
if(k[7].contains("TargetInHand")) {
if(!Player_Hand.contains(sa.getSourceCard())) k[3] = "0";
}
if(k[7].contains("NonType")) {
if(originalCard.isType(k[6])) k[3] = "0";
}
@@ -3087,7 +3092,8 @@ public class GameAction {
if((k[1].equals("Player") && card.getController().equals(sa.getSourceCard().getController())
|| (k[1].equals("Opponent") && card.getController().equals(sa.getSourceCard().getController().getOpponent())) || k[1].equals("All"))
&& ((k[4].equals("Spell") && sa.isSpell() == true) || (k[4].equals("Ability") && sa.isAbility() == true)
|| (k[4].equals("Self") && originalCard.equals(card)) || k[4].equals("All"))
|| (k[4].startsWith("Ability_Cycling") && sa.isCycling()) || (k[4].equals("Self") && originalCard.equals(card))
|| (k[4].equals("Enchanted") && originalCard.getEnchantedBy().contains(card)) || k[4].equals("All"))
&& ((CardUtil.getColors(sa.getSourceCard()).contains(k[5])) || k[5].equals("All"))
/**
* Chris added a test for Changeling.
@@ -3103,6 +3109,9 @@ public class GameAction {
if(k[7].contains("TargetInPlay")) {
if(!Player_Play.contains(sa.getSourceCard())) k[3] = "0";
}
if(k[7].contains("TargetInHand")) {
if(!Player_Hand.contains(sa.getSourceCard())) k[3] = "0";
}
if(k[7].contains("NonType")) {
if(originalCard.isType(k[6])) k[3] = "0";
}
@@ -3176,7 +3185,7 @@ public class GameAction {
}
Mana = Mana.trim();
if(Mana.length() == 0 || Mana.equals("0")) {
if(sa.isSpell()) Mana = "0";
if(sa.isSpell() || sa.isCycling()) Mana = "0";
else {
Mana = "1";
}

View File

@@ -20,8 +20,8 @@ public class Input_PayCostMana extends Input {
manaCost = new ManaCost("0");
} else {
String mana = payment.getCost().getMana();
manaCost = AllZone.GameAction.getSpellCostChange(sa, new ManaCost(mana));
}
manaCost = new ManaCost(mana);//AllZone.GameAction.getSpellCostChange(sa, new ManaCost(mana));
} //^ already factored into costPayment.
}
else
{
@@ -69,7 +69,7 @@ public class Input_PayCostMana extends Input {
public void showMessage() {
ButtonUtil.enableOnlyCancel();
AllZone.Display.showMessage("Pay Mana Cost: " + manaCost.toString());
if(manaCost.isPaid() && !new ManaCost(originalManaCost).isPaid())
if(manaCost.isPaid() /*&& !new ManaCost(originalManaCost).isPaid()*/)
done();
}
}

View File

@@ -38,6 +38,7 @@ public abstract class SpellAbility {
private boolean xCost = false;
private boolean kickerAbility = false;
private boolean kothThirdAbility = false;
private boolean cycling = false;
private Input beforePayMana;
private Input afterResolve;
@@ -197,6 +198,14 @@ public abstract class SpellAbility {
return xCost;
}
public void setIsCycling(boolean b) {
cycling = b;
}
public boolean isCycling(){
return cycling;
}
public void setSourceCard(Card c) {
sourceCard = c;
}