- Added RepeatEach AF

- Converted Rhys the Redeemed to script
This commit is contained in:
Sol
2012-11-09 04:21:05 +00:00
parent d707607d43
commit 6f68df90d2
7 changed files with 104 additions and 52 deletions

2
.gitattributes vendored
View File

@@ -12552,6 +12552,7 @@ src/main/java/forge/card/abilityfactory/ai/RegenerateAi.java svneol=native#text/
src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java -text src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java -text
src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java -text src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java -text
src/main/java/forge/card/abilityfactory/ai/RepeatAi.java -text src/main/java/forge/card/abilityfactory/ai/RepeatAi.java -text
src/main/java/forge/card/abilityfactory/ai/RepeatEachAi.java -text
src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java -text src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java -text
src/main/java/forge/card/abilityfactory/ai/RevealAi.java -text src/main/java/forge/card/abilityfactory/ai/RevealAi.java -text
src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java -text src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java -text
@@ -12644,6 +12645,7 @@ src/main/java/forge/card/abilityfactory/effects/RearrangeTopOfLibraryEffect.java
src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java -text src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java -text src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java -text src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RepeatEachEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java -text src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java -text src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java -text
src/main/java/forge/card/abilityfactory/effects/RevealEffect.java -text src/main/java/forge/card/abilityfactory/effects/RevealEffect.java -text

View File

@@ -4,6 +4,8 @@ Types:Legendary Creature Elf Warrior
Text:no text Text:no text
PT:1/1 PT:1/1
A:AB$ Token | Cost$ 2 GW T | TokenAmount$ 1 | TokenName$ Elf Warrior | TokenTypes$ Creature,Elf,Warrior | TokenOwner$ You | TokenColors$ Green,White | TokenPower$ 1 | TokenToughness$ 1 | SpellDescription$ Put a 1/1 green and white Elf Warrior creature token onto the battlefield. A:AB$ Token | Cost$ 2 GW T | TokenAmount$ 1 | TokenName$ Elf Warrior | TokenTypes$ Creature,Elf,Warrior | TokenOwner$ You | TokenColors$ Green,White | TokenPower$ 1 | TokenToughness$ 1 | SpellDescription$ Put a 1/1 green and white Elf Warrior creature token onto the battlefield.
A:AB$ RepeatEach | Cost$ 4 GW GW T | RepeatSubAbility$ DBClone | RepeatCards$ Creature.token | SpellDescription$ For each creature token you control, put a token that's a copy of that creature onto the battlefield.
SVar:DBClone:DB$ CopyPermanent | Defined$ Remembered
SVar:Rarity:Rare SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/rhys_the_redeemed.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/rhys_the_redeemed.jpg
SetInfo:SHM|Rare|http://magiccards.info/scans/en/shm/237.jpg SetInfo:SHM|Rare|http://magiccards.info/scans/en/shm/237.jpg

View File

@@ -595,6 +595,10 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void addRemembered(final Object o) { public final void addRemembered(final Object o) {
this.rememberedObjects.add(o); this.rememberedObjects.add(o);
} }
public final void removeRemembered(final Object o) {
this.rememberedObjects.remove(o);
}
/** /**
* <p> * <p>

View File

@@ -81,6 +81,7 @@ public enum ApiType {
RemoveCounterAll ( CountersRemoveAllEffect.class, CannotPlayAi.class ), RemoveCounterAll ( CountersRemoveAllEffect.class, CannotPlayAi.class ),
RemoveFromCombat ( RemoveFromCombatEffect.class, RemoveFromCombatAi.class ), RemoveFromCombat ( RemoveFromCombatEffect.class, RemoveFromCombatAi.class ),
Repeat ( RepeatEffect.class, RepeatAi.class ), Repeat ( RepeatEffect.class, RepeatAi.class ),
RepeatEach ( RepeatEachEffect.class, RepeatEachAi.class ),
RestartGame ( RestartGameEffect.class, RestartGameAi.class ), RestartGame ( RestartGameEffect.class, RestartGameAi.class ),
Reveal ( RevealEffect.class, RevealAi.class ), Reveal ( RevealEffect.class, RevealAi.class ),
RevealHand ( RevealHandEffect.class, RevealHandAi.class ), RevealHand ( RevealHandEffect.class, RevealHandAi.class ),

View File

@@ -0,0 +1,39 @@
package forge.card.abilityfactory.ai;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
/**
* TODO: Write javadoc for this type.
*
*/
public class RepeatEachAi extends SpellAiLogic {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, forge.card.spellability.SpellAbility)
*/
@Override
protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) {
String logic = sa.getParam("AILogic");
if ("CloneTokens".equals(logic)) {
List<Card> allTokens = aiPlayer.getCreaturesInPlay();
allTokens = CardLists.filter(allTokens, Presets.TOKEN);
if (allTokens.size() < 2) {
return false;
}
}
// TODO Add some normal AI variability here
return true;
}
}

View File

@@ -0,0 +1,56 @@
package forge.card.abilityfactory.effects;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
public class RepeatEachEffect extends SpellEffect {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(forge.card.spellability.SpellAbility)
*/
@Override
public void resolve(SpellAbility sa) {
final AbilityFactory afRepeat = new AbilityFactory();
Card source = sa.getSourceCard();
// setup subability to repeat
final SpellAbility repeat = afRepeat.getAbility(sa.getSourceCard().getSVar(sa.getParam("RepeatSubAbility")), source);
repeat.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) repeat).setParent(sa);
GameState game = Singletons.getModel().getGame();
if (sa.hasParam("RepeatCards")) {
ZoneType zone = sa.hasParam("Zone") ? ZoneType.smartValueOf(sa.getParam("Zone")) : ZoneType.Battlefield;
final List<Card> repeatCards = CardLists.getValidCards(game.getCardsIn(zone),
sa.getParam("RepeatCards"), source.getController(), source);
for(Card card : repeatCards) {
source.addRemembered(card);
AbilityFactory.resolve(repeat, false);
source.removeRemembered(card);
}
}
if (sa.hasParam("RepeatPlayers")) {
final List<Player> repeatPlayers = AbilityFactory.getDefinedPlayers(source, sa.getParam("RepeatPlayers"), sa);
for(Player player : repeatPlayers) {
source.addRemembered(player);
AbilityFactory.resolve(repeat, false);
source.removeRemembered(player);
}
}
}
}

View File

@@ -312,56 +312,6 @@ public class CardFactoryCreatures {
}); });
} }
private static void getCard_RhysTheRedeemed(final Card card) {
final Cost abCost = new Cost(card, "4 GW GW T", true);
class RhysTheRedeemedAbility extends AbilityActivated {
public RhysTheRedeemedAbility(final Card ca, final Cost co, final Target t) {
super(ca, co, t);
}
@Override
public AbilityActivated getCopy() {
return new RhysTheRedeemedAbility(getSourceCard(),
getPayCosts(), new Target(getTarget()));
}
private static final long serialVersionUID = 6297992502069547478L;
@Override
public void resolve() {
List<Card> allTokens = card.getController().getCreaturesInPlay();
allTokens = CardLists.filter(allTokens, Presets.TOKEN);
CardFactoryUtil.copyTokens(allTokens);
}
@Override
public boolean canPlayAI() {
List<Card> allTokens = getActivatingPlayer().getCreaturesInPlay();
allTokens = CardLists.filter(allTokens, Presets.TOKEN);
return allTokens.size() >= 2;
}
@Override
public String getDescription() {
final StringBuilder sbDesc = new StringBuilder();
sbDesc.append(abCost).append("For each creature token you control, ");
sbDesc.append("put a token that's a copy of that creature onto the battlefield.");
return sbDesc.toString();
}
}
final AbilityActivated copyTokens1 = new RhysTheRedeemedAbility(card, abCost, null);
card.addSpellAbility(copyTokens1);
final StringBuilder sbStack = new StringBuilder();
sbStack.append(card.getName());
sbStack.append(" - For each creature token you control, put a token ");
sbStack.append("that's a copy of that creature onto the battlefield.");
copyTokens1.setStackDescription(sbStack.toString());
}
private static void getCard_SphinxJwar(final Card card) { private static void getCard_SphinxJwar(final Card card) {
final SpellAbility ability1 = new AbilityStatic(card, "0") { final SpellAbility ability1 = new AbilityStatic(card, "0") {
@Override @Override
@@ -1262,8 +1212,6 @@ public class CardFactoryCreatures {
getCard_PainterServant(card); getCard_PainterServant(card);
} else if (cardName.equals("Stangg")) { } else if (cardName.equals("Stangg")) {
getCard_Stangg(card); getCard_Stangg(card);
} else if (cardName.equals("Rhys the Redeemed")) {
getCard_RhysTheRedeemed(card);
} else if (cardName.equals("Sphinx of Jwar Isle")) { } else if (cardName.equals("Sphinx of Jwar Isle")) {
getCard_SphinxJwar(card); getCard_SphinxJwar(card);
} else if (cardName.equals("Master of the Wild Hunt")) { } else if (cardName.equals("Master of the Wild Hunt")) {