mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- 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:
@@ -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
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
c.tap();
|
||||||
|
|
||||||
if (destination.equals("Battlefield") && params.containsKey("Tapped"))
|
AllZone.GameAction.moveTo(destZone, c);
|
||||||
c.tap();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
|||||||
@@ -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") {
|
||||||
|
|||||||
Reference in New Issue
Block a user