mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Added:
Windreaver Thalakos Drifters Thrashing Wumpus Ashen Firebeast Subterranean Spirit Silent specter Mongrel Pack Scourge of Kher Ridges Sliptide Serpent Lighning Crafter Lava Hounds
This commit is contained in:
@@ -1830,6 +1830,26 @@ public class CardFactory_Creatures {
|
|||||||
|
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Lava Hounds")) {
|
||||||
|
final SpellAbility ability = new Ability(card, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(4,card);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Command intoPlay = new Command() {
|
||||||
|
private static final long serialVersionUID = 9072152875006010499L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
ability.setStackDescription(card.getName() + " deals 4 damage to controller.");
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
card.addComesIntoPlayCommand(intoPlay);
|
||||||
|
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Thunder Dragon")) {
|
else if(cardName.equals("Thunder Dragon")) {
|
||||||
final SpellAbility ability = new Ability(card, "0") {
|
final SpellAbility ability = new Ability(card, "0") {
|
||||||
@@ -2467,6 +2487,34 @@ public class CardFactory_Creatures {
|
|||||||
card.addDestroyCommand(destroy);
|
card.addDestroyCommand(destroy);
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Mongrel Pack")) {
|
||||||
|
final SpellAbility ability = new Ability(card, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
makeToken();
|
||||||
|
makeToken();
|
||||||
|
makeToken();
|
||||||
|
makeToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
void makeToken() {
|
||||||
|
CardFactoryUtil.makeToken("Hound", "G 1 1 Hound", card, "G", new String[] {
|
||||||
|
"Creature", "Hound"}, 1, 1, new String[] {""});
|
||||||
|
}//makeToken()
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
Command destroy = new Command() {
|
||||||
|
private static final long serialVersionUID = -7121390569051656127L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
ability.setStackDescription("Mongrel Pack - " + card.getController()
|
||||||
|
+ " puts four 1/1 tokens into play ");
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
card.addDestroyCommand(destroy);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Chittering Rats")) {
|
else if(cardName.equals("Chittering Rats")) {
|
||||||
@@ -4415,6 +4463,7 @@ public class CardFactory_Creatures {
|
|||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Nova Chaser") || cardName.equals("Supreme Exemplar")) {
|
else if(cardName.equals("Nova Chaser") || cardName.equals("Supreme Exemplar")) {
|
||||||
final CommandReturn getCreature = new CommandReturn() {
|
final CommandReturn getCreature = new CommandReturn() {
|
||||||
@@ -4542,6 +4591,133 @@ public class CardFactory_Creatures {
|
|||||||
});
|
});
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Lightning Crafter")) {
|
||||||
|
final CommandReturn getCreature = new CommandReturn() {
|
||||||
|
public Object execute() {
|
||||||
|
//get all creatures
|
||||||
|
CardList list = new CardList();
|
||||||
|
PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController());
|
||||||
|
list.addAll(play.getCards());
|
||||||
|
|
||||||
|
list = list.filter(new CardListFilter() {
|
||||||
|
public boolean addCard(Card c) {
|
||||||
|
return c.getType().contains("Goblin") ||
|
||||||
|
c.getKeyword().contains("Shaman") || c.getKeyword().contains("Changeling");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
};//CommandReturn
|
||||||
|
|
||||||
|
final SpellAbility abilityComes = new Ability(card, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
if(getTargetCard() == null || getTargetCard() == card) AllZone.GameAction.sacrifice(card);
|
||||||
|
|
||||||
|
else if(AllZone.GameAction.isCardInPlay(getTargetCard())) {
|
||||||
|
/*
|
||||||
|
PlayerZone play = AllZone.getZone(getTargetCard());
|
||||||
|
PlayerZone removed = AllZone.getZone(Constant.Zone.Removed_From_Play, getTargetCard().getController());
|
||||||
|
play.remove(getTargetCard());
|
||||||
|
removed.add(getTargetCard());
|
||||||
|
*/
|
||||||
|
AllZone.GameAction.removeFromGame(getTargetCard());
|
||||||
|
}
|
||||||
|
}//resolve()
|
||||||
|
};
|
||||||
|
|
||||||
|
final Input inputComes = new Input() {
|
||||||
|
private static final long serialVersionUID = -6066115143834426784L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMessage() {
|
||||||
|
CardList choice = (CardList) getCreature.execute();
|
||||||
|
|
||||||
|
stopSetNext(CardFactoryUtil.input_targetChampionSac(card, abilityComes, choice,
|
||||||
|
"Select Goblin or Shaman to remove from the game", false, false));
|
||||||
|
ButtonUtil.disableAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
Command commandComes = new Command() {
|
||||||
|
private static final long serialVersionUID = -3498068347359658023L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
CardList creature = (CardList) getCreature.execute();
|
||||||
|
String s = card.getController();
|
||||||
|
if(creature.size() == 0) {
|
||||||
|
AllZone.GameAction.sacrifice(card);
|
||||||
|
return;
|
||||||
|
} else if(s.equals(Constant.Player.Human)) AllZone.InputControl.setInput(inputComes);
|
||||||
|
else //computer
|
||||||
|
{
|
||||||
|
Card target;
|
||||||
|
//must target computer creature
|
||||||
|
CardList computer = new CardList(AllZone.Computer_Play.getCards());
|
||||||
|
computer = computer.getType("Goblin");
|
||||||
|
computer.remove(card);
|
||||||
|
|
||||||
|
computer.shuffle();
|
||||||
|
if(computer.size() != 0) {
|
||||||
|
target = computer.get(0);
|
||||||
|
abilityComes.setTargetCard(target);
|
||||||
|
AllZone.Stack.add(abilityComes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AllZone.GameAction.sacrifice(card);
|
||||||
|
}//else
|
||||||
|
}//execute()
|
||||||
|
};//CommandComes
|
||||||
|
Command commandLeavesPlay = new Command() {
|
||||||
|
private static final long serialVersionUID = 4236503599117025393L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
//System.out.println(abilityComes.getTargetCard().getName());
|
||||||
|
Object o = abilityComes.getTargetCard();
|
||||||
|
|
||||||
|
if(o == null || ((Card) o).isToken() || !AllZone.GameAction.isCardRemovedFromGame((Card) o)) return;
|
||||||
|
|
||||||
|
SpellAbility ability = new Ability(card, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
//copy card to reset card attributes like attack and defense
|
||||||
|
Card c = abilityComes.getTargetCard();
|
||||||
|
if(!c.isToken()) {
|
||||||
|
c = AllZone.CardFactory.copyCard(c);
|
||||||
|
c.setController(c.getOwner());
|
||||||
|
|
||||||
|
PlayerZone play = AllZone.getZone(Constant.Zone.Play, c.getOwner());
|
||||||
|
PlayerZone removed = AllZone.getZone(Constant.Zone.Removed_From_Play, c.getOwner());
|
||||||
|
removed.remove(c);
|
||||||
|
play.add(c);
|
||||||
|
|
||||||
|
}
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
ability.setStackDescription(card.getName() + " - returning creature to play");
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}//execute()
|
||||||
|
};//Command
|
||||||
|
|
||||||
|
card.addComesIntoPlayCommand(commandComes);
|
||||||
|
card.addLeavesPlayCommand(commandLeavesPlay);
|
||||||
|
|
||||||
|
card.clearSpellAbility();
|
||||||
|
card.addSpellAbility(new Spell_Permanent(card) {
|
||||||
|
private static final long serialVersionUID = -62128538115338896L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
Object o = getCreature.execute();
|
||||||
|
if(o == null) return false;
|
||||||
|
|
||||||
|
CardList cl = (CardList) getCreature.execute();
|
||||||
|
return (o != null) && cl.size() > 0 && AllZone.getZone(getSourceCard()).is(Constant.Zone.Hand);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Wren's Run Packmaster")) {
|
else if(cardName.equals("Wren's Run Packmaster")) {
|
||||||
@@ -5673,6 +5849,85 @@ public class CardFactory_Creatures {
|
|||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Arashi the Sky Asunder")) {
|
||||||
|
|
||||||
|
final SpellAbility ability = new Ability_Tap(card, "0") {
|
||||||
|
private static final long serialVersionUID = 7698358771800336470L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
return getCreature().size() != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void chooseTargetAI() {
|
||||||
|
|
||||||
|
CardList list = getCreature();
|
||||||
|
list.shuffle();
|
||||||
|
setTargetCard(list.get(0));
|
||||||
|
|
||||||
|
}//chooseTargetAI()
|
||||||
|
|
||||||
|
CardList getCreature() {
|
||||||
|
|
||||||
|
final int total = CardFactoryUtil.getLandsInPlay(Constant.Player.Computer).size();
|
||||||
|
//toughness of 1
|
||||||
|
CardList list = CardFactoryUtil.AI_getHumanCreature(total, card, true);
|
||||||
|
list = list.filter(new CardListFilter() {
|
||||||
|
public boolean addCard(Card c) {
|
||||||
|
//get AI's spare lands
|
||||||
|
return (c.isCreature() && c.getKeyword().contains("Flying") &&
|
||||||
|
CardFactoryUtil.canDamage(card, c) && total >= c.getKillDamage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
}//getCreature()
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
String manaCost = this.getXManaCost();
|
||||||
|
int damage = 0;
|
||||||
|
if (!manaCost.equals("")) {
|
||||||
|
damage = Integer.parseInt(manaCost);
|
||||||
|
}
|
||||||
|
if(getTargetCard() != null) {
|
||||||
|
if(AllZone.GameAction.isCardInPlay(getTargetCard())
|
||||||
|
&& getTargetCard().getKeyword().contains("Flying")
|
||||||
|
&& CardFactoryUtil.canTarget(card, getTargetCard())) getTargetCard().addDamage(damage,
|
||||||
|
card);
|
||||||
|
}
|
||||||
|
}//resolve()
|
||||||
|
|
||||||
|
};//SpellAbility
|
||||||
|
ability.setBeforePayMana(new Input()
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 4378224586732L;
|
||||||
|
|
||||||
|
public void showMessage()
|
||||||
|
{
|
||||||
|
String s = JOptionPane.showInputDialog("What would you like X to be?");
|
||||||
|
try {
|
||||||
|
Integer.parseInt(s);
|
||||||
|
ability.setXManaCost(s);
|
||||||
|
stopSetNext(new Input_PayManaCost(ability));
|
||||||
|
}
|
||||||
|
catch(NumberFormatException e){
|
||||||
|
AllZone.Display.showMessage("\"" + s + "\" is not a number.");
|
||||||
|
showMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ability.setStackDescription(card.getName() + "deals X damage to target creature with flying.");
|
||||||
|
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
ability.setDescription("X G, T: Arashi the Sky Asunder deals X damage to target creature with flying.");
|
||||||
|
|
||||||
|
ability.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability));
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Mirror Entity"))
|
else if(cardName.equals("Mirror Entity"))
|
||||||
{
|
{
|
||||||
@@ -7220,10 +7475,6 @@ public class CardFactory_Creatures {
|
|||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Killer Whale")) {
|
else if(cardName.equals("Killer Whale")) {
|
||||||
final Ability ability = new Ability(card, "U") {
|
final Ability ability = new Ability(card, "U") {
|
||||||
@Override
|
|
||||||
public boolean canPlayAI() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve() {
|
public void resolve() {
|
||||||
@@ -7371,6 +7622,167 @@ public class CardFactory_Creatures {
|
|||||||
ability.setBeforePayMana(runtime);
|
ability.setBeforePayMana(runtime);
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Subterranean Spirit")) {
|
||||||
|
|
||||||
|
final SpellAbility ability = new Ability_Tap(card, "0") {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 7698358771810336470L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
|
||||||
|
CardList all = new CardList();
|
||||||
|
all.addAll(AllZone.Human_Play.getCards());
|
||||||
|
all.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
all = all.filter(new CardListFilter()
|
||||||
|
{
|
||||||
|
public boolean addCard(Card c)
|
||||||
|
{
|
||||||
|
return c.isCreature() && !c.getKeyword().contains("Flying") &&
|
||||||
|
CardFactoryUtil.canDamage(card, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for(int i = 0; i < all.size(); i++)
|
||||||
|
all.get(i).addDamage(1, card);
|
||||||
|
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
ability.setStackDescription(card + " deals 1 damage to each creature without flying.");
|
||||||
|
ability.setDescription("T: Subterranean Spirit deals 1 damage to each creature without flying.");
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Ashen Firebeast")) {
|
||||||
|
|
||||||
|
final Ability ability = new Ability(card, "1 R") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
|
||||||
|
CardList all = new CardList();
|
||||||
|
all.addAll(AllZone.Human_Play.getCards());
|
||||||
|
all.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
all = all.filter(new CardListFilter()
|
||||||
|
{
|
||||||
|
public boolean addCard(Card c)
|
||||||
|
{
|
||||||
|
return c.isCreature() && !c.getKeyword().contains("Flying") &&
|
||||||
|
CardFactoryUtil.canDamage(card, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for(int i = 0; i < all.size(); i++)
|
||||||
|
all.get(i).addDamage(1, card);
|
||||||
|
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
ability.setStackDescription(card + " deals 1 damage to each creature without flying.");
|
||||||
|
ability.setDescription("1 R: Ashen Firebeast deals 1 damage to each creature without flying.");
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Scourge of Kher Ridges")) {
|
||||||
|
|
||||||
|
final Ability ability = new Ability(card, "1 R") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
|
||||||
|
CardList all = new CardList();
|
||||||
|
all.addAll(AllZone.Human_Play.getCards());
|
||||||
|
all.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
all = all.filter(new CardListFilter()
|
||||||
|
{
|
||||||
|
public boolean addCard(Card c)
|
||||||
|
{
|
||||||
|
return c.isCreature() && !c.getKeyword().contains("Flying") &&
|
||||||
|
CardFactoryUtil.canDamage(card, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for(int i = 0; i < all.size(); i++)
|
||||||
|
all.get(i).addDamage(2, card);
|
||||||
|
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
ability.setStackDescription(card + " deals 2 damage to each creature without flying.");
|
||||||
|
ability.setDescription("1 R: Scourge of Kher Ridges deals 2 damage to each creature without flying.");
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
|
||||||
|
final Ability a2 = new Ability(card, "5 R") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
|
||||||
|
CardList all = new CardList();
|
||||||
|
all.addAll(AllZone.Human_Play.getCards());
|
||||||
|
all.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
all = all.filter(new CardListFilter()
|
||||||
|
{
|
||||||
|
public boolean addCard(Card c)
|
||||||
|
{
|
||||||
|
return c.isCreature() && c.getKeyword().contains("Flying") &&
|
||||||
|
!c.equals(card) && CardFactoryUtil.canDamage(card, c);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for(int i = 0; i < all.size(); i++)
|
||||||
|
all.get(i).addDamage(6, card);
|
||||||
|
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
a2.setStackDescription(card + " deals 6 damage to each other creature with flying.");
|
||||||
|
a2.setDescription("1 R: Scourge of Kher Ridges deals 6 damage to each creature with flying.");
|
||||||
|
card.addSpellAbility(a2);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Thalakos Drifters")) {
|
||||||
|
|
||||||
|
final Ability ability = new Ability(card, "0") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
final Command untilEOT = new Command() {
|
||||||
|
private static final long serialVersionUID = -8494294720368174013L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
card.removeIntrinsicKeyword("Shadow");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if(AllZone.GameAction.isCardInPlay(card)) {
|
||||||
|
card.addIntrinsicKeyword("Shadow");
|
||||||
|
AllZone.EndOfTurn.addUntil(untilEOT);
|
||||||
|
}
|
||||||
|
}//resolve()
|
||||||
|
|
||||||
|
};//SpellAbility
|
||||||
|
|
||||||
|
|
||||||
|
Input runtime = new Input() {
|
||||||
|
private static final long serialVersionUID = -4302220760957471033L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMessage() {
|
||||||
|
stopSetNext(CardFactoryUtil.input_discard(ability, 1));
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ability.setStackDescription(card + " gains shadow until EOT.");
|
||||||
|
ability.setDescription("Discard a card: Thalakos Drifters gain shadow until EOT.");
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
ability.setBeforePayMana(runtime);
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Ephemeron")) {
|
else if(cardName.equals("Ephemeron")) {
|
||||||
|
|
||||||
@@ -15781,6 +16193,33 @@ public class CardFactory_Creatures {
|
|||||||
ability.setBeforePayMana(runtime);
|
ability.setBeforePayMana(runtime);
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Sliptide Serpent")) {
|
||||||
|
final SpellAbility a1 = new Ability(card, "3 U") {
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getOwner());
|
||||||
|
/*
|
||||||
|
AllZone.getZone(card).remove(card);
|
||||||
|
hand.add(card);
|
||||||
|
*/
|
||||||
|
if(card.isToken()) AllZone.getZone(card).remove(card);
|
||||||
|
else AllZone.GameAction.moveTo(hand, card);
|
||||||
|
|
||||||
|
}
|
||||||
|
};//a1
|
||||||
|
|
||||||
|
//card.clearSpellAbility();
|
||||||
|
card.addSpellAbility(a1);
|
||||||
|
a1.setStackDescription(card.getController() + " returns Sliptide Serpent back to its owner's hand.");
|
||||||
|
a1.setDescription("3 U: Return Sliptide Serpent to its owner's hand.");
|
||||||
|
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Fleeting Image")) {
|
else if(cardName.equals("Fleeting Image")) {
|
||||||
@@ -15810,6 +16249,69 @@ public class CardFactory_Creatures {
|
|||||||
|
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
//*************** START *********** START **************************
|
||||||
|
else if(cardName.equals("Windreaver")) {
|
||||||
|
final SpellAbility a1 = new Ability(card, "U") {
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getOwner());
|
||||||
|
/*
|
||||||
|
AllZone.getZone(card).remove(card);
|
||||||
|
hand.add(card);
|
||||||
|
*/
|
||||||
|
if(card.isToken()) AllZone.getZone(card).remove(card);
|
||||||
|
else AllZone.GameAction.moveTo(hand, card);
|
||||||
|
|
||||||
|
}
|
||||||
|
};//a1
|
||||||
|
|
||||||
|
//card.clearSpellAbility();
|
||||||
|
card.addSpellAbility(a1);
|
||||||
|
a1.setStackDescription(card.getController() + " returns Windreaver back to its owner's hand.");
|
||||||
|
a1.setDescription("U: return Windreaver to its owner's hand.");
|
||||||
|
|
||||||
|
final SpellAbility a2 = new Ability(card, "U") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
|
||||||
|
|
||||||
|
final Command EOT = new Command() {
|
||||||
|
private static final long serialVersionUID = 6437163765161964445L;
|
||||||
|
|
||||||
|
public void execute() {
|
||||||
|
|
||||||
|
int power = card.getNetAttack();
|
||||||
|
int tough = card.getNetDefense();
|
||||||
|
card.addTempAttackBoost(tough - power);
|
||||||
|
card.addTempDefenseBoost(power - tough);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if(AllZone.GameAction.isCardInPlay(card)) {
|
||||||
|
int power = card.getNetAttack();
|
||||||
|
int tough = card.getNetDefense();
|
||||||
|
card.addTempAttackBoost(tough - power);
|
||||||
|
card.addTempDefenseBoost(power - tough);
|
||||||
|
AllZone.EndOfTurn.addUntil(EOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};//a2
|
||||||
|
|
||||||
|
card.addSpellAbility(a2);
|
||||||
|
a2.setStackDescription(card.getController() + " switches Windreaver's power and toughness until EOT.");
|
||||||
|
a2.setDescription("U: Switch Windreaver's power and toughness until end of turn. ");
|
||||||
|
|
||||||
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Academy Rector")) {
|
else if(cardName.equals("Academy Rector")) {
|
||||||
@@ -19491,6 +19993,66 @@ public class CardFactory_Creatures {
|
|||||||
}
|
}
|
||||||
//*************** END ************ END **************************
|
//*************** END ************ END **************************
|
||||||
|
|
||||||
|
else if(cardName.equals("Thrashing Wumpus")) {
|
||||||
|
final SpellAbility ability = new Ability(card, "B") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
CardList human = new CardList(AllZone.Human_Play.getCards());
|
||||||
|
CardList computer = new CardList(AllZone.Computer_Play.getCards());
|
||||||
|
|
||||||
|
human = human.getType("Creature");
|
||||||
|
computer = computer.getType("Creature");
|
||||||
|
|
||||||
|
return AllZone.Computer_Life.getLife() > 2
|
||||||
|
&& !(human.size() == 0
|
||||||
|
&& 0 < computer.size())
|
||||||
|
&& card.getKillDamage() > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
//get all creatures
|
||||||
|
CardList list = new CardList();
|
||||||
|
list.addAll(AllZone.Human_Play.getCards());
|
||||||
|
list.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
//AllZone.Human_Life.subtractLife(1,card);
|
||||||
|
//AllZone.Computer_Life.subtractLife(1,card);
|
||||||
|
AllZone.GameAction.addDamage(Constant.Player.Human, card, 1);
|
||||||
|
AllZone.GameAction.addDamage(Constant.Player.Computer, card, 1);
|
||||||
|
}//resolve()
|
||||||
|
};//SpellAbility
|
||||||
|
ability.setDescription("B: Thrashing Wumpus deals 1 damage to each creature and each player.");
|
||||||
|
ability.setStackDescription(card + " deals 1 damage to each creature and each player.");
|
||||||
|
|
||||||
|
card.clearSpellAbility();
|
||||||
|
card.addSpellAbility(new Spell_Permanent(card) {
|
||||||
|
private static final long serialVersionUID = -9008807568695047980L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canPlayAI() {
|
||||||
|
//get all creatures
|
||||||
|
CardList list = new CardList();
|
||||||
|
list.addAll(AllZone.Human_Play.getCards());
|
||||||
|
list.addAll(AllZone.Computer_Play.getCards());
|
||||||
|
list = list.getType("Creature");
|
||||||
|
|
||||||
|
return 0 < list.size();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
card.addSpellAbility(ability);
|
||||||
|
|
||||||
|
card.setSVar("PlayMain1", "TRUE");
|
||||||
|
}
|
||||||
|
//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Ifh-Biff Efreet")) {
|
else if(cardName.equals("Ifh-Biff Efreet")) {
|
||||||
@@ -20170,7 +20732,7 @@ public class CardFactory_Creatures {
|
|||||||
};
|
};
|
||||||
ability.setStackDescription(cardName + " - tap all other creatures.");
|
ability.setStackDescription(cardName + " - tap all other creatures.");
|
||||||
card.addComesIntoPlayCommand(intoPlay);
|
card.addComesIntoPlayCommand(intoPlay);
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END *************************
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Nameless Race")) {
|
else if(cardName.equals("Nameless Race")) {
|
||||||
|
|||||||
@@ -5147,6 +5147,7 @@ public class GameActionUtil {
|
|||||||
|
|
||||||
if(c.getName().equals("Marsh Viper")) playerCombatDamage_PoisonCounter(c, 2);
|
if(c.getName().equals("Marsh Viper")) playerCombatDamage_PoisonCounter(c, 2);
|
||||||
else if(c.getName().equals("Abyssal Specter")) playerCombatDamage_Abyssal_Specter(c);
|
else if(c.getName().equals("Abyssal Specter")) playerCombatDamage_Abyssal_Specter(c);
|
||||||
|
else if(c.getName().equals("Silent Specter")) playerCombatDamage_Silent_Specter(c);
|
||||||
else if(c.getName().equals("Nicol Bolas")) playerCombatDamage_Nicol_Bolas(c);
|
else if(c.getName().equals("Nicol Bolas")) playerCombatDamage_Nicol_Bolas(c);
|
||||||
else if(c.getName().equals("Goblin Lackey")) playerCombatDamage_Goblin_Lackey(c);
|
else if(c.getName().equals("Goblin Lackey")) playerCombatDamage_Goblin_Lackey(c);
|
||||||
else if(c.getName().equals("Thieving Magpie")|| c.getName().equals("Lu Xun, Scholar General")) playerCombatDamage_Shadowmage_Infiltrator(c);
|
else if(c.getName().equals("Thieving Magpie")|| c.getName().equals("Lu Xun, Scholar General")) playerCombatDamage_Shadowmage_Infiltrator(c);
|
||||||
@@ -5957,6 +5958,54 @@ public class GameActionUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void playerCombatDamage_Silent_Specter(Card c) {
|
||||||
|
final String[] player = new String[1];
|
||||||
|
player[0] = c.getController();
|
||||||
|
final String[] opponent = new String[1];
|
||||||
|
|
||||||
|
if(c.getNetAttack() > 0) {
|
||||||
|
Ability ability = new Ability(c, "0") {
|
||||||
|
@Override
|
||||||
|
public void resolve() {
|
||||||
|
PlayerZone Ohand = AllZone.getZone(Constant.Zone.Hand, AllZone.GameAction.getOpponent(player[0]));
|
||||||
|
Card h[] = Ohand.getCards();
|
||||||
|
Card[] handChoices = Ohand.getCards();
|
||||||
|
int Handsize = 1;
|
||||||
|
if(h.length <= 1) Handsize = h.length;
|
||||||
|
String opponent = AllZone.GameAction.getOpponent(player[0]);
|
||||||
|
Card choice = null;
|
||||||
|
|
||||||
|
int j=0;
|
||||||
|
|
||||||
|
while (j<2) {
|
||||||
|
|
||||||
|
for(int i = 0; i < Handsize; i++) {
|
||||||
|
AllZone.Display.showMessage("Select two cards to discard ");
|
||||||
|
ButtonUtil.enableOnlyCancel();
|
||||||
|
handChoices = Ohand.getCards();
|
||||||
|
//human chooses
|
||||||
|
if(opponent.equals(Constant.Player.Human)) {
|
||||||
|
choice = AllZone.Display.getChoice("Choose", handChoices);
|
||||||
|
} else//computer chooses
|
||||||
|
{
|
||||||
|
choice = CardUtil.getRandom(handChoices);
|
||||||
|
}
|
||||||
|
|
||||||
|
AllZone.GameAction.discard(choice, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
j++;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};// ability
|
||||||
|
opponent[0] = AllZone.GameAction.getOpponent(player[0]);
|
||||||
|
ability.setStackDescription("Silent Specter - " + opponent[0] + " discards two cards");
|
||||||
|
AllZone.Stack.add(ability);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void playerCombatDamage_Abyssal_Specter(Card c) {
|
private static void playerCombatDamage_Abyssal_Specter(Card c) {
|
||||||
final String[] player = new String[1];
|
final String[] player = new String[1];
|
||||||
player[0] = c.getController();
|
player[0] = c.getController();
|
||||||
|
|||||||
Reference in New Issue
Block a user