- Convert Cavern Harpy to Trigger and AF

- Expanded ChangeZone Hidden to allow Battlefield origins (for cases that occur on resolution)
This commit is contained in:
jendave
2011-08-06 15:34:06 +00:00
parent 48c4ae2cd0
commit 0465398146
3 changed files with 50 additions and 120 deletions

View File

@@ -1,9 +1,13 @@
Name:Cavern Harpy Name:Cavern Harpy
ManaCost:U B ManaCost:U B
Types:Creature Beast Types:Creature Harpy Beast
Text:When CARDNAME enters the battlefield, return a blue or black creature you control to its owner's hand.\r\n\r\nPay 1 life: Return CARDNAME to its owner's hand. Text:no text
PT:2/1 PT:2/1
K:Flying K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a blue or black creature you control to its owner's hand.
A:AB$ChangeZone | Cost$ PayLife<1> | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand.
SVar:TrigChange:AB$ChangeZone | Origin$ Battlefield | Destination$ Hand | Cost$ 0 | Hidden$ True | ChangeType$ Creature.Black+YouCtrl,Creature.Blue+YouCtrl
SVar:RemAIDeck:True
SVar:Rarity:Common SVar:Rarity:Common
SVar:Picture:http://www.wizards.com/global/images/magic/general/cavern_harpy.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/cavern_harpy.jpg
SetInfo:PLS|Common|http://magiccards.info/scans/en/ps/97.jpg SetInfo:PLS|Common|http://magiccards.info/scans/en/ps/97.jpg

View File

@@ -80,8 +80,15 @@ public class AbilityFactory_ChangeZone {
return dbChangeZone; return dbChangeZone;
} }
public static boolean isHidden(String origin, boolean hiddenOverride){
return (hiddenOverride || origin.equals("Library") || origin.equals("Hand") || origin.equals("Sideboard"));
}
public static boolean isKnown(String origin){
return (origin.equals("Graveyard") || origin.equals("Exile") || origin.equals("Battlefield"));
}
private static void setMiscellaneous(AbilityFactory af, SpellAbility sa){ private static void setMiscellaneous(AbilityFactory af, SpellAbility sa){
// todo: if moving to or from Battlefield allow use in Main1?
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
String origin = params.get("Origin"); String origin = params.get("Origin");
@@ -100,12 +107,12 @@ public class AbilityFactory_ChangeZone {
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
String origin = params.get("Origin"); String origin = params.get("Origin");
if (origin.equals("Library") || origin.equals("Hand") || origin.equals("Sideboard")){ if (isHidden(origin, params.containsKey("Hidden")))
return changeHiddenOriginCanPlayAI(af, sa); return changeHiddenOriginCanPlayAI(af, sa);
}
else if (origin.equals("Graveyard") || origin.equals("Exile") || origin.equals("Battlefield")){ else if (isKnown(origin))
return changeKnownOriginCanPlayAI(af, sa); return changeKnownOriginCanPlayAI(af, sa);
}
return false; return false;
} }
@@ -113,24 +120,24 @@ public class AbilityFactory_ChangeZone {
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
String origin = params.get("Origin"); String origin = params.get("Origin");
if (origin.equals("Library") || origin.equals("Hand") || origin.equals("Sideboard")){ if (isHidden(origin, params.containsKey("Hidden")))
return changeHiddenOriginPlayDrawbackAI(af, sa); return changeHiddenOriginPlayDrawbackAI(af, sa);
}
else if (origin.equals("Graveyard") || origin.equals("Exile") || origin.equals("Battlefield")){ else if (isKnown(origin))
return changeKnownOriginPlayDrawbackAI(af, sa); return changeKnownOriginPlayDrawbackAI(af, sa);
}
return false; return false;
} }
private static String changeZoneDescription(AbilityFactory af, SpellAbility sa){ private static String changeZoneDescription(AbilityFactory af, SpellAbility sa){
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
String origin = params.get("Origin"); String origin = params.get("Origin");
if (origin.equals("Library") || origin.equals("Hand") || origin.equals("Sideboard")){
if (isHidden(origin, params.containsKey("Hidden")))
return changeHiddenOriginStackDescription(af, sa); return changeHiddenOriginStackDescription(af, sa);
}
else if (origin.equals("Graveyard") || origin.equals("Exile") || origin.equals("Battlefield")){ else if (isKnown(origin))
return changeKnownOriginStackDescription(af, sa); return changeKnownOriginStackDescription(af, sa);
}
return ""; return "";
} }
@@ -138,17 +145,19 @@ public class AbilityFactory_ChangeZone {
private static void changeZoneResolve(AbilityFactory af, SpellAbility sa){ private static void changeZoneResolve(AbilityFactory af, SpellAbility sa){
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();
String origin = params.get("Origin"); String origin = params.get("Origin");
if (origin.equals("Library") || origin.equals("Hand") || origin.equals("Sideboard")){
if (isHidden(origin, params.containsKey("Hidden")))
changeHiddenOriginResolve(af, sa); changeHiddenOriginResolve(af, sa);
}
else if (origin.equals("Graveyard") || origin.equals("Exile") || origin.equals("Battlefield")){ else if (isKnown(origin))
changeKnownOriginResolve(af, sa); changeKnownOriginResolve(af, sa);
} }
}
// ************************************************************************************* // *************************************************************************************
// ************ Hidden Origin (Library/Hand/Sideboard) ********************************* // ************ Hidden Origin (Library/Hand/Sideboard/Non-targetd other) ***************
// ******* Hidden origin cards are chosen on the resolution of the spell *************** // ******* Hidden origin cards are chosen on the resolution of the spell ***************
// ******* It is possible for these to have Destination of Battlefield *****************
// ****** Example: Cavern Harpy where you don't choose the card until resolution *******
// ************************************************************************************* // *************************************************************************************
private static boolean changeHiddenOriginCanPlayAI(AbilityFactory af, SpellAbility sa){ private static boolean changeHiddenOriginCanPlayAI(AbilityFactory af, SpellAbility sa){
@@ -253,9 +262,10 @@ public class AbilityFactory_ChangeZone {
String destination = params.get("Destination"); String destination = params.get("Destination");
String type = params.containsKey("ChangeType") ? params.get("ChangeType") : ""; String type = params.containsKey("ChangeType") ? params.get("ChangeType") : "";
int num = params.containsKey("ChangeNum") ? Integer.parseInt(params.get("ChangeNum")) : 1;
if (origin.equals("Library")){ if (origin.equals("Library")){
sb.append("Search your library for ").append(params.get("ChangeNum")).append(" ").append(type).append(" and "); sb.append("Search your library for ").append(num).append(" ").append(type).append(" and ");
if (params.get("ChangeNum").equals("1")) if (params.get("ChangeNum").equals("1"))
sb.append("put that card "); sb.append("put that card ");
@@ -279,9 +289,7 @@ public class AbilityFactory_ChangeZone {
sb.append("Then shuffle your library."); sb.append("Then shuffle your library.");
} }
else if (origin.equals("Hand")){ else if (origin.equals("Hand")){
sb.append("Put ").append(num).append(" ").append(type).append(" card(s) from your hand ");
sb.append("Put ").append(params.get("ChangeNum")).append(" ").append(type).append(" card(s) from your hand ");
if (destination.equals("Battlefield")) if (destination.equals("Battlefield"))
sb.append("onto the battlefield."); sb.append("onto the battlefield.");
@@ -296,6 +304,12 @@ public class AbilityFactory_ChangeZone {
sb.append(" of your library."); sb.append(" of your library.");
} }
} }
else if (origin.equals("Battlefield")){
// todo: Expand on this Description as more cards use it
// for the non-targeted SAs when you choose what is returned on resolution
sb.append("Return ").append(num).append(" ").append(type).append(" card(s) ");
sb.append(" to your ").append(destination);
}
Ability_Sub abSub = sa.getSubAbility(); Ability_Sub abSub = sa.getSubAbility();
if (abSub != null) { if (abSub != null) {
@@ -338,7 +352,7 @@ public class AbilityFactory_ChangeZone {
String destination = params.get("Destination"); String destination = params.get("Destination");
CardList fetchList = AllZoneUtil.getCardsInZone(origin, player); CardList fetchList = AllZoneUtil.getCardsInZone(origin, player);
if (destination.equals("Library")) if (origin.equals("Library")) // Look at whole library before moving onto choosing a card
GuiUtils.getChoice(af.getHostCard().getName() + " - Looking at " + origin, fetchList.toArray()); GuiUtils.getChoice(af.getHostCard().getName() + " - Looking at " + origin, fetchList.toArray());
fetchList = filterListByType(fetchList, params, "ChangeType", sa); fetchList = filterListByType(fetchList, params, "ChangeType", sa);
@@ -367,9 +381,9 @@ public class AbilityFactory_ChangeZone {
AllZone.GameAction.moveToLibrary(c, libraryPos); AllZone.GameAction.moveToLibrary(c, libraryPos);
} }
else { else {
AllZone.GameAction.moveTo(destZone, c);
if (destination.equals("Battlefield") && params.containsKey("Tapped")) if (destination.equals("Battlefield") && params.containsKey("Tapped"))
c.tap(); c.tap();
AllZone.GameAction.moveTo(destZone, c);
} }
} }
} }
@@ -459,11 +473,12 @@ public class AbilityFactory_ChangeZone {
int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params.get("LibraryPosition")) : 0; int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params.get("LibraryPosition")) : 0;
AllZone.GameAction.moveToLibrary(c, libraryPos); AllZone.GameAction.moveToLibrary(c, libraryPos);
} }
else else{
AllZone.GameAction.moveTo(destZone, c);
if (destination.equals("Battlefield") && params.containsKey("Tapped")) if (destination.equals("Battlefield") && params.containsKey("Tapped"))
c.tap(); c.tap();
AllZone.GameAction.moveTo(destZone, c);
}
} }
if (!destination.equals("Battlefield") && !type.equals("Card")){ if (!destination.equals("Battlefield") && !type.equals("Card")){
@@ -694,7 +709,6 @@ public class AbilityFactory_ChangeZone {
return true; return true;
} }
private static String changeKnownOriginStackDescription(AbilityFactory af, SpellAbility sa){ private static String changeKnownOriginStackDescription(AbilityFactory af, SpellAbility sa){
HashMap<String,String> params = af.getMapParams(); HashMap<String,String> params = af.getMapParams();

View File

@@ -7205,94 +7205,6 @@ public class CardFactory_Creatures {
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Cavern Harpy")) {
final SpellAbility a1 = new Ability(card, "0") {
@Override
public void resolve() {
card.getController().loseLife(1,card);
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getOwner());
if(card.isToken()) AllZone.getZone(card).remove(card);
else AllZone.GameAction.moveTo(hand, card);
}
@Override
public boolean canPlayAI() {
return false;
}
};
final SpellAbility ability = new Ability(card, "0") {
@Override
public void resolve() {
Card c = getTargetCard();
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, c.getOwner());
if(AllZone.GameAction.isCardInPlay(c)) {
AllZone.getZone(c).remove(c);
if(!c.isToken()) {
Card newCard = AllZone.CardFactory.getCard(c.getName(), c.getOwner());
//TODO: Stop making new cards! Need a common card copier to fix multiple isues including images:
newCard.setCurSetCode(c.getCurSetCode());
newCard.setImageFilename(c.getImageFilename());
hand.add(newCard);
}
}
}
};
Command intoPlay = new Command() {
private static final long serialVersionUID = -7855081477395863590L;
public void execute() {
PlayerZone play = AllZone.getZone(Constant.Zone.Battlefield, card.getController());
CardList creatures = new CardList(play.getCards());
creatures = creatures.getType("Creature");
CardList blackBlue = new CardList();
for(int i = 0; i < creatures.size(); i++) {
if(creatures.get(i).isBlack()) {
blackBlue.add(creatures.get(i));
} else if(creatures.get(i).isBlue()) {
blackBlue.add(creatures.get(i));
}
}
//Object o = GuiUtils.getChoiceOptional("Select a creature card to bounce", blackBlue.toArray());
AllZone.InputControl.setInput(CardFactoryUtil.input_targetSpecific(ability, blackBlue,
"Select blue or black creature you control.", false, false));
ButtonUtil.disableAll();
}//execute()
};//Command
card.addComesIntoPlayCommand(intoPlay);
card.clearSpellAbility();
card.addSpellAbility(new Spell_Permanent(card) {
private static final long serialVersionUID = -6750896183003809261L;
@Override
public boolean canPlayAI() {
return false;
}
});
card.addSpellAbility(a1);
StringBuilder sb = new StringBuilder();
sb.append(card.getController()).append(" pays 1 life and returns Cavern Harpy back to owner's hand.");
a1.setStackDescription(sb.toString());
}//*************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Doomsday Specter")) { else if(cardName.equals("Doomsday Specter")) {
final SpellAbility ability = new Ability(card, "0") { final SpellAbility ability = new Ability(card, "0") {