- Add changes to allow for a one of the two piles to be facedown

- Add Fortune's Favor
This commit is contained in:
Sol
2016-07-26 14:32:42 +00:00
parent 9496bf38fd
commit d41c0bc3e0
9 changed files with 49 additions and 31 deletions

1
.gitattributes vendored
View File

@@ -6363,6 +6363,7 @@ forge-gui/res/cardsfolder/f/fortitude.txt svneol=native#text/plain
forge-gui/res/cardsfolder/f/fortress_crab.txt -text
forge-gui/res/cardsfolder/f/fortress_cyclops.txt -text
forge-gui/res/cardsfolder/f/fortune_thief.txt svneol=native#text/plain
forge-gui/res/cardsfolder/f/fortunes_favor.txt -text
forge-gui/res/cardsfolder/f/fossil_find.txt -text
forge-gui/res/cardsfolder/f/foster.txt -text
forge-gui/res/cardsfolder/f/foul_emissary.txt -text svneol=unset#text/plain

View File

@@ -741,11 +741,14 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
public boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, boolean faceUp) {
if (!faceUp) {
public boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, String faceUp) {
if (faceUp.equals("True")) {
// AI will choose the first pile if it is larger or the same
// TODO Improve this to be slightly more random to not be so predictable
return pile1.size() >= pile2.size();
} else if (faceUp.equals("One")) {
// Probably want to see if the face up pile has anything "worth it", then potentially take face down pile
return pile1.size() >= pile2.size();
} else {
boolean allCreatures = Iterables.all(Iterables.concat(pile1, pile2), CardPredicates.Presets.CREATURES);
int cmc1 = allCreatures ? ComputerUtilCard.evaluateCreatureList(pile1) : ComputerUtilCard.evaluatePermanentList(pile1);

View File

@@ -54,9 +54,4 @@ public class TwoPilesAi extends SpellAbilityAi {
int size = pool.size();
return size > 2;
}
@Override
protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) {
return false;
}
}

View File

@@ -268,11 +268,7 @@ public class PumpEffect extends SpellAbilityEffect {
}
if (sa.hasParam("RememberObjects")) {
pumpRemembered = sa.getParam("RememberObjects");
}
if (pumpRemembered != null) {
for (final Object o : AbilityUtils.getDefinedObjects(host, pumpRemembered, sa)) {
for (final Object o : AbilityUtils.getDefinedObjects(host, sa.getParam("RememberObjects"), sa)) {
host.addRemembered(o);
}
}

View File

@@ -89,16 +89,21 @@ public class TwoPilesEffect extends SpellAbilityEffect {
return;
}
String title = "One".equals(sa.getParamOrDefault("FaceDown", "False")) ? "Select cards for a face down pile" :
"Divide cards into two piles";
card.clearRemembered();
// first, separate the cards into piles
final CardCollectionView pile1 = separator.getController().chooseCardsForEffect(pool, sa, "Divide cards into two piles", 0, size, false);
final CardCollectionView pile1 = separator.getController().chooseCardsForEffect(pool, sa, title, 0, size, false);
final CardCollection pile2 = new CardCollection(pool);
pile2.removeAll(pile1);
System.out.println("Pile 1:" + pile1);
System.out.println("Pile 2:" + pile2);
card.clearRemembered();
//System.out.println("Pile 1:" + pile1);
//System.out.println("Pile 2:" + pile2);
pile1WasChosen = chooser.getController().chooseCardsPile(sa, pile1, pile2, !sa.hasParam("FaceDown"));
pile1WasChosen = chooser.getController().chooseCardsPile(sa, pile1, pile2, sa.getParamOrDefault("FaceDown", "False"));
CardCollectionView chosenPile = pile1WasChosen ? pile1 : pile2;
CardCollectionView unchosenPile = !pile1WasChosen ? pile1 : pile2;

View File

@@ -205,7 +205,7 @@ public abstract class PlayerController {
public abstract boolean playSaFromPlayEffect(SpellAbility tgtSA);
public abstract Map<GameEntity, CounterType> chooseProliferation();
public abstract boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, boolean faceUp);
public abstract boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, String faceUp);
public abstract void revealAnte(String message, Multimap<Player, PaperCard> removedAnteCards);

View File

@@ -585,7 +585,7 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
public boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, boolean faceUp) {
public boolean chooseCardsPile(SpellAbility sa, CardCollectionView pile1, CardCollectionView pile2, String faceUp) {
return MyRandom.getRandom().nextBoolean();
}

View File

@@ -0,0 +1,10 @@
Name:Fortune's Favor
ManaCost:3 U
Types:Instant
A:SP$ PeekAndReveal | Cost$ 3 U | Defined$ You | PeekAmount$ 4 | NoPeek$ True | NoReveal$ True | RememberPeeked$ True | SubAbility$ Separate | SpellDescription$ Target opponent looks at the top four cards of your library and separates them into a face-down pile and a face-up pile. Put one pile into your hand and the other into your graveyard.
SVar:Separate:DB$ TwoPiles | Defined$ You | Separator$ TargetedPlayer | Chooser$ You | ValidTgts$ Opponent | DefinedCards$ Remembered | ChosenPile$ DBHand | UnchosenPile$ DBGrave | Zone$ Library | FaceDown$ One | StackDescription$ None
SVar:DBHand:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Hand | SubAbility$ DBCleanup
SVar:DBGrave:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Graveyard | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/fortunes_favor.jpg
Oracle:Target opponent looks at the top four cards of your library and separates them into a face-down pile and a face-up pile. Put one pile into your hand and the other into your graveyard.

View File

@@ -1289,25 +1289,33 @@ public class PlayerControllerHuman
}
@Override
public boolean chooseCardsPile(final SpellAbility sa, final CardCollectionView pile1, final CardCollectionView pile2, final boolean faceUp) {
if (!faceUp) {
final String p1Str = String.format("Pile 1 (%s cards)", pile1.size());
final String p2Str = String.format("Pile 2 (%s cards)", pile2.size());
public boolean chooseCardsPile(final SpellAbility sa, final CardCollectionView pile1, final CardCollectionView pile2, final String faceUp) {
final String p1Str = String.format("-- Pile 1 (%s cards) --", pile1.size());
final String p2Str = String.format("-- Pile 2 (%s cards) --", pile2.size());
/*
if (faceUp.equals("True")) {
final List<String> possibleValues = ImmutableList.of(p1Str , p2Str);
return getGui().confirm(CardView.get(sa.getHostCard()), "Choose a Pile", possibleValues);
}
tempShowCards(pile1);
tempShowCards(pile2);
*/
final List<CardView> cards = Lists.newArrayListWithCapacity(pile1.size() + pile2.size() + 2);
final CardView pileView1 = new CardView(Integer.MIN_VALUE, null, "--- Pile 1 ---");
cards.add(pileView1);
cards.addAll(CardView.getCollection(pile1));
final CardView pileView1 = new CardView(Integer.MIN_VALUE, null, p1Str);
final CardView pileView2 = new CardView(Integer.MIN_VALUE + 1, null, "--- Pile 2 ---");
cards.add(pileView1);
if (faceUp.equals("False")) {
tempShowCards(pile1);
cards.addAll(CardView.getCollection(pile1));
}
final CardView pileView2 = new CardView(Integer.MIN_VALUE + 1, null, p2Str);
cards.add(pileView2);
if (!faceUp.equals("True")) {
tempShowCards(pile2);
cards.addAll(CardView.getCollection(pile2));
}
// make sure Pile 1 or Pile 2 is clicked on
boolean result;