From 197136917de4dc983829e7ae7c60407a1194cb5c Mon Sep 17 00:00:00 2001 From: jendave Date: Sun, 7 Aug 2011 00:52:49 +0000 Subject: [PATCH] - Remember can now handle Targeted Players. - Convert Laquatus's Champion to Script --- res/cardsfolder/laquatuss_champion.txt | 6 +- src/forge/Card.java | 32 ++++++---- .../card/abilityFactory/AbilityFactory.java | 27 +++++--- .../AbilityFactory_ChangeZone.java | 17 ++++-- .../card/cardFactory/CardFactoryUtil.java | 56 +---------------- .../cardFactory/CardFactory_Creatures.java | 61 ------------------- src/forge/card/trigger/TriggerHandler.java | 6 +- 7 files changed, 56 insertions(+), 149 deletions(-) diff --git a/res/cardsfolder/laquatuss_champion.txt b/res/cardsfolder/laquatuss_champion.txt index 8043cf3edcf..a6d6ba1085c 100644 --- a/res/cardsfolder/laquatuss_champion.txt +++ b/res/cardsfolder/laquatuss_champion.txt @@ -1,8 +1,12 @@ Name:Laquatus's Champion ManaCost:4 B B Types:Creature Nightmare Horror -Text:When Laquatus's Champion enters the battlefield, target player loses 6 life.\r\nWhen Laquatus's Champion leaves the battlefield, that player gains 6 life. +Text:no text PT:6/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, target player loses 6 life. +SVar:TrigLoseLife:DB$LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 6 | RememberTargets$ True | ForgetOtherTargets$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME leaves the battlefield, that player gains 6 life. +SVar:TrigGainLife:DB$GainLife | Defined$ Remembered | LifeAmount$ 6 A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg diff --git a/src/forge/Card.java b/src/forge/Card.java index 21975d50a03..894b94f9b4c 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -52,7 +52,7 @@ public class Card extends MyObservable { private ArrayList manaAbility = new ArrayList(); private ArrayList cardColor = new ArrayList(); - private ArrayList rememberedCards = new ArrayList(); + private ArrayList rememberedObjects = new ArrayList(); private ArrayList imprintedCards = new ArrayList(); private HashMap receivedDamageFromThisTurn = new HashMap(); @@ -190,19 +190,19 @@ public class Card extends MyObservable { private int abilityUsed; //How many times has this ability been used? - public void addRemembered(Card c) + public void addRemembered(Object o) { - rememberedCards.add(c); + rememberedObjects.add(o); } - public ArrayList getRemembered() + public ArrayList getRemembered() { - return rememberedCards; + return rememberedObjects; } public void clearRemembered() { - rememberedCards.clear(); + rememberedObjects.clear(); } public void addImprinted(Card c) { @@ -1212,14 +1212,20 @@ public class Card extends MyObservable { } //Remembered cards - if(rememberedCards.size() > 0) + if(rememberedObjects.size() > 0){ sb.append("\r\nRemembered: \r\n"); - for(Card c : rememberedCards) - { - sb.append(c.getName() + "("); - sb.append(c.getUniqueNumber()); - sb.append(")"); - sb.append("\r\n"); + for(Object o : rememberedObjects){ + if (o instanceof Card){ + Card c = (Card)o; + sb.append(c.getName()); + sb.append("("); + sb.append(c.getUniqueNumber()); + sb.append(")"); + } + else + sb.append(o.toString()); + sb.append("\r\n"); + } } return sb.toString().replaceAll("CARDNAME", getName()).trim(); diff --git a/src/forge/card/abilityFactory/AbilityFactory.java b/src/forge/card/abilityFactory/AbilityFactory.java index eba3309ab61..78e381e4524 100644 --- a/src/forge/card/abilityFactory/AbilityFactory.java +++ b/src/forge/card/abilityFactory/AbilityFactory.java @@ -924,8 +924,10 @@ public class AbilityFactory { else if (calcX[0].startsWith("Remembered")) { // Add whole Remembered list to handlePaid list = new CardList(); - for(Card c : card.getRemembered()) - list.add(AllZoneUtil.getCardState(c)); + for(Object o : card.getRemembered()){ + if (o instanceof Card) + list.add(AllZoneUtil.getCardState((Card)o)); + } } else if (calcX[0].startsWith("Imprinted")) { // Add whole Imprinted list to handlePaid @@ -979,9 +981,9 @@ public class AbilityFactory { } else if (defined.equals("Remembered")){ - for(Card rem : hostCard.getRemembered()){ - // Get current state of each remembered card - cards.add(AllZoneUtil.getCardState(rem)); + for(Object o : hostCard.getRemembered()){ + if (o instanceof Card) + cards.add(AllZoneUtil.getCardState((Card)o)); } } @@ -1039,6 +1041,12 @@ public class AbilityFactory { players.add(p); } } + else if (defined.equals("Remembered")){ + for(Object rem : card.getRemembered()){ + if (rem instanceof Player) + players.add((Player)rem); + } + } else if (defined.startsWith("Triggered")){ Object o = null; if (defined.endsWith("Controller")){ @@ -1234,7 +1242,6 @@ public class AbilityFactory { public static void handleRemembering(AbilityFactory AF) { HashMap params = AF.getMapParams(); - ArrayList tgts; Card host; if(!params.containsKey("RememberTargets") && !params.containsKey("Imprint")) @@ -1253,15 +1260,15 @@ public class AbilityFactory { } Target tgt = AF.getAbTgt(); - tgts = (tgt == null) ? new ArrayList() : tgt.getTargetCards(); if(params.containsKey("RememberTargets")) { - for(Card c : tgts) - { - host.addRemembered(c); + ArrayList tgts = (tgt == null) ? new ArrayList() : tgt.getTargets(); + for(Object o : tgts){ + host.addRemembered(o); } } else if(params.containsKey("Imprint")) { + ArrayList tgts = (tgt == null) ? new ArrayList() : tgt.getTargetCards(); host.addImprinted(tgts); } } diff --git a/src/forge/card/abilityFactory/AbilityFactory_ChangeZone.java b/src/forge/card/abilityFactory/AbilityFactory_ChangeZone.java index 9b16b1d036e..5e0dadbb34c 100644 --- a/src/forge/card/abilityFactory/AbilityFactory_ChangeZone.java +++ b/src/forge/card/abilityFactory/AbilityFactory_ChangeZone.java @@ -687,13 +687,18 @@ public class AbilityFactory_ChangeZone { type = type.replace("Triggered", "Card"); } else if (type.contains("Remembered")){ - ArrayList rem = source.getRemembered(); - - if (rem.isEmpty()) + boolean hasRememberedCard = false; + for(Object o : source.getRemembered()){ + if (o instanceof Card){ + hasRememberedCard = true; + source = (Card)o; + type = type.replace("Remembered", "Card"); + break; + } + } + + if (!hasRememberedCard) return new CardList(); - - source = rem.get(0); - type = type.replace("Remembered", "Card"); } return list.getValidCards(type.split(","), sa.getActivatingPlayer(), source); diff --git a/src/forge/card/cardFactory/CardFactoryUtil.java b/src/forge/card/cardFactory/CardFactoryUtil.java index 31c25bc4c70..8fb0d19f1e7 100644 --- a/src/forge/card/cardFactory/CardFactoryUtil.java +++ b/src/forge/card/cardFactory/CardFactoryUtil.java @@ -430,61 +430,7 @@ public class CardFactoryUtil { //Planeswalkers fall through to here, lands will fall through if there aren't very many return AI_getCheapestPermanent(list, null, false); } - - @Deprecated - public static Input input_targetCreaturePlayer(final SpellAbility spell, boolean targeted, boolean free) { - return input_targetCreaturePlayer(spell, Command.Blank, targeted, free); - } - - @Deprecated - public static Input input_targetCreaturePlayer(final SpellAbility spell, final Command paid, final boolean targeted, final boolean free) { - Input target = new Input() { - private static final long serialVersionUID = 2781418414287281005L; - - @Override - public void showMessage() { - AllZone.Display.showMessage("Select target Creature, Player, or Planeswalker"); - ButtonUtil.enableOnlyCancel(); - } - - @Override - public void selectButtonCancel() { - stop(); - } - - @Override - public void selectCard(Card card, PlayerZone zone) { - if((card.isCreature() || card.isPlaneswalker()) && zone.is(Constant.Zone.Battlefield) - && (!targeted || canTarget(spell, card))) { - spell.setTargetCard(card); - done(); - } - }//selectCard() - - @Override - public void selectPlayer(Player player) { - spell.setTargetPlayer(player); - done(); - } - - void done() { - paid.execute(); - - if(spell.getManaCost().equals("0") || this.isFree()) { - if (spell.getAfterPayMana() == null){ - this.setFree(false); - AllZone.Stack.add(spell, spell.getSourceCard().getManaCost().contains("X")); - stop(); - } - else{ - stopSetNext(spell.getAfterPayMana()); - } - } else stopSetNext(new Input_PayManaCost(spell)); - } - }; - return target; - }//input_targetCreaturePlayer() - + public static Input input_Spell(final SpellAbility spell, final CardList choices, final boolean free) { Input target = new Input() { private static final long serialVersionUID = 2781418414287281005L; diff --git a/src/forge/card/cardFactory/CardFactory_Creatures.java b/src/forge/card/cardFactory/CardFactory_Creatures.java index 9f32f3717b1..77b7beea06d 100644 --- a/src/forge/card/cardFactory/CardFactory_Creatures.java +++ b/src/forge/card/cardFactory/CardFactory_Creatures.java @@ -3233,67 +3233,6 @@ public class CardFactory_Creatures { }//*************** END ************ END ************************** - //*************** START *********** START ************************** - else if(cardName.equals("Laquatus's Champion")) { - final SpellAbility abilityComes = new Ability(card, "0") { - @Override - public void resolve() { - getTargetPlayer().loseLife(6,card); - }//resolve() - }; - - final Input inputComes = new Input() { - private static final long serialVersionUID = -2666229064706311L; - - @Override - public void showMessage() { - stopSetNext(CardFactoryUtil.input_targetPlayer(abilityComes)); - ButtonUtil.disableAll();//to disable the Cancel button - } - }; - Command commandComes = new Command() { - private static final long serialVersionUID = -4246229185669164581L; - - public void execute() { - if(card.getController().isHuman()) AllZone.InputControl.setInput(inputComes); - else //computer - { - abilityComes.setTargetPlayer(AllZone.HumanPlayer); - AllZone.Stack.addSimultaneousStackEntry(abilityComes); - - }//else - }//execute() - };//CommandComes - Command commandLeavesPlay = new Command() { - - private static final long serialVersionUID = 9172348861441804625L; - - public void execute() { - //System.out.println(abilityComes.getTargetCard().getName()); - - SpellAbility ability = new Ability(card, "0") { - @Override - public void resolve() { - abilityComes.getTargetPlayer().gainLife(6, card); - - }//resolve() - };//SpellAbility - - StringBuilder sb = new StringBuilder(); - sb.append("Laquatus's Champion - ").append(abilityComes.getTargetPlayer()).append(" regains 6 life."); - ability.setStackDescription(sb.toString()); - - AllZone.Stack.addSimultaneousStackEntry(ability); - - }//execute() - };//Command - - card.addComesIntoPlayCommand(commandComes); - card.addLeavesPlayCommand(commandLeavesPlay); - - }//*************** END ************ END ************************** - - //*************** START *********** START ************************** else if(cardName.equals("Meddling Mage")) { final String[] input = new String[1]; diff --git a/src/forge/card/trigger/TriggerHandler.java b/src/forge/card/trigger/TriggerHandler.java index 3769c6def06..fa118c70952 100644 --- a/src/forge/card/trigger/TriggerHandler.java +++ b/src/forge/card/trigger/TriggerHandler.java @@ -347,11 +347,11 @@ public class TriggerHandler { host = regtrig.getHostCard(); // This will fix the Oblivion Ring issue, but is this the right fix? - for(Card c : regtrig.getHostCard().getRemembered()) + for(Object o : regtrig.getHostCard().getRemembered()) { - if(!host.getRemembered().contains(c)) + if(!host.getRemembered().contains(o)) { - host.addRemembered(c); + host.addRemembered(o); } }