add "TapsForMana" trigger. converted Manabarbs to trigger. Add Elvish Guidance.

This commit is contained in:
jendave
2011-08-06 20:53:21 +00:00
parent cbe749252e
commit e75b56971b
7 changed files with 95 additions and 44 deletions

2
.gitattributes vendored
View File

@@ -1915,6 +1915,7 @@ res/cardsfolder/elvish_champion.txt -text svneol=native#text/plain
res/cardsfolder/elvish_eulogist.txt -text svneol=native#text/plain
res/cardsfolder/elvish_farmer.txt -text svneol=native#text/plain
res/cardsfolder/elvish_fury.txt -text svneol=native#text/plain
res/cardsfolder/elvish_guidance.txt -text svneol=native#text/plain
res/cardsfolder/elvish_handservant.txt -text svneol=native#text/plain
res/cardsfolder/elvish_harbinger.txt -text svneol=native#text/plain
res/cardsfolder/elvish_herder.txt -text svneol=native#text/plain
@@ -8258,6 +8259,7 @@ src/forge/card/trigger/Trigger_Sacrificed.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Shuffled.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_SpellAbilityCast.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Taps.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_TapsForMana.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_TurnFaceUp.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Unequip.java -text svneol=native#text/plain
src/forge/card/trigger/Trigger_Untaps.java -text svneol=native#text/plain

View File

@@ -0,0 +1,12 @@
Name:Elvish Guidance
ManaCost:2 G
Types:Enchantment Aura
Text:no text
K:Enchant Land
T:Mode$ TapsForMana | ValidCard$ Card.AttachedBy | Execute$ TrigMana | TriggerDescription$ Whenever enchanted land is tapped for mana, its controller adds G to his or her mana pool for each Elf on the battlefield (in addition to the mana the land produces).
SVar:TrigMana:AB$Mana | Cost$ 0 | Produced$ G | Amount$ X
SVar:X:Count$Valid Elf
SVar:RemAIDeck:True
SVar:Rarity:Common
SVar:Picture:http://www.wizards.com/global/images/magic/general/elvish_guidance.jpg
End

View File

@@ -1,7 +1,9 @@
Name:Manabarbs
ManaCost:3 R
Types:Enchantment
Text:Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.
Text:no text
T:Mode$ TapsForMana | ValidCard$ Land | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a player taps a land for mana, CARDNAME deals 1 damage to that player.
SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ TriggeredCardController | NumDmg$ 1
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/manabarbs.jpg

View File

@@ -1,12 +1,14 @@
package forge;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil;
import forge.card.mana.ManaCost;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Cost;
import forge.card.spellability.Cost_Payment;
@@ -531,31 +533,18 @@ public class ComputerUtil
AllZone.Stack.add(CardFactoryUtil.getForbiddenOrchardAbility(sourceLand, AllZone.HumanPlayer));
}
//Manabarbs code
if(sourceLand.isLand()) { //&& this.isTapAbility()) {
CardList barbs = AllZoneUtil.getCardsInPlay("Manabarbs");
for(Card barb:barbs) {
final Card manabarb = barb;
SpellAbility ability = new Ability(manabarb, "") {
@Override
public void resolve() {
sourceLand.getController().addDamage(1, manabarb);
}
};
StringBuilder sb = new StringBuilder();
sb.append(manabarb.getName()).append(" - deal 1 damage to ").append(sourceLand.getController());
ability.setStackDescription(sb.toString());
AllZone.Stack.add(ability);
}
}
if(sourceLand.getName().equals("Rainbow Vale")) {
sourceLand.addExtrinsicKeyword("An opponent gains control of CARDNAME at the beginning of the next end step.");
}
//System.out.println("just subtracted " + colors.get(j) + ", cost is now: " + cost.toString());
//Run triggers
HashMap<String,Object> runParams = new HashMap<String,Object>();
runParams.put("Card", sourceLand);
runParams.put("Player", AllZone.ComputerPlayer);
runParams.put("Produced", colors.get(j)); //can't tell what mana to computer just paid?
AllZone.TriggerHandler.runTrigger("TapsForMana", runParams);
}
if(cost.isPaid())
@@ -569,6 +558,7 @@ public class ComputerUtil
}
if(!cost.isPaid())
throw new RuntimeException("ComputerUtil : payManaCost() cost was not paid for " + sa.getSourceCard().getName());
}//payManaCost()

View File

@@ -1,6 +1,7 @@
package forge.card.spellability;
import java.util.ArrayList;
import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
@@ -97,26 +98,6 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
}
}
if (source.isLand()){
CardList manaBarbs = AllZoneUtil.getCardsInPlay("Manabarbs");
for(final Card c : manaBarbs){
this.undoable = false;
SpellAbility ability = new Ability(c, "") {
@Override
public void resolve() {
source.getController().addDamage(1, c);
}
};
StringBuilder sb = new StringBuilder();
sb.append(c.getName()).append(" - deal 1 damage to ").append(source.getController());
ability.setStackDescription(sb.toString());
AllZone.Stack.add(ability);
}
}
if(source.getName().equals("Rainbow Vale")) {
this.undoable = false;
source.addExtrinsicKeyword("An opponent gains control of CARDNAME at the beginning of the next end step.");
@@ -177,7 +158,17 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
}
}
}
//Run triggers
HashMap<String,Object> runParams = new HashMap<String,Object>();
runParams.put("Card", source);
runParams.put("Player", AllZone.HumanPlayer);
runParams.put("Ability_Mana", this);
runParams.put("Produced", produced);
AllZone.TriggerHandler.runTrigger("TapsForMana", runParams);
}//end produceMana(String)
private boolean mirariCanAdd(String c, String produced) {
return produced.contains(c);
@@ -221,5 +212,6 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
//Mana abilities with same Descriptions are "equal"
return o.toString().equals(this.toString());
}
}
}//end class Ability_Mana

View File

@@ -14,6 +14,7 @@ import forge.GameActionUtil;
import forge.Player;
import forge.card.abilityFactory.AbilityFactory;
import forge.card.spellability.Ability;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.Ability_Sub;
import forge.card.spellability.Cost;
import forge.card.spellability.SpellAbility;
@@ -130,6 +131,9 @@ public class TriggerHandler {
{
ret = new Trigger_Taps(mapParams,host);
}
else if(mode.equals("TapsForMana")) {
ret = new Trigger_TapsForMana(mapParams, host);
}
else if(mode.equals("TurnFaceUp"))
{
ret = new Trigger_TurnFaceUp(mapParams,host);
@@ -306,6 +310,11 @@ public class TriggerHandler {
regtrig.setRunParams(runParams);
//All tests passed, execute ability.
if(regtrig instanceof Trigger_TapsForMana) {
Ability_Mana abMana = (Ability_Mana)runParams.get("Ability_Mana");
abMana.setUndoable(false);
}
AbilityFactory AF = new AbilityFactory();
final SpellAbility[] sa = new SpellAbility[1];

View File

@@ -0,0 +1,44 @@
package forge.card.trigger;
import java.util.HashMap;
import forge.Card;
public class Trigger_TapsForMana extends Trigger {
public Trigger_TapsForMana(HashMap<String, String> params, Card host) {
super(params, host);
}
@Override
public boolean performTest(HashMap<String, Object> runParams) {
Card tapper = (Card)runParams.get("Card");
if(mapParams.containsKey("ValidCard")) {
if(!tapper.isValidCard(mapParams.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
return false;
}
}
return true;
}
@Override
public Trigger getCopy() {
Trigger copy = new Trigger_TapsForMana(mapParams,hostCard);
if(overridingAbility != null) {
copy.setOverridingAbility(overridingAbility);
}
copy.setName(name);
copy.setID(ID);
return copy;
}
@Override
public void setTriggeringObjects(Card c) {
c.setTriggeringObject("Card", runParams.get("Card"));
c.setTriggeringObject("Player", runParams.get("Player"));
c.setTriggeringObject("Produced", runParams.get("Produced"));
}
}