mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Added Yavimaya Dryad and Thieve's Auction
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -10851,6 +10851,7 @@ res/cardsfolder/t/thespians_stage.txt -text
|
||||
res/cardsfolder/t/thicket_basilisk.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/thicket_elemental.txt -text
|
||||
res/cardsfolder/t/thief_of_hope.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/thieves_auction.txt -text
|
||||
res/cardsfolder/t/thieves_fortune.txt -text
|
||||
res/cardsfolder/t/thieving_magpie.txt svneol=native#text/plain
|
||||
res/cardsfolder/t/thieving_sprite.txt -text
|
||||
@@ -12317,6 +12318,7 @@ res/cardsfolder/y/yavimaya_ancients.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_ants.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_barbarian.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_coast.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_dryad.txt -text
|
||||
res/cardsfolder/y/yavimaya_elder.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_enchantress.txt svneol=native#text/plain
|
||||
res/cardsfolder/y/yavimaya_gnats.txt svneol=native#text/plain
|
||||
|
||||
12
res/cardsfolder/t/thieves_auction.txt
Normal file
12
res/cardsfolder/t/thieves_auction.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Name:Thieves' Auction
|
||||
ManaCost:4 R R R
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZoneAll | Cost$ 4 R R R | ChangeType$ Permanent.nonToken | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBRepeatChoose | StackDescription$ SpellDescription | SpellDescription$ Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under his or her control. Repeat this process until all cards exiled this way have been chosen.
|
||||
SVar:DBRepeatChoose:DB$ Repeat | RepeatSubAbility$ DBRepeat | RepeatDefined$ Remembered | RepeatPresent$ Card
|
||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Card.IsRemembered | ForgetChosen$ True | ChoiceZone$ Exile | SubAbility$ DBGainControl
|
||||
SVar:DBGainControl:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True | Tapped$ True | NewController$ Player.IsRemembered
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/thieves_auction.jpg
|
||||
Oracle:Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under his or her control. Repeat this process until all cards exiled this way have been chosen.
|
||||
SetInfo:MMQ Rare
|
||||
SetInfo:8ED Rare
|
||||
13
res/cardsfolder/y/yavimaya_dryad.txt
Normal file
13
res/cardsfolder/y/yavimaya_dryad.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Name:Yavimaya Dryad
|
||||
ManaCost:1 G G
|
||||
Types:Creature Dryad
|
||||
Text:no text
|
||||
PT:2/1
|
||||
K:Forestwalk
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRamp | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle your library.
|
||||
SVar:TrigRamp:AB$ Pump | Cost$ 0 | ValidTgts$ Player | TgtPrompt$ Select target player to gain control of forest | SubAbility$ DBChangeZone
|
||||
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest | ChangeNum$ 1 | GainControl$ True | NewController$ Targeted | Tapped$ True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/yavimaya_dryad.jpg
|
||||
Oracle:Forestwalk\nWhen Yavimaya Dryad enters the battlefield, you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle your library.
|
||||
SetInfo:ARC Uncommon
|
||||
SetInfo:TSP Uncommon
|
||||
@@ -12,10 +12,10 @@ import forge.Card;
|
||||
import forge.CardCharacteristicName;
|
||||
import forge.CardLists;
|
||||
import forge.CardPredicates;
|
||||
import forge.CardPredicates.Presets;
|
||||
import forge.Constant;
|
||||
import forge.GameEntity;
|
||||
import forge.Singletons;
|
||||
import forge.CardPredicates.Presets;
|
||||
import forge.card.ability.AbilityUtils;
|
||||
import forge.card.ability.ApiType;
|
||||
import forge.card.ability.SpellAbilityAi;
|
||||
@@ -28,10 +28,10 @@ import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.SpellPermanent;
|
||||
import forge.card.spellability.Target;
|
||||
import forge.game.GlobalRuleChange;
|
||||
import forge.game.ai.ComputerUtil;
|
||||
import forge.game.ai.ComputerUtilBlock;
|
||||
import forge.game.ai.ComputerUtilCard;
|
||||
import forge.game.ai.ComputerUtilCombat;
|
||||
import forge.game.ai.ComputerUtil;
|
||||
import forge.game.ai.ComputerUtilBlock;
|
||||
import forge.game.ai.ComputerUtilCost;
|
||||
import forge.game.ai.ComputerUtilMana;
|
||||
import forge.game.phase.Combat;
|
||||
@@ -424,7 +424,8 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
* a {@link forge.CardList} object.
|
||||
* @return a {@link forge.Card} object.
|
||||
*/
|
||||
private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a Basic Land
|
||||
private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a
|
||||
// Basic Land
|
||||
|
||||
final List<Card> combined = new ArrayList<Card>(ai.getCardsIn(ZoneType.Battlefield));
|
||||
combined.addAll(ai.getCardsIn(ZoneType.Hand));
|
||||
@@ -457,11 +458,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
result = CardLists.getType(list, minType);
|
||||
}
|
||||
|
||||
// pick dual lands if available
|
||||
if (Iterables.any(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS))) {
|
||||
result = CardLists.filter(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS));
|
||||
}
|
||||
|
||||
return result.get(0);
|
||||
}
|
||||
|
||||
@@ -1177,7 +1173,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
} else if (origin.contains(ZoneType.Library)
|
||||
&& (type.contains("Basic") || areAllBasics(type))) {
|
||||
c = basicManaFixing(ai, fetchList);
|
||||
} else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").isEmpty()) {
|
||||
} else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").size() == 0) {
|
||||
c = chooseCreature(ai, fetchList);
|
||||
} else if (ZoneType.Battlefield.equals(destination) || ZoneType.Graveyard.equals(destination)) {
|
||||
if (!activator.equals(ai) && sa.hasParam("GainControl")) {
|
||||
@@ -1194,7 +1190,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
|
||||
// Does AI need a land?
|
||||
List<Card> hand = ai.getCardsIn(ZoneType.Hand);
|
||||
if (CardLists.filter(hand, Presets.LANDS).isEmpty() && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) {
|
||||
if (CardLists.filter(hand, Presets.LANDS).size() == 0 && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) {
|
||||
boolean canCastSomething = false;
|
||||
for (Card cardInHand : hand) {
|
||||
canCastSomething |= ComputerUtilMana.payManaCost(cardInHand.getFirstSpellAbility(), ai, true, 0, false);
|
||||
@@ -1254,8 +1250,13 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
c.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("GainControl")) {
|
||||
if (sa.hasParam("NewController")) {
|
||||
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("DefinedPlayer"), sa).get(0);
|
||||
c.setController(p, Singletons.getModel().getGame().getNextTimestamp());
|
||||
} else {
|
||||
c.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("AttachedTo")) {
|
||||
List<Card> list = AbilityUtils.getDefinedCards(sa.getSourceCard(),
|
||||
|
||||
@@ -386,8 +386,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
tgtC.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("GainControl")) {
|
||||
if (sa.hasParam("NewController")) {
|
||||
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("NewController"), sa).get(0);
|
||||
tgtC.setController(p, Singletons.getModel().getGame().getNextTimestamp());
|
||||
} else {
|
||||
tgtC.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("AttachedTo")) {
|
||||
List<Card> list = AbilityUtils.getDefinedCards(hostCard,
|
||||
sa.getParam("AttachedTo"), sa);
|
||||
@@ -670,8 +675,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
c.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("GainControl")) {
|
||||
if (sa.hasParam("NewController")) {
|
||||
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("NewController"), sa).get(0);
|
||||
c.setController(p, Singletons.getModel().getGame().getNextTimestamp());
|
||||
} else {
|
||||
c.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("AttachedTo")) {
|
||||
List<Card> list = AbilityUtils.getDefinedCards(sa.getSourceCard(),
|
||||
|
||||
Reference in New Issue
Block a user