mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Added some simple SVar-based prediction of Reanimator decks, currently used by the Survival of the Fittest AI code.
- Added a worlds.txt entry for Kamigawa quest world.
This commit is contained in:
@@ -2736,4 +2736,21 @@ public class ComputerUtil {
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public static boolean isPlayingReanimator(final Player ai) {
|
||||
CardCollectionView inHand = ai.getCardsIn(ZoneType.Hand);
|
||||
CardCollectionView inDeck = ai.getCardsIn(new ZoneType[] {ZoneType.Hand, ZoneType.Library});
|
||||
|
||||
Predicate<Card> markedAsReanimator = new Predicate<Card>() {
|
||||
@Override
|
||||
public boolean apply(Card card) {
|
||||
return "true".equalsIgnoreCase(card.getSVar("IsReanimatorCard"));
|
||||
}
|
||||
};
|
||||
|
||||
int numInHand = CardLists.filter(inHand, markedAsReanimator).size();
|
||||
int numInDeck = CardLists.filter(inDeck, markedAsReanimator).size();
|
||||
|
||||
return numInHand > 0 || numInDeck >= 3;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -889,6 +889,13 @@ public class SpecialCardAi {
|
||||
if (maxCMC != null && maxCMC.getCMC() < bestInLib.getCMC() && bestInLib.getCMC() >= 3) {
|
||||
return maxCMC;
|
||||
}
|
||||
// We appear to be playing Reanimator (or we have a reanimator card in hand already), so it's
|
||||
// worth to fill the graveyard now
|
||||
if (ComputerUtil.isPlayingReanimator(ai)) {
|
||||
CardCollection creatsInLibByCMC = new CardCollection(creatsInLib);
|
||||
Collections.sort(creatsInLibByCMC, CardLists.CmcComparatorInv);
|
||||
return creatsInLibByCMC.getFirst();
|
||||
}
|
||||
|
||||
// probably nothing that is worth changing, so bail
|
||||
return null;
|
||||
@@ -915,6 +922,13 @@ public class SpecialCardAi {
|
||||
|
||||
Card bestInLib = atTargetCMCInLib != null ? atTargetCMCInLib.getFirst() : null;
|
||||
|
||||
if (bestInLib == null && ComputerUtil.isPlayingReanimator(ai)) {
|
||||
// For Reanimator, we don't mind grabbing the biggest thing possible to recycle it again with SotF later.
|
||||
CardCollection creatsInLibByCMC = new CardCollection(creatsInLib);
|
||||
Collections.sort(creatsInLibByCMC, CardLists.CmcComparatorInv);
|
||||
return creatsInLibByCMC.getFirst();
|
||||
}
|
||||
|
||||
return bestInLib;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,4 +9,5 @@ SVar:TrigMoveToGraveyard:AB$ ChangeZone | Cost$ 0 | Origin$ Exile | Destination$
|
||||
SVar:DBResurrection:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature
|
||||
SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ SCREAM | CounterNum$ 2
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/all_hallows_eve.jpg
|
||||
SVar:IsReanimatorCard:TRUE
|
||||
Oracle:Exile All Hallow's Eve with two scream counters on it.\nAt the beginning of your upkeep, if All Hallow's Eve is exiled with a scream counter on it, remove a scream counter from it. If there are no more scream counters on it, put it into your graveyard and each player returns all creature cards from his or her graveyard to the battlefield.
|
||||
|
||||
@@ -6,5 +6,6 @@ SVar:DBSacrifice:DB$SacrificeAll | ValidCards$ Creature | SubAbility$ DBReturn
|
||||
SVar:DBReturn:DB$ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
|
||||
SVar:RemRandomDeck:True
|
||||
SVar:IsReanimatorCard:TRUE
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/living_death.jpg
|
||||
Oracle:Each player exiles all creature cards from his or her graveyard, then sacrifices all creatures he or she controls, then puts all cards he or she exiled this way onto the battlefield.
|
||||
|
||||
@@ -3,5 +3,6 @@ ManaCost:4 B B
|
||||
Types:Sorcery
|
||||
K:You may cast CARDNAME as though it had flash if you pay {2} more to cast it.
|
||||
A:SP$ ChangeZoneAll | Cost$ 4 B B | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature | SpellDescription$ Each player returns all creature cards from his or her graveyard to the battlefield.
|
||||
SVar:IsReanimatorCard:TRUE
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/twilights_call.jpg
|
||||
Oracle:You may cast Twilight's Call as though it had flash if you pay {2} more to cast it. (You may cast it any time you could cast an instant.)\nEach player returns all creature cards from his or her graveyard to the battlefield.
|
||||
|
||||
Reference in New Issue
Block a user