diff --git a/.gitattributes b/.gitattributes index d382e6a4ca2..00600639468 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2192,6 +2192,7 @@ res/cardsfolder/goblin_bombardment.txt -text svneol=native#text/plain res/cardsfolder/goblin_brigand.txt -text svneol=native#text/plain res/cardsfolder/goblin_bully.txt -text svneol=native#text/plain res/cardsfolder/goblin_burrows.txt -text svneol=native#text/plain +res/cardsfolder/goblin_bushwhacker.txt -text svneol=native#text/plain res/cardsfolder/goblin_cavaliers.txt -text svneol=native#text/plain res/cardsfolder/goblin_charbelcher.txt -text svneol=native#text/plain res/cardsfolder/goblin_chariot.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/goblin_bushwhacker.txt b/res/cardsfolder/goblin_bushwhacker.txt new file mode 100644 index 00000000000..848610b9af6 --- /dev/null +++ b/res/cardsfolder/goblin_bushwhacker.txt @@ -0,0 +1,11 @@ +Name:Goblin Bushwhacker +ManaCost:R +Types:Creature Goblin Warrior +Text:no text +PT:1/1 +K:Kicker:R +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+kicked | Execute$ TrigPumpAll | TriggerDescription$ When Goblin Bushwhacker enters the battlefield, if it was kicked, creatures you control get +1/+0 and gain haste until end of turn. +SVar:TrigPumpAll:AB$PumpAll | Cost$ 0 | ValidCards$ Creature.YouCtrl | NumAtt$ 1 | KW$ Haste +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_bushwhacker.jpg +End \ No newline at end of file diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 016a7c16ad7..fafb5b74513 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -7925,6 +7925,51 @@ public class CardFactory implements NewConstants { // Cards with Cycling abilities // -1 means keyword "Cycling" not found + // todo: certain cards have two different kicker types, kicker will need to be written differently to handle this + // todo: kicker costs can only be mana right now i think? + int kicker = hasKeyword(card, "Kicker"); + if (kicker != -1){ + final SpellAbility kickedSpell = new Spell(card) { + private static final long serialVersionUID = -1598664196463358630L; + + @Override + public void resolve() { + card.setKicked(true); + AllZone.GameAction.moveToPlay(card); + } + + @Override + public boolean canPlay() { + return super.canPlay() && Phase.canCastSorcery(card.getController()); + } + + }; + String parse = card.getKeyword().get(kicker).toString(); + card.removeIntrinsicKeyword(parse); + + String k[] = parse.split(":"); + final String kickerCost = k[1]; + + ManaCost mc = new ManaCost(card.getManaCost()); + mc.combineManaCost(kickerCost); + + kickedSpell.setKickerAbility(true); + kickedSpell.setManaCost(mc.toString()); + kickedSpell.setAdditionalManaCost(kickerCost); + + StringBuilder desc = new StringBuilder(); + desc.append("Kicker ").append(kickerCost).append(" (You may pay an additional "); + desc.append(kickerCost).append(" as you cast this spell.)"); + + kickedSpell.setDescription(desc.toString()); + + StringBuilder sb = new StringBuilder(); + sb.append(card.getName()).append(" (Kicked)"); + kickedSpell.setStackDescription(sb.toString()); + + card.addSpellAbility(kickedSpell); + } + if(hasKeyword(card, "Cycling") != -1) { int n = hasKeyword(card, "Cycling"); if(n != -1) { diff --git a/src/forge/ManaCost.java b/src/forge/ManaCost.java index fdf8b64d639..70353bf0a77 100644 --- a/src/forge/ManaCost.java +++ b/src/forge/ManaCost.java @@ -162,6 +162,35 @@ public class ManaCost { return true; } + public void combineManaCost(String extra){ + ArrayList extraParts = split(extra); + + Mana_PartColorless part = null; + for(int i = 0; i < manaPart.size(); i++){ + Object o = manaPart.get(i); + if (o instanceof Mana_PartColorless) + part = (Mana_PartColorless)o; + } + if (part != null){ + manaPart.remove(part); + } + + while(extraParts.size() > 0){ + Object o = extraParts.get(0); + if (o instanceof Mana_PartColorless){ + if (part == null) + part = (Mana_PartColorless)o; + else{ + part.addToManaNeeded(((Mana_PartColorless)o).getManaNeeded()); + } + } + else{ + manaPart.add(o); + } + extraParts.remove(o); + } + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/src/forge/Mana_PartColorless.java b/src/forge/Mana_PartColorless.java index 2c2bead92af..19ca9d8db09 100644 --- a/src/forge/Mana_PartColorless.java +++ b/src/forge/Mana_PartColorless.java @@ -5,6 +5,7 @@ import forge.error.ErrorViewer; public class Mana_PartColorless extends Mana_Part { private int manaNeeded; public void addToManaNeeded(int additional) { manaNeeded += additional; } + public int getManaNeeded() { return manaNeeded; } //String manaCostToPay is like "1", "4", but NO COLOR public Mana_PartColorless(String manaCostToPay) {